@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
@@ -2,7 +2,7 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { c as cn } from '../cn-B4oPhFx9.js';
3
3
  import { MenuIcon, PanelRightIcon } from 'lucide-react';
4
4
  import React__default, { useRef, useEffect, useCallback, useId } from 'react';
5
- import { S as ScrollArea } from '../scroll-area-DVSQTnjk.js';
5
+ import { S as ScrollArea } from '../scroll-area-BiHnOfzg.js';
6
6
  import { VisuallyHidden } from '@radix-ui/react-visually-hidden';
7
7
  import { c as cva } from '../index-DsNrjFJd.js';
8
8
  import { T as Tooltip, c as TooltipTrigger, a as TooltipContent } from '../tooltip-Bi0pDO5P.js';
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
- const noDataPageLayout = require('../no-data-page-layout-CBJ50ULk.cjs');
5
+ const noDataPageLayout = require('../no-data-page-layout-DxgToazD.cjs');
6
6
  const pageHeadingContext = require('../page-heading-context-Du-CpxAx.cjs');
7
7
 
8
8
 
@@ -1,3 +1,3 @@
1
- export { N as NoDataPageLayout, P as PageLayout } from '../no-data-page-layout-CkhD1Xwb.js';
1
+ export { N as NoDataPageLayout, P as PageLayout } from '../no-data-page-layout-BB6l1JBu.js';
2
2
  export { P as PageHeadingContext, u as usePageHeading } from '../page-heading-context-D3yjYoJE.js';
3
3
  //# sourceMappingURL=PageLayout.es.js.map
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
- const scrollArea = require('../scroll-area-D_-TyC0c.cjs');
5
+ const scrollArea = require('../scroll-area-B1vdOFuC.cjs');
6
6
 
7
7
 
8
8
 
@@ -1,2 +1,2 @@
1
- export { S as ScrollArea, a as ScrollBar } from '../scroll-area-DVSQTnjk.js';
1
+ export { S as ScrollArea, a as ScrollBar } from '../scroll-area-BiHnOfzg.js';
2
2
  //# sourceMappingURL=ScrollArea.es.js.map
@@ -15,12 +15,34 @@ const DEFAULT_OPTIONS = [
15
15
  { value: "light", label: "Light", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sun, {}) },
16
16
  { value: "dark", label: "Dark", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Moon, {}) }
17
17
  ];
18
- const ITEM_WIDTH = 28;
19
- const ITEM_GAP = 2;
18
+ const SIZE_CONFIG = {
19
+ md: {
20
+ itemGap: 2,
21
+ itemWidth: 28,
22
+ root: "gap-0.5 p-0.5",
23
+ indicator: "inset-y-0.5 left-0.5",
24
+ item: "h-6 [&_svg]:size-3.5"
25
+ },
26
+ xs: {
27
+ itemGap: 1,
28
+ itemWidth: 20,
29
+ root: "gap-px p-px",
30
+ indicator: "inset-y-px left-px",
31
+ item: "h-4 [&_svg]:h-icon-sm [&_svg]:w-icon-sm"
32
+ },
33
+ sm: {
34
+ itemGap: 1,
35
+ itemWidth: 24,
36
+ root: "gap-px p-px",
37
+ indicator: "inset-y-px left-px",
38
+ item: "h-5 [&_svg]:h-icon-sm [&_svg]:w-icon-sm"
39
+ }
40
+ };
20
41
  const ThemeToggle = ({
21
42
  value,
22
43
  onChange,
23
44
  options = DEFAULT_OPTIONS,
45
+ size = "md",
24
46
  className,
25
47
  "aria-label": ariaLabel = "Theme",
26
48
  ...rest
@@ -37,7 +59,8 @@ const ThemeToggle = ({
37
59
  0,
38
60
  options.findIndex((option) => option.value === effectiveCurrent)
39
61
  );
40
- const indicatorOffset = activeIndex * (ITEM_WIDTH + ITEM_GAP);
62
+ const sizeConfig = SIZE_CONFIG[size];
63
+ const indicatorOffset = activeIndex * (sizeConfig.itemWidth + sizeConfig.itemGap);
41
64
  return /* @__PURE__ */ jsxRuntime.jsxs(
42
65
  radioGroup.RadioGroup,
43
66
  {
@@ -46,7 +69,8 @@ const ThemeToggle = ({
46
69
  onValueChange: handleChange,
47
70
  "aria-label": ariaLabel,
48
71
  className: utils_cn.cn(
49
- "relative inline-flex w-fit items-center gap-0.5 rounded-full border border-border1 bg-surface3 p-0.5",
72
+ "relative inline-flex w-fit items-center rounded-full border border-border1 bg-surface3",
73
+ sizeConfig.root,
50
74
  className
51
75
  ),
52
76
  children: [
@@ -55,10 +79,11 @@ const ThemeToggle = ({
55
79
  {
56
80
  "aria-hidden": "true",
57
81
  className: utils_cn.cn(
58
- "pointer-events-none absolute inset-y-0.5 left-0.5 rounded-full bg-surface5 motion-reduce:transition-none",
59
- primitives_transitions.transitions.transform
82
+ "pointer-events-none absolute rounded-full bg-surface5 motion-reduce:transition-none",
83
+ primitives_transitions.transitions.transform,
84
+ sizeConfig.indicator
60
85
  ),
61
- style: { width: ITEM_WIDTH, transform: `translateX(${indicatorOffset}px)` }
86
+ style: { width: sizeConfig.itemWidth, transform: `translateX(${indicatorOffset}px)` }
62
87
  }
63
88
  ),
64
89
  options.map((option) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -66,11 +91,12 @@ const ThemeToggle = ({
66
91
  {
67
92
  value: option.value,
68
93
  "aria-label": option.label,
69
- style: { width: ITEM_WIDTH },
94
+ style: { width: sizeConfig.itemWidth },
70
95
  className: utils_cn.cn(
71
- "relative inline-flex h-6 cursor-pointer items-center justify-center rounded-full",
96
+ "relative inline-flex cursor-pointer items-center justify-center rounded-full",
72
97
  // Base UI exposes `data-checked` instead of Radix's `data-state="checked"`.
73
- "text-icon3 hover:text-icon6 data-[checked]:text-icon6 [&_svg]:size-3.5",
98
+ "text-icon3 hover:text-icon6 data-[checked]:text-icon6",
99
+ sizeConfig.item,
74
100
  "focus-visible:outline-hidden",
75
101
  "active:scale-90 motion-reduce:transition-none",
76
102
  primitives_transitions.transitions.colors,
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeToggle.cjs.js","sources":["../../src/ds/components/ThemeToggle/theme-toggle.tsx"],"sourcesContent":["import { Radio as RadioPrimitive } from '@base-ui/react/radio';\nimport { RadioGroup as RadioGroupPrimitive } from '@base-ui/react/radio-group';\nimport { Monitor, Moon, Sun } from 'lucide-react';\n\nimport { useTheme } from '../ThemeProvider';\nimport type { Theme } from '../ThemeProvider/theme-context';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport interface ThemeToggleOption {\n value: Theme;\n label: string;\n icon: React.ReactNode;\n}\n\nconst DEFAULT_OPTIONS: ReadonlyArray<ThemeToggleOption> = [\n { value: 'system', label: 'System', icon: <Monitor /> },\n { value: 'light', label: 'Light', icon: <Sun /> },\n { value: 'dark', label: 'Dark', icon: <Moon /> },\n];\n\nconst ITEM_WIDTH = 28;\nconst ITEM_GAP = 2;\n\ntype RadioRootProps = Omit<\n RadioGroupPrimitive.Props,\n 'value' | 'onChange' | 'onValueChange' | 'defaultValue' | 'className'\n> & {\n className?: string;\n};\n\ntype ControlledProps = { value: Theme; onChange: (next: Theme) => void };\ntype UncontrolledProps = { value?: undefined; onChange?: undefined };\n\nexport type ThemeToggleProps = RadioRootProps & {\n options?: ReadonlyArray<ThemeToggleOption>;\n} & (ControlledProps | UncontrolledProps);\n\nexport const ThemeToggle = ({\n value,\n onChange,\n options = DEFAULT_OPTIONS,\n className,\n 'aria-label': ariaLabel = 'Theme',\n ...rest\n}: ThemeToggleProps) => {\n const { theme, setTheme } = useTheme();\n const current = value ?? theme;\n const commit = onChange ?? setTheme;\n const effectiveCurrent = options.some(option => option.value === current) ? current : (options[0]?.value ?? 'system');\n\n const handleChange = (next: unknown) => {\n const match = options.find(opt => opt.value === next);\n if (match) commit(match.value);\n };\n\n const activeIndex = Math.max(\n 0,\n options.findIndex(option => option.value === effectiveCurrent),\n );\n const indicatorOffset = activeIndex * (ITEM_WIDTH + ITEM_GAP);\n\n return (\n <RadioGroupPrimitive\n {...rest}\n value={effectiveCurrent}\n onValueChange={handleChange}\n aria-label={ariaLabel}\n className={cn(\n 'relative inline-flex w-fit items-center gap-0.5 rounded-full border border-border1 bg-surface3 p-0.5',\n className,\n )}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute inset-y-0.5 left-0.5 rounded-full bg-surface5 motion-reduce:transition-none',\n transitions.transform,\n )}\n style={{ width: ITEM_WIDTH, transform: `translateX(${indicatorOffset}px)` }}\n />\n {options.map(option => (\n <RadioPrimitive.Root\n key={option.value}\n value={option.value}\n aria-label={option.label}\n style={{ width: ITEM_WIDTH }}\n className={cn(\n 'relative inline-flex h-6 cursor-pointer items-center justify-center rounded-full',\n // Base UI exposes `data-checked` instead of Radix's `data-state=\"checked\"`.\n 'text-icon3 hover:text-icon6 data-[checked]:text-icon6 [&_svg]:size-3.5',\n 'focus-visible:outline-hidden',\n 'active:scale-90 motion-reduce:transition-none',\n transitions.colors,\n transitions.transform,\n )}\n >\n <span aria-hidden=\"true\" className=\"pointer-events-none inline-flex items-center justify-center\">\n {option.icon}\n </span>\n </RadioPrimitive.Root>\n ))}\n </RadioGroupPrimitive>\n );\n};\n"],"names":["jsx","Monitor","Sun","Moon","useTheme","jsxs","RadioGroupPrimitive","cn","transitions","RadioPrimitive"],"mappings":"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"}
1
+ {"version":3,"file":"ThemeToggle.cjs.js","sources":["../../src/ds/components/ThemeToggle/theme-toggle.tsx"],"sourcesContent":["import { Radio as RadioPrimitive } from '@base-ui/react/radio';\nimport { RadioGroup as RadioGroupPrimitive } from '@base-ui/react/radio-group';\nimport { Monitor, Moon, Sun } from 'lucide-react';\n\nimport { useTheme } from '../ThemeProvider';\nimport type { Theme } from '../ThemeProvider/theme-context';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport interface ThemeToggleOption {\n value: Theme;\n label: string;\n icon: React.ReactNode;\n}\n\nconst DEFAULT_OPTIONS: ReadonlyArray<ThemeToggleOption> = [\n { value: 'system', label: 'System', icon: <Monitor /> },\n { value: 'light', label: 'Light', icon: <Sun /> },\n { value: 'dark', label: 'Dark', icon: <Moon /> },\n];\n\nconst SIZE_CONFIG = {\n md: {\n itemGap: 2,\n itemWidth: 28,\n root: 'gap-0.5 p-0.5',\n indicator: 'inset-y-0.5 left-0.5',\n item: 'h-6 [&_svg]:size-3.5',\n },\n xs: {\n itemGap: 1,\n itemWidth: 20,\n root: 'gap-px p-px',\n indicator: 'inset-y-px left-px',\n item: 'h-4 [&_svg]:h-icon-sm [&_svg]:w-icon-sm',\n },\n sm: {\n itemGap: 1,\n itemWidth: 24,\n root: 'gap-px p-px',\n indicator: 'inset-y-px left-px',\n item: 'h-5 [&_svg]:h-icon-sm [&_svg]:w-icon-sm',\n },\n} as const;\n\ntype RadioRootProps = Omit<\n RadioGroupPrimitive.Props,\n 'value' | 'onChange' | 'onValueChange' | 'defaultValue' | 'className'\n> & {\n className?: string;\n};\n\ntype ControlledProps = { value: Theme; onChange: (next: Theme) => void };\ntype UncontrolledProps = { value?: undefined; onChange?: undefined };\n\nexport type ThemeToggleProps = RadioRootProps & {\n options?: ReadonlyArray<ThemeToggleOption>;\n size?: keyof typeof SIZE_CONFIG;\n} & (ControlledProps | UncontrolledProps);\n\nexport const ThemeToggle = ({\n value,\n onChange,\n options = DEFAULT_OPTIONS,\n size = 'md',\n className,\n 'aria-label': ariaLabel = 'Theme',\n ...rest\n}: ThemeToggleProps) => {\n const { theme, setTheme } = useTheme();\n const current = value ?? theme;\n const commit = onChange ?? setTheme;\n const effectiveCurrent = options.some(option => option.value === current) ? current : (options[0]?.value ?? 'system');\n\n const handleChange = (next: unknown) => {\n const match = options.find(opt => opt.value === next);\n if (match) commit(match.value);\n };\n\n const activeIndex = Math.max(\n 0,\n options.findIndex(option => option.value === effectiveCurrent),\n );\n const sizeConfig = SIZE_CONFIG[size];\n const indicatorOffset = activeIndex * (sizeConfig.itemWidth + sizeConfig.itemGap);\n\n return (\n <RadioGroupPrimitive\n {...rest}\n value={effectiveCurrent}\n onValueChange={handleChange}\n aria-label={ariaLabel}\n className={cn(\n 'relative inline-flex w-fit items-center rounded-full border border-border1 bg-surface3',\n sizeConfig.root,\n className,\n )}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute rounded-full bg-surface5 motion-reduce:transition-none',\n transitions.transform,\n sizeConfig.indicator,\n )}\n style={{ width: sizeConfig.itemWidth, transform: `translateX(${indicatorOffset}px)` }}\n />\n {options.map(option => (\n <RadioPrimitive.Root\n key={option.value}\n value={option.value}\n aria-label={option.label}\n style={{ width: sizeConfig.itemWidth }}\n className={cn(\n 'relative inline-flex cursor-pointer items-center justify-center rounded-full',\n // Base UI exposes `data-checked` instead of Radix's `data-state=\"checked\"`.\n 'text-icon3 hover:text-icon6 data-[checked]:text-icon6',\n sizeConfig.item,\n 'focus-visible:outline-hidden',\n 'active:scale-90 motion-reduce:transition-none',\n transitions.colors,\n transitions.transform,\n )}\n >\n <span aria-hidden=\"true\" className=\"pointer-events-none inline-flex items-center justify-center\">\n {option.icon}\n </span>\n </RadioPrimitive.Root>\n ))}\n </RadioGroupPrimitive>\n );\n};\n"],"names":["jsx","Monitor","Sun","Moon","useTheme","jsxs","RadioGroupPrimitive","cn","transitions","RadioPrimitive"],"mappings":"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"}
@@ -11,12 +11,34 @@ const DEFAULT_OPTIONS = [
11
11
  { value: "light", label: "Light", icon: /* @__PURE__ */ jsx(Sun, {}) },
12
12
  { value: "dark", label: "Dark", icon: /* @__PURE__ */ jsx(Moon, {}) }
13
13
  ];
14
- const ITEM_WIDTH = 28;
15
- const ITEM_GAP = 2;
14
+ const SIZE_CONFIG = {
15
+ md: {
16
+ itemGap: 2,
17
+ itemWidth: 28,
18
+ root: "gap-0.5 p-0.5",
19
+ indicator: "inset-y-0.5 left-0.5",
20
+ item: "h-6 [&_svg]:size-3.5"
21
+ },
22
+ xs: {
23
+ itemGap: 1,
24
+ itemWidth: 20,
25
+ root: "gap-px p-px",
26
+ indicator: "inset-y-px left-px",
27
+ item: "h-4 [&_svg]:h-icon-sm [&_svg]:w-icon-sm"
28
+ },
29
+ sm: {
30
+ itemGap: 1,
31
+ itemWidth: 24,
32
+ root: "gap-px p-px",
33
+ indicator: "inset-y-px left-px",
34
+ item: "h-5 [&_svg]:h-icon-sm [&_svg]:w-icon-sm"
35
+ }
36
+ };
16
37
  const ThemeToggle = ({
17
38
  value,
18
39
  onChange,
19
40
  options = DEFAULT_OPTIONS,
41
+ size = "md",
20
42
  className,
21
43
  "aria-label": ariaLabel = "Theme",
22
44
  ...rest
@@ -33,7 +55,8 @@ const ThemeToggle = ({
33
55
  0,
34
56
  options.findIndex((option) => option.value === effectiveCurrent)
35
57
  );
36
- const indicatorOffset = activeIndex * (ITEM_WIDTH + ITEM_GAP);
58
+ const sizeConfig = SIZE_CONFIG[size];
59
+ const indicatorOffset = activeIndex * (sizeConfig.itemWidth + sizeConfig.itemGap);
37
60
  return /* @__PURE__ */ jsxs(
38
61
  RadioGroup,
39
62
  {
@@ -42,7 +65,8 @@ const ThemeToggle = ({
42
65
  onValueChange: handleChange,
43
66
  "aria-label": ariaLabel,
44
67
  className: cn(
45
- "relative inline-flex w-fit items-center gap-0.5 rounded-full border border-border1 bg-surface3 p-0.5",
68
+ "relative inline-flex w-fit items-center rounded-full border border-border1 bg-surface3",
69
+ sizeConfig.root,
46
70
  className
47
71
  ),
48
72
  children: [
@@ -51,10 +75,11 @@ const ThemeToggle = ({
51
75
  {
52
76
  "aria-hidden": "true",
53
77
  className: cn(
54
- "pointer-events-none absolute inset-y-0.5 left-0.5 rounded-full bg-surface5 motion-reduce:transition-none",
55
- transitions.transform
78
+ "pointer-events-none absolute rounded-full bg-surface5 motion-reduce:transition-none",
79
+ transitions.transform,
80
+ sizeConfig.indicator
56
81
  ),
57
- style: { width: ITEM_WIDTH, transform: `translateX(${indicatorOffset}px)` }
82
+ style: { width: sizeConfig.itemWidth, transform: `translateX(${indicatorOffset}px)` }
58
83
  }
59
84
  ),
60
85
  options.map((option) => /* @__PURE__ */ jsx(
@@ -62,11 +87,12 @@ const ThemeToggle = ({
62
87
  {
63
88
  value: option.value,
64
89
  "aria-label": option.label,
65
- style: { width: ITEM_WIDTH },
90
+ style: { width: sizeConfig.itemWidth },
66
91
  className: cn(
67
- "relative inline-flex h-6 cursor-pointer items-center justify-center rounded-full",
92
+ "relative inline-flex cursor-pointer items-center justify-center rounded-full",
68
93
  // Base UI exposes `data-checked` instead of Radix's `data-state="checked"`.
69
- "text-icon3 hover:text-icon6 data-[checked]:text-icon6 [&_svg]:size-3.5",
94
+ "text-icon3 hover:text-icon6 data-[checked]:text-icon6",
95
+ sizeConfig.item,
70
96
  "focus-visible:outline-hidden",
71
97
  "active:scale-90 motion-reduce:transition-none",
72
98
  transitions.colors,
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeToggle.es.js","sources":["../../src/ds/components/ThemeToggle/theme-toggle.tsx"],"sourcesContent":["import { Radio as RadioPrimitive } from '@base-ui/react/radio';\nimport { RadioGroup as RadioGroupPrimitive } from '@base-ui/react/radio-group';\nimport { Monitor, Moon, Sun } from 'lucide-react';\n\nimport { useTheme } from '../ThemeProvider';\nimport type { Theme } from '../ThemeProvider/theme-context';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport interface ThemeToggleOption {\n value: Theme;\n label: string;\n icon: React.ReactNode;\n}\n\nconst DEFAULT_OPTIONS: ReadonlyArray<ThemeToggleOption> = [\n { value: 'system', label: 'System', icon: <Monitor /> },\n { value: 'light', label: 'Light', icon: <Sun /> },\n { value: 'dark', label: 'Dark', icon: <Moon /> },\n];\n\nconst ITEM_WIDTH = 28;\nconst ITEM_GAP = 2;\n\ntype RadioRootProps = Omit<\n RadioGroupPrimitive.Props,\n 'value' | 'onChange' | 'onValueChange' | 'defaultValue' | 'className'\n> & {\n className?: string;\n};\n\ntype ControlledProps = { value: Theme; onChange: (next: Theme) => void };\ntype UncontrolledProps = { value?: undefined; onChange?: undefined };\n\nexport type ThemeToggleProps = RadioRootProps & {\n options?: ReadonlyArray<ThemeToggleOption>;\n} & (ControlledProps | UncontrolledProps);\n\nexport const ThemeToggle = ({\n value,\n onChange,\n options = DEFAULT_OPTIONS,\n className,\n 'aria-label': ariaLabel = 'Theme',\n ...rest\n}: ThemeToggleProps) => {\n const { theme, setTheme } = useTheme();\n const current = value ?? theme;\n const commit = onChange ?? setTheme;\n const effectiveCurrent = options.some(option => option.value === current) ? current : (options[0]?.value ?? 'system');\n\n const handleChange = (next: unknown) => {\n const match = options.find(opt => opt.value === next);\n if (match) commit(match.value);\n };\n\n const activeIndex = Math.max(\n 0,\n options.findIndex(option => option.value === effectiveCurrent),\n );\n const indicatorOffset = activeIndex * (ITEM_WIDTH + ITEM_GAP);\n\n return (\n <RadioGroupPrimitive\n {...rest}\n value={effectiveCurrent}\n onValueChange={handleChange}\n aria-label={ariaLabel}\n className={cn(\n 'relative inline-flex w-fit items-center gap-0.5 rounded-full border border-border1 bg-surface3 p-0.5',\n className,\n )}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute inset-y-0.5 left-0.5 rounded-full bg-surface5 motion-reduce:transition-none',\n transitions.transform,\n )}\n style={{ width: ITEM_WIDTH, transform: `translateX(${indicatorOffset}px)` }}\n />\n {options.map(option => (\n <RadioPrimitive.Root\n key={option.value}\n value={option.value}\n aria-label={option.label}\n style={{ width: ITEM_WIDTH }}\n className={cn(\n 'relative inline-flex h-6 cursor-pointer items-center justify-center rounded-full',\n // Base UI exposes `data-checked` instead of Radix's `data-state=\"checked\"`.\n 'text-icon3 hover:text-icon6 data-[checked]:text-icon6 [&_svg]:size-3.5',\n 'focus-visible:outline-hidden',\n 'active:scale-90 motion-reduce:transition-none',\n transitions.colors,\n transitions.transform,\n )}\n >\n <span aria-hidden=\"true\" className=\"pointer-events-none inline-flex items-center justify-center\">\n {option.icon}\n </span>\n </RadioPrimitive.Root>\n ))}\n </RadioGroupPrimitive>\n );\n};\n"],"names":["RadioGroupPrimitive","RadioPrimitive"],"mappings":"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"}
1
+ {"version":3,"file":"ThemeToggle.es.js","sources":["../../src/ds/components/ThemeToggle/theme-toggle.tsx"],"sourcesContent":["import { Radio as RadioPrimitive } from '@base-ui/react/radio';\nimport { RadioGroup as RadioGroupPrimitive } from '@base-ui/react/radio-group';\nimport { Monitor, Moon, Sun } from 'lucide-react';\n\nimport { useTheme } from '../ThemeProvider';\nimport type { Theme } from '../ThemeProvider/theme-context';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport interface ThemeToggleOption {\n value: Theme;\n label: string;\n icon: React.ReactNode;\n}\n\nconst DEFAULT_OPTIONS: ReadonlyArray<ThemeToggleOption> = [\n { value: 'system', label: 'System', icon: <Monitor /> },\n { value: 'light', label: 'Light', icon: <Sun /> },\n { value: 'dark', label: 'Dark', icon: <Moon /> },\n];\n\nconst SIZE_CONFIG = {\n md: {\n itemGap: 2,\n itemWidth: 28,\n root: 'gap-0.5 p-0.5',\n indicator: 'inset-y-0.5 left-0.5',\n item: 'h-6 [&_svg]:size-3.5',\n },\n xs: {\n itemGap: 1,\n itemWidth: 20,\n root: 'gap-px p-px',\n indicator: 'inset-y-px left-px',\n item: 'h-4 [&_svg]:h-icon-sm [&_svg]:w-icon-sm',\n },\n sm: {\n itemGap: 1,\n itemWidth: 24,\n root: 'gap-px p-px',\n indicator: 'inset-y-px left-px',\n item: 'h-5 [&_svg]:h-icon-sm [&_svg]:w-icon-sm',\n },\n} as const;\n\ntype RadioRootProps = Omit<\n RadioGroupPrimitive.Props,\n 'value' | 'onChange' | 'onValueChange' | 'defaultValue' | 'className'\n> & {\n className?: string;\n};\n\ntype ControlledProps = { value: Theme; onChange: (next: Theme) => void };\ntype UncontrolledProps = { value?: undefined; onChange?: undefined };\n\nexport type ThemeToggleProps = RadioRootProps & {\n options?: ReadonlyArray<ThemeToggleOption>;\n size?: keyof typeof SIZE_CONFIG;\n} & (ControlledProps | UncontrolledProps);\n\nexport const ThemeToggle = ({\n value,\n onChange,\n options = DEFAULT_OPTIONS,\n size = 'md',\n className,\n 'aria-label': ariaLabel = 'Theme',\n ...rest\n}: ThemeToggleProps) => {\n const { theme, setTheme } = useTheme();\n const current = value ?? theme;\n const commit = onChange ?? setTheme;\n const effectiveCurrent = options.some(option => option.value === current) ? current : (options[0]?.value ?? 'system');\n\n const handleChange = (next: unknown) => {\n const match = options.find(opt => opt.value === next);\n if (match) commit(match.value);\n };\n\n const activeIndex = Math.max(\n 0,\n options.findIndex(option => option.value === effectiveCurrent),\n );\n const sizeConfig = SIZE_CONFIG[size];\n const indicatorOffset = activeIndex * (sizeConfig.itemWidth + sizeConfig.itemGap);\n\n return (\n <RadioGroupPrimitive\n {...rest}\n value={effectiveCurrent}\n onValueChange={handleChange}\n aria-label={ariaLabel}\n className={cn(\n 'relative inline-flex w-fit items-center rounded-full border border-border1 bg-surface3',\n sizeConfig.root,\n className,\n )}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute rounded-full bg-surface5 motion-reduce:transition-none',\n transitions.transform,\n sizeConfig.indicator,\n )}\n style={{ width: sizeConfig.itemWidth, transform: `translateX(${indicatorOffset}px)` }}\n />\n {options.map(option => (\n <RadioPrimitive.Root\n key={option.value}\n value={option.value}\n aria-label={option.label}\n style={{ width: sizeConfig.itemWidth }}\n className={cn(\n 'relative inline-flex cursor-pointer items-center justify-center rounded-full',\n // Base UI exposes `data-checked` instead of Radix's `data-state=\"checked\"`.\n 'text-icon3 hover:text-icon6 data-[checked]:text-icon6',\n sizeConfig.item,\n 'focus-visible:outline-hidden',\n 'active:scale-90 motion-reduce:transition-none',\n transitions.colors,\n transitions.transform,\n )}\n >\n <span aria-hidden=\"true\" className=\"pointer-events-none inline-flex items-center justify-center\">\n {option.icon}\n </span>\n </RadioPrimitive.Root>\n ))}\n </RadioGroupPrimitive>\n );\n};\n"],"names":["RadioGroupPrimitive","RadioPrimitive"],"mappings":"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"}
@@ -6,7 +6,7 @@ const jsxRuntime = require('react/jsx-runtime');
6
6
  const lucideReact = require('lucide-react');
7
7
  const React = require('react');
8
8
  const messageScrollerHooks = require('../message-scroller-hooks-BxAf8k0Y.cjs');
9
- const scrollArea = require('../scroll-area-D_-TyC0c.cjs');
9
+ const scrollArea = require('../scroll-area-B1vdOFuC.cjs');
10
10
  const hooks_useMeasuredAutoHeight = require('../hooks/use-measured-auto-height.cjs.js');
11
11
  const utils_cn = require('../cn-DCPcv4xv.cjs');
12
12
 
@@ -2,7 +2,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { FileText } from 'lucide-react';
3
3
  import * as React from 'react';
4
4
  import { c as useOptionalMessageScroller, e as useOptionalMessageScrollerVisibility } from '../message-scroller-hooks-BEeE1WE6.js';
5
- import { S as ScrollArea } from '../scroll-area-DVSQTnjk.js';
5
+ import { S as ScrollArea } from '../scroll-area-BiHnOfzg.js';
6
6
  import { useMeasuredAutoHeight } from '../hooks/use-measured-auto-height.es.js';
7
7
  import { c as cn } from '../cn-B4oPhFx9.js';
8
8
 
@@ -6,7 +6,7 @@ const jsxRuntime = require('react/jsx-runtime');
6
6
  const lucideReact = require('lucide-react');
7
7
  const React = require('react');
8
8
  const collapsible = require('../../collapsible-CLPRijls.cjs');
9
- const scrollArea = require('../../scroll-area-D_-TyC0c.cjs');
9
+ const scrollArea = require('../../scroll-area-B1vdOFuC.cjs');
10
10
  const tooltip = require('../../tooltip-DIi_oOxO.cjs');
11
11
  const utils_cn = require('../../cn-DCPcv4xv.cjs');
12
12
 
@@ -2,7 +2,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { ChevronRight, ListChecks, Circle, Loader2, CheckCircle2 } from 'lucide-react';
3
3
  import { useState } from 'react';
4
4
  import { C as Collapsible, a as CollapsibleContent, b as CollapsibleTrigger } from '../../collapsible-igib7hFh.js';
5
- import { S as ScrollArea } from '../../scroll-area-DVSQTnjk.js';
5
+ import { S as ScrollArea } from '../../scroll-area-BiHnOfzg.js';
6
6
  import { b as TooltipProvider, T as Tooltip, c as TooltipTrigger, a as TooltipContent } from '../../tooltip-Bi0pDO5P.js';
7
7
  import { c as cn } from '../../cn-B4oPhFx9.js';
8
8
 
@@ -0,0 +1,131 @@
1
+ 'use strict';
2
+
3
+ const dataListTopCell = require('./data-list-top-cell-CIs1L8gy.cjs');
4
+ const jsxRuntime = require('react/jsx-runtime');
5
+ const lucideReact = require('lucide-react');
6
+ const Button = require('./Button-D10WB4vc.cjs');
7
+ const React = require('react');
8
+ const utils_cn = require('./cn-DCPcv4xv.cjs');
9
+
10
+ function DataListPagination({ currentPage, hasMore, onNextPage, onPrevPage }) {
11
+ const showNavigation = typeof currentPage === "number" && currentPage > 0 || hasMore;
12
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-ui-md text-neutral3 col-span-full flex items-center justify-center gap-8 py-4", children: [
13
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
14
+ "Page ",
15
+ /* @__PURE__ */ jsxRuntime.jsx("b", { children: currentPage ? currentPage + 1 : "1" })
16
+ ] }),
17
+ showNavigation && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-4", children: [
18
+ typeof currentPage === "number" && currentPage > 0 && /* @__PURE__ */ jsxRuntime.jsxs(Button.Button, { type: "button", variant: "outline", size: "sm", onClick: onPrevPage, children: [
19
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowLeftIcon, {}),
20
+ "Previous"
21
+ ] }),
22
+ hasMore && /* @__PURE__ */ jsxRuntime.jsxs(Button.Button, { type: "button", variant: "outline", size: "sm", onClick: onNextPage, children: [
23
+ "Next",
24
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRightIcon, {})
25
+ ] })
26
+ ] })
27
+ ] });
28
+ }
29
+
30
+ const DataListRowStatic = React.forwardRef(
31
+ ({ children, className, colStart, colEnd, featured, variant, style, ...rest }, ref) => {
32
+ const isWrapped = dataListTopCell.useDataListRowWrapperContext();
33
+ const hasColumnOverride = colStart !== void 0 || colEnd !== void 0;
34
+ const resolvedStyle = hasColumnOverride ? { ...style, gridColumn: `${colStart ?? 1} / ${colEnd ?? -1}` } : style;
35
+ return /* @__PURE__ */ jsxRuntime.jsx(
36
+ "div",
37
+ {
38
+ ref,
39
+ className: utils_cn.cn(
40
+ isWrapped ? "grid grid-cols-subgrid gap-8 px-5 transition-colors duration-200" : dataListTopCell.dataListRowStaticStyles,
41
+ className
42
+ ),
43
+ style: resolvedStyle,
44
+ "data-featured": featured || void 0,
45
+ "data-variant": variant ?? "default",
46
+ ...rest,
47
+ children
48
+ }
49
+ );
50
+ }
51
+ );
52
+ DataListRowStatic.displayName = "DataListRowStatic";
53
+
54
+ const DataListSubheader = React.forwardRef(
55
+ ({ children, className, ...rest }, ref) => {
56
+ return /* @__PURE__ */ jsxRuntime.jsx(
57
+ "div",
58
+ {
59
+ ref,
60
+ className: utils_cn.cn(
61
+ "data-list-subheader relative isolate col-span-full px-5 py-3 text-ui-md font-medium text-neutral4",
62
+ "bg-(--data-list-background)",
63
+ className
64
+ ),
65
+ ...rest,
66
+ children
67
+ }
68
+ );
69
+ }
70
+ );
71
+ DataListSubheader.displayName = "DataListSubheader";
72
+
73
+ function DataListSubHeading({ children, className }) {
74
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: utils_cn.cn("text-ui-sm font-normal text-neutral2", className), children });
75
+ }
76
+
77
+ const DataListTopCells = React.forwardRef(
78
+ ({ children, className, flushLeft, colStart, style, ...rest }, ref) => {
79
+ return /* @__PURE__ */ jsxRuntime.jsx(
80
+ "div",
81
+ {
82
+ ref,
83
+ className: utils_cn.cn(
84
+ "pointer-events-none grid grid-cols-subgrid gap-8 px-5 [&>*]:pointer-events-auto",
85
+ !colStart && "col-span-full",
86
+ flushLeft && "pl-0!",
87
+ className
88
+ ),
89
+ style: colStart ? { ...style, gridColumn: `${colStart} / -1` } : style,
90
+ ...rest,
91
+ children
92
+ }
93
+ );
94
+ }
95
+ );
96
+ DataListTopCells.displayName = "DataListTopCells";
97
+
98
+ const DataList = Object.assign(dataListTopCell.DataListRoot, {
99
+ Top: dataListTopCell.DataListTop,
100
+ TopCells: DataListTopCells,
101
+ TopCell: dataListTopCell.DataListTopCell,
102
+ TopCellWithTooltip: dataListTopCell.DataListTopCellWithTooltip,
103
+ TopCellSmart: dataListTopCell.DataListTopCellSmart,
104
+ RowWrapper: dataListTopCell.DataListRowWrapper,
105
+ RowButton: dataListTopCell.DataListRowButton,
106
+ RowLink: dataListTopCell.DataListRowLink,
107
+ RowStatic: DataListRowStatic,
108
+ Cell: dataListTopCell.DataListCell,
109
+ ActionsCell: dataListTopCell.DataListActionsCell,
110
+ TextCell: dataListTopCell.DataListTextCell,
111
+ NameCell: dataListTopCell.DataListNameCell,
112
+ DescriptionCell: dataListTopCell.DataListDescriptionCell,
113
+ IdCell: dataListTopCell.DataListIdCell,
114
+ RowHeaderCell: dataListTopCell.DataListRowHeaderCell,
115
+ NumberCell: dataListTopCell.DataListNumberCell,
116
+ DateCell: dataListTopCell.DataListDateCell,
117
+ TimeCell: dataListTopCell.DataListTimeCell,
118
+ SelectCell: dataListTopCell.DataListSelectCell,
119
+ TopSelectCell: dataListTopCell.DataListTopSelectCell,
120
+ NoMatch: dataListTopCell.DataListNoMatch,
121
+ Subheader: DataListSubheader,
122
+ SubHeading: DataListSubHeading,
123
+ Spacer: dataListTopCell.DataListSpacer,
124
+ NextPageLoading: dataListTopCell.DataListNextPageLoading,
125
+ Pagination: DataListPagination
126
+ });
127
+
128
+ exports.DataList = DataList;
129
+ exports.DataListSubHeading = DataListSubHeading;
130
+ exports.DataListSubheader = DataListSubheader;
131
+ //# sourceMappingURL=data-list-B5Wicaoc.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-list-B5Wicaoc.cjs","sources":["../src/ds/components/DataList/data-list-pagination.tsx","../src/ds/components/DataList/data-list-row-static.tsx","../src/ds/components/DataList/data-list-subheader.tsx","../src/ds/components/DataList/data-list-subheading.tsx","../src/ds/components/DataList/data-list-top-cells.tsx","../src/ds/components/DataList/data-list.tsx"],"sourcesContent":["import { ArrowLeftIcon, ArrowRightIcon } from 'lucide-react';\nimport { Button } from '@/ds/components/Button';\n\nexport type DataListPaginationProps = {\n currentPage?: number;\n hasMore?: boolean;\n onNextPage?: () => void;\n onPrevPage?: () => void;\n};\n\nexport function DataListPagination({ currentPage, hasMore, onNextPage, onPrevPage }: DataListPaginationProps) {\n const showNavigation = (typeof currentPage === 'number' && currentPage > 0) || hasMore;\n\n return (\n <div className=\"text-ui-md text-neutral3 col-span-full flex items-center justify-center gap-8 py-4\">\n <span>\n Page <b>{currentPage ? currentPage + 1 : '1'}</b>\n </span>\n {showNavigation && (\n <div className=\"flex gap-4\">\n {typeof currentPage === 'number' && currentPage > 0 && (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onPrevPage}>\n <ArrowLeftIcon />\n Previous\n </Button>\n )}\n {hasMore && (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onNextPage}>\n Next\n <ArrowRightIcon />\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { useDataListRowWrapperContext } from './data-list-row-wrapper-context';\nimport { dataListRowStaticStyles } from './shared';\nimport type { DataListRowSharedProps } from './shared';\nimport { cn } from '@/lib/utils';\n\nexport type DataListRowStaticProps = ComponentPropsWithoutRef<'div'> & DataListRowSharedProps;\n\n/**\n * Non-interactive row. Use when a row should *display* like a regular row but\n * has no link target or click handler\n */\nexport const DataListRowStatic = forwardRef<HTMLDivElement, DataListRowStaticProps>(\n ({ children, className, colStart, colEnd, featured, variant, style, ...rest }, ref) => {\n const isWrapped = useDataListRowWrapperContext();\n const hasColumnOverride = colStart !== undefined || colEnd !== undefined;\n const resolvedStyle = hasColumnOverride ? { ...style, gridColumn: `${colStart ?? 1} / ${colEnd ?? -1}` } : style;\n return (\n <div\n ref={ref}\n className={cn(\n isWrapped ? 'grid grid-cols-subgrid gap-8 px-5 transition-colors duration-200' : dataListRowStaticStyles,\n className,\n )}\n style={resolvedStyle}\n data-featured={featured || undefined}\n data-variant={variant ?? 'default'}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDataListRowStatic.displayName = 'DataListRowStatic';\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type DataListSubheaderProps = ComponentPropsWithoutRef<'div'>;\n\nexport const DataListSubheader = forwardRef<HTMLDivElement, DataListSubheaderProps>(\n ({ children, className, ...rest }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'data-list-subheader relative isolate col-span-full px-5 py-3 text-ui-md font-medium text-neutral4',\n 'bg-(--data-list-background)',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDataListSubheader.displayName = 'DataListSubheader';\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type DataListSubHeadingProps = {\n children: ReactNode;\n className?: string;\n};\n\nexport function DataListSubHeading({ children, className }: DataListSubHeadingProps) {\n return <span className={cn('text-ui-sm font-normal text-neutral2', className)}>{children}</span>;\n}\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type DataListTopCellsProps = ComponentPropsWithoutRef<'div'> & {\n /**\n * Drop the group's default left margin. Use when this sits as the second\n * child of a gap-0 `DataList.Top`, beside a `DataList.TopSelectCell` that\n * owns the leading column.\n */\n flushLeft?: boolean;\n /**\n * Place the group starting at this column line, spanning through to the\n * last column. Defaults to the full grid (`col-span-full`). Use when this\n * sits beside a leading cell that owns column 1.\n */\n colStart?: number;\n};\n\n/**\n * Non-interactive header equivalent of `DataList.RowButton`. Groups a set of\n * `DataList.TopCell`s with the same horizontal layout (gap, mx, px) as\n * `RowButton`, so columns inside a wrapped `Top` line up cell-for-cell with the\n * columns inside a wrapped `Row`.\n */\nexport const DataListTopCells = forwardRef<HTMLDivElement, DataListTopCellsProps>(\n ({ children, className, flushLeft, colStart, style, ...rest }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'pointer-events-none grid grid-cols-subgrid gap-8 px-5 [&>*]:pointer-events-auto',\n !colStart && 'col-span-full',\n flushLeft && 'pl-0!',\n className,\n )}\n style={colStart ? { ...style, gridColumn: `${colStart} / -1` } : style}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDataListTopCells.displayName = 'DataListTopCells';\n","import {\n DataListActionsCell,\n DataListCell,\n DataListTextCell,\n DataListNameCell,\n DataListDescriptionCell,\n DataListIdCell,\n DataListRowHeaderCell,\n DataListNumberCell,\n DataListSelectCell,\n DataListDateCell,\n DataListTimeCell,\n} from './data-list-cells';\nimport { DataListNextPageLoading } from './data-list-next-page-loading';\nimport { DataListNoMatch } from './data-list-no-match';\nimport { DataListPagination } from './data-list-pagination';\nimport { DataListRoot } from './data-list-root';\nimport { DataListRowButton } from './data-list-row-button';\nimport { DataListRowLink } from './data-list-row-link';\nimport { DataListRowStatic } from './data-list-row-static';\nimport { DataListRowWrapper } from './data-list-row-wrapper';\nimport { DataListSpacer } from './data-list-spacer';\nimport { DataListSubheader } from './data-list-subheader';\nimport { DataListSubHeading } from './data-list-subheading';\nimport { DataListTop } from './data-list-top';\nimport {\n DataListTopCell,\n DataListTopCellWithTooltip,\n DataListTopCellSmart,\n DataListTopSelectCell,\n} from './data-list-top-cell';\nimport { DataListTopCells } from './data-list-top-cells';\n\nexport type { DataListRootProps, DataListVariant } from './data-list-root';\n\nexport const DataList = Object.assign(DataListRoot, {\n Top: DataListTop,\n TopCells: DataListTopCells,\n TopCell: DataListTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n TopCellSmart: DataListTopCellSmart,\n RowWrapper: DataListRowWrapper,\n RowButton: DataListRowButton,\n RowLink: DataListRowLink,\n RowStatic: DataListRowStatic,\n Cell: DataListCell,\n ActionsCell: DataListActionsCell,\n TextCell: DataListTextCell,\n NameCell: DataListNameCell,\n DescriptionCell: DataListDescriptionCell,\n IdCell: DataListIdCell,\n RowHeaderCell: DataListRowHeaderCell,\n NumberCell: DataListNumberCell,\n DateCell: DataListDateCell,\n TimeCell: DataListTimeCell,\n SelectCell: DataListSelectCell,\n TopSelectCell: DataListTopSelectCell,\n NoMatch: DataListNoMatch,\n Subheader: DataListSubheader,\n SubHeading: DataListSubHeading,\n Spacer: DataListSpacer,\n NextPageLoading: DataListNextPageLoading,\n Pagination: DataListPagination,\n});\n"],"names":["jsxs","jsx","Button","ArrowLeftIcon","ArrowRightIcon","forwardRef","useDataListRowWrapperContext","cn","dataListRowStaticStyles","DataListRoot","DataListTop","DataListTopCell","DataListTopCellWithTooltip","DataListTopCellSmart","DataListRowWrapper","DataListRowButton","DataListRowLink","DataListCell","DataListActionsCell","DataListTextCell","DataListNameCell","DataListDescriptionCell","DataListIdCell","DataListRowHeaderCell","DataListNumberCell","DataListDateCell","DataListTimeCell","DataListSelectCell","DataListTopSelectCell","DataListNoMatch","DataListSpacer","DataListNextPageLoading"],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ import { u as useDataListRowWrapperContext, r as dataListRowStaticStyles, D as DataListRoot, f as DataListNextPageLoading, j as DataListSpacer, i as DataListNoMatch, s as DataListTopSelectCell, t as DataListSelectCell, g as DataListTimeCell, h as DataListDateCell, v as DataListNumberCell, w as DataListRowHeaderCell, q as DataListIdCell, x as DataListDescriptionCell, y as DataListNameCell, e as DataListTextCell, z as DataListActionsCell, c as DataListCell, k as DataListRowLink, l as DataListRowButton, m as DataListRowWrapper, n as DataListTopCellSmart, o as DataListTopCellWithTooltip, b as DataListTopCell, a as DataListTop } from './data-list-top-cell-D4-Hbz2H.js';
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+ import { ArrowLeftIcon, ArrowRightIcon } from 'lucide-react';
4
+ import { B as Button } from './Button-BsfLQEC6.js';
5
+ import { forwardRef } from 'react';
6
+ import { c as cn } from './cn-B4oPhFx9.js';
7
+
8
+ function DataListPagination({ currentPage, hasMore, onNextPage, onPrevPage }) {
9
+ const showNavigation = typeof currentPage === "number" && currentPage > 0 || hasMore;
10
+ return /* @__PURE__ */ jsxs("div", { className: "text-ui-md text-neutral3 col-span-full flex items-center justify-center gap-8 py-4", children: [
11
+ /* @__PURE__ */ jsxs("span", { children: [
12
+ "Page ",
13
+ /* @__PURE__ */ jsx("b", { children: currentPage ? currentPage + 1 : "1" })
14
+ ] }),
15
+ showNavigation && /* @__PURE__ */ jsxs("div", { className: "flex gap-4", children: [
16
+ typeof currentPage === "number" && currentPage > 0 && /* @__PURE__ */ jsxs(Button, { type: "button", variant: "outline", size: "sm", onClick: onPrevPage, children: [
17
+ /* @__PURE__ */ jsx(ArrowLeftIcon, {}),
18
+ "Previous"
19
+ ] }),
20
+ hasMore && /* @__PURE__ */ jsxs(Button, { type: "button", variant: "outline", size: "sm", onClick: onNextPage, children: [
21
+ "Next",
22
+ /* @__PURE__ */ jsx(ArrowRightIcon, {})
23
+ ] })
24
+ ] })
25
+ ] });
26
+ }
27
+
28
+ const DataListRowStatic = forwardRef(
29
+ ({ children, className, colStart, colEnd, featured, variant, style, ...rest }, ref) => {
30
+ const isWrapped = useDataListRowWrapperContext();
31
+ const hasColumnOverride = colStart !== void 0 || colEnd !== void 0;
32
+ const resolvedStyle = hasColumnOverride ? { ...style, gridColumn: `${colStart ?? 1} / ${colEnd ?? -1}` } : style;
33
+ return /* @__PURE__ */ jsx(
34
+ "div",
35
+ {
36
+ ref,
37
+ className: cn(
38
+ isWrapped ? "grid grid-cols-subgrid gap-8 px-5 transition-colors duration-200" : dataListRowStaticStyles,
39
+ className
40
+ ),
41
+ style: resolvedStyle,
42
+ "data-featured": featured || void 0,
43
+ "data-variant": variant ?? "default",
44
+ ...rest,
45
+ children
46
+ }
47
+ );
48
+ }
49
+ );
50
+ DataListRowStatic.displayName = "DataListRowStatic";
51
+
52
+ const DataListSubheader = forwardRef(
53
+ ({ children, className, ...rest }, ref) => {
54
+ return /* @__PURE__ */ jsx(
55
+ "div",
56
+ {
57
+ ref,
58
+ className: cn(
59
+ "data-list-subheader relative isolate col-span-full px-5 py-3 text-ui-md font-medium text-neutral4",
60
+ "bg-(--data-list-background)",
61
+ className
62
+ ),
63
+ ...rest,
64
+ children
65
+ }
66
+ );
67
+ }
68
+ );
69
+ DataListSubheader.displayName = "DataListSubheader";
70
+
71
+ function DataListSubHeading({ children, className }) {
72
+ return /* @__PURE__ */ jsx("span", { className: cn("text-ui-sm font-normal text-neutral2", className), children });
73
+ }
74
+
75
+ const DataListTopCells = forwardRef(
76
+ ({ children, className, flushLeft, colStart, style, ...rest }, ref) => {
77
+ return /* @__PURE__ */ jsx(
78
+ "div",
79
+ {
80
+ ref,
81
+ className: cn(
82
+ "pointer-events-none grid grid-cols-subgrid gap-8 px-5 [&>*]:pointer-events-auto",
83
+ !colStart && "col-span-full",
84
+ flushLeft && "pl-0!",
85
+ className
86
+ ),
87
+ style: colStart ? { ...style, gridColumn: `${colStart} / -1` } : style,
88
+ ...rest,
89
+ children
90
+ }
91
+ );
92
+ }
93
+ );
94
+ DataListTopCells.displayName = "DataListTopCells";
95
+
96
+ const DataList = Object.assign(DataListRoot, {
97
+ Top: DataListTop,
98
+ TopCells: DataListTopCells,
99
+ TopCell: DataListTopCell,
100
+ TopCellWithTooltip: DataListTopCellWithTooltip,
101
+ TopCellSmart: DataListTopCellSmart,
102
+ RowWrapper: DataListRowWrapper,
103
+ RowButton: DataListRowButton,
104
+ RowLink: DataListRowLink,
105
+ RowStatic: DataListRowStatic,
106
+ Cell: DataListCell,
107
+ ActionsCell: DataListActionsCell,
108
+ TextCell: DataListTextCell,
109
+ NameCell: DataListNameCell,
110
+ DescriptionCell: DataListDescriptionCell,
111
+ IdCell: DataListIdCell,
112
+ RowHeaderCell: DataListRowHeaderCell,
113
+ NumberCell: DataListNumberCell,
114
+ DateCell: DataListDateCell,
115
+ TimeCell: DataListTimeCell,
116
+ SelectCell: DataListSelectCell,
117
+ TopSelectCell: DataListTopSelectCell,
118
+ NoMatch: DataListNoMatch,
119
+ Subheader: DataListSubheader,
120
+ SubHeading: DataListSubHeading,
121
+ Spacer: DataListSpacer,
122
+ NextPageLoading: DataListNextPageLoading,
123
+ Pagination: DataListPagination
124
+ });
125
+
126
+ export { DataList as D, DataListSubHeading as a, DataListSubheader as b };
127
+ //# sourceMappingURL=data-list-BUK_v9ax.js.map