@lobehub/ui 6.0.0-beta.4 → 6.0.0-beta.6

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 (286) hide show
  1. package/es/ActionIcon/style.mjs +1 -1
  2. package/es/ActionIcon/style.mjs.map +1 -1
  3. package/es/Anchor/Anchor.mjs +2 -2
  4. package/es/Anchor/Anchor.mjs.map +1 -1
  5. package/es/Carousel/Carousel.mjs +1 -1
  6. package/es/Carousel/Carousel.mjs.map +1 -1
  7. package/es/CodeDiff/CodeDiff.mjs.map +1 -1
  8. package/es/CodeDiff/PatchDiff.mjs.map +1 -1
  9. package/es/CodeDiff/theme.mjs.map +1 -1
  10. package/es/CodeDiff/type.d.mts +2 -2
  11. package/es/CodeEditor/CodeEditor.mjs +1 -1
  12. package/es/CodeEditor/CodeEditor.mjs.map +1 -1
  13. package/es/ColorPicker/ColorPicker.mjs +1 -1
  14. package/es/ColorPicker/ColorPicker.mjs.map +1 -1
  15. package/es/ColorSwatches/ColorSwatches.mjs +18 -23
  16. package/es/ColorSwatches/ColorSwatches.mjs.map +1 -1
  17. package/es/ColorSwatches/CustomPicker.mjs +101 -0
  18. package/es/ColorSwatches/CustomPicker.mjs.map +1 -0
  19. package/es/ColorSwatches/index.d.mts +2 -2
  20. package/es/ColorSwatches/marker.stylex.mjs +9 -0
  21. package/es/ColorSwatches/marker.stylex.mjs.map +1 -0
  22. package/es/ColorSwatches/style.mjs +36 -0
  23. package/es/ColorSwatches/style.mjs.map +1 -1
  24. package/es/ColorSwatches/type.d.mts +9 -0
  25. package/es/ConfigProvider/cdnAssets.mjs +6 -0
  26. package/es/ConfigProvider/cdnAssets.mjs.map +1 -0
  27. package/es/ConfigProvider/index.mjs +2 -1
  28. package/es/ConfigProvider/index.mjs.map +1 -1
  29. package/es/ContextMenu/store.d.mts +0 -1
  30. package/es/ContextMenu/store.mjs.map +1 -1
  31. package/es/DatePicker/DatePicker.mjs +1 -1
  32. package/es/DatePicker/DatePicker.mjs.map +1 -1
  33. package/es/DatePicker/DateRangePicker.mjs +1 -1
  34. package/es/DatePicker/DateRangePicker.mjs.map +1 -1
  35. package/es/DraggablePanel/atoms.mjs +1 -1
  36. package/es/DraggablePanel/atoms.mjs.map +1 -1
  37. package/es/DraggableSideNav/DraggableSideNav.mjs +2 -2
  38. package/es/DraggableSideNav/DraggableSideNav.mjs.map +1 -1
  39. package/es/Drawer/atoms.mjs +1 -1
  40. package/es/Drawer/atoms.mjs.map +1 -1
  41. package/es/DropdownMenu/atoms.mjs +1 -1
  42. package/es/DropdownMenu/atoms.mjs.map +1 -1
  43. package/es/EditableText/ControlInput.mjs +42 -29
  44. package/es/EditableText/ControlInput.mjs.map +1 -1
  45. package/es/EditableText/EditableText.mjs +1 -1
  46. package/es/EditableText/EditableText.mjs.map +1 -1
  47. package/es/EmojiPicker/EmojiPicker.mjs +3 -9
  48. package/es/EmojiPicker/EmojiPicker.mjs.map +1 -1
  49. package/es/EmojiPicker/useEmojiMartI18n.mjs +37 -0
  50. package/es/EmojiPicker/useEmojiMartI18n.mjs.map +1 -0
  51. package/es/FormKit/engine/tanstack.mjs +1 -1
  52. package/es/FormKit/engine/tanstack.mjs.map +1 -1
  53. package/es/Grid/style.mjs +1 -1
  54. package/es/Grid/style.mjs.map +1 -1
  55. package/es/HotkeyInput/HotkeyInput.mjs +1 -1
  56. package/es/HotkeyInput/HotkeyInput.mjs.map +1 -1
  57. package/es/Image/type.d.mts +1 -0
  58. package/es/Image/viewer/ImageViewer.mjs +2 -1
  59. package/es/Image/viewer/ImageViewer.mjs.map +1 -1
  60. package/es/Image/viewer/Toolbar.mjs +19 -6
  61. package/es/Image/viewer/Toolbar.mjs.map +1 -1
  62. package/es/Image/viewer/ViewerChrome.mjs.map +1 -1
  63. package/es/ImageSelect/ImageSelect.mjs +1 -1
  64. package/es/ImageSelect/ImageSelect.mjs.map +1 -1
  65. package/es/Input/Input.mjs +7 -5
  66. package/es/Input/Input.mjs.map +1 -1
  67. package/es/Input/TextArea.mjs +1 -1
  68. package/es/Input/TextArea.mjs.map +1 -1
  69. package/es/Input/style.mjs +3 -3
  70. package/es/Input/style.mjs.map +1 -1
  71. package/es/Modal/atoms.mjs +3 -3
  72. package/es/Modal/atoms.mjs.map +1 -1
  73. package/es/Pagination/Pagination.mjs +1 -1
  74. package/es/Pagination/Pagination.mjs.map +1 -1
  75. package/es/Popover/PopoverInGroup.mjs +1 -1
  76. package/es/Popover/PopoverInGroup.mjs.map +1 -1
  77. package/es/Popover/atoms.mjs +1 -1
  78. package/es/Popover/atoms.mjs.map +1 -1
  79. package/es/Rate/Rate.mjs +1 -1
  80. package/es/Rate/Rate.mjs.map +1 -1
  81. package/es/ScrollShadow/ScrollShadow.mjs +1 -1
  82. package/es/ScrollShadow/ScrollShadow.mjs.map +1 -1
  83. package/es/SearchBar/SearchBar.mjs +31 -25
  84. package/es/SearchBar/SearchBar.mjs.map +1 -1
  85. package/es/Segmented/Segmented.mjs +1 -1
  86. package/es/Segmented/Segmented.mjs.map +1 -1
  87. package/es/Select/atoms.mjs +1 -1
  88. package/es/Select/atoms.mjs.map +1 -1
  89. package/es/Switch/atoms.mjs +1 -1
  90. package/es/Switch/atoms.mjs.map +1 -1
  91. package/es/Tabs/Tabs.mjs +35 -21
  92. package/es/Tabs/Tabs.mjs.map +1 -1
  93. package/es/ToggleGroup/ToggleGroup.mjs +1 -1
  94. package/es/ToggleGroup/ToggleGroup.mjs.map +1 -1
  95. package/es/Tooltip/TooltipInGroup.mjs +1 -1
  96. package/es/Tooltip/TooltipInGroup.mjs.map +1 -1
  97. package/es/Tooltip/TooltipStandalone.mjs +1 -1
  98. package/es/Tooltip/TooltipStandalone.mjs.map +1 -1
  99. package/es/Tree/Tree.mjs +1 -1
  100. package/es/Tree/Tree.mjs.map +1 -1
  101. package/es/awesome/Giscus/style.mjs +9 -9
  102. package/es/awesome/Giscus/style.mjs.map +1 -1
  103. package/es/awesome/Grainient/Grainient.d.mts +11 -0
  104. package/es/awesome/Grainient/Grainient.mjs +314 -0
  105. package/es/awesome/Grainient/Grainient.mjs.map +1 -0
  106. package/es/awesome/Grainient/index.d.mts +3 -0
  107. package/es/awesome/Grainient/style.mjs +23 -0
  108. package/es/awesome/Grainient/style.mjs.map +1 -0
  109. package/es/awesome/Grainient/type.d.mts +121 -0
  110. package/es/awesome/GridBackground/GridBackground.mjs +1 -1
  111. package/es/awesome/GridBackground/GridBackground.mjs.map +1 -1
  112. package/es/awesome/GridBackground/GridShowcase.mjs +4 -4
  113. package/es/awesome/GridBackground/GridShowcase.mjs.map +1 -1
  114. package/es/awesome/Spline/ParentSize.mjs +1 -1
  115. package/es/awesome/Spline/ParentSize.mjs.map +1 -1
  116. package/es/awesome/index.d.mts +4 -1
  117. package/es/awesome/index.mjs +2 -1
  118. package/es/chat/BackBottom/BackBottom.mjs +1 -1
  119. package/es/chat/BackBottom/BackBottom.mjs.map +1 -1
  120. package/es/chat/BackBottom/type.d.mts +2 -2
  121. package/es/chat/EditableMessage/EditableMessage.mjs +1 -1
  122. package/es/chat/EditableMessage/EditableMessage.mjs.map +1 -1
  123. package/es/chat/EditableMessageList/EditableMessageList.mjs +1 -1
  124. package/es/chat/EditableMessageList/EditableMessageList.mjs.map +1 -1
  125. package/es/chat/EditableMessageList/messageReducer.mjs +30 -23
  126. package/es/chat/EditableMessageList/messageReducer.mjs.map +1 -1
  127. package/es/chat/MessageModal/MessageModal.mjs +1 -1
  128. package/es/chat/MessageModal/MessageModal.mjs.map +1 -1
  129. package/es/chat/TokenTag/TokenTag.mjs +2 -3
  130. package/es/chat/TokenTag/TokenTag.mjs.map +1 -1
  131. package/es/dashboard/AuthLayout/Aside.d.mts +10 -0
  132. package/es/dashboard/AuthLayout/Aside.mjs +31 -0
  133. package/es/dashboard/AuthLayout/Aside.mjs.map +1 -0
  134. package/es/dashboard/AuthLayout/AuthLayout.d.mts +3 -1
  135. package/es/dashboard/AuthLayout/AuthLayout.mjs +93 -37
  136. package/es/dashboard/AuthLayout/AuthLayout.mjs.map +1 -1
  137. package/es/dashboard/AuthLayout/index.d.mts +3 -2
  138. package/es/dashboard/AuthLayout/style.mjs +98 -1
  139. package/es/dashboard/AuthLayout/style.mjs.map +1 -1
  140. package/es/dashboard/AuthLayout/type.d.mts +38 -2
  141. package/es/dashboard/AuthTools/AuthLocaleSwitch.d.mts +10 -0
  142. package/es/dashboard/AuthTools/AuthLocaleSwitch.mjs +33 -0
  143. package/es/dashboard/AuthTools/AuthLocaleSwitch.mjs.map +1 -0
  144. package/es/dashboard/AuthTools/AuthThemeSwitch.d.mts +10 -0
  145. package/es/dashboard/AuthTools/AuthThemeSwitch.mjs +59 -0
  146. package/es/dashboard/AuthTools/AuthThemeSwitch.mjs.map +1 -0
  147. package/es/dashboard/AuthTools/index.d.mts +4 -0
  148. package/es/dashboard/AuthTools/style.mjs +27 -0
  149. package/es/dashboard/AuthTools/style.mjs.map +1 -0
  150. package/es/dashboard/AuthTools/type.d.mts +29 -0
  151. package/es/dashboard/ChartGrid/ChartGrid.d.mts +10 -0
  152. package/es/dashboard/ChartGrid/ChartGrid.mjs +19 -0
  153. package/es/dashboard/ChartGrid/ChartGrid.mjs.map +1 -0
  154. package/es/dashboard/ChartGrid/index.d.mts +3 -0
  155. package/es/dashboard/ChartGrid/style.mjs +18 -0
  156. package/es/dashboard/ChartGrid/style.mjs.map +1 -0
  157. package/es/dashboard/ChartGrid/type.d.mts +8 -0
  158. package/es/dashboard/ConsoleNav/Skeleton.d.mts +15 -0
  159. package/es/dashboard/ConsoleNav/Skeleton.mjs +82 -0
  160. package/es/dashboard/ConsoleNav/Skeleton.mjs.map +1 -0
  161. package/es/dashboard/ConsoleNav/index.d.mts +3 -2
  162. package/es/dashboard/ConsoleNav/style.mjs +18 -0
  163. package/es/dashboard/ConsoleNav/style.mjs.map +1 -1
  164. package/es/dashboard/ConsoleNav/type.d.mts +13 -0
  165. package/es/dashboard/ConsoleShell/ConsoleShell.d.mts +1 -1
  166. package/es/dashboard/ConsoleShell/ConsoleShell.mjs +26 -6
  167. package/es/dashboard/ConsoleShell/ConsoleShell.mjs.map +1 -1
  168. package/es/dashboard/ConsoleShell/style.mjs +10 -0
  169. package/es/dashboard/ConsoleShell/style.mjs.map +1 -1
  170. package/es/dashboard/ConsoleShell/type.d.mts +11 -0
  171. package/es/dashboard/FilterSidebar/FilterSidebar.mjs +18 -17
  172. package/es/dashboard/FilterSidebar/FilterSidebar.mjs.map +1 -1
  173. package/es/dashboard/FilterStrip/FilterStrip.d.mts +11 -0
  174. package/es/dashboard/FilterStrip/FilterStrip.mjs +55 -0
  175. package/es/dashboard/FilterStrip/FilterStrip.mjs.map +1 -0
  176. package/es/dashboard/FilterStrip/index.d.mts +3 -0
  177. package/es/dashboard/FilterStrip/style.mjs +78 -0
  178. package/es/dashboard/FilterStrip/style.mjs.map +1 -0
  179. package/es/dashboard/FilterStrip/type.d.mts +25 -0
  180. package/es/dashboard/LabelWithKey/LabelWithKey.d.mts +10 -0
  181. package/es/dashboard/LabelWithKey/LabelWithKey.mjs +18 -0
  182. package/es/dashboard/LabelWithKey/LabelWithKey.mjs.map +1 -0
  183. package/es/dashboard/LabelWithKey/index.d.mts +3 -0
  184. package/es/dashboard/LabelWithKey/type.d.mts +11 -0
  185. package/es/dashboard/MetricStrip/MetricCell.mjs +81 -0
  186. package/es/dashboard/MetricStrip/MetricCell.mjs.map +1 -0
  187. package/es/dashboard/MetricStrip/MetricStrip.d.mts +13 -0
  188. package/es/dashboard/MetricStrip/MetricStrip.mjs +47 -0
  189. package/es/dashboard/MetricStrip/MetricStrip.mjs.map +1 -0
  190. package/es/dashboard/MetricStrip/index.d.mts +3 -0
  191. package/es/dashboard/MetricStrip/style.mjs +156 -0
  192. package/es/dashboard/MetricStrip/style.mjs.map +1 -0
  193. package/es/dashboard/MetricStrip/type.d.mts +36 -0
  194. package/es/dashboard/PageSkeleton/PageSkeleton.mjs +20 -18
  195. package/es/dashboard/PageSkeleton/PageSkeleton.mjs.map +1 -1
  196. package/es/dashboard/PageSkeleton/style.mjs +1 -1
  197. package/es/dashboard/PageSkeleton/style.mjs.map +1 -1
  198. package/es/dashboard/PageToolbar/PageToolbar.d.mts +10 -0
  199. package/es/dashboard/PageToolbar/PageToolbar.mjs +22 -0
  200. package/es/dashboard/PageToolbar/PageToolbar.mjs.map +1 -0
  201. package/es/dashboard/PageToolbar/index.d.mts +3 -0
  202. package/es/dashboard/PageToolbar/style.mjs +36 -0
  203. package/es/dashboard/PageToolbar/style.mjs.map +1 -0
  204. package/es/dashboard/PageToolbar/type.d.mts +11 -0
  205. package/es/dashboard/PanelSurface/PanelSurface.d.mts +10 -0
  206. package/es/dashboard/PanelSurface/PanelSurface.mjs +40 -0
  207. package/es/dashboard/PanelSurface/PanelSurface.mjs.map +1 -0
  208. package/es/dashboard/PanelSurface/index.d.mts +3 -0
  209. package/es/dashboard/PanelSurface/style.mjs +25 -0
  210. package/es/dashboard/PanelSurface/style.mjs.map +1 -0
  211. package/es/dashboard/PanelSurface/type.d.mts +17 -0
  212. package/es/dashboard/Section/Section.d.mts +10 -0
  213. package/es/dashboard/Section/Section.mjs +81 -0
  214. package/es/dashboard/Section/Section.mjs.map +1 -0
  215. package/es/dashboard/Section/index.d.mts +3 -0
  216. package/es/dashboard/Section/style.mjs +31 -0
  217. package/es/dashboard/Section/style.mjs.map +1 -0
  218. package/es/dashboard/Section/type.d.mts +23 -0
  219. package/es/dashboard/StatCard/StatCard.d.mts +2 -1
  220. package/es/dashboard/StatCard/StatCard.mjs +28 -91
  221. package/es/dashboard/StatCard/StatCard.mjs.map +1 -1
  222. package/es/dashboard/StatCard/type.d.mts +16 -5
  223. package/es/dashboard/Surface/Surface.d.mts +4 -3
  224. package/es/dashboard/Surface/Surface.mjs +91 -8
  225. package/es/dashboard/Surface/Surface.mjs.map +1 -1
  226. package/es/dashboard/Surface/index.d.mts +3 -2
  227. package/es/dashboard/Surface/link.d.mts +16 -0
  228. package/es/dashboard/Surface/link.mjs +40 -0
  229. package/es/dashboard/Surface/link.mjs.map +1 -0
  230. package/es/dashboard/Surface/marker.stylex.mjs +9 -0
  231. package/es/dashboard/Surface/marker.stylex.mjs.map +1 -0
  232. package/es/dashboard/Surface/style.d.mts +2 -0
  233. package/es/dashboard/Surface/style.mjs +155 -14
  234. package/es/dashboard/Surface/style.mjs.map +1 -1
  235. package/es/dashboard/Surface/type.d.mts +29 -1
  236. package/es/dashboard/TableIconActions/TableIconActions.d.mts +17 -0
  237. package/es/dashboard/TableIconActions/TableIconActions.mjs +39 -0
  238. package/es/dashboard/TableIconActions/TableIconActions.mjs.map +1 -0
  239. package/es/dashboard/TableIconActions/index.d.mts +3 -0
  240. package/es/dashboard/TableIconActions/type.d.mts +17 -0
  241. package/es/dashboard/TitleWithTips/TitleWithTips.d.mts +10 -0
  242. package/es/dashboard/TitleWithTips/TitleWithTips.mjs +28 -0
  243. package/es/dashboard/TitleWithTips/TitleWithTips.mjs.map +1 -0
  244. package/es/dashboard/TitleWithTips/index.d.mts +3 -0
  245. package/es/dashboard/TitleWithTips/type.d.mts +10 -0
  246. package/es/dashboard/index.d.mts +38 -4
  247. package/es/dashboard/index.mjs +17 -3
  248. package/es/hooks/useControlledState.mjs +20 -0
  249. package/es/hooks/useControlledState.mjs.map +1 -0
  250. package/es/hooks/useHighlight.mjs +2 -2
  251. package/es/hooks/useHighlight.mjs.map +1 -1
  252. package/es/hooks/useHover.mjs +22 -0
  253. package/es/hooks/useHover.mjs.map +1 -0
  254. package/es/hooks/useScroll.d.mts +8 -0
  255. package/es/hooks/useScroll.mjs +33 -0
  256. package/es/hooks/useScroll.mjs.map +1 -0
  257. package/es/hooks/useSize.mjs +26 -0
  258. package/es/hooks/useSize.mjs.map +1 -0
  259. package/es/internal/virtual/VirtualScrollArea.mjs +1 -1
  260. package/es/internal/virtual/VirtualScrollArea.mjs.map +1 -1
  261. package/es/mobile/ChatInputArea/ChatInputArea.mjs +1 -1
  262. package/es/mobile/ChatInputArea/ChatInputArea.mjs.map +1 -1
  263. package/es/mobile/TabBar/TabBar.mjs +1 -1
  264. package/es/mobile/TabBar/TabBar.mjs.map +1 -1
  265. package/es/node_modules/.pnpm/@eslint_core@1.2.1/node_modules/@eslint/core/dist/esm/types.d.mts +2 -46
  266. package/es/node_modules/.pnpm/@eslint_plugin-kit@0.7.3/node_modules/@eslint/plugin-kit/dist/cjs/index.d.mts +1 -1
  267. package/es/node_modules/.pnpm/@types_estree@1.0.9/node_modules/@types/estree/index.d.mts +1 -4
  268. package/es/node_modules/.pnpm/eslint@10.12.0_jiti@2.6.1_supports-color@10.2.2/node_modules/eslint/lib/types/index.d.mts +1 -1
  269. package/es/style.css +339 -32
  270. package/es/styles/theme/token/neutral.mjs +5 -5
  271. package/es/styles/theme/token/neutral.mjs.map +1 -1
  272. package/es/utils/colorMath.mjs +52 -0
  273. package/es/utils/colorMath.mjs.map +1 -0
  274. package/es/utils/formatNumber.mjs +7 -0
  275. package/es/utils/formatNumber.mjs.map +1 -0
  276. package/es/utils/genCdnUrl.mjs +6 -3
  277. package/es/utils/genCdnUrl.mjs.map +1 -1
  278. package/es/utils/hashString.mjs +19 -0
  279. package/es/utils/hashString.mjs.map +1 -0
  280. package/es/utils/mergeRefs.mjs +20 -0
  281. package/es/utils/mergeRefs.mjs.map +1 -0
  282. package/es/utils/placement.d.mts +5 -5
  283. package/es/utils/placement.mjs.map +1 -1
  284. package/package.json +16 -42
  285. package/es/dashboard/StatCard/style.mjs +0 -105
  286. package/es/dashboard/StatCard/style.mjs.map +0 -1
@@ -1,98 +1,35 @@
1
1
  "use client";
2
- import { cssVar } from "../../styles/stylex/cssVar.stylex.mjs";
3
- import Icon from "../../Icon/Icon.mjs";
4
- import FlexBasic_default from "../../Flex/FlexBasic.mjs";
5
- import Text from "../../Text/Text.mjs";
2
+ import { styleProps } from "../../styles/stylex/props.mjs";
6
3
  import { styles } from "../Surface/style.mjs";
7
- import { styles as styles$1 } from "./style.mjs";
8
- import { jsx, jsxs } from "react/jsx-runtime";
9
- import * as stylex from "@stylexjs/stylex";
10
- import { Minus, TrendingDown, TrendingUp } from "lucide-react";
4
+ import { useSurfaceCardStyles } from "../Surface/link.mjs";
5
+ import { styles as styles$1 } from "../MetricStrip/style.mjs";
6
+ import MetricCell from "../MetricStrip/MetricCell.mjs";
7
+ import { jsx } from "react/jsx-runtime";
11
8
  //#region src/dashboard/StatCard/StatCard.tsx
12
- const deltaIcon = {
13
- down: TrendingDown,
14
- flat: Minus,
15
- up: TrendingUp
16
- };
17
- const deltaStyles = {
18
- down: styles$1.deltaDown,
19
- flat: styles$1.deltaFlat,
20
- up: styles$1.deltaUp
21
- };
22
- const textStyles = {
23
- hint: {
24
- color: cssVar.colorTextTertiary,
25
- fontSize: cssVar.fontSizeSM
26
- },
27
- label: {
28
- color: cssVar.colorTextSecondary,
29
- fontSize: cssVar.fontSizeSM
30
- },
31
- metricHint: {
32
- color: cssVar.colorText,
33
- fontSize: cssVar.fontSize
34
- },
35
- metricLabel: {
36
- color: cssVar.colorText,
37
- fontSize: cssVar.fontSize,
38
- fontWeight: 500
39
- }
40
- };
41
- function StatCard({ action, delta, direction = "flat", hint, label, mark, prominent = false, value, wash }) {
9
+ /** One metric in its own card: the same item as a `split` MetricStrip. */
10
+ function StatCard({ action, className, delta, direction = "flat", hint, href, label, loading, mark, onClick, renderLink, value, valueTone }) {
11
+ const cardStyles = useSurfaceCardStyles();
42
12
  return /* @__PURE__ */ jsx("div", {
43
- ...stylex.props(styles$1.lift),
44
- children: /* @__PURE__ */ jsx(FlexBasic_default, {
45
- ...stylex.props(styles$1.root, styles.card, wash && [styles$1.wash, styles$1[wash]], styles$1.frame),
46
- children: /* @__PURE__ */ jsxs(FlexBasic_default, {
47
- gap: prominent ? 0 : 8,
48
- ...stylex.props(styles$1.body),
49
- children: [
50
- /* @__PURE__ */ jsxs(FlexBasic_default, {
51
- horizontal: true,
52
- align: "center",
53
- justify: "space-between",
54
- children: [/* @__PURE__ */ jsxs(FlexBasic_default, {
55
- horizontal: true,
56
- align: "center",
57
- gap: 6,
58
- ...stylex.props(styles$1.copy),
59
- children: [/* @__PURE__ */ jsx(Text, {
60
- ellipsis: true,
61
- style: prominent ? textStyles.metricLabel : textStyles.label,
62
- children: label
63
- }), action]
64
- }), mark ? /* @__PURE__ */ jsx("span", {
65
- "aria-hidden": true,
66
- ...stylex.props(styles$1.badge),
67
- children: /* @__PURE__ */ jsx(Icon, {
68
- icon: mark,
69
- size: 14
70
- })
71
- }) : null]
72
- }),
73
- /* @__PURE__ */ jsx("div", {
74
- ...stylex.props(prominent ? styles$1.metricValue : styles$1.value),
75
- children: value
76
- }),
77
- delta || hint ? /* @__PURE__ */ jsxs(FlexBasic_default, {
78
- horizontal: true,
79
- align: "center",
80
- gap: 8,
81
- wrap: "wrap",
82
- ...stylex.props(prominent && styles$1.metricFoot),
83
- children: [delta ? /* @__PURE__ */ jsxs("span", {
84
- ...stylex.props(styles$1.delta, deltaStyles[direction]),
85
- children: [/* @__PURE__ */ jsx(Icon, {
86
- icon: deltaIcon[direction],
87
- size: 14
88
- }), delta]
89
- }) : null, hint ? /* @__PURE__ */ jsx(Text, {
90
- style: prominent ? textStyles.metricHint : textStyles.hint,
91
- children: hint
92
- }) : null]
93
- }) : null
94
- ]
95
- })
13
+ ...styleProps([
14
+ styles$1.card,
15
+ cardStyles,
16
+ styles.clip
17
+ ], className),
18
+ children: /* @__PURE__ */ jsx(MetricCell, {
19
+ renderLink,
20
+ item: {
21
+ action,
22
+ delta,
23
+ direction,
24
+ hint,
25
+ href,
26
+ label,
27
+ loading,
28
+ mark,
29
+ onClick,
30
+ value,
31
+ valueTone
32
+ }
96
33
  })
97
34
  });
98
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"StatCard.mjs","names":["styles","Flexbox","surfaceStyles"],"sources":["../../../src/dashboard/StatCard/StatCard.tsx"],"sourcesContent":["'use client';\n\nimport * as stylex from '@stylexjs/stylex';\nimport { Minus, TrendingDown, TrendingUp } from 'lucide-react';\n\nimport { Flexbox } from '@/Flex';\nimport Icon from '@/Icon';\nimport { cssVar } from '@/styles/stylex/cssVar.stylex';\nimport Text from '@/Text';\n\nimport { styles as surfaceStyles } from '../Surface/style';\nimport { styles } from './style';\nimport type { StatCardProps, StatDirection } from './type';\n\nconst deltaIcon = {\n down: TrendingDown,\n flat: Minus,\n up: TrendingUp,\n} satisfies Record<StatDirection, typeof Minus>;\n\nconst deltaStyles = {\n down: styles.deltaDown,\n flat: styles.deltaFlat,\n up: styles.deltaUp,\n};\n\nconst textStyles = {\n hint: { color: cssVar.colorTextTertiary, fontSize: cssVar.fontSizeSM },\n label: { color: cssVar.colorTextSecondary, fontSize: cssVar.fontSizeSM },\n metricHint: { color: cssVar.colorText, fontSize: cssVar.fontSize },\n metricLabel: { color: cssVar.colorText, fontSize: cssVar.fontSize, fontWeight: 500 },\n};\n\nfunction StatCard({\n action,\n delta,\n direction = 'flat',\n hint,\n label,\n mark,\n prominent = false,\n value,\n wash,\n}: StatCardProps) {\n return (\n <div {...stylex.props(styles.lift)}>\n <Flexbox\n {...stylex.props(\n styles.root,\n surfaceStyles.card,\n wash && [styles.wash, styles[wash]],\n styles.frame,\n )}\n >\n <Flexbox gap={prominent ? 0 : 8} {...stylex.props(styles.body)}>\n <Flexbox horizontal align=\"center\" justify=\"space-between\">\n <Flexbox horizontal align=\"center\" gap={6} {...stylex.props(styles.copy)}>\n <Text ellipsis style={prominent ? textStyles.metricLabel : textStyles.label}>\n {label}\n </Text>\n {action}\n </Flexbox>\n {mark ? (\n <span aria-hidden {...stylex.props(styles.badge)}>\n <Icon icon={mark} size={14} />\n </span>\n ) : null}\n </Flexbox>\n <div {...stylex.props(prominent ? styles.metricValue : styles.value)}>{value}</div>\n {delta || hint ? (\n <Flexbox\n horizontal\n align=\"center\"\n gap={8}\n wrap=\"wrap\"\n {...stylex.props(prominent && styles.metricFoot)}\n >\n {delta ? (\n <span {...stylex.props(styles.delta, deltaStyles[direction])}>\n <Icon icon={deltaIcon[direction]} size={14} />\n {delta}\n </span>\n ) : null}\n {hint ? (\n <Text style={prominent ? textStyles.metricHint : textStyles.hint}>{hint}</Text>\n ) : null}\n </Flexbox>\n ) : null}\n </Flexbox>\n </Flexbox>\n </div>\n );\n}\n\nStatCard.displayName = 'StatCard';\n\nexport default StatCard;\n"],"mappings":";;;;;;;;;;;AAWA,MAAM,YAAY;CAChB,MAAM;CACN,MAAM;CACN,IAAI;AACN;AACA,MAAM,cAAc;CAClB,MAAMA,SAAO;CACb,MAAMA,SAAO;CACb,IAAIA,SAAO;AACb;AACA,MAAM,aAAa;CACjB,MAAM;EACJ,OAAO,OAAO;EACd,UAAU,OAAO;CACnB;CACA,OAAO;EACL,OAAO,OAAO;EACd,UAAU,OAAO;CACnB;CACA,YAAY;EACV,OAAO,OAAO;EACd,UAAU,OAAO;CACnB;CACA,aAAa;EACX,OAAO,OAAO;EACd,UAAU,OAAO;EACjB,YAAY;CACd;AACF;AACA,SAAS,SAAS,EAChB,QACA,OACA,YAAY,QACZ,MACA,OACA,MACA,YAAY,OACZ,OACA,QACgB;CAChB,OAAO,oBAAC,OAAD;EAAK,GAAI,OAAO,MAAMA,SAAO,IAAI;EACpC,UAAA,oBAACC,mBAAD;GAAS,GAAI,OAAO,MAAMD,SAAO,MAAME,OAAc,MAAM,QAAQ,CAACF,SAAO,MAAMA,SAAO,KAAK,GAAGA,SAAO,KAAK;GAC1G,UAAA,qBAACC,mBAAD;IAAS,KAAK,YAAY,IAAI;IAAG,GAAI,OAAO,MAAMD,SAAO,IAAI;IAA7D,UAAA;KACE,qBAACC,mBAAD;MAAS,YAAA;MAAW,OAAM;MAAS,SAAQ;MAA3C,UAAA,CACE,qBAACA,mBAAD;OAAS,YAAA;OAAW,OAAM;OAAS,KAAK;OAAG,GAAI,OAAO,MAAMD,SAAO,IAAI;OAAvE,UAAA,CACE,oBAAC,MAAD;QAAM,UAAA;QAAS,OAAO,YAAY,WAAW,cAAc,WAAW;QACnE,UAAA;OACG,CAAA,GACL,MACM;MACR,CAAA,GAAA,OAAO,oBAAC,QAAD;OAAM,eAAA;OAAY,GAAI,OAAO,MAAMA,SAAO,KAAK;OACnD,UAAA,oBAAC,MAAD;QAAM,MAAM;QAAM,MAAM;OAAK,CAAA;MACzB,CAAA,IAAI,IACL;;KACT,oBAAC,OAAD;MAAK,GAAI,OAAO,MAAM,YAAYA,SAAO,cAAcA,SAAO,KAAK;MAAI,UAAA;KAAW,CAAA;KACjF,SAAS,OAAO,qBAACC,mBAAD;MAAS,YAAA;MAAW,OAAM;MAAS,KAAK;MAAG,MAAK;MAAO,GAAI,OAAO,MAAM,aAAaD,SAAO,UAAU;MAAtG,UAAA,CACZ,QAAQ,qBAAC,QAAD;OAAM,GAAI,OAAO,MAAMA,SAAO,OAAO,YAAY,UAAU;OAA3D,UAAA,CACL,oBAAC,MAAD;QAAM,MAAM,UAAU;QAAY,MAAM;OAAK,CAAA,GAC5C,KACG;MAAI,CAAA,IAAA,MACX,OAAO,oBAAC,MAAD;OAAM,OAAO,YAAY,WAAW,aAAa,WAAW;OAAO,UAAA;MAAW,CAAA,IAAI,IACnF;KAAI,CAAA,IAAA;IACR;;EACF,CAAA;CACN,CAAA;AACT;AACA,SAAS,cAAc"}
1
+ {"version":3,"file":"StatCard.mjs","names":["metricStyles","surfaceStyles"],"sources":["../../../src/dashboard/StatCard/StatCard.tsx"],"sourcesContent":["'use client';\n\nimport { styleProps } from '@/styles/stylex/props';\n\nimport MetricCell from '../MetricStrip/MetricCell';\nimport { styles as metricStyles } from '../MetricStrip/style';\nimport { useSurfaceCardStyles } from '../Surface/link';\nimport { styles as surfaceStyles } from '../Surface/style';\nimport type { StatCardProps } from './type';\n\n/** One metric in its own card: the same item as a `split` MetricStrip. */\nfunction StatCard({\n action,\n className,\n delta,\n direction = 'flat',\n hint,\n href,\n label,\n loading,\n mark,\n onClick,\n renderLink,\n value,\n valueTone,\n}: StatCardProps) {\n const cardStyles = useSurfaceCardStyles();\n\n return (\n <div {...styleProps([metricStyles.card, cardStyles, surfaceStyles.clip], className)}>\n <MetricCell\n renderLink={renderLink}\n item={{\n action,\n delta,\n direction,\n hint,\n href,\n label,\n loading,\n mark,\n onClick,\n value,\n valueTone,\n }}\n />\n </div>\n );\n}\n\nStatCard.displayName = 'StatCard';\n\nexport default StatCard;\n"],"mappings":";;;;;;;;;AAWA,SAAS,SAAS,EAChB,QACA,WACA,OACA,YAAY,QACZ,MACA,MACA,OACA,SACA,MACA,SACA,YACA,OACA,aACgB;CAChB,MAAM,aAAa,qBAAqB;CAExC,OACE,oBAAC,OAAD;EAAK,GAAI,WAAW;GAACA,SAAa;GAAM;GAAYC,OAAc;EAAI,GAAG,SAAS;EAChF,UAAA,oBAAC,YAAD;GACc;GACZ,MAAM;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;EACD,CAAA;CACE,CAAA;AAET;AAEA,SAAS,cAAc"}
@@ -1,24 +1,35 @@
1
1
  import { IconProps } from "../../Icon/type.mjs";
2
2
  import "../../Icon/index.mjs";
3
+ import { SurfaceRenderLink } from "../Surface/type.mjs";
3
4
  import { ReactNode } from "react";
4
5
  //#region src/dashboard/StatCard/type.d.ts
5
6
  export type StatDirection = 'up' | 'down' | 'flat';
6
- /** Top-to-bottom gray wash. Decorative color fields stay in the app. */
7
+ /** @deprecated StatCard renders as a MetricStrip item and no longer draws a wash. */
7
8
  export type StatWash = 'gray';
8
9
  export interface StatCardProps {
9
10
  /** Control rendered on the label row, such as a menu. */
10
11
  action?: ReactNode;
12
+ className?: string;
11
13
  /** Change amount, colored by `direction`. */
12
- delta?: string;
14
+ delta?: ReactNode;
13
15
  direction?: StatDirection;
14
- /** Line under the figure. */
15
- hint?: string;
16
+ /** Line after the delta. */
17
+ hint?: ReactNode;
18
+ /** Makes the card a link (through `renderLink` / `SurfaceLinkProvider`). */
19
+ href?: string;
16
20
  label: ReactNode;
21
+ /** Value placeholder while loading; the label stays. */
22
+ loading?: boolean;
17
23
  /** Corner glyph. Hidden from assistive tech so it does not repeat the label. */
18
24
  mark?: IconProps['icon'];
19
- /** Overview scale: label, then a large figure, then the note. */
25
+ onClick?: () => void;
26
+ /** @deprecated Ignored. StatCard always uses the MetricStrip item scale. */
20
27
  prominent?: boolean;
28
+ renderLink?: SurfaceRenderLink;
21
29
  value: ReactNode;
30
+ /** Color the figure when the number itself is the thing to act on. */
31
+ valueTone?: 'danger' | 'warning';
32
+ /** @deprecated Ignored. StatCard renders as a MetricStrip item without a wash. */
22
33
  wash?: StatWash;
23
34
  }
24
35
  //#endregion
@@ -1,10 +1,11 @@
1
1
  import { SurfaceProps } from "./type.mjs";
2
2
  //#region src/dashboard/Surface/Surface.d.ts
3
3
  /**
4
- * Elevated card on a workspace canvas. Use it for panels that should read
5
- * above the page background without inventing a new surface color.
4
+ * Elevated card on a workspace canvas. Bare, it is a plain frame. With `title`,
5
+ * `description` or `extra` it gets a header and a padded body that lets a
6
+ * trailing table meet the card edges.
6
7
  */
7
- declare function Surface({ className, style, ...rest }: SurfaceProps): import("react").JSX.Element;
8
+ declare function Surface({ bleed, chart, children, className, description, extra, href, loading, padded, renderLink, style, title, ...rest }: SurfaceProps): import("react").JSX.Element;
8
9
  declare namespace Surface {
9
10
  var displayName: string;
10
11
  }
@@ -1,16 +1,99 @@
1
1
  "use client";
2
2
  import { styleProps } from "../../styles/stylex/props.mjs";
3
- import { styles } from "./style.mjs";
4
- import { jsx } from "react/jsx-runtime";
3
+ import Spin from "../../Spin/Spin.mjs";
4
+ import Skeleton from "../../Skeleton/index.mjs";
5
+ import { surfaceMarker } from "./marker.stylex.mjs";
6
+ import { styles, surfaceClassNames } from "./style.mjs";
7
+ import { SurfaceDepthContext, useSurfaceCardStyles, useSurfaceDepth, useSurfaceLink } from "./link.mjs";
8
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
+ import clsx from "clsx";
10
+ import * as stylex from "@stylexjs/stylex";
11
+ import { ArrowUpRight } from "lucide-react";
5
12
  //#region src/dashboard/Surface/Surface.tsx
13
+ const defined = (node) => node !== null && node !== void 0 && node !== false;
6
14
  /**
7
- * Elevated card on a workspace canvas. Use it for panels that should read
8
- * above the page background without inventing a new surface color.
15
+ * Elevated card on a workspace canvas. Bare, it is a plain frame. With `title`,
16
+ * `description` or `extra` it gets a header and a padded body that lets a
17
+ * trailing table meet the card edges.
9
18
  */
10
- function Surface({ className, style, ...rest }) {
11
- return /* @__PURE__ */ jsx("div", {
12
- ...styleProps(styles.card, className, style),
13
- ...rest
19
+ function Surface({ bleed = false, chart, children, className, description, extra, href, loading, padded, renderLink, style, title, ...rest }) {
20
+ const depth = useSurfaceDepth();
21
+ const link = useSurfaceLink(renderLink);
22
+ const cardStyles = useSurfaceCardStyles();
23
+ const refreshing = Boolean(loading) && defined(children);
24
+ const placeholder = Boolean(loading) && !defined(children);
25
+ const hasHeader = defined(title) || defined(description) || defined(extra) || refreshing;
26
+ const pad = bleed ? false : padded ?? (hasHeader || placeholder);
27
+ const clip = hasHeader || bleed || pad || defined(chart);
28
+ const heading = /* @__PURE__ */ jsxs("div", {
29
+ ...stylex.props(styles.heading),
30
+ children: [defined(title) ? /* @__PURE__ */ jsx("div", {
31
+ ...stylex.props(styles.title),
32
+ children: title
33
+ }) : null, defined(description) ? /* @__PURE__ */ jsx("div", {
34
+ ...stylex.props(styles.desc),
35
+ children: description
36
+ }) : null]
37
+ });
38
+ const body = placeholder ? /* @__PURE__ */ jsx("div", {
39
+ "aria-busy": "true",
40
+ ...stylex.props(styles.loading),
41
+ children: /* @__PURE__ */ jsx(Skeleton, {
42
+ height: 220,
43
+ radius: 8
44
+ })
45
+ }) : children;
46
+ const trailing = refreshing || defined(extra);
47
+ const arrow = /* @__PURE__ */ jsx(ArrowUpRight, {
48
+ "aria-hidden": true,
49
+ size: 16,
50
+ ...stylex.props(styles.arrow, trailing && styles.arrowInLink)
51
+ });
52
+ return /* @__PURE__ */ jsx(SurfaceDepthContext, {
53
+ value: depth + 1,
54
+ children: /* @__PURE__ */ jsxs("div", {
55
+ ...styleProps([
56
+ cardStyles,
57
+ styles.content,
58
+ clip && styles.clip,
59
+ Boolean(href) && [styles.cardLinked, surfaceMarker]
60
+ ], clsx(surfaceClassNames.root, bleed && surfaceClassNames.bleed, className), style),
61
+ ...rest,
62
+ children: [
63
+ hasHeader ? /* @__PURE__ */ jsxs("div", {
64
+ ...stylex.props(styles.header),
65
+ children: [href ? link({
66
+ children: /* @__PURE__ */ jsxs(Fragment, { children: [heading, trailing ? null : arrow] }),
67
+ className: stylex.props(styles.headingLink).className,
68
+ href
69
+ }) : heading, trailing ? /* @__PURE__ */ jsxs("div", {
70
+ ...stylex.props(styles.extra),
71
+ children: [
72
+ refreshing ? /* @__PURE__ */ jsx(Spin, {
73
+ size: "small",
74
+ variant: "network"
75
+ }) : null,
76
+ extra,
77
+ href ? link({
78
+ "aria-hidden": true,
79
+ "children": arrow,
80
+ "className": stylex.props(styles.arrowLink).className,
81
+ href,
82
+ "tabIndex": -1
83
+ }) : null
84
+ ]
85
+ }) : null]
86
+ }) : null,
87
+ pad ? /* @__PURE__ */ jsx("div", {
88
+ ...styleProps(styles.body, surfaceClassNames.tableBleed),
89
+ children: body
90
+ }) : body,
91
+ defined(chart) ? /* @__PURE__ */ jsx("div", {
92
+ ...stylex.props(styles.chart),
93
+ children: chart
94
+ }) : null
95
+ ]
96
+ })
14
97
  });
15
98
  }
16
99
  Surface.displayName = "Surface";
@@ -1 +1 @@
1
- {"version":3,"file":"Surface.mjs","names":[],"sources":["../../../src/dashboard/Surface/Surface.tsx"],"sourcesContent":["'use client';\n\nimport { styleProps } from '@/styles/stylex/props';\n\nimport { styles } from './style';\nimport type { SurfaceProps } from './type';\n\n/**\n * Elevated card on a workspace canvas. Use it for panels that should read\n * above the page background without inventing a new surface color.\n */\nfunction Surface({ className, style, ...rest }: SurfaceProps) {\n return <div {...styleProps(styles.card, className, style)} {...rest} />;\n}\n\nSurface.displayName = 'Surface';\n\nexport default Surface;\n"],"mappings":";;;;;;;;;AAWA,SAAS,QAAQ,EAAE,WAAW,OAAO,GAAG,QAAsB;CAC5D,OAAO,oBAAC,OAAD;EAAK,GAAI,WAAW,OAAO,MAAM,WAAW,KAAK;EAAG,GAAI;CAAO,CAAA;AACxE;AAEA,QAAQ,cAAc"}
1
+ {"version":3,"file":"Surface.mjs","names":[],"sources":["../../../src/dashboard/Surface/Surface.tsx"],"sourcesContent":["'use client';\n\nimport './style.css';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { ArrowUpRight } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport Skeleton from '@/Skeleton';\nimport Spin from '@/Spin';\nimport { styleProps } from '@/styles/stylex/props';\n\nimport { SurfaceDepthContext, useSurfaceCardStyles, useSurfaceDepth, useSurfaceLink } from './link';\nimport { surfaceMarker } from './marker.stylex';\nimport { styles, surfaceClassNames } from './style';\nimport type { SurfaceProps } from './type';\n\nconst defined = (node: ReactNode) => node !== null && node !== undefined && node !== false;\n\n/**\n * Elevated card on a workspace canvas. Bare, it is a plain frame. With `title`,\n * `description` or `extra` it gets a header and a padded body that lets a\n * trailing table meet the card edges.\n */\nfunction Surface({\n bleed = false,\n chart,\n children,\n className,\n description,\n extra,\n href,\n loading,\n padded,\n renderLink,\n style,\n title,\n ...rest\n}: SurfaceProps) {\n const depth = useSurfaceDepth();\n const link = useSurfaceLink(renderLink);\n const cardStyles = useSurfaceCardStyles();\n const refreshing = Boolean(loading) && defined(children);\n const placeholder = Boolean(loading) && !defined(children);\n const hasHeader = defined(title) || defined(description) || defined(extra) || refreshing;\n const pad = bleed ? false : (padded ?? (hasHeader || placeholder));\n const clip = hasHeader || bleed || pad || defined(chart);\n\n const heading = (\n <div {...stylex.props(styles.heading)}>\n {defined(title) ? <div {...stylex.props(styles.title)}>{title}</div> : null}\n {defined(description) ? <div {...stylex.props(styles.desc)}>{description}</div> : null}\n </div>\n );\n\n const body = placeholder ? (\n <div aria-busy=\"true\" {...stylex.props(styles.loading)}>\n <Skeleton height={220} radius={8} />\n </div>\n ) : (\n children\n );\n\n // With header actions, the arrow sits after them as the rightmost item.\n const trailing = refreshing || defined(extra);\n const arrow = (\n <ArrowUpRight\n aria-hidden\n size={16}\n {...stylex.props(styles.arrow, trailing && styles.arrowInLink)}\n />\n );\n\n return (\n <SurfaceDepthContext value={depth + 1}>\n <div\n {...styleProps(\n [\n cardStyles,\n styles.content,\n clip && styles.clip,\n Boolean(href) && [styles.cardLinked, surfaceMarker],\n ],\n clsx(surfaceClassNames.root, bleed && surfaceClassNames.bleed, className),\n style,\n )}\n {...rest}\n >\n {hasHeader ? (\n <div {...stylex.props(styles.header)}>\n {href\n ? link({\n children: (\n <>\n {heading}\n {trailing ? null : arrow}\n </>\n ),\n className: stylex.props(styles.headingLink).className,\n href,\n })\n : heading}\n {trailing ? (\n <div {...stylex.props(styles.extra)}>\n {refreshing ? <Spin size=\"small\" variant=\"network\" /> : null}\n {extra}\n {href\n ? link({\n 'aria-hidden': true,\n 'children': arrow,\n 'className': stylex.props(styles.arrowLink).className,\n href,\n 'tabIndex': -1,\n } as any)\n : null}\n </div>\n ) : null}\n </div>\n ) : null}\n {pad ? <div {...styleProps(styles.body, surfaceClassNames.tableBleed)}>{body}</div> : body}\n {defined(chart) ? <div {...stylex.props(styles.chart)}>{chart}</div> : null}\n </div>\n </SurfaceDepthContext>\n );\n}\n\nSurface.displayName = 'Surface';\n\nexport default Surface;\n"],"mappings":";;;;;;;;;;;;AAcA,MAAM,WAAW,SAAoB,SAAS,QAAQ,SAAS,KAAA,KAAa,SAAS;;;;;;AAOrF,SAAS,QAAQ,EACf,QAAQ,OACR,OACA,UACA,WACA,aACA,OACA,MACA,SACA,QACA,YACA,OACA,OACA,GAAG,QACY;CACf,MAAM,QAAQ,gBAAgB;CAC9B,MAAM,OAAO,eAAe,UAAU;CACtC,MAAM,aAAa,qBAAqB;CACxC,MAAM,aAAa,QAAQ,OAAO,KAAK,QAAQ,QAAQ;CACvD,MAAM,cAAc,QAAQ,OAAO,KAAK,CAAC,QAAQ,QAAQ;CACzD,MAAM,YAAY,QAAQ,KAAK,KAAK,QAAQ,WAAW,KAAK,QAAQ,KAAK,KAAK;CAC9E,MAAM,MAAM,QAAQ,QAAQ,WAAW,aAAa;CACpD,MAAM,OAAO,aAAa,SAAS,OAAO,QAAQ,KAAK;CACvD,MAAM,UAAU,qBAAC,OAAD;EAAK,GAAI,OAAO,MAAM,OAAO,OAAO;EAApC,UAAA,CACX,QAAQ,KAAK,IAAI,oBAAC,OAAD;GAAK,GAAI,OAAO,MAAM,OAAO,KAAK;GAAI,UAAA;EAAW,CAAA,IAAI,MACtE,QAAQ,WAAW,IAAI,oBAAC,OAAD;GAAK,GAAI,OAAO,MAAM,OAAO,IAAI;GAAI,UAAA;EAAiB,CAAA,IAAI,IAC/E;;CACP,MAAM,OAAO,cAAc,oBAAC,OAAD;EAAK,aAAU;EAAO,GAAI,OAAO,MAAM,OAAO,OAAO;EAC5E,UAAA,oBAAC,UAAD;GAAU,QAAQ;GAAK,QAAQ;EAAI,CAAA;CAChC,CAAA,IAAI;CAGX,MAAM,WAAW,cAAc,QAAQ,KAAK;CAC5C,MAAM,QAAQ,oBAAC,cAAD;EAAc,eAAA;EAAY,MAAM;EAAI,GAAI,OAAO,MAAM,OAAO,OAAO,YAAY,OAAO,WAAW;CAAI,CAAA;CACnH,OAAO,oBAAC,qBAAD;EAAqB,OAAO,QAAQ;EACvC,UAAA,qBAAC,OAAD;GAAK,GAAI,WAAW;IAAC;IAAY,OAAO;IAAS,QAAQ,OAAO;IAAM,QAAQ,IAAI,KAAK,CAAC,OAAO,YAAY,aAAa;GAAC,GAAG,KAAK,kBAAkB,MAAM,SAAS,kBAAkB,OAAO,SAAS,GAAG,KAAK;GAAG,GAAI;GAAnN,UAAA;IACG,YAAY,qBAAC,OAAD;KAAK,GAAI,OAAO,MAAM,OAAO,MAAM;KAAnC,UAAA,CACR,OAAO,KAAK;MACf,UAAU,qBAAA,UAAA,EAAA,UAAA,CACG,SACA,WAAW,OAAO,KACnB,EAAA,CAAA;MACZ,WAAW,OAAO,MAAM,OAAO,WAAW,CAAC,CAAC;MAC5C;KACF,CAAC,IAAI,SACA,WAAW,qBAAC,OAAD;MAAK,GAAI,OAAO,MAAM,OAAO,KAAK;MAAlC,UAAA;OACP,aAAa,oBAAC,MAAD;QAAM,MAAK;QAAQ,SAAQ;OAAW,CAAA,IAAI;OACvD;OACA,OAAO,KAAK;QACjB,eAAe;QACf,YAAY;QACZ,aAAa,OAAO,MAAM,OAAO,SAAS,CAAC,CAAC;QAC5C;QACA,YAAY;OACd,CAAQ,IAAI;MACH;KAAI,CAAA,IAAA,IACR;IAAI,CAAA,IAAA;IACV,MAAM,oBAAC,OAAD;KAAK,GAAI,WAAW,OAAO,MAAM,kBAAkB,UAAU;KAAI,UAAA;IAAU,CAAA,IAAI;IACrF,QAAQ,KAAK,IAAI,oBAAC,OAAD;KAAK,GAAI,OAAO,MAAM,OAAO,KAAK;KAAI,UAAA;IAAW,CAAA,IAAI;GACpE;;CACc,CAAA;AACzB;AACA,QAAQ,cAAc"}
@@ -1,4 +1,5 @@
1
+ import { SurfaceLinkProps, SurfaceProps, SurfaceRenderLink } from "./type.mjs";
2
+ import { SurfaceLinkProvider, useSurfaceCardClassName, useSurfaceDepth, useSurfaceLink } from "./link.mjs";
1
3
  import { surfaceStyles } from "./style.mjs";
2
- import { SurfaceProps } from "./type.mjs";
3
4
  import Surface from "./Surface.mjs";
4
- export { type SurfaceProps, Surface as default, surfaceStyles };
5
+ export { type SurfaceLinkProps, SurfaceLinkProvider, type SurfaceProps, type SurfaceRenderLink, Surface as default, surfaceStyles, useSurfaceCardClassName, useSurfaceDepth, useSurfaceLink };
@@ -0,0 +1,16 @@
1
+ import { SurfaceRenderLink } from "./type.mjs";
2
+ import { ReactNode } from "react";
3
+ import "@stylexjs/stylex";
4
+ //#region src/dashboard/Surface/link.d.ts
5
+ /** Plugs the app router into every dashboard card link (Surface, MetricStrip, Section). */
6
+ export declare const SurfaceLinkProvider: ({ children, renderLink }: {
7
+ children?: ReactNode;
8
+ renderLink: SurfaceRenderLink;
9
+ }) => import("react").JSX.Element;
10
+ export declare const useSurfaceLink: (override?: SurfaceRenderLink) => SurfaceRenderLink;
11
+ /** How many Surface cards wrap this node. A table can skip its own card when already inside one. */
12
+ export declare const useSurfaceDepth: () => number;
13
+ /** Class name form of `useSurfaceCardStyles`, for markup that is not styled with StyleX. */
14
+ export declare const useSurfaceCardClassName: () => string;
15
+ //#endregion
16
+ //# sourceMappingURL=link.d.mts.map
@@ -0,0 +1,40 @@
1
+ "use client";
2
+ import { useThemeMode } from "../../styles/theme/scope.mjs";
3
+ import { styles } from "./style.mjs";
4
+ import { createContext, use } from "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+ import * as stylex from "@stylexjs/stylex";
7
+ //#region src/dashboard/Surface/link.tsx
8
+ const defaultRenderLink = ({ children, ...rest }) => /* @__PURE__ */ jsx("a", {
9
+ ...rest,
10
+ children
11
+ });
12
+ const SurfaceLinkContext = createContext(defaultRenderLink);
13
+ const SurfaceDepthContext = createContext(0);
14
+ /** Plugs the app router into every dashboard card link (Surface, MetricStrip, Section). */
15
+ const SurfaceLinkProvider = ({ children, renderLink }) => /* @__PURE__ */ jsx(SurfaceLinkContext, {
16
+ value: renderLink,
17
+ children
18
+ });
19
+ const useSurfaceLink = (override) => override ?? use(SurfaceLinkContext);
20
+ /** How many Surface cards wrap this node. A table can skip its own card when already inside one. */
21
+ const useSurfaceDepth = () => use(SurfaceDepthContext);
22
+ /**
23
+ * StyleX styles for a dashboard card: `colorBgContainer` in light, translucent
24
+ * `colorFillTertiary` in dark, and no fill of its own when nested in another Surface.
25
+ */
26
+ const useSurfaceCardStyles = () => {
27
+ const { isDarkMode } = useThemeMode();
28
+ const depth = useSurfaceDepth();
29
+ return [
30
+ styles.card,
31
+ isDarkMode && styles.cardDark,
32
+ depth > 0 && styles.cardNested
33
+ ];
34
+ };
35
+ /** Class name form of `useSurfaceCardStyles`, for markup that is not styled with StyleX. */
36
+ const useSurfaceCardClassName = () => stylex.props(useSurfaceCardStyles()).className ?? "";
37
+ //#endregion
38
+ export { SurfaceDepthContext, SurfaceLinkProvider, useSurfaceCardClassName, useSurfaceCardStyles, useSurfaceDepth, useSurfaceLink };
39
+
40
+ //# sourceMappingURL=link.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.mjs","names":[],"sources":["../../../src/dashboard/Surface/link.tsx"],"sourcesContent":["'use client';\n\nimport * as stylex from '@stylexjs/stylex';\nimport { createContext, type ReactNode, use } from 'react';\n\nimport { useThemeMode } from '@/styles/theme/scope';\n\nimport { styles } from './style';\nimport type { SurfaceLinkProps, SurfaceRenderLink } from './type';\n\nconst defaultRenderLink: SurfaceRenderLink = ({ children, ...rest }: SurfaceLinkProps) => (\n <a {...rest}>{children}</a>\n);\n\nconst SurfaceLinkContext = createContext<SurfaceRenderLink>(defaultRenderLink);\n\nconst SurfaceDepthContext = createContext(0);\n\n/** Plugs the app router into every dashboard card link (Surface, MetricStrip, Section). */\nexport const SurfaceLinkProvider = ({\n children,\n renderLink,\n}: {\n children?: ReactNode;\n renderLink: SurfaceRenderLink;\n}) => <SurfaceLinkContext value={renderLink}>{children}</SurfaceLinkContext>;\n\nexport const useSurfaceLink = (override?: SurfaceRenderLink) => override ?? use(SurfaceLinkContext);\n\n/** How many Surface cards wrap this node. A table can skip its own card when already inside one. */\nexport const useSurfaceDepth = () => use(SurfaceDepthContext);\n\nexport { SurfaceDepthContext };\n\n/**\n * StyleX styles for a dashboard card: `colorBgContainer` in light, translucent\n * `colorFillTertiary` in dark, and no fill of its own when nested in another Surface.\n */\nexport const useSurfaceCardStyles = () => {\n const { isDarkMode } = useThemeMode();\n const depth = useSurfaceDepth();\n return [styles.card, isDarkMode && styles.cardDark, depth > 0 && styles.cardNested] as const;\n};\n\n/** Class name form of `useSurfaceCardStyles`, for markup that is not styled with StyleX. */\nexport const useSurfaceCardClassName = () => stylex.props(useSurfaceCardStyles()).className ?? '';\n"],"mappings":";;;;;;;AAOA,MAAM,qBAAwC,EAC5C,UACA,GAAG,WACmB,oBAAC,KAAD;CAAG,GAAI;CAAO;AAAY,CAAA;AAClD,MAAM,qBAAqB,cAAiC,iBAAiB;AAC7E,MAAM,sBAAsB,cAAc,CAAC;;AAG3C,MAAa,uBAAuB,EAClC,UACA,iBAII,oBAAC,oBAAD;CAAoB,OAAO;CAAa;AAA6B,CAAA;AAC3E,MAAa,kBAAkB,aAAiC,YAAY,IAAI,kBAAkB;;AAGlG,MAAa,wBAAwB,IAAI,mBAAmB;;;;;AAO5D,MAAa,6BAA6B;CACxC,MAAM,EACJ,eACE,aAAa;CACjB,MAAM,QAAQ,gBAAgB;CAC9B,OAAO;EAAC,OAAO;EAAM,cAAc,OAAO;EAAU,QAAQ,KAAK,OAAO;CAAU;AACpF;;AAGA,MAAa,gCAAgC,OAAO,MAAM,qBAAqB,CAAC,CAAC,CAAC,aAAa"}
@@ -0,0 +1,9 @@
1
+ //#region src/dashboard/Surface/marker.stylex.ts
2
+ const surfaceMarker = {
3
+ lbbfx20b: "lbbfx20b",
4
+ $$css: true
5
+ };
6
+ //#endregion
7
+ export { surfaceMarker };
8
+
9
+ //# sourceMappingURL=marker.stylex.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marker.stylex.mjs","names":[],"sources":["../../../src/dashboard/Surface/marker.stylex.ts"],"sourcesContent":["import * as stylex from '@stylexjs/stylex';\n\nexport const surfaceMarker = stylex.defineMarker();\n"],"mappings":";AACA,MAAa,gBAAgB;CAC3B,UAAU;CACV,OAAO;AACT"}
@@ -2,6 +2,8 @@ import "@stylexjs/stylex";
2
2
  //#region src/dashboard/Surface/style.d.ts
3
3
  export declare const surfaceStyles: {
4
4
  card: string;
5
+ clip: string;
6
+ tableBleed: string;
5
7
  };
6
8
  //#endregion
7
9
  //# sourceMappingURL=style.d.mts.map
@@ -2,21 +2,162 @@
2
2
  /**
3
3
  * A content card sitting on the workspace.
4
4
  *
5
- * Outlined `Block` uses `colorBorderSecondary` on `colorBgContainer`.
6
- * The workspace is already that container, so a card inside it steps up to
7
- * `colorBgElevated` and `colorBorder`.
5
+ * Backgrounds: light mode uses `colorBgContainer`. Dark mode uses the translucent
6
+ * `colorFillTertiary` (white 6%): on the #0d0d0d workspace it reads as about #1c1c1c, a subtle
7
+ * raised step. `colorFillQuaternary` (white 2%, about #111) would barely separate from the page.
8
+ *
9
+ * Borders and inner dividers (table, header and cell lines, PageSkeleton) use `colorFillSecondary`
10
+ * (white 10% / black 6%); hover and focus use the stronger `colorFill`. Painted over the dark card
11
+ * the border lands near #2f2f2f against #1c1c1c, and in light near #f0f0f0 against #ffffff.
12
+ *
13
+ * Anything that must hide content scrolled beneath it (table header cells, pinned and sticky
14
+ * cells) uses `--lobe-surface-bg-solid`: the same white 6% blended onto `--lobe-surface-canvas`
15
+ * (default `colorBgContainer`, the ConsoleShell workspace). `color-mix` in srgb with an opaque
16
+ * base is plain alpha compositing, so it matches the translucent card. Set
17
+ * `--lobe-surface-canvas` when a card sits on another page color.
18
+ *
19
+ * A Surface inside another Surface (`useSurfaceDepth() > 0`) drops its own fill so fills do not
20
+ * stack. Row hover backgrounds keep their own mix. Layout containers (ConsoleShell, ConsoleNav,
21
+ * FilterSidebar split divider, AuthLayout page canvas) keep their own tokens.
22
+ *
23
+ * Apply the card with `useSurfaceCardStyles()` / `useSurfaceCardClassName()`; plain
24
+ * `surfaceStyles.card` is the light look. Table rules for consumer markup live in `style.css`.
8
25
  */
9
- const styles = { card: {
10
- kVAM5u: "lbqnr5ac",
11
- kaIpWk: "lb1ndkxwp",
12
- ksu8eU: "lb1y0btm7",
13
- kMzoRj: "lbmkeg23",
14
- kWkggS: "lb1w937bt",
15
- kGVxlE: "lb1c4gvbl",
16
- $$css: true
17
- } };
18
- const surfaceStyles = { card: { className: "lbqnr5ac lb1ndkxwp lb1y0btm7 lbmkeg23 lb1w937bt lb1c4gvbl" }.className ?? "" };
26
+ const styles = {
27
+ arrow: {
28
+ kUk6DE: "lb1okw0bk",
29
+ kmkexE: "lb1edyq7o",
30
+ kMwMTN: "lb53gy9q lb1yoes0a",
31
+ keoZOQ: "lb1xmf6yo",
32
+ keTefX: "lbvc5jky",
33
+ k3aq6I: "lb1fdxmpd",
34
+ $$css: true
35
+ },
36
+ arrowInLink: {
37
+ keoZOQ: "lbdj266r",
38
+ $$css: true
39
+ },
40
+ arrowLink: {
41
+ kUk6DE: "lb1okw0bk",
42
+ kGNEyG: "lb6s0dn4",
43
+ kMwMTN: "lb1heor9g",
44
+ k1xSpc: "lb78zum5",
45
+ $$css: true
46
+ },
47
+ body: {
48
+ "--surface-pad-block": "lb4vqstq",
49
+ "--surface-pad-inline": "lbssx8jz",
50
+ kmVPX3: "lb1tamke2",
51
+ $$css: true
52
+ },
53
+ card: {
54
+ "--lobe-surface-bg": "lbwvmpdu",
55
+ "--lobe-surface-bg-solid": "lb1hc46fh",
56
+ kVAM5u: "lb6d5vuu",
57
+ kaIpWk: "lb1ndkxwp",
58
+ ksu8eU: "lb1y0btm7",
59
+ kMzoRj: "lbmkeg23",
60
+ kWkggS: "lb1x6hv1e",
61
+ kGVxlE: "lb3b5rli",
62
+ $$css: true
63
+ },
64
+ cardDark: {
65
+ "--lobe-surface-bg": "lb3bfph8",
66
+ "--lobe-surface-bg-solid": "lb1l8ls3s",
67
+ $$css: true
68
+ },
69
+ cardLinked: {
70
+ kVAM5u: "lb6d5vuu lb1j0btqu lb13v5du5",
71
+ $$css: true
72
+ },
73
+ cardNested: {
74
+ kWkggS: "lbjbqb8w",
75
+ $$css: true
76
+ },
77
+ chart: {
78
+ k7Eaqz: "lbeuugli",
79
+ $$css: true
80
+ },
81
+ clip: {
82
+ kVQacm: "lbb3r6kr",
83
+ $$css: true
84
+ },
85
+ content: {
86
+ k7Eaqz: "lbeuugli",
87
+ $$css: true
88
+ },
89
+ desc: {
90
+ kMwMTN: "lbc77et8",
91
+ kGuDYH: "lb4z9k3i",
92
+ k63SB2: "lbo1l8bm",
93
+ kLWn49: "lbfrs9s4",
94
+ keoZOQ: "lb1rdy4ex",
95
+ $$css: true
96
+ },
97
+ extra: {
98
+ kUk6DE: "lb1okw0bk",
99
+ kOIVth: "lb167g77z",
100
+ kGNEyG: "lb6s0dn4",
101
+ kZKoxP: "lb10w6t97",
102
+ k1xSpc: "lb78zum5",
103
+ $$css: true
104
+ },
105
+ header: {
106
+ kOIVth: "lb1v2ro7d",
107
+ k8WAf4: "lb1vvogim",
108
+ kg3NbH: "lb1hr3lfm",
109
+ kGNEyG: "lb1cy8zhl",
110
+ kL6WhQ: "lb1ak05nl",
111
+ kfdmCh: "lb1q0q8m5",
112
+ kt9PQ7: "lbso031l",
113
+ kB7OPa: "lb9f619",
114
+ k1xSpc: "lb78zum5",
115
+ kjj79g: "lb1qughib",
116
+ kAzted: "lb1wxaq2x",
117
+ $$css: true
118
+ },
119
+ heading: {
120
+ k7Eaqz: "lbeuugli",
121
+ $$css: true
122
+ },
123
+ headingLink: {
124
+ kUk6DE: "lb98rzlu",
125
+ kOIVth: "lb1v2ro7d",
126
+ kybGjl: "lb1hl2dhg",
127
+ kGNEyG: "lb1cy8zhl",
128
+ kMwMTN: "lb1heor9g lb144v4sp",
129
+ k1xSpc: "lb78zum5",
130
+ k7Eaqz: "lbeuugli",
131
+ $$css: true
132
+ },
133
+ loading: {
134
+ kGO01o: "lbwib8y2",
135
+ kLKAdn: "lb1iorvi4",
136
+ $$css: true
137
+ },
138
+ title: {
139
+ kVQacm: "lbb3r6kr",
140
+ kMwMTN: "lb66ogz0",
141
+ kGuDYH: "lbif65rj",
142
+ k63SB2: "lbk50ysn",
143
+ kLWn49: "lbcgk4ki",
144
+ k7Eaqz: "lbeuugli",
145
+ kg5iWk: "lblyipyv",
146
+ khDVqt: "lbuxw1ft",
147
+ $$css: true
148
+ }
149
+ };
150
+ const surfaceClassNames = {
151
+ bleed: "lobe-surface-bleed",
152
+ root: "lobe-surface",
153
+ tableBleed: "lobe-surface-table-bleed"
154
+ };
155
+ const surfaceStyles = {
156
+ card: { className: "lbwvmpdu lb1hc46fh lb6d5vuu lb1ndkxwp lb1y0btm7 lbmkeg23 lb1x6hv1e lb3b5rli" }.className ?? "",
157
+ clip: { className: "lbb3r6kr" }.className ?? "",
158
+ tableBleed: surfaceClassNames.tableBleed
159
+ };
19
160
  //#endregion
20
- export { styles, surfaceStyles };
161
+ export { styles, surfaceClassNames, surfaceStyles };
21
162
 
22
163
  //# sourceMappingURL=style.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"style.mjs","names":[],"sources":["../../../src/dashboard/Surface/style.ts"],"sourcesContent":["import * as stylex from '@stylexjs/stylex';\n\nimport { cssVar } from '@/styles/stylex/cssVar.stylex';\n\n/**\n * A content card sitting on the workspace.\n *\n * Outlined `Block` uses `colorBorderSecondary` on `colorBgContainer`.\n * The workspace is already that container, so a card inside it steps up to\n * `colorBgElevated` and `colorBorder`.\n */\nexport const styles = stylex.create({\n card: {\n borderColor: cssVar.colorBorder,\n borderRadius: cssVar.borderRadiusLG,\n borderStyle: 'solid',\n borderWidth: 1,\n backgroundColor: cssVar.colorBgElevated,\n boxShadow: cssVar.boxShadowTertiary,\n },\n});\n\nexport const surfaceStyles = {\n card: stylex.props(styles.card).className ?? '',\n};\n"],"mappings":";;;;;;;;AAWA,MAAa,SAAS,EACpB,MAAM;CACJ,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,OAAO;AACT,EACF;AACA,MAAa,gBAAgB,EAC3B,MAAM,EACJ,WAAW,4DACb,EAAE,aAAa,GACjB"}
1
+ {"version":3,"file":"style.mjs","names":[],"sources":["../../../src/dashboard/Surface/style.ts"],"sourcesContent":["import * as stylex from '@stylexjs/stylex';\n\nimport { cssVar } from '@/styles/stylex/cssVar.stylex';\n\nimport { surfaceMarker } from './marker.stylex';\n\n/**\n * A content card sitting on the workspace.\n *\n * Backgrounds: light mode uses `colorBgContainer`. Dark mode uses the translucent\n * `colorFillTertiary` (white 6%): on the #0d0d0d workspace it reads as about #1c1c1c, a subtle\n * raised step. `colorFillQuaternary` (white 2%, about #111) would barely separate from the page.\n *\n * Borders and inner dividers (table, header and cell lines, PageSkeleton) use `colorFillSecondary`\n * (white 10% / black 6%); hover and focus use the stronger `colorFill`. Painted over the dark card\n * the border lands near #2f2f2f against #1c1c1c, and in light near #f0f0f0 against #ffffff.\n *\n * Anything that must hide content scrolled beneath it (table header cells, pinned and sticky\n * cells) uses `--lobe-surface-bg-solid`: the same white 6% blended onto `--lobe-surface-canvas`\n * (default `colorBgContainer`, the ConsoleShell workspace). `color-mix` in srgb with an opaque\n * base is plain alpha compositing, so it matches the translucent card. Set\n * `--lobe-surface-canvas` when a card sits on another page color.\n *\n * A Surface inside another Surface (`useSurfaceDepth() > 0`) drops its own fill so fills do not\n * stack. Row hover backgrounds keep their own mix. Layout containers (ConsoleShell, ConsoleNav,\n * FilterSidebar split divider, AuthLayout page canvas) keep their own tokens.\n *\n * Apply the card with `useSurfaceCardStyles()` / `useSurfaceCardClassName()`; plain\n * `surfaceStyles.card` is the light look. Table rules for consumer markup live in `style.css`.\n */\nexport const styles = stylex.create({\n arrow: {\n flex: 'none',\n transition: 'color 150ms ease-out, transform 150ms ease-out',\n color: {\n default: cssVar.colorTextTertiary,\n [stylex.when.ancestor(':hover', surfaceMarker)]: cssVar.colorText,\n },\n marginBlockStart: 8,\n marginInlineStart: 'auto',\n transform: {\n default: null,\n [stylex.when.ancestor(':hover', surfaceMarker)]: 'translate(1px, -1px)',\n },\n },\n arrowInLink: {\n marginBlockStart: 0,\n },\n arrowLink: {\n flex: 'none',\n alignItems: 'center',\n color: 'inherit',\n display: 'flex',\n },\n body: {\n '--surface-pad-block': '16px',\n '--surface-pad-inline': '16px',\n 'padding': 16,\n },\n card: {\n '--lobe-surface-bg': cssVar.colorBgContainer,\n '--lobe-surface-bg-solid': cssVar.colorBgContainer,\n 'borderColor': cssVar.colorFillSecondary,\n 'borderRadius': cssVar.borderRadiusLG,\n 'borderStyle': 'solid',\n 'borderWidth': 1,\n 'backgroundColor': 'var(--lobe-surface-bg)',\n 'boxShadow': 'rgb(0 0 0 / 4%) 0 1px 2px 0',\n },\n cardDark: {\n '--lobe-surface-bg': cssVar.colorFillTertiary,\n '--lobe-surface-bg-solid': `color-mix(in srgb, #fff 6%, var(--lobe-surface-canvas, ${cssVar.colorBgContainer}))`,\n },\n cardLinked: {\n borderColor: {\n 'default': cssVar.colorFillSecondary,\n ':focus-within': cssVar.colorFill,\n ':hover': cssVar.colorFill,\n },\n },\n cardNested: {\n backgroundColor: 'transparent',\n },\n chart: {\n minInlineSize: 0,\n },\n clip: {\n overflow: 'hidden',\n },\n content: {\n minInlineSize: 0,\n },\n desc: {\n color: cssVar.colorTextSecondary,\n fontSize: 13,\n fontWeight: 400,\n lineHeight: 1.45,\n marginBlockStart: -4,\n },\n /* One fixed control row (32px, the height of a small Segmented or a default ActionIcon), so a\n header with controls is exactly as tall as one without, and the controls sit centered with\n 8px clear above the divider. */\n extra: {\n flex: 'none',\n gap: 8,\n alignItems: 'center',\n blockSize: 32,\n display: 'flex',\n },\n header: {\n gap: 12,\n paddingBlock: 8,\n paddingInline: 16,\n alignItems: 'flex-start',\n borderBlockEndColor: cssVar.colorFillSecondary,\n borderBlockEndStyle: 'solid',\n borderBlockEndWidth: 1,\n boxSizing: 'border-box',\n display: 'flex',\n justifyContent: 'space-between',\n minBlockSize: 48,\n },\n heading: {\n minInlineSize: 0,\n },\n headingLink: {\n flex: '1',\n gap: 12,\n textDecoration: 'none',\n alignItems: 'flex-start',\n color: { 'default': 'inherit', ':hover': 'inherit' },\n display: 'flex',\n minInlineSize: 0,\n },\n loading: {\n paddingBlockEnd: 8,\n paddingBlockStart: 4,\n },\n title: {\n overflow: 'hidden',\n color: cssVar.colorText,\n fontSize: 14,\n fontWeight: 500,\n /* The title line is the 32px control row; extra and the arrow center on it, and a\n description adds its own line below without moving them. */\n lineHeight: '32px',\n minInlineSize: 0,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n});\n\nexport const surfaceClassNames = {\n bleed: 'lobe-surface-bleed',\n root: 'lobe-surface',\n tableBleed: 'lobe-surface-table-bleed',\n};\n\nexport const surfaceStyles = {\n card: stylex.props(styles.card).className ?? '',\n clip: stylex.props(styles.clip).className ?? '',\n tableBleed: surfaceClassNames.tableBleed,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,MAAa,SAAS;CACpB,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,aAAa;EACX,QAAQ;EACR,OAAO;CACT;CACA,WAAW;EACT,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,MAAM;EACJ,uBAAuB;EACvB,wBAAwB;EACxB,QAAQ;EACR,OAAO;CACT;CACA,MAAM;EACJ,qBAAqB;EACrB,2BAA2B;EAC3B,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,qBAAqB;EACrB,2BAA2B;EAC3B,OAAO;CACT;CACA,YAAY;EACV,QAAQ;EACR,OAAO;CACT;CACA,YAAY;EACV,QAAQ;EACR,OAAO;CACT;CACA,OAAO;EACL,QAAQ;EACR,OAAO;CACT;CACA,MAAM;EACJ,QAAQ;EACR,OAAO;CACT;CACA,SAAS;EACP,QAAQ;EACR,OAAO;CACT;CACA,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,QAAQ;EACN,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,SAAS;EACP,QAAQ;EACR,OAAO;CACT;CACA,aAAa;EACX,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,SAAS;EACP,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;AACF;AACA,MAAa,oBAAoB;CAC/B,OAAO;CACP,MAAM;CACN,YAAY;AACd;AACA,MAAa,gBAAgB;CAC3B,MAAM,EACJ,WAAW,8EACb,EAAE,aAAa;CACf,MAAM,EACJ,WAAW,WACb,EAAE,aAAa;CACf,YAAY,kBAAkB;AAChC"}