@mastra/playground-ui 52.0.1-alpha.0 → 53.0.0-alpha.2

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.
Files changed (136) hide show
  1. package/dist/{command-C2XK36se.cjs → command-CUev1UxH.cjs} +2 -2
  2. package/dist/{command-C2XK36se.cjs.map → command-CUev1UxH.cjs.map} +1 -1
  3. package/dist/{command-ehL7-lrV.js → command-DWFd0d4c.js} +2 -2
  4. package/dist/{command-ehL7-lrV.js.map → command-DWFd0d4c.js.map} +1 -1
  5. package/dist/components/Breadcrumb.cjs.js +1 -1
  6. package/dist/components/Breadcrumb.cjs.js.map +1 -1
  7. package/dist/components/Breadcrumb.es.js +1 -1
  8. package/dist/components/Breadcrumb.es.js.map +1 -1
  9. package/dist/components/Command.cjs.js +1 -1
  10. package/dist/components/Command.es.js +1 -1
  11. package/dist/components/CommandPalette.cjs.js +2 -2
  12. package/dist/components/CommandPalette.es.js +2 -2
  13. package/dist/components/Composer.cjs.js +1 -1
  14. package/dist/components/Composer.es.js +1 -1
  15. package/dist/components/DataList.cjs.js +15 -14
  16. package/dist/components/DataList.cjs.js.map +1 -1
  17. package/dist/components/DataList.es.js +4 -4
  18. package/dist/components/EnvironmentVariablesEditor.cjs.js +12 -23
  19. package/dist/components/EnvironmentVariablesEditor.cjs.js.map +1 -1
  20. package/dist/components/EnvironmentVariablesEditor.es.js +12 -23
  21. package/dist/components/EnvironmentVariablesEditor.es.js.map +1 -1
  22. package/dist/components/HorizontalBars.cjs.js +1 -1
  23. package/dist/components/HorizontalBars.es.js +1 -1
  24. package/dist/components/LogsDataList.cjs.js +2 -4
  25. package/dist/components/LogsDataList.cjs.js.map +1 -1
  26. package/dist/components/LogsDataList.es.js +2 -4
  27. package/dist/components/LogsDataList.es.js.map +1 -1
  28. package/dist/components/MainSidebar.cjs.js +1 -1
  29. package/dist/components/MainSidebar.es.js +1 -1
  30. package/dist/components/PageLayout.cjs.js +1 -1
  31. package/dist/components/PageLayout.es.js +1 -1
  32. package/dist/components/ScrollArea.cjs.js +1 -1
  33. package/dist/components/ScrollArea.es.js +1 -1
  34. package/dist/components/ThemeToggle.cjs.js +36 -10
  35. package/dist/components/ThemeToggle.cjs.js.map +1 -1
  36. package/dist/components/ThemeToggle.es.js +36 -10
  37. package/dist/components/ThemeToggle.es.js.map +1 -1
  38. package/dist/components/ThreadRail.cjs.js +1 -1
  39. package/dist/components/ThreadRail.es.js +1 -1
  40. package/dist/components/ai/task-list.cjs.js +1 -1
  41. package/dist/components/ai/task-list.es.js +1 -1
  42. package/dist/data-list-B5Wicaoc.cjs +131 -0
  43. package/dist/data-list-B5Wicaoc.cjs.map +1 -0
  44. package/dist/data-list-BUK_v9ax.js +127 -0
  45. package/dist/data-list-BUK_v9ax.js.map +1 -0
  46. package/dist/data-list-skeleton-BZR_Hkvj.cjs +38 -0
  47. package/dist/data-list-skeleton-BZR_Hkvj.cjs.map +1 -0
  48. package/dist/data-list-skeleton-BoaQlbOY.js +36 -0
  49. package/dist/data-list-skeleton-BoaQlbOY.js.map +1 -0
  50. package/dist/{data-list-CE6USbK0.cjs → data-list-top-cell-CIs1L8gy.cjs} +83 -216
  51. package/dist/data-list-top-cell-CIs1L8gy.cjs.map +1 -0
  52. package/dist/{data-list-Dvxj3Y3r.js → data-list-top-cell-D4-Hbz2H.js} +75 -214
  53. package/dist/data-list-top-cell-D4-Hbz2H.js.map +1 -0
  54. package/dist/domains/logs/components/logs-list-view.cjs.js +3 -4
  55. package/dist/domains/logs/components/logs-list-view.cjs.js.map +1 -1
  56. package/dist/domains/logs/components/logs-list-view.es.js +3 -4
  57. package/dist/domains/logs/components/logs-list-view.es.js.map +1 -1
  58. package/dist/domains/metrics/components/memory-card-view.cjs.js +1 -1
  59. package/dist/domains/metrics/components/memory-card-view.es.js +1 -1
  60. package/dist/domains/metrics/components/metrics-utils.cjs.js +1 -2
  61. package/dist/domains/metrics/components/metrics-utils.cjs.js.map +1 -1
  62. package/dist/domains/metrics/components/metrics-utils.es.js +1 -2
  63. package/dist/domains/metrics/components/metrics-utils.es.js.map +1 -1
  64. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +1 -1
  65. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +1 -1
  66. package/dist/domains/metrics/components/scores-card-view.cjs.js +1 -1
  67. package/dist/domains/metrics/components/scores-card-view.es.js +1 -1
  68. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +1 -1
  69. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +1 -1
  70. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +1 -1
  71. package/dist/domains/metrics/components/traces-volume-card-view.es.js +1 -1
  72. package/dist/domains/traces/components/traces-list-view.cjs.js +4 -4
  73. package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
  74. package/dist/domains/traces/components/traces-list-view.es.js +4 -4
  75. package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
  76. package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +1 -1
  77. package/dist/ee/signals/components/entity-index-compact-grid.es.js +1 -1
  78. package/dist/ee/signals/components/entity-index-list.cjs.js +1 -2
  79. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  80. package/dist/ee/signals/components/entity-index-list.es.js +1 -2
  81. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  82. package/dist/ee/signals/components/trace-intelligence-entity-detail.cjs.js +1 -1
  83. package/dist/ee/signals/components/trace-intelligence-entity-detail.es.js +1 -1
  84. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +2 -3
  85. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  86. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +2 -3
  87. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  88. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +1 -1
  89. package/dist/ee/topics/components/topic-trace-summary-list.es.js +1 -1
  90. package/dist/hooks/use-debounced-value.cjs.js +17 -0
  91. package/dist/hooks/use-debounced-value.cjs.js.map +1 -0
  92. package/dist/hooks/use-debounced-value.d.ts +2 -0
  93. package/dist/hooks/use-debounced-value.es.js +13 -0
  94. package/dist/hooks/use-debounced-value.es.js.map +1 -0
  95. package/dist/{horizontal-bars-CV2XRu4w.cjs → horizontal-bars-CE1O-Y6G.cjs} +2 -2
  96. package/dist/{horizontal-bars-CV2XRu4w.cjs.map → horizontal-bars-CE1O-Y6G.cjs.map} +1 -1
  97. package/dist/{horizontal-bars-3vH3FLj3.js → horizontal-bars-DZ5J4TKv.js} +2 -2
  98. package/dist/{horizontal-bars-3vH3FLj3.js.map → horizontal-bars-DZ5J4TKv.js.map} +1 -1
  99. package/dist/{logs-data-list-DmpfI4NU.cjs → logs-data-list-PExVAYf3.cjs} +20 -20
  100. package/dist/{logs-data-list-DmpfI4NU.cjs.map → logs-data-list-PExVAYf3.cjs.map} +1 -1
  101. package/dist/{logs-data-list-ppn0Twn6.js → logs-data-list-VCTqogr3.js} +2 -2
  102. package/dist/{logs-data-list-ppn0Twn6.js.map → logs-data-list-VCTqogr3.js.map} +1 -1
  103. package/dist/{no-data-page-layout-CkhD1Xwb.js → no-data-page-layout-BB6l1JBu.js} +2 -2
  104. package/dist/no-data-page-layout-BB6l1JBu.js.map +1 -0
  105. package/dist/{no-data-page-layout-CBJ50ULk.cjs → no-data-page-layout-DxgToazD.cjs} +2 -2
  106. package/dist/no-data-page-layout-DxgToazD.cjs.map +1 -0
  107. package/dist/{scroll-area-D_-TyC0c.cjs → scroll-area-B1vdOFuC.cjs} +5 -5
  108. package/dist/{scroll-area-D_-TyC0c.cjs.map → scroll-area-B1vdOFuC.cjs.map} +1 -1
  109. package/dist/{scroll-area-DVSQTnjk.js → scroll-area-BiHnOfzg.js} +5 -5
  110. package/dist/{scroll-area-DVSQTnjk.js.map → scroll-area-BiHnOfzg.js.map} +1 -1
  111. package/dist/src/domains/metrics/components/metrics-utils.d.ts +0 -1
  112. package/dist/src/ds/components/Card/Card.d.ts +2 -2
  113. package/dist/src/ds/components/DataList/data-list-root.d.ts +10 -17
  114. package/dist/src/ds/components/DataList/data-list-skeleton.d.ts +7 -2
  115. package/dist/src/ds/components/DataList/data-list.d.ts +1 -1
  116. package/dist/src/ds/components/DataList/data-list.stories.d.ts +15 -41
  117. package/dist/src/ds/components/DataList/shared.d.ts +19 -24
  118. package/dist/src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-read-only-list.d.ts +1 -1
  119. package/dist/src/ds/components/LogsDataList/logs-data-list.stories.d.ts +0 -1
  120. package/dist/src/ds/components/ThemeToggle/theme-toggle.d.ts +25 -1
  121. package/dist/src/ds/components/ThemeToggle/theme-toggle.stories.d.ts +3 -0
  122. package/dist/src/hooks/use-debounced-value.d.ts +1 -0
  123. package/dist/style.css +113 -130
  124. package/dist/{traces-data-list-Ccszs0fr.js → traces-data-list-BnK1mfZp.js} +3 -2
  125. package/dist/{traces-data-list-Ccszs0fr.js.map → traces-data-list-BnK1mfZp.js.map} +1 -1
  126. package/dist/{traces-data-list-C0GZNznu.cjs → traces-data-list-MX4shJfG.cjs} +17 -16
  127. package/dist/{traces-data-list-C0GZNznu.cjs.map → traces-data-list-MX4shJfG.cjs.map} +1 -1
  128. package/package.json +8 -8
  129. package/dist/data-list-CE6USbK0.cjs.map +0 -1
  130. package/dist/data-list-Dvxj3Y3r.js.map +0 -1
  131. package/dist/data-list-skeleton-5i8xvHk2.js +0 -34
  132. package/dist/data-list-skeleton-5i8xvHk2.js.map +0 -1
  133. package/dist/data-list-skeleton-DiQp8oTF.cjs +0 -36
  134. package/dist/data-list-skeleton-DiQp8oTF.cjs.map +0 -1
  135. package/dist/no-data-page-layout-CBJ50ULk.cjs.map +0 -1
  136. package/dist/no-data-page-layout-CkhD1Xwb.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-area-DVSQTnjk.js","sources":["../src/ds/components/ScrollArea/scroll-area.tsx"],"sourcesContent":["import { ScrollArea as ScrollAreaPrimitive } from '@base-ui/react/scroll-area';\nimport { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { useAutoscroll } from '@/hooks/use-autoscroll';\nimport { cn } from '@/lib/utils';\n\ntype Orientation = 'vertical' | 'horizontal' | 'both';\ntype ScrollButtonDirection = 'left' | 'right';\n\nconst DEFAULT_SCROLL_BUTTON_SPEED = 100;\nconst DEFAULT_SCROLL_BUTTON_INTERVAL_TIME = 20;\nconst MIN_SCROLL_BUTTON_SPEED = 1;\nconst MIN_SCROLL_BUTTON_INTERVAL_TIME = 16;\n\nexport type MaskSides = {\n top?: boolean;\n bottom?: boolean;\n left?: boolean;\n right?: boolean;\n /** Shorthand: sets both `left` and `right`. Per-side keys override. */\n x?: boolean;\n /** Shorthand: sets both `top` and `bottom`. Per-side keys override. */\n y?: boolean;\n};\n\n/**\n * - `true` / omitted: fade the edges that match `orientation`.\n * - `false`: no fade.\n * - object: per-side override on top of the orientation default.\n */\nexport type ScrollAreaMask = boolean | MaskSides;\n\nexport type ScrollAreaScrollButtons =\n | boolean\n | {\n /** Pixels to scroll per repeated interval. */\n scrollSpeed?: number;\n /** Milliseconds between repeated scroll steps while the button is held. */\n scrollIntervalTime?: number;\n leftLabel?: string;\n rightLabel?: string;\n };\n\nexport type ScrollAreaProps = React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root> & {\n viewPortClassName?: string;\n maxHeight?: string;\n autoScroll?: boolean;\n orientation?: Orientation;\n /** Show left/right controls for horizontal overflow. Only applies to `horizontal` and `both` orientations. */\n scrollButtons?: ScrollAreaScrollButtons;\n /** Fade content at the edges where it's clipped by overflow. Defaults to the axes matching `orientation`. */\n mask?: ScrollAreaMask;\n /** @deprecated Use `mask` instead. Retained for backward compatibility. */\n showMask?: boolean;\n /**\n * Reveal the overlay scrollbar when the pointer hovers the area. When `false`,\n * the scrollbar only appears while actively scrolling. Defaults to `true`.\n */\n revealScrollbarOnHover?: boolean;\n /**\n * Ref to the scrolling viewport element. Use this as the scroll element for a\n * virtualizer (`getScrollElement: () => viewportRef.current`) so the list can\n * virtualize while still using the ScrollArea's overlay scrollbar + masks.\n */\n viewportRef?: React.Ref<HTMLDivElement>;\n};\n\ntype ResolvedMask = { top: boolean; bottom: boolean; left: boolean; right: boolean };\n\nfunction resolveMask(mask: ScrollAreaMask | undefined, orientation: Orientation): ResolvedMask {\n if (mask === false) return { top: false, bottom: false, left: false, right: false };\n\n const vertical = orientation === 'vertical' || orientation === 'both';\n const horizontal = orientation === 'horizontal' || orientation === 'both';\n const sides: ResolvedMask = { top: vertical, bottom: vertical, left: horizontal, right: horizontal };\n\n if (mask === true || mask === undefined) return sides;\n\n if (mask.y !== undefined) {\n sides.top = mask.y;\n sides.bottom = mask.y;\n }\n if (mask.x !== undefined) {\n sides.left = mask.x;\n sides.right = mask.x;\n }\n if (mask.top !== undefined) sides.top = mask.top;\n if (mask.bottom !== undefined) sides.bottom = mask.bottom;\n if (mask.left !== undefined) sides.left = mask.left;\n if (mask.right !== undefined) sides.right = mask.right;\n\n return sides;\n}\n\nfunction maskClasses(sides: ResolvedMask) {\n return cn(\n sides.top && 'data-[overflow-y-start]:mask-t-from-[calc(100%-2rem)]',\n sides.bottom && 'data-[overflow-y-end]:mask-b-from-[calc(100%-2rem)]',\n sides.left && 'data-[overflow-x-start]:mask-l-from-[calc(100%-2rem)]',\n sides.right && 'data-[overflow-x-end]:mask-r-from-[calc(100%-2rem)]',\n );\n}\n\nfunction clampScrollButtonNumber(value: number | undefined, fallback: number, min: number) {\n const resolvedValue = value ?? fallback;\n return Number.isFinite(resolvedValue) ? Math.max(min, resolvedValue) : Math.max(min, fallback);\n}\n\ntype ScrollButtonProps = {\n direction: ScrollButtonDirection;\n label: string;\n onStartScrolling: (direction: ScrollButtonDirection, event?: React.PointerEvent<HTMLButtonElement>) => void;\n onStopScrolling: () => void;\n onKeyboardScroll: (direction: ScrollButtonDirection) => void;\n};\n\nconst ScrollButton = ({ direction, label, onStartScrolling, onStopScrolling, onKeyboardScroll }: ScrollButtonProps) => {\n const Icon = direction === 'left' ? ChevronLeftIcon : ChevronRightIcon;\n\n return (\n <button\n type=\"button\"\n aria-label={label}\n className={cn(\n 'duration-normal absolute inset-y-1 z-10 hidden w-8 cursor-pointer items-center justify-center rounded-md border-0 bg-transparent text-neutral3 transition-colors ease-out-custom hover:bg-neutral6/5 hover:text-neutral6 active:bg-neutral6/10',\n 'outline-hidden focus-visible:outline-1 focus-visible:outline-offset-2 focus-visible:outline-neutral5/55 focus-visible:outline-solid',\n direction === 'left'\n ? 'left-1 group-data-[overflow-x-start]/scroll-area:flex'\n : 'right-1 group-data-[overflow-x-end]/scroll-area:flex',\n )}\n onPointerDown={event => onStartScrolling(direction, event)}\n onPointerUp={onStopScrolling}\n onPointerLeave={onStopScrolling}\n onPointerCancel={onStopScrolling}\n onBlur={onStopScrolling}\n onClick={event => {\n if (event.detail === 0) onKeyboardScroll(direction);\n }}\n >\n <Icon aria-hidden=\"true\" className=\"size-4\" />\n </button>\n );\n};\n\ntype ScrollButtonsProps = {\n areaRef: React.RefObject<HTMLDivElement | null>;\n scrollButtons: Exclude<ScrollAreaScrollButtons, false | undefined>;\n};\n\nconst ScrollButtons = ({ areaRef, scrollButtons }: ScrollButtonsProps) => {\n const scrollButtonInterval = React.useRef<ReturnType<typeof setInterval> | null>(null);\n const scrollButtonOptions = typeof scrollButtons === 'object' ? scrollButtons : undefined;\n const scrollButtonSpeed = clampScrollButtonNumber(\n scrollButtonOptions?.scrollSpeed,\n DEFAULT_SCROLL_BUTTON_SPEED,\n MIN_SCROLL_BUTTON_SPEED,\n );\n const scrollButtonIntervalTime = clampScrollButtonNumber(\n scrollButtonOptions?.scrollIntervalTime,\n DEFAULT_SCROLL_BUTTON_INTERVAL_TIME,\n MIN_SCROLL_BUTTON_INTERVAL_TIME,\n );\n const leftScrollButtonLabel = scrollButtonOptions?.leftLabel ?? 'Scroll left';\n const rightScrollButtonLabel = scrollButtonOptions?.rightLabel ?? 'Scroll right';\n\n const stopScrollButtonScrolling = React.useCallback(() => {\n if (!scrollButtonInterval.current) return;\n clearInterval(scrollButtonInterval.current);\n scrollButtonInterval.current = null;\n }, []);\n\n const scrollByDirection = React.useCallback(\n (direction: ScrollButtonDirection, multiplier = 1) => {\n const viewport = areaRef.current;\n if (!viewport) return;\n\n viewport.scrollBy({\n left: direction === 'right' ? scrollButtonSpeed * multiplier : -scrollButtonSpeed * multiplier,\n behavior: 'smooth',\n });\n },\n [areaRef, scrollButtonSpeed],\n );\n\n const startScrollButtonScrolling = React.useCallback(\n (direction: ScrollButtonDirection, event?: React.PointerEvent<HTMLButtonElement>) => {\n event?.preventDefault();\n event?.stopPropagation();\n event?.currentTarget.setPointerCapture?.(event.pointerId);\n\n stopScrollButtonScrolling();\n scrollByDirection(direction, 2);\n\n scrollButtonInterval.current = setInterval(() => {\n scrollByDirection(direction);\n }, scrollButtonIntervalTime);\n },\n [scrollButtonIntervalTime, scrollByDirection, stopScrollButtonScrolling],\n );\n\n React.useEffect(() => {\n return () => {\n stopScrollButtonScrolling();\n };\n }, [stopScrollButtonScrolling]);\n\n return (\n <>\n <ScrollButton\n direction=\"left\"\n label={leftScrollButtonLabel}\n onStartScrolling={startScrollButtonScrolling}\n onStopScrolling={stopScrollButtonScrolling}\n onKeyboardScroll={direction => scrollByDirection(direction, 2)}\n />\n <ScrollButton\n direction=\"right\"\n label={rightScrollButtonLabel}\n onStartScrolling={startScrollButtonScrolling}\n onStopScrolling={stopScrollButtonScrolling}\n onKeyboardScroll={direction => scrollByDirection(direction, 2)}\n />\n </>\n );\n};\n\nconst ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(\n (\n {\n className,\n children,\n viewPortClassName,\n maxHeight,\n autoScroll = false,\n orientation = 'vertical',\n scrollButtons,\n mask,\n showMask,\n revealScrollbarOnHover = true,\n viewportRef,\n ...props\n },\n ref,\n ) => {\n const areaRef = React.useRef<HTMLDivElement>(null);\n useAutoscroll(areaRef, { enabled: autoScroll });\n\n // Keep the internal autoscroll ref while also exposing the viewport to callers\n // (e.g. a virtualizer's scroll element).\n const setViewportRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n areaRef.current = node;\n if (typeof viewportRef === 'function') viewportRef(node);\n else if (viewportRef) (viewportRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n },\n [viewportRef],\n );\n\n const effectiveMask: ScrollAreaMask | undefined = mask !== undefined ? mask : showMask;\n const sides = resolveMask(effectiveMask, orientation);\n\n const viewportStyle: React.CSSProperties = {};\n if (maxHeight) viewportStyle.maxHeight = maxHeight;\n if (orientation === 'vertical') {\n viewportStyle.overflowX = 'hidden';\n viewportStyle.overflowY = 'scroll';\n } else if (orientation === 'horizontal') {\n viewportStyle.overflowX = 'scroll';\n viewportStyle.overflowY = 'hidden';\n }\n\n // Base UI's ScrollAreaContent forces `min-width: fit-content` so the\n // content can grow wider than the viewport (required for horizontal scroll\n // measurement). For vertical-only scroll we override it so children shrink\n // to the viewport width instead of forcing horizontal scroll.\n const contentStyle: React.CSSProperties | undefined =\n orientation === 'vertical'\n ? { minWidth: '0px' }\n : orientation === 'horizontal'\n ? { minHeight: '0px' }\n : undefined;\n\n return (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn('group/scroll-area relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n ref={setViewportRef}\n className={cn('size-full rounded-[inherit]', maskClasses(sides), viewPortClassName)}\n style={viewportStyle}\n >\n <ScrollAreaPrimitive.Content style={contentStyle}>{children}</ScrollAreaPrimitive.Content>\n </ScrollAreaPrimitive.Viewport>\n {scrollButtons && orientation !== 'vertical' && (\n <ScrollButtons areaRef={areaRef} scrollButtons={scrollButtons} />\n )}\n {(orientation === 'vertical' || orientation === 'both') && (\n <ScrollBar orientation=\"vertical\" revealOnHover={revealScrollbarOnHover} />\n )}\n {(orientation === 'horizontal' || orientation === 'both') && (\n <ScrollBar orientation=\"horizontal\" revealOnHover={revealScrollbarOnHover} />\n )}\n {orientation === 'both' && <ScrollAreaPrimitive.Corner />}\n </ScrollAreaPrimitive.Root>\n );\n },\n);\nScrollArea.displayName = 'ScrollArea';\n\nconst ScrollBar = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Scrollbar> & { revealOnHover?: boolean }\n>(({ className, orientation = 'vertical', revealOnHover = true, ...props }, ref) => (\n <ScrollAreaPrimitive.Scrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n 'duration-normal flex touch-none transition-opacity ease-out-custom select-none',\n 'opacity-0 data-[scrolling]:opacity-100 data-[scrolling]:duration-0',\n revealOnHover && 'data-[hovering]:opacity-100',\n orientation === 'vertical' && 'h-full w-1.5 p-px',\n orientation === 'horizontal' && 'h-1.5 w-full flex-col p-px',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.Thumb className=\"duration-normal bg-neutral4/30 hover:bg-neutral4/60 relative flex-1 rounded-full transition-colors\" />\n </ScrollAreaPrimitive.Scrollbar>\n));\nScrollBar.displayName = 'ScrollBar';\n\nexport { ScrollArea, ScrollBar };\n"],"names":["ScrollAreaPrimitive"],"mappings":";;;;;;;AAUA,MAAM,2BAAA,GAA8B,GAAA;AACpC,MAAM,mCAAA,GAAsC,EAAA;AAC5C,MAAM,uBAAA,GAA0B,CAAA;AAChC,MAAM,+BAAA,GAAkC,EAAA;AAyDxC,SAAS,WAAA,CAAY,MAAkC,WAAA,EAAwC;AAC7F,EAAA,IAAI,IAAA,KAAS,KAAA,EAAO,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAElF,EAAA,MAAM,QAAA,GAAW,WAAA,KAAgB,UAAA,IAAc,WAAA,KAAgB,MAAA;AAC/D,EAAA,MAAM,UAAA,GAAa,WAAA,KAAgB,YAAA,IAAgB,WAAA,KAAgB,MAAA;AACnE,EAAA,MAAM,KAAA,GAAsB,EAAE,GAAA,EAAK,QAAA,EAAU,QAAQ,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,UAAA,EAAW;AAEnG,EAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,MAAA,EAAW,OAAO,KAAA;AAEhD,EAAA,IAAI,IAAA,CAAK,MAAM,MAAA,EAAW;AACxB,IAAA,KAAA,CAAM,MAAM,IAAA,CAAK,CAAA;AACjB,IAAA,KAAA,CAAM,SAAS,IAAA,CAAK,CAAA;AAAA,EACtB;AACA,EAAA,IAAI,IAAA,CAAK,MAAM,MAAA,EAAW;AACxB,IAAA,KAAA,CAAM,OAAO,IAAA,CAAK,CAAA;AAClB,IAAA,KAAA,CAAM,QAAQ,IAAA,CAAK,CAAA;AAAA,EACrB;AACA,EAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,EAAW,KAAA,CAAM,MAAM,IAAA,CAAK,GAAA;AAC7C,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,KAAA,CAAM,SAAS,IAAA,CAAK,MAAA;AACnD,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,EAAW,KAAA,CAAM,OAAO,IAAA,CAAK,IAAA;AAC/C,EAAA,IAAI,IAAA,CAAK,KAAA,KAAU,MAAA,EAAW,KAAA,CAAM,QAAQ,IAAA,CAAK,KAAA;AAEjD,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,YAAY,KAAA,EAAqB;AACxC,EAAA,OAAO,EAAA;AAAA,IACL,MAAM,GAAA,IAAO,uDAAA;AAAA,IACb,MAAM,MAAA,IAAU,qDAAA;AAAA,IAChB,MAAM,IAAA,IAAQ,uDAAA;AAAA,IACd,MAAM,KAAA,IAAS;AAAA,GACjB;AACF;AAEA,SAAS,uBAAA,CAAwB,KAAA,EAA2B,QAAA,EAAkB,GAAA,EAAa;AACzF,EAAA,MAAM,gBAAgB,KAAA,IAAS,QAAA;AAC/B,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,aAAa,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,QAAQ,CAAA;AAC/F;AAUA,MAAM,YAAA,GAAe,CAAC,EAAE,SAAA,EAAW,OAAO,gBAAA,EAAkB,eAAA,EAAiB,kBAAiB,KAAyB;AACrH,EAAA,MAAM,IAAA,GAAO,SAAA,KAAc,MAAA,GAAS,eAAA,GAAkB,gBAAA;AAEtD,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACT,gPAAA;AAAA,QACA,qIAAA;AAAA,QACA,SAAA,KAAc,SACV,uDAAA,GACA;AAAA,OACN;AAAA,MACA,aAAA,EAAe,CAAA,KAAA,KAAS,gBAAA,CAAiB,SAAA,EAAW,KAAK,CAAA;AAAA,MACzD,WAAA,EAAa,eAAA;AAAA,MACb,cAAA,EAAgB,eAAA;AAAA,MAChB,eAAA,EAAiB,eAAA;AAAA,MACjB,MAAA,EAAQ,eAAA;AAAA,MACR,SAAS,CAAA,KAAA,KAAS;AAChB,QAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,gBAAA,CAAiB,SAAS,CAAA;AAAA,MACpD,CAAA;AAAA,MAEA,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,WAAU,QAAA,EAAS;AAAA;AAAA,GAC9C;AAEJ,CAAA;AAOA,MAAM,aAAA,GAAgB,CAAC,EAAE,OAAA,EAAS,eAAc,KAA0B;AACxE,EAAA,MAAM,oBAAA,GAAuB,KAAA,CAAM,MAAA,CAA8C,IAAI,CAAA;AACrF,EAAA,MAAM,mBAAA,GAAsB,OAAO,aAAA,KAAkB,QAAA,GAAW,aAAA,GAAgB,MAAA;AAChF,EAAA,MAAM,iBAAA,GAAoB,uBAAA;AAAA,IACxB,mBAAA,EAAqB,WAAA;AAAA,IACrB,2BAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,wBAAA,GAA2B,uBAAA;AAAA,IAC/B,mBAAA,EAAqB,kBAAA;AAAA,IACrB,mCAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,qBAAA,GAAwB,qBAAqB,SAAA,IAAa,aAAA;AAChE,EAAA,MAAM,sBAAA,GAAyB,qBAAqB,UAAA,IAAc,cAAA;AAElE,EAAA,MAAM,yBAAA,GAA4B,KAAA,CAAM,WAAA,CAAY,MAAM;AACxD,IAAA,IAAI,CAAC,qBAAqB,OAAA,EAAS;AACnC,IAAA,aAAA,CAAc,qBAAqB,OAAO,CAAA;AAC1C,IAAA,oBAAA,CAAqB,OAAA,GAAU,IAAA;AAAA,EACjC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,oBAAoB,KAAA,CAAM,WAAA;AAAA,IAC9B,CAAC,SAAA,EAAkC,UAAA,GAAa,CAAA,KAAM;AACpD,MAAA,MAAM,WAAW,OAAA,CAAQ,OAAA;AACzB,MAAA,IAAI,CAAC,QAAA,EAAU;AAEf,MAAA,QAAA,CAAS,QAAA,CAAS;AAAA,QAChB,MAAM,SAAA,KAAc,OAAA,GAAU,iBAAA,GAAoB,UAAA,GAAa,CAAC,iBAAA,GAAoB,UAAA;AAAA,QACpF,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,SAAS,iBAAiB;AAAA,GAC7B;AAEA,EAAA,MAAM,6BAA6B,KAAA,CAAM,WAAA;AAAA,IACvC,CAAC,WAAkC,KAAA,KAAkD;AACnF,MAAA,KAAA,EAAO,cAAA,EAAe;AACtB,MAAA,KAAA,EAAO,eAAA,EAAgB;AACvB,MAAA,KAAA,EAAO,aAAA,CAAc,iBAAA,GAAoB,KAAA,CAAM,SAAS,CAAA;AAExD,MAAA,yBAAA,EAA0B;AAC1B,MAAA,iBAAA,CAAkB,WAAW,CAAC,CAAA;AAE9B,MAAA,oBAAA,CAAqB,OAAA,GAAU,YAAY,MAAM;AAC/C,QAAA,iBAAA,CAAkB,SAAS,CAAA;AAAA,MAC7B,GAAG,wBAAwB,CAAA;AAAA,IAC7B,CAAA;AAAA,IACA,CAAC,wBAAA,EAA0B,iBAAA,EAAmB,yBAAyB;AAAA,GACzE;AAEA,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,OAAO,MAAM;AACX,MAAA,yBAAA,EAA0B;AAAA,IAC5B,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,yBAAyB,CAAC,CAAA;AAE9B,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,MAAA;AAAA,QACV,KAAA,EAAO,qBAAA;AAAA,QACP,gBAAA,EAAkB,0BAAA;AAAA,QAClB,eAAA,EAAiB,yBAAA;AAAA,QACjB,gBAAA,EAAkB,CAAA,SAAA,KAAa,iBAAA,CAAkB,SAAA,EAAW,CAAC;AAAA;AAAA,KAC/D;AAAA,oBACA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,OAAA;AAAA,QACV,KAAA,EAAO,sBAAA;AAAA,QACP,gBAAA,EAAkB,0BAAA;AAAA,QAClB,eAAA,EAAiB,yBAAA;AAAA,QACjB,gBAAA,EAAkB,CAAA,SAAA,KAAa,iBAAA,CAAkB,SAAA,EAAW,CAAC;AAAA;AAAA;AAC/D,GAAA,EACF,CAAA;AAEJ,CAAA;AAEA,MAAM,aAAa,KAAA,CAAM,UAAA;AAAA,EACvB,CACE;AAAA,IACE,SAAA;AAAA,IACA,QAAA;AAAA,IACA,iBAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA,GAAa,KAAA;AAAA,IACb,WAAA,GAAc,UAAA;AAAA,IACd,aAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,sBAAA,GAAyB,IAAA;AAAA,IACzB,WAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,MAAA,CAAuB,IAAI,CAAA;AACjD,IAAA,aAAA,CAAc,OAAA,EAAS,EAAE,OAAA,EAAS,UAAA,EAAY,CAAA;AAI9C,IAAA,MAAM,iBAAiB,KAAA,CAAM,WAAA;AAAA,MAC3B,CAAC,IAAA,KAAgC;AAC/B,QAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,QAAA,IAAI,OAAO,WAAA,KAAgB,UAAA,EAAY,WAAA,CAAY,IAAI,CAAA;AAAA,aAAA,IAC9C,WAAA,EAAc,WAAA,CAA8D,OAAA,GAAU,IAAA;AAAA,MACjG,CAAA;AAAA,MACA,CAAC,WAAW;AAAA,KACd;AAEA,IAAA,MAAM,aAAA,GAA4C,IAAA,KAAS,MAAA,GAAY,IAAA,GAAO,QAAA;AAC9E,IAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,aAAA,EAAe,WAAW,CAAA;AAEpD,IAAA,MAAM,gBAAqC,EAAC;AAC5C,IAAA,IAAI,SAAA,gBAAyB,SAAA,GAAY,SAAA;AACzC,IAAA,IAAI,gBAAgB,UAAA,EAAY;AAC9B,MAAA,aAAA,CAAc,SAAA,GAAY,QAAA;AAC1B,MAAA,aAAA,CAAc,SAAA,GAAY,QAAA;AAAA,IAC5B,CAAA,MAAA,IAAW,gBAAgB,YAAA,EAAc;AACvC,MAAA,aAAA,CAAc,SAAA,GAAY,QAAA;AAC1B,MAAA,aAAA,CAAc,SAAA,GAAY,QAAA;AAAA,IAC5B;AAMA,IAAA,MAAM,YAAA,GACJ,WAAA,KAAgB,UAAA,GACZ,EAAE,QAAA,EAAU,KAAA,EAAM,GAClB,WAAA,KAAgB,YAAA,GACd,EAAE,SAAA,EAAW,KAAA,EAAM,GACnB,MAAA;AAER,IAAA,uBACE,IAAA;AAAA,MAACA,YAAA,CAAoB,IAAA;AAAA,MAApB;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,4CAAA,EAA8C,SAAS,CAAA;AAAA,QACpE,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAACA,YAAA,CAAoB,QAAA;AAAA,YAApB;AAAA,cACC,GAAA,EAAK,cAAA;AAAA,cACL,WAAW,EAAA,CAAG,6BAAA,EAA+B,WAAA,CAAY,KAAK,GAAG,iBAAiB,CAAA;AAAA,cAClF,KAAA,EAAO,aAAA;AAAA,cAEP,8BAACA,YAAA,CAAoB,OAAA,EAApB,EAA4B,KAAA,EAAO,cAAe,QAAA,EAAS;AAAA;AAAA,WAC9D;AAAA,UACC,iBAAiB,WAAA,KAAgB,UAAA,oBAChC,GAAA,CAAC,aAAA,EAAA,EAAc,SAAkB,aAAA,EAA8B,CAAA;AAAA,UAAA,CAE/D,WAAA,KAAgB,cAAc,WAAA,KAAgB,MAAA,yBAC7C,SAAA,EAAA,EAAU,WAAA,EAAY,UAAA,EAAW,aAAA,EAAe,sBAAA,EAAwB,CAAA;AAAA,UAAA,CAEzE,WAAA,KAAgB,gBAAgB,WAAA,KAAgB,MAAA,yBAC/C,SAAA,EAAA,EAAU,WAAA,EAAY,YAAA,EAAa,aAAA,EAAe,sBAAA,EAAwB,CAAA;AAAA,UAE5E,WAAA,KAAgB,MAAA,oBAAU,GAAA,CAACA,YAAA,CAAoB,QAApB,EAA2B;AAAA;AAAA;AAAA,KACzD;AAAA,EAEJ;AACF;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;AAEzB,MAAM,SAAA,GAAY,KAAA,CAAM,UAAA,CAGtB,CAAC,EAAE,SAAA,EAAW,WAAA,GAAc,UAAA,EAAY,aAAA,GAAgB,IAAA,EAAM,GAAG,KAAA,IAAS,GAAA,qBAC1E,GAAA;AAAA,EAACA,YAAA,CAAoB,SAAA;AAAA,EAApB;AAAA,IACC,GAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,gFAAA;AAAA,MACA,oEAAA;AAAA,MACA,aAAA,IAAiB,6BAAA;AAAA,MACjB,gBAAgB,UAAA,IAAc,mBAAA;AAAA,MAC9B,gBAAgB,YAAA,IAAgB,4BAAA;AAAA,MAChC;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,kBAAA,GAAA,CAACA,YAAA,CAAoB,KAAA,EAApB,EAA0B,WAAU,oGAAA,EAAqG;AAAA;AAC5I,CACD;AACD,SAAA,CAAU,WAAA,GAAc,WAAA;;;;"}
1
+ {"version":3,"file":"scroll-area-BiHnOfzg.js","sources":["../src/ds/components/ScrollArea/scroll-area.tsx"],"sourcesContent":["import { ScrollArea as ScrollAreaPrimitive } from '@base-ui/react/scroll-area';\nimport { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { useAutoscroll } from '@/hooks/use-autoscroll';\nimport { cn } from '@/lib/utils';\n\ntype Orientation = 'vertical' | 'horizontal' | 'both';\ntype ScrollButtonDirection = 'left' | 'right';\n\nconst DEFAULT_SCROLL_BUTTON_SPEED = 100;\nconst DEFAULT_SCROLL_BUTTON_INTERVAL_TIME = 20;\nconst MIN_SCROLL_BUTTON_SPEED = 1;\nconst MIN_SCROLL_BUTTON_INTERVAL_TIME = 16;\n\nexport type MaskSides = {\n top?: boolean;\n bottom?: boolean;\n left?: boolean;\n right?: boolean;\n /** Shorthand: sets both `left` and `right`. Per-side keys override. */\n x?: boolean;\n /** Shorthand: sets both `top` and `bottom`. Per-side keys override. */\n y?: boolean;\n};\n\n/**\n * - `true` / omitted: fade the edges that match `orientation`.\n * - `false`: no fade.\n * - object: per-side override on top of the orientation default.\n */\nexport type ScrollAreaMask = boolean | MaskSides;\n\nexport type ScrollAreaScrollButtons =\n | boolean\n | {\n /** Pixels to scroll per repeated interval. */\n scrollSpeed?: number;\n /** Milliseconds between repeated scroll steps while the button is held. */\n scrollIntervalTime?: number;\n leftLabel?: string;\n rightLabel?: string;\n };\n\nexport type ScrollAreaProps = React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root> & {\n viewPortClassName?: string;\n maxHeight?: string;\n autoScroll?: boolean;\n orientation?: Orientation;\n /** Show left/right controls for horizontal overflow. Only applies to `horizontal` and `both` orientations. */\n scrollButtons?: ScrollAreaScrollButtons;\n /** Fade content at the edges where it's clipped by overflow. Defaults to the axes matching `orientation`. */\n mask?: ScrollAreaMask;\n /** @deprecated Use `mask` instead. Retained for backward compatibility. */\n showMask?: boolean;\n /**\n * Reveal the overlay scrollbar when the pointer hovers the area. When `false`,\n * the scrollbar only appears while actively scrolling. Defaults to `true`.\n */\n revealScrollbarOnHover?: boolean;\n /**\n * Ref to the scrolling viewport element. Use this as the scroll element for a\n * virtualizer (`getScrollElement: () => viewportRef.current`) so the list can\n * virtualize while still using the ScrollArea's overlay scrollbar + masks.\n */\n viewportRef?: React.Ref<HTMLDivElement>;\n};\n\ntype ResolvedMask = { top: boolean; bottom: boolean; left: boolean; right: boolean };\n\nfunction resolveMask(mask: ScrollAreaMask | undefined, orientation: Orientation): ResolvedMask {\n if (mask === false) return { top: false, bottom: false, left: false, right: false };\n\n const vertical = orientation === 'vertical' || orientation === 'both';\n const horizontal = orientation === 'horizontal' || orientation === 'both';\n const sides: ResolvedMask = { top: vertical, bottom: vertical, left: horizontal, right: horizontal };\n\n if (mask === true || mask === undefined) return sides;\n\n if (mask.y !== undefined) {\n sides.top = mask.y;\n sides.bottom = mask.y;\n }\n if (mask.x !== undefined) {\n sides.left = mask.x;\n sides.right = mask.x;\n }\n if (mask.top !== undefined) sides.top = mask.top;\n if (mask.bottom !== undefined) sides.bottom = mask.bottom;\n if (mask.left !== undefined) sides.left = mask.left;\n if (mask.right !== undefined) sides.right = mask.right;\n\n return sides;\n}\n\nfunction maskClasses(sides: ResolvedMask) {\n return cn(\n sides.top && 'data-[overflow-y-start]:mask-t-from-[calc(100%-2rem)]',\n sides.bottom && 'data-[overflow-y-end]:mask-b-from-[calc(100%-2rem)]',\n sides.left && 'data-[overflow-x-start]:mask-l-from-[calc(100%-2rem)]',\n sides.right && 'data-[overflow-x-end]:mask-r-from-[calc(100%-2rem)]',\n );\n}\n\nfunction clampScrollButtonNumber(value: number | undefined, fallback: number, min: number) {\n const resolvedValue = value ?? fallback;\n return Number.isFinite(resolvedValue) ? Math.max(min, resolvedValue) : Math.max(min, fallback);\n}\n\ntype ScrollButtonProps = {\n direction: ScrollButtonDirection;\n label: string;\n onStartScrolling: (direction: ScrollButtonDirection, event?: React.PointerEvent<HTMLButtonElement>) => void;\n onStopScrolling: () => void;\n onKeyboardScroll: (direction: ScrollButtonDirection) => void;\n};\n\nconst ScrollButton = ({ direction, label, onStartScrolling, onStopScrolling, onKeyboardScroll }: ScrollButtonProps) => {\n const Icon = direction === 'left' ? ChevronLeftIcon : ChevronRightIcon;\n\n return (\n <button\n type=\"button\"\n aria-label={label}\n className={cn(\n 'absolute inset-y-1 z-10 hidden w-8 cursor-pointer items-center justify-center rounded-md border-0 bg-transparent text-neutral3 transition-colors duration-normal ease-out-custom hover:bg-neutral6/5 hover:text-neutral6 active:bg-neutral6/10',\n 'outline-hidden focus-visible:outline-1 focus-visible:outline-offset-2 focus-visible:outline-neutral5/55 focus-visible:outline-solid',\n direction === 'left'\n ? 'left-1 group-data-[overflow-x-start]/scroll-area:flex'\n : 'right-1 group-data-[overflow-x-end]/scroll-area:flex',\n )}\n onPointerDown={event => onStartScrolling(direction, event)}\n onPointerUp={onStopScrolling}\n onPointerLeave={onStopScrolling}\n onPointerCancel={onStopScrolling}\n onBlur={onStopScrolling}\n onClick={event => {\n if (event.detail === 0) onKeyboardScroll(direction);\n }}\n >\n <Icon aria-hidden=\"true\" className=\"size-4\" />\n </button>\n );\n};\n\ntype ScrollButtonsProps = {\n areaRef: React.RefObject<HTMLDivElement | null>;\n scrollButtons: Exclude<ScrollAreaScrollButtons, false | undefined>;\n};\n\nconst ScrollButtons = ({ areaRef, scrollButtons }: ScrollButtonsProps) => {\n const scrollButtonInterval = React.useRef<ReturnType<typeof setInterval> | null>(null);\n const scrollButtonOptions = typeof scrollButtons === 'object' ? scrollButtons : undefined;\n const scrollButtonSpeed = clampScrollButtonNumber(\n scrollButtonOptions?.scrollSpeed,\n DEFAULT_SCROLL_BUTTON_SPEED,\n MIN_SCROLL_BUTTON_SPEED,\n );\n const scrollButtonIntervalTime = clampScrollButtonNumber(\n scrollButtonOptions?.scrollIntervalTime,\n DEFAULT_SCROLL_BUTTON_INTERVAL_TIME,\n MIN_SCROLL_BUTTON_INTERVAL_TIME,\n );\n const leftScrollButtonLabel = scrollButtonOptions?.leftLabel ?? 'Scroll left';\n const rightScrollButtonLabel = scrollButtonOptions?.rightLabel ?? 'Scroll right';\n\n const stopScrollButtonScrolling = React.useCallback(() => {\n if (!scrollButtonInterval.current) return;\n clearInterval(scrollButtonInterval.current);\n scrollButtonInterval.current = null;\n }, []);\n\n const scrollByDirection = React.useCallback(\n (direction: ScrollButtonDirection, multiplier = 1) => {\n const viewport = areaRef.current;\n if (!viewport) return;\n\n viewport.scrollBy({\n left: direction === 'right' ? scrollButtonSpeed * multiplier : -scrollButtonSpeed * multiplier,\n behavior: 'smooth',\n });\n },\n [areaRef, scrollButtonSpeed],\n );\n\n const startScrollButtonScrolling = React.useCallback(\n (direction: ScrollButtonDirection, event?: React.PointerEvent<HTMLButtonElement>) => {\n event?.preventDefault();\n event?.stopPropagation();\n event?.currentTarget.setPointerCapture?.(event.pointerId);\n\n stopScrollButtonScrolling();\n scrollByDirection(direction, 2);\n\n scrollButtonInterval.current = setInterval(() => {\n scrollByDirection(direction);\n }, scrollButtonIntervalTime);\n },\n [scrollButtonIntervalTime, scrollByDirection, stopScrollButtonScrolling],\n );\n\n React.useEffect(() => {\n return () => {\n stopScrollButtonScrolling();\n };\n }, [stopScrollButtonScrolling]);\n\n return (\n <>\n <ScrollButton\n direction=\"left\"\n label={leftScrollButtonLabel}\n onStartScrolling={startScrollButtonScrolling}\n onStopScrolling={stopScrollButtonScrolling}\n onKeyboardScroll={direction => scrollByDirection(direction, 2)}\n />\n <ScrollButton\n direction=\"right\"\n label={rightScrollButtonLabel}\n onStartScrolling={startScrollButtonScrolling}\n onStopScrolling={stopScrollButtonScrolling}\n onKeyboardScroll={direction => scrollByDirection(direction, 2)}\n />\n </>\n );\n};\n\nconst ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(\n (\n {\n className,\n children,\n viewPortClassName,\n maxHeight,\n autoScroll = false,\n orientation = 'vertical',\n scrollButtons,\n mask,\n showMask,\n revealScrollbarOnHover = true,\n viewportRef,\n ...props\n },\n ref,\n ) => {\n const areaRef = React.useRef<HTMLDivElement>(null);\n useAutoscroll(areaRef, { enabled: autoScroll });\n\n // Keep the internal autoscroll ref while also exposing the viewport to callers\n // (e.g. a virtualizer's scroll element).\n const setViewportRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n areaRef.current = node;\n if (typeof viewportRef === 'function') viewportRef(node);\n else if (viewportRef) (viewportRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n },\n [viewportRef],\n );\n\n const effectiveMask: ScrollAreaMask | undefined = mask !== undefined ? mask : showMask;\n const sides = resolveMask(effectiveMask, orientation);\n\n const viewportStyle: React.CSSProperties = {};\n if (maxHeight) viewportStyle.maxHeight = maxHeight;\n if (orientation === 'vertical') {\n viewportStyle.overflowX = 'hidden';\n viewportStyle.overflowY = 'scroll';\n } else if (orientation === 'horizontal') {\n viewportStyle.overflowX = 'scroll';\n viewportStyle.overflowY = 'hidden';\n }\n\n // Base UI's ScrollAreaContent forces `min-width: fit-content` so the\n // content can grow wider than the viewport (required for horizontal scroll\n // measurement). For vertical-only scroll we override it so children shrink\n // to the viewport width instead of forcing horizontal scroll.\n const contentStyle: React.CSSProperties | undefined =\n orientation === 'vertical'\n ? { minWidth: '0px' }\n : orientation === 'horizontal'\n ? { minHeight: '0px' }\n : undefined;\n\n return (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn('group/scroll-area relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n ref={setViewportRef}\n className={cn('size-full', maskClasses(sides), viewPortClassName)}\n style={viewportStyle}\n >\n <ScrollAreaPrimitive.Content style={contentStyle}>{children}</ScrollAreaPrimitive.Content>\n </ScrollAreaPrimitive.Viewport>\n {scrollButtons && orientation !== 'vertical' && (\n <ScrollButtons areaRef={areaRef} scrollButtons={scrollButtons} />\n )}\n {(orientation === 'vertical' || orientation === 'both') && (\n <ScrollBar orientation=\"vertical\" revealOnHover={revealScrollbarOnHover} />\n )}\n {(orientation === 'horizontal' || orientation === 'both') && (\n <ScrollBar orientation=\"horizontal\" revealOnHover={revealScrollbarOnHover} />\n )}\n {orientation === 'both' && <ScrollAreaPrimitive.Corner />}\n </ScrollAreaPrimitive.Root>\n );\n },\n);\nScrollArea.displayName = 'ScrollArea';\n\nconst ScrollBar = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Scrollbar> & { revealOnHover?: boolean }\n>(({ className, orientation = 'vertical', revealOnHover = true, ...props }, ref) => (\n <ScrollAreaPrimitive.Scrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n 'flex touch-none transition-opacity duration-normal ease-out-custom select-none',\n 'opacity-0 data-[scrolling]:opacity-100 data-[scrolling]:duration-0',\n revealOnHover && 'data-[hovering]:opacity-100',\n orientation === 'vertical' && 'h-full w-1.5 p-px',\n orientation === 'horizontal' && 'h-1.5 w-full flex-col p-px',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.Thumb className=\"bg-neutral4/30 duration-normal hover:bg-neutral4/60 relative flex-1 rounded-full transition-colors\" />\n </ScrollAreaPrimitive.Scrollbar>\n));\nScrollBar.displayName = 'ScrollBar';\n\nexport { ScrollArea, ScrollBar };\n"],"names":["ScrollAreaPrimitive"],"mappings":"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"}
@@ -5,7 +5,6 @@ export declare const METRICS_DATA_LIST_PROPS: {
5
5
  mask: {
6
6
  left: false;
7
7
  };
8
- stickyHeaderBackground: "tinted";
9
8
  };
10
9
  export declare const CHART_COLORS: {
11
10
  readonly green: "#22c55e";
@@ -2,7 +2,7 @@ import { VariantProps } from 'class-variance-authority';
2
2
  import { LinkComponent } from '../../types/link-component';
3
3
  import * as React from 'react';
4
4
  declare const cardVariants: (props?: ({
5
- appearance?: "surface" | "outlined" | null | undefined;
5
+ appearance?: "outlined" | "surface" | null | undefined;
6
6
  elevation?: "flat" | "raised" | "elevated" | null | undefined;
7
7
  interactive?: boolean | null | undefined;
8
8
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
@@ -10,7 +10,7 @@ export type CardProps = React.HTMLAttributes<HTMLDivElement> & VariantProps<type
10
10
  as?: React.ElementType;
11
11
  };
12
12
  export declare const Card: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
13
- appearance?: "surface" | "outlined" | null | undefined;
13
+ appearance?: "outlined" | "surface" | null | undefined;
14
14
  elevation?: "flat" | "raised" | "elevated" | null | undefined;
15
15
  interactive?: boolean | null | undefined;
16
16
  } & import('class-variance-authority/types').ClassProp) | undefined) => string> & {
@@ -1,13 +1,5 @@
1
1
  import { ReactNode, RefObject } from 'react';
2
2
  import { ScrollAreaMask, ScrollAreaProps } from '../ScrollArea/scroll-area';
3
- /**
4
- * Visual treatment for the whole list.
5
- *
6
- * Both are borderless and full-bleed, with a contrasting sticky header band and
7
- * no row separators. `striped` adds a zebra tint to every other row; `plain`
8
- * leaves rows transparent so only hover and selection tint them.
9
- */
10
- export type DataListVariant = 'striped' | 'plain';
11
3
  /**
12
4
  * Horizontal sizing of the list grid.
13
5
  *
@@ -18,19 +10,20 @@ export type DataListVariant = 'striped' | 'plain';
18
10
  * instead of widening the table.
19
11
  */
20
12
  export type DataListFit = 'content' | 'container';
21
- export type DataListStickyHeaderBackground = 'tinted' | 'surface' | 'transparent';
13
+ /**
14
+ * Surface treatment of the list.
15
+ *
16
+ * - `default`: rows sit on a rounded `surface4` panel.
17
+ * - `light`: no panel behind the rows; rows sit directly on the page.
18
+ */
19
+ export type DataListVariant = 'default' | 'light';
22
20
  export type DataListRootProps = Omit<ScrollAreaProps, 'children' | 'orientation' | 'mask' | 'viewportRef'> & {
23
21
  children: ReactNode;
24
22
  columns: string;
25
- variant?: DataListVariant;
26
23
  /** Grid width behavior; defaults to `content` (existing horizontal-scroll sizing). */
27
24
  fit?: DataListFit;
28
- /**
29
- * Shared fill for the sticky top header and sticky row-header column.
30
- * `tinted` is the opaque `--surface-header` band, so sticky headers do not
31
- * reveal scrolled content beneath them.
32
- */
33
- stickyHeaderBackground?: DataListStickyHeaderBackground;
25
+ /** Surface treatment; defaults to `default` (rows on a `surface4` panel). */
26
+ variant?: DataListVariant;
34
27
  /**
35
28
  * Edge fades from the underlying ScrollArea. DataList keeps the top fade off
36
29
  * by default so it does not fade the sticky top header.
@@ -43,4 +36,4 @@ export type DataListRootProps = Omit<ScrollAreaProps, 'children' | 'orientation'
43
36
  */
44
37
  scrollRef?: RefObject<HTMLDivElement | null>;
45
38
  };
46
- export declare function DataListRoot({ children, columns, className, variant, fit, stickyHeaderBackground, mask, scrollRef, ...props }: DataListRootProps): import("react").JSX.Element;
39
+ export declare function DataListRoot({ children, columns, className, fit, variant, mask, scrollRef, ...props }: DataListRootProps): import("react").JSX.Element;
@@ -1,7 +1,12 @@
1
- import { DataListFit } from './data-list-root';
1
+ import { DataListFit, DataListVariant } from './data-list-root';
2
2
  export type DataListSkeletonProps = {
3
3
  columns?: string;
4
4
  numberOfRows?: number;
5
5
  fit?: DataListFit;
6
+ variant?: DataListVariant;
6
7
  };
7
- export declare function DataListSkeleton({ columns, numberOfRows, fit }: DataListSkeletonProps): import("react").JSX.Element;
8
+ /**
9
+ * Loading placeholder mirroring the real list: same root, a sticky header
10
+ * band with one placeholder label per column, then rows of placeholder cells.
11
+ */
12
+ export declare function DataListSkeleton({ columns, numberOfRows, fit, variant, }: DataListSkeletonProps): import("react").JSX.Element;
@@ -8,7 +8,7 @@ import { DataListSpacer } from './data-list-spacer';
8
8
  import { DataListSubHeading } from './data-list-subheading';
9
9
  import { DataListTop } from './data-list-top';
10
10
  import { DataListTopCellWithTooltip, DataListTopCellSmart, DataListTopSelectCell } from './data-list-top-cell';
11
- export type { DataListRootProps, DataListStickyHeaderBackground, DataListVariant } from './data-list-root';
11
+ export type { DataListRootProps, DataListVariant } from './data-list-root';
12
12
  export declare const DataList: typeof DataListRoot & {
13
13
  Top: typeof DataListTop;
14
14
  TopCells: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
@@ -1,49 +1,23 @@
1
1
  import { Meta, StoryObj } from '@storybook/react-vite';
2
- import { DataListStickyHeaderBackground, DataListVariant } from './data-list-root';
3
- type DataListStoryArgs = {
4
- variant: DataListVariant;
5
- stickyHeaderBackground: DataListStickyHeaderBackground;
6
- };
7
- declare const meta: Meta<DataListStoryArgs>;
2
+ import { DataList } from './data-list';
3
+ declare const meta: Meta<typeof DataList>;
8
4
  export default meta;
9
- type Story = StoryObj<DataListStoryArgs>;
10
- /** The standard condensed look used by Traces, Logs, Scores, Dataset Items, and Skills. */
11
- export declare const Compact: Story;
12
- /** Taller rows — better for prose-heavy content where each row needs more breathing room. */
5
+ type Story = StoryObj<typeof DataList>;
6
+ /** Canonical DataList appearance and density. */
13
7
  export declare const Default: Story;
14
- /**
15
- * Per-row `variant="error"` lays a subtle, theme-aware destructive tint over the
16
- * row. Use the `variant` control to compare it with each list treatment.
17
- */
18
- export declare const WithErrorRows: Story;
19
- /** Use `RowLink` when each row should navigate to a detail page (preserves middle-click + open-in-new-tab). */
20
- export declare const WithRowLink: Story;
21
- /** Multi-select with a leading checkbox column. Click the header checkbox to toggle all rows. */
8
+ /** `light` drops the panel behind the rows so the list sits directly on the page. */
9
+ export declare const Light: Story;
10
+ /** Semantic error and featured row states. */
11
+ export declare const RowStates: Story;
12
+ /** Multi-select with checkboxes that remain visible without hover. */
22
13
  export declare const WithSelection: Story;
23
- /** Trailing actions column: the row click area is bounded by `colEnd={-2}`, and the last cell hosts per-row controls. */
24
- export declare const WithTrailingCell: Story;
25
- /** Use `featured` to highlight the row whose detail panel is currently open. */
26
- export declare const Featured: Story;
27
- /** `DateCell` shows `Today` or `MMM dd`; `TimeCell` shows `HH:mm:ss.SSS` with monospaced glyphs. */
28
- export declare const WithDateAndTimeCells: Story;
29
- /** Empty / no-match state — usually shown when a search filter yields zero rows. */
14
+ /** Trailing actions stay hidden until their row is hovered or focused. */
15
+ export declare const WithActions: Story;
30
16
  export declare const Empty: Story;
31
- /** Wide grid with constrained columns, horizontal scrolling, and a long badge that must stay inside its cell. */
32
- export declare const WideColumnsOverflow: Story;
33
- /** Sticky row headers keep the first column visible while wide metric-like grids scroll horizontally. */
34
- export declare const StickyRowHeaders: Story;
35
- /** Loading placeholder for any column layout. Pass the same `columns` string the real list uses. */
36
17
  export declare const Loading: Story;
37
- /** Page-based pagination footer — `Previous` shows when `currentPage > 0`, `Next` shows when `hasMore`.
38
- * `currentPage` is zero-based: the footer renders it as `currentPage + 1`, so page `0` reads as "Page 1". */
18
+ /** Horizontal and vertical scrolling with a sticky header and first column. */
19
+ export declare const StickyOverflow: Story;
39
20
  export declare const WithPagination: Story;
40
- /** Group rows under labelled sections using `Subheader` (and an optional `SubHeading` for a quieter sub-label). */
41
- export declare const WithSubheader: Story;
42
- /** Scorer data table: Score is always visible, Input/Entity are toggleable. */
43
- export declare const ScoresTable: Story;
44
- /**
45
- * Accessible keyboard navigation via `useTableKeydown` (roving tabindex).
46
- * Tab into the list to land on the active row, then use ArrowUp/ArrowDown,
47
- * Home/End, and PageUp/PageDown to move focus. Tab leaves the list in one stop.
48
- */
21
+ export declare const WithSubheaders: Story;
22
+ /** Roving focus with ArrowUp, ArrowDown, Home, End, PageUp and PageDown. */
49
23
  export declare const KeyboardNavigation: Story;
@@ -5,42 +5,37 @@
5
5
  *
6
6
  * Carries the `.data-list-row` marker class the root styles target.
7
7
  */
8
- export declare const dataListRowOuterStyles: readonly ["group/data-list-row data-list-row col-span-full relative min-h-9", "transition-colors duration-200 rounded-lg"];
8
+ export declare const dataListRowOuterStyles: readonly ["group/data-list-row data-list-row col-span-full relative min-h-9 bg-surface2", "transition-colors duration-200"];
9
9
  /**
10
- * Layout + focus ring only. The root paints the hover/focus fill on
11
- * `.data-list-row`, so a wrapped row and its button never show two tints.
10
+ * Interactive state fills for the outer row element. Applied to standalone
11
+ * `RowButton` / `RowLink` and to `RowWrapper`. The `has-*` forms let a wrapper
12
+ * mirror the tone of the interactive row nested inside it.
12
13
  */
13
- export declare const dataListRowInteractiveStyles: readonly ["grid grid-cols-subgrid gap-8 px-5 outline-none cursor-pointer", "focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-accent1", "transition-colors duration-200 rounded-lg"];
14
- export declare const dataListRowStyles: readonly ["grid grid-cols-subgrid gap-8 px-5 outline-none cursor-pointer", "focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-accent1", "transition-colors duration-200 rounded-lg", "group/data-list-row data-list-row col-span-full relative min-h-9", "transition-colors duration-200 rounded-lg"];
15
- export declare const dataListRowStaticStyles: readonly ["grid grid-cols-subgrid gap-8 px-5", "group/data-list-row data-list-row col-span-full relative min-h-9", "transition-colors duration-200 rounded-lg"];
14
+ export declare const dataListRowStateStyles: readonly ["hover:bg-surface3 active:bg-surface4", "data-featured:bg-surface3 has-data-featured:bg-surface3 has-data-selected:bg-surface3", "data-featured:hover:bg-surface4 has-data-featured:hover:bg-surface4 has-data-selected:hover:bg-surface4", "data-[variant=error]:bg-notice-destructive/10 has-data-[variant=error]:bg-notice-destructive/10"];
16
15
  /**
17
- * Row controls that stay out of the way until the row is hovered or focused.
16
+ * Layout and focus for the interactive element. The background lives on the
17
+ * outer row element so it sits inside the root surface.
18
+ */
19
+ export declare const dataListRowInteractiveStyles: readonly ["grid grid-cols-subgrid gap-8 px-5 cursor-pointer", "outline-none focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-accent1"];
20
+ export declare const dataListRowStyles: readonly ["grid grid-cols-subgrid gap-8 px-5 cursor-pointer", "outline-none focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-accent1", "group/data-list-row data-list-row col-span-full relative min-h-9 bg-surface2", "transition-colors duration-200", "hover:bg-surface3 active:bg-surface4", "data-featured:bg-surface3 has-data-featured:bg-surface3 has-data-selected:bg-surface3", "data-featured:hover:bg-surface4 has-data-featured:hover:bg-surface4 has-data-selected:hover:bg-surface4", "data-[variant=error]:bg-notice-destructive/10 has-data-[variant=error]:bg-notice-destructive/10"];
21
+ export declare const dataListRowStaticStyles: readonly ["grid grid-cols-subgrid gap-8 px-5", "group/data-list-row data-list-row col-span-full relative min-h-9 bg-surface2", "transition-colors duration-200"];
22
+ /**
23
+ * Row actions that stay out of the way until the row is hovered or focused.
18
24
  * Opacity, not display, so the column keeps its width and nothing shifts. A
19
25
  * coarse pointer never hovers, so there they stay visible — hidden controls
20
26
  * that still take taps would be worse than no reveal at all.
21
27
  */
22
- export declare const dataListRowRevealStyles = "opacity-0 pointer-coarse:opacity-100 group-focus-within/data-list-row:opacity-100 group-hover/data-list-row:opacity-100";
23
- /** Header counterpart of {@link dataListRowRevealStyles}. */
24
- export declare const dataListTopRevealStyles = "opacity-0 pointer-coarse:opacity-100 group-focus-within/data-list-top:opacity-100 group-hover/data-list-top:opacity-100";
28
+ export declare const dataListRowActionRevealStyles = "opacity-0 pointer-coarse:opacity-100 group-focus-within/data-list-row:opacity-100 group-hover/data-list-row:opacity-100";
25
29
  export type DataListSticky = 'start';
26
- export declare const dataListStickyStartStyles: readonly ["data-list-sticky-start sticky left-0 z-10 isolate self-stretch overflow-visible", "after:absolute after:-right-4 after:top-1/2 after:-translate-y-1/2 after:h-4 after:w-px after:bg-border2 after:content-[\"\"] after:pointer-events-none"];
27
- /** Tone for a single row. `error` lays a subtle, theme-aware destructive tint
28
- * over whatever background the row already has. */
30
+ export declare const dataListStickyStartStyles: readonly ["data-list-sticky-start sticky left-0 z-10 isolate self-stretch overflow-visible"];
31
+ /** Tone for a single row. Exposed as `data-variant`; `error` tints the row. */
29
32
  export type DataListRowVariant = 'default' | 'error';
30
- /**
31
- * Per-row tone. Kept as a `.ts` cva (safe to export — no react-refresh concern).
32
- * The error tint uses `!` so it wins over borderless table root-level styling
33
- * (higher-specificity descendant rules) and over the base row hover.
34
- */
35
- export declare const dataListRowVariants: (props?: ({
36
- variant?: "default" | "error" | null | undefined;
37
- } & import('class-variance-authority/types').ClassProp) | undefined) => string;
38
33
  /**
39
34
  * Layout/state modifiers shared by interactive row primitives
40
35
  * (`DataList.RowButton`, `DataList.RowLink`).
41
36
  */
42
37
  export type DataListRowSharedProps = {
43
- /** Row tone — `error` applies a subtle destructive background tint. */
38
+ /** Row tone — exposed on the element as `data-variant`. */
44
39
  variant?: DataListRowVariant;
45
40
  /**
46
41
  * Place the row starting at this column line. Defaults to column 1. Use
@@ -54,8 +49,8 @@ export type DataListRowSharedProps = {
54
49
  */
55
50
  colEnd?: number;
56
51
  /**
57
- * Apply the highlighted background. Use to mark the row that is currently
58
- * featured (e.g. the row whose detail is open in a side panel).
52
+ * Mark the row as featured (e.g. the row whose detail is open in a side
53
+ * panel). Exposed on the element as `data-featured` and tints the row.
59
54
  */
60
55
  featured?: boolean;
61
56
  };
@@ -1,2 +1,2 @@
1
1
  import { EnvironmentVariablesEditorReadOnlyListProps } from './environment-variables-editor.types';
2
- export declare function EnvironmentVariablesEditorReadOnlyList({ className, children, columns, header, showHeader, showIcon, nameLabel, valueLabel, updatedAtLabel, variant, scrollRef, ...props }: EnvironmentVariablesEditorReadOnlyListProps): import("react").JSX.Element;
2
+ export declare function EnvironmentVariablesEditorReadOnlyList({ className, children, columns, header, showHeader, showIcon, nameLabel, valueLabel, updatedAtLabel, scrollRef, ...props }: EnvironmentVariablesEditorReadOnlyListProps): import("react").JSX.Element;
@@ -4,5 +4,4 @@ declare const meta: Meta<typeof LogsDataList>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof LogsDataList>;
6
6
  export declare const Populated: Story;
7
- export declare const NoMatches: Story;
8
7
  export declare const Loading: Story;
@@ -5,6 +5,29 @@ export interface ThemeToggleOption {
5
5
  label: string;
6
6
  icon: React.ReactNode;
7
7
  }
8
+ declare const SIZE_CONFIG: {
9
+ readonly md: {
10
+ readonly itemGap: 2;
11
+ readonly itemWidth: 28;
12
+ readonly root: "gap-0.5 p-0.5";
13
+ readonly indicator: "inset-y-0.5 left-0.5";
14
+ readonly item: "h-6 [&_svg]:size-3.5";
15
+ };
16
+ readonly xs: {
17
+ readonly itemGap: 1;
18
+ readonly itemWidth: 20;
19
+ readonly root: "gap-px p-px";
20
+ readonly indicator: "inset-y-px left-px";
21
+ readonly item: "h-4 [&_svg]:h-icon-sm [&_svg]:w-icon-sm";
22
+ };
23
+ readonly sm: {
24
+ readonly itemGap: 1;
25
+ readonly itemWidth: 24;
26
+ readonly root: "gap-px p-px";
27
+ readonly indicator: "inset-y-px left-px";
28
+ readonly item: "h-5 [&_svg]:h-icon-sm [&_svg]:w-icon-sm";
29
+ };
30
+ };
8
31
  type RadioRootProps = Omit<RadioGroupPrimitive.Props, 'value' | 'onChange' | 'onValueChange' | 'defaultValue' | 'className'> & {
9
32
  className?: string;
10
33
  };
@@ -18,6 +41,7 @@ type UncontrolledProps = {
18
41
  };
19
42
  export type ThemeToggleProps = RadioRootProps & {
20
43
  options?: ReadonlyArray<ThemeToggleOption>;
44
+ size?: keyof typeof SIZE_CONFIG;
21
45
  } & (ControlledProps | UncontrolledProps);
22
- export declare const ThemeToggle: ({ value, onChange, options, className, "aria-label": ariaLabel, ...rest }: ThemeToggleProps) => import("react").JSX.Element;
46
+ export declare const ThemeToggle: ({ value, onChange, options, size, className, "aria-label": ariaLabel, ...rest }: ThemeToggleProps) => import("react").JSX.Element;
23
47
  export {};
@@ -4,4 +4,7 @@ declare const meta: Meta<typeof ThemeToggle>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof ThemeToggle>;
6
6
  export declare const Default: Story;
7
+ export declare const ExtraSmall: Story;
8
+ export declare const Small: Story;
9
+ export declare const Sizes: Story;
7
10
  export declare const Controlled: Story;
@@ -0,0 +1 @@
1
+ export declare function useDebouncedValue<T>(value: T, delay: number): T;