@agentskillmania/skill-ui-shared 0.1.4 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/README.md +27 -32
  2. package/README.zh_CN.md +46 -0
  3. package/dist/files/FilePreview.d.ts +4 -0
  4. package/dist/files/FilePreview.d.ts.map +1 -0
  5. package/dist/files/FilePreview.js +50 -0
  6. package/dist/files/FilePreview.js.map +1 -0
  7. package/dist/files/FileTabs.d.ts +3 -0
  8. package/dist/files/FileTabs.d.ts.map +1 -0
  9. package/dist/files/FileTabs.js +88 -0
  10. package/dist/files/FileTabs.js.map +1 -0
  11. package/dist/files/FileTree.d.ts +3 -0
  12. package/dist/files/FileTree.d.ts.map +1 -0
  13. package/dist/files/FileTree.js +64 -0
  14. package/dist/files/FileTree.js.map +1 -0
  15. package/dist/files/FileTypeIcon.d.ts +4 -0
  16. package/dist/files/FileTypeIcon.d.ts.map +1 -0
  17. package/dist/files/FileTypeIcon.js +26 -0
  18. package/dist/files/FileTypeIcon.js.map +1 -0
  19. package/dist/files/file-extensions.d.ts +31 -0
  20. package/dist/files/file-extensions.d.ts.map +1 -0
  21. package/dist/files/file-extensions.js +70 -0
  22. package/dist/files/file-extensions.js.map +1 -0
  23. package/dist/files/types.d.ts +49 -0
  24. package/dist/files/types.d.ts.map +1 -0
  25. package/dist/files/types.js +7 -0
  26. package/dist/files/types.js.map +1 -0
  27. package/dist/index.d.ts +18 -11
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +20 -14
  30. package/dist/index.js.map +1 -1
  31. package/dist/locales/en-US.d.ts +4 -5
  32. package/dist/locales/en-US.d.ts.map +1 -1
  33. package/dist/locales/en-US.js +4 -5
  34. package/dist/locales/en-US.js.map +1 -1
  35. package/dist/locales/index.d.ts +8 -10
  36. package/dist/locales/index.d.ts.map +1 -1
  37. package/dist/locales/zh-CN.d.ts +4 -5
  38. package/dist/locales/zh-CN.d.ts.map +1 -1
  39. package/dist/locales/zh-CN.js +4 -5
  40. package/dist/locales/zh-CN.js.map +1 -1
  41. package/dist/tsconfig.tsbuildinfo +1 -1
  42. package/dist/utils/format.d.ts +3 -23
  43. package/dist/utils/format.d.ts.map +1 -1
  44. package/dist/utils/format.js +15 -60
  45. package/dist/utils/format.js.map +1 -1
  46. package/package.json +4 -2
  47. package/dist/components/CollapsibleCard.d.ts +0 -22
  48. package/dist/components/CollapsibleCard.d.ts.map +0 -1
  49. package/dist/components/CollapsibleCard.js +0 -30
  50. package/dist/components/CollapsibleCard.js.map +0 -1
  51. package/dist/components/CopyValue.d.ts +0 -12
  52. package/dist/components/CopyValue.d.ts.map +0 -1
  53. package/dist/components/CopyValue.js +0 -39
  54. package/dist/components/CopyValue.js.map +0 -1
  55. package/dist/components/ExpandableItem.d.ts +0 -29
  56. package/dist/components/ExpandableItem.d.ts.map +0 -1
  57. package/dist/components/ExpandableItem.js +0 -28
  58. package/dist/components/ExpandableItem.js.map +0 -1
  59. package/dist/components/ExpandableRow.d.ts +0 -35
  60. package/dist/components/ExpandableRow.d.ts.map +0 -1
  61. package/dist/components/ExpandableRow.js +0 -69
  62. package/dist/components/ExpandableRow.js.map +0 -1
  63. package/dist/components/InfoRow.d.ts +0 -15
  64. package/dist/components/InfoRow.d.ts.map +0 -1
  65. package/dist/components/InfoRow.js +0 -27
  66. package/dist/components/InfoRow.js.map +0 -1
  67. package/dist/components/MetricTile.d.ts +0 -15
  68. package/dist/components/MetricTile.d.ts.map +0 -1
  69. package/dist/components/MetricTile.js +0 -32
  70. package/dist/components/MetricTile.js.map +0 -1
  71. package/dist/components/PaginationBar.d.ts +0 -17
  72. package/dist/components/PaginationBar.d.ts.map +0 -1
  73. package/dist/components/PaginationBar.js +0 -19
  74. package/dist/components/PaginationBar.js.map +0 -1
  75. package/dist/components/SectionHeader.d.ts +0 -15
  76. package/dist/components/SectionHeader.d.ts.map +0 -1
  77. package/dist/components/SectionHeader.js +0 -34
  78. package/dist/components/SectionHeader.js.map +0 -1
  79. package/dist/components/SectionLabel.d.ts +0 -10
  80. package/dist/components/SectionLabel.d.ts.map +0 -1
  81. package/dist/components/SectionLabel.js +0 -22
  82. package/dist/components/SectionLabel.js.map +0 -1
  83. package/dist/components/SplitDivider.d.ts +0 -13
  84. package/dist/components/SplitDivider.d.ts.map +0 -1
  85. package/dist/components/SplitDivider.js +0 -73
  86. package/dist/components/SplitDivider.js.map +0 -1
  87. package/dist/components/StatusDot.d.ts +0 -11
  88. package/dist/components/StatusDot.d.ts.map +0 -1
  89. package/dist/components/StatusDot.js +0 -21
  90. package/dist/components/StatusDot.js.map +0 -1
  91. package/dist/components/index.d.ts +0 -27
  92. package/dist/components/index.d.ts.map +0 -1
  93. package/dist/components/index.js +0 -14
  94. package/dist/components/index.js.map +0 -1
  95. package/dist/components/sidebar/Sidebar.d.ts +0 -21
  96. package/dist/components/sidebar/Sidebar.d.ts.map +0 -1
  97. package/dist/components/sidebar/Sidebar.js +0 -41
  98. package/dist/components/sidebar/Sidebar.js.map +0 -1
  99. package/dist/components/sidebar/SidebarIcons.d.ts +0 -25
  100. package/dist/components/sidebar/SidebarIcons.d.ts.map +0 -1
  101. package/dist/components/sidebar/SidebarIcons.js +0 -65
  102. package/dist/components/sidebar/SidebarIcons.js.map +0 -1
  103. package/dist/components/sidebar/SidebarPanel.d.ts +0 -13
  104. package/dist/components/sidebar/SidebarPanel.d.ts.map +0 -1
  105. package/dist/components/sidebar/SidebarPanel.js +0 -32
  106. package/dist/components/sidebar/SidebarPanel.js.map +0 -1
  107. package/dist/components/sidebar/index.d.ts +0 -7
  108. package/dist/components/sidebar/index.d.ts.map +0 -1
  109. package/dist/components/sidebar/index.js +0 -4
  110. package/dist/components/sidebar/index.js.map +0 -1
  111. package/dist/hooks/index.d.ts +0 -5
  112. package/dist/hooks/index.d.ts.map +0 -1
  113. package/dist/hooks/index.js +0 -3
  114. package/dist/hooks/index.js.map +0 -1
  115. package/dist/hooks/useResize.d.ts +0 -28
  116. package/dist/hooks/useResize.d.ts.map +0 -1
  117. package/dist/hooks/useResize.js +0 -39
  118. package/dist/hooks/useResize.js.map +0 -1
  119. package/dist/hooks/useToggle.d.ts +0 -17
  120. package/dist/hooks/useToggle.d.ts.map +0 -1
  121. package/dist/hooks/useToggle.js +0 -14
  122. package/dist/hooks/useToggle.js.map +0 -1
  123. package/dist/styles/card.d.ts +0 -12
  124. package/dist/styles/card.d.ts.map +0 -1
  125. package/dist/styles/card.js +0 -39
  126. package/dist/styles/card.js.map +0 -1
  127. package/dist/styles/empty-text.d.ts +0 -7
  128. package/dist/styles/empty-text.d.ts.map +0 -1
  129. package/dist/styles/empty-text.js +0 -13
  130. package/dist/styles/empty-text.js.map +0 -1
  131. package/dist/styles/expandable.d.ts +0 -12
  132. package/dist/styles/expandable.d.ts.map +0 -1
  133. package/dist/styles/expandable.js +0 -34
  134. package/dist/styles/expandable.js.map +0 -1
  135. package/dist/styles/index.d.ts +0 -5
  136. package/dist/styles/index.d.ts.map +0 -1
  137. package/dist/styles/index.js +0 -5
  138. package/dist/styles/index.js.map +0 -1
  139. package/dist/styles/metric.d.ts +0 -12
  140. package/dist/styles/metric.d.ts.map +0 -1
  141. package/dist/styles/metric.js +0 -26
  142. package/dist/styles/metric.js.map +0 -1
  143. package/dist/utils/avatar-color.d.ts +0 -32
  144. package/dist/utils/avatar-color.d.ts.map +0 -1
  145. package/dist/utils/avatar-color.js +0 -31
  146. package/dist/utils/avatar-color.js.map +0 -1
  147. package/dist/utils/fonts.d.ts +0 -6
  148. package/dist/utils/fonts.d.ts.map +0 -1
  149. package/dist/utils/fonts.js +0 -6
  150. package/dist/utils/fonts.js.map +0 -1
  151. package/dist/utils/pagination.d.ts +0 -6
  152. package/dist/utils/pagination.d.ts.map +0 -1
  153. package/dist/utils/pagination.js +0 -6
  154. package/dist/utils/pagination.js.map +0 -1
@@ -1,32 +1,12 @@
1
1
  /**
2
- * Format a timestamp as a relative time string.
3
- * Accepts a unix timestamp (ms) or an ISO date string.
4
- * Returns "just now", "Xm ago", "Xh ago", or "Xd ago" relative to Date.now().
5
- * Returns "-" for undefined/null/invalid input.
6
- */
7
- export declare function formatRelativeTime(timestamp: number | string | undefined): string;
8
- /**
9
- * Format token counts into human-readable strings.
10
- * >= 1M → "X.XM", >= 1k → "X.Xk", otherwise locale number string.
11
- * Returns "-" for undefined/null input.
2
+ * Format token counts into compact human-readable strings.
3
+ * < 1000 plain number; < 1M "1.2k"(trim trailing ".0", >=100 取整);
4
+ * >= 1M "1.5M". Returns "-" for undefined/null input.
12
5
  */
13
6
  export declare function formatTokens(value: number | undefined): string;
14
- /**
15
- * Format a number with locale formatting, or "-" for undefined.
16
- */
17
- export declare function formatNumber(value: number | undefined): string;
18
7
  /**
19
8
  * Format a duration in milliseconds.
20
9
  * >= 1000ms → "X.Xs", otherwise "Xms".
21
10
  */
22
11
  export declare function formatDuration(ms: number): string;
23
- /**
24
- * Truncate text to maxLength characters, appending "..." if truncated.
25
- */
26
- export declare function truncate(text: string, maxLength: number): string;
27
- /**
28
- * Format an ISO timestamp to "M/D HH:mm" locale string.
29
- * Returns "-" for undefined. Returns raw string for invalid dates.
30
- */
31
- export declare function formatTimestamp(iso: string | undefined): string;
32
12
  //# sourceMappingURL=format.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAajF;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK9D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAG9D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK/D"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAW9D;AAOD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEjD"}
@@ -1,49 +1,24 @@
1
1
  /**
2
- * Format a timestamp as a relative time string.
3
- * Accepts a unix timestamp (ms) or an ISO date string.
4
- * Returns "just now", "Xm ago", "Xh ago", or "Xd ago" relative to Date.now().
5
- * Returns "-" for undefined/null/invalid input.
6
- */
7
- export function formatRelativeTime(timestamp) {
8
- if (timestamp == null)
9
- return '-';
10
- const ms = typeof timestamp === 'string' ? new Date(timestamp).getTime() : timestamp;
11
- if (Number.isNaN(ms))
12
- return '-';
13
- const diff = Date.now() - ms;
14
- const seconds = Math.floor(diff / 1000);
15
- if (seconds < 60)
16
- return 'just now';
17
- const minutes = Math.floor(seconds / 60);
18
- if (minutes < 60)
19
- return `${minutes}m ago`;
20
- const hours = Math.floor(minutes / 60);
21
- if (hours < 24)
22
- return `${hours}h ago`;
23
- const days = Math.floor(hours / 24);
24
- return `${days}d ago`;
25
- }
26
- /**
27
- * Format token counts into human-readable strings.
28
- * >= 1M → "X.XM", >= 1k → "X.Xk", otherwise locale number string.
29
- * Returns "-" for undefined/null input.
2
+ * Format token counts into compact human-readable strings.
3
+ * < 1000 plain number; < 1M "1.2k"(trim trailing ".0", >=100 取整);
4
+ * >= 1M "1.5M". Returns "-" for undefined/null input.
30
5
  */
31
6
  export function formatTokens(value) {
32
7
  if (value == null)
33
8
  return '-';
34
- if (value >= 1_000_000)
35
- return `${(value / 1_000_000).toFixed(1)}M`;
36
- if (value >= 1_000)
37
- return `${(value / 1_000).toFixed(1)}k`;
38
- return value.toLocaleString();
9
+ if (value < 1000) {
10
+ return String(value);
11
+ }
12
+ if (value < 1_000_000) {
13
+ const v = value / 1000;
14
+ return `${v >= 100 ? Math.round(v) : trimOneDecimal(v)}k`;
15
+ }
16
+ const v = value / 1_000_000;
17
+ return `${v >= 100 ? Math.round(v) : trimOneDecimal(v)}M`;
39
18
  }
40
- /**
41
- * Format a number with locale formatting, or "-" for undefined.
42
- */
43
- export function formatNumber(value) {
44
- if (value == null)
45
- return '-';
46
- return value.toLocaleString();
19
+ /** 一位小数并去掉尾随 ".0":1.0 → "1",1.5 → "1.5"。 */
20
+ function trimOneDecimal(v) {
21
+ return v.toFixed(1).replace(/\.0$/, '');
47
22
  }
48
23
  /**
49
24
  * Format a duration in milliseconds.
@@ -52,24 +27,4 @@ export function formatNumber(value) {
52
27
  export function formatDuration(ms) {
53
28
  return ms >= 1000 ? `${(ms / 1000).toFixed(1)}s` : `${ms}ms`;
54
29
  }
55
- /**
56
- * Truncate text to maxLength characters, appending "..." if truncated.
57
- */
58
- export function truncate(text, maxLength) {
59
- if (text.length <= maxLength)
60
- return text;
61
- return text.slice(0, maxLength - 3) + '...';
62
- }
63
- /**
64
- * Format an ISO timestamp to "M/D HH:mm" locale string.
65
- * Returns "-" for undefined. Returns raw string for invalid dates.
66
- */
67
- export function formatTimestamp(iso) {
68
- if (!iso)
69
- return '-';
70
- const d = new Date(iso);
71
- if (Number.isNaN(d.getTime()))
72
- return iso;
73
- return `${d.getMonth() + 1}/${d.getDate()} ${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}`;
74
- }
75
30
  //# sourceMappingURL=format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAyB;IACpD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,GAAG,CAAC;IAC9B,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;QACvB,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5D,CAAC;IACD,MAAM,CAAC,GAAG,KAAK,GAAG,SAAS,CAAC;IAC5B,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC;AAC5D,CAAC;AAED,4CAA4C;AAC5C,SAAS,cAAc,CAAC,CAAS;IAC/B,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC;AAC/D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentskillmania/skill-ui-shared",
3
- "version": "0.1.4",
3
+ "version": "1.0.0",
4
4
  "description": "Shared UI components and utilities for @agentskillmania skill-ui packages.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -31,13 +31,15 @@
31
31
  "directory": "packages/shared"
32
32
  },
33
33
  "dependencies": {
34
- "@agentskillmania/skill-ui-theme": "0.2.0"
34
+ "@ant-design/x-markdown": "^2.0.0",
35
+ "@agentskillmania/skill-ui-theme": "0.5.0"
35
36
  },
36
37
  "peerDependencies": {
37
38
  "antd": "^6.0.0",
38
39
  "lucide-react": ">=0.400.0",
39
40
  "react": "^19.0.0",
40
41
  "react-dom": "^19.0.0",
42
+ "i18next": "^24.0.0",
41
43
  "react-i18next": "^15.0.0",
42
44
  "@emotion/react": "^11.0.0"
43
45
  },
@@ -1,22 +0,0 @@
1
- import { type CSSProperties, type ReactNode } from 'react';
2
- export interface CollapsibleCardProps {
3
- /** Card title — string or custom JSX (e.g. i18n text). */
4
- title: ReactNode;
5
- /** Uncontrolled initial collapse state. */
6
- defaultCollapsed?: boolean;
7
- /** Controlled collapse state. */
8
- collapsed?: boolean;
9
- /** Collapse state change callback. */
10
- onCollapseChange?: (collapsed: boolean) => void;
11
- /** Optional badge/tag in header (right side). */
12
- badge?: ReactNode;
13
- /** Collapsible content. */
14
- children: ReactNode;
15
- /** Additional className. */
16
- className?: string;
17
- /** Additional styles. */
18
- style?: CSSProperties;
19
- }
20
- /** Renders a collapsible antd Card with title, optional badge, and toggle button. */
21
- export declare const CollapsibleCard: import("react").NamedExoticComponent<CollapsibleCardProps>;
22
- //# sourceMappingURL=CollapsibleCard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CollapsibleCard.d.ts","sourceRoot":"","sources":["../../src/components/CollapsibleCard.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAqB,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI9E,MAAM,WAAW,oBAAoB;IACnC,0DAA0D;IAC1D,KAAK,EAAE,SAAS,CAAC;IACjB,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iCAAiC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sCAAsC;IACtC,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,iDAAiD;IACjD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,2BAA2B;IAC3B,QAAQ,EAAE,SAAS,CAAC;IACpB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,qFAAqF;AACrF,eAAO,MAAM,eAAe,4DAyD1B,CAAC"}
@@ -1,30 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
- import { useTheme } from '@agentskillmania/skill-ui-theme';
3
- import { css } from '@emotion/react';
4
- import { Button, Card } from 'antd';
5
- import { ChevronDown, ChevronRight } from 'lucide-react';
6
- import { memo, useCallback } from 'react';
7
- import { useToggle } from '../hooks/index.js';
8
- /** Renders a collapsible antd Card with title, optional badge, and toggle button. */
9
- export const CollapsibleCard = memo(function CollapsibleCard({ title, defaultCollapsed = false, collapsed: controlledCollapsed, onCollapseChange, badge, children, className, style, }) {
10
- const theme = useTheme();
11
- const toggle = useToggle(defaultCollapsed);
12
- const isCollapsed = controlledCollapsed !== undefined ? controlledCollapsed : toggle.value;
13
- const handleToggle = useCallback(() => {
14
- const next = !isCollapsed;
15
- toggle.set(next);
16
- onCollapseChange?.(next);
17
- }, [isCollapsed, onCollapseChange, toggle]);
18
- return (_jsx(Card, { size: "small", className: className, style: style, title: title, extra: _jsxs("div", { css: css `
19
- display: flex;
20
- align-items: center;
21
- gap: ${theme.spacing[2]};
22
- `, children: [badge, _jsx(Button, { type: "text", size: "small", "data-testid": "collapse-toggle", onClick: handleToggle, css: css `
23
- font-size: ${theme.font.size.xs};
24
- color: ${theme.color.textTertiary};
25
- padding: 0 ${theme.spacing[1]};
26
- height: auto;
27
- line-height: 1;
28
- `, children: isCollapsed ? _jsx(ChevronRight, { size: 12 }) : _jsx(ChevronDown, { size: 12 }) })] }), children: !isCollapsed && children }));
29
- });
30
- //# sourceMappingURL=CollapsibleCard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CollapsibleCard.js","sourceRoot":"","sources":["../../src/components/CollapsibleCard.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAsC,MAAM,OAAO,CAAC;AAE9E,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAqB9C,qFAAqF;AACrF,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,eAAe,CAAC,EAC3D,KAAK,EACL,gBAAgB,GAAG,KAAK,EACxB,SAAS,EAAE,mBAAmB,EAC9B,gBAAgB,EAChB,KAAK,EACL,QAAQ,EACR,SAAS,EACT,KAAK,GACgB;IACrB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAE3C,MAAM,WAAW,GAAG,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IAE3F,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,MAAM,IAAI,GAAG,CAAC,WAAW,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjB,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,WAAW,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;IAE5C,OAAO,CACL,KAAC,IAAI,IACH,IAAI,EAAC,OAAO,EACZ,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EACH,eACE,GAAG,EAAE,GAAG,CAAA;;;mBAGC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;WACxB,aAEA,KAAK,EACN,KAAC,MAAM,IACL,IAAI,EAAC,MAAM,EACX,IAAI,EAAC,OAAO,iBACA,iBAAiB,EAC7B,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,GAAG,CAAA;2BACO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;uBACtB,KAAK,CAAC,KAAK,CAAC,YAAY;2BACpB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;;;aAG9B,YAEA,WAAW,CAAC,CAAC,CAAC,KAAC,YAAY,IAAC,IAAI,EAAE,EAAE,GAAI,CAAC,CAAC,CAAC,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,GAAI,GAC9D,IACL,YAGP,CAAC,WAAW,IAAI,QAAQ,GACpB,CACR,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -1,12 +0,0 @@
1
- /** Props for the CopyValue component. */
2
- export interface CopyValueProps {
3
- /** The text to copy to clipboard when clicked. */
4
- text: string;
5
- children: React.ReactNode;
6
- }
7
- /**
8
- * CopyValue — click-to-copy value with tooltip and antd message feedback.
9
- * Wraps the displayed value; clicking copies the `text` prop to clipboard.
10
- */
11
- export declare function CopyValue({ text, children }: CopyValueProps): import("@emotion/react/jsx-runtime").JSX.Element;
12
- //# sourceMappingURL=CopyValue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CopyValue.d.ts","sourceRoot":"","sources":["../../src/components/CopyValue.tsx"],"names":[],"mappings":"AAKA,yCAAyC;AACzC,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAkBD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,cAAc,oDAuB3D"}
@@ -1,39 +0,0 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
- /** @jsxImportSource @emotion/react */
3
- import { useTheme } from '@agentskillmania/skill-ui-theme';
4
- import { css } from '@emotion/react';
5
- import { Tooltip, message } from 'antd';
6
- /** Click-to-copy value style. */
7
- const valueStyle = (theme) => css `
8
- color: ${theme.color.text};
9
- text-align: right;
10
- white-space: nowrap;
11
- overflow: hidden;
12
- text-overflow: ellipsis;
13
- max-width: 60%;
14
- cursor: pointer;
15
- user-select: none;
16
- transition: color 0.15s;
17
- &:hover {
18
- color: ${theme.color.primary};
19
- }
20
- `;
21
- /**
22
- * CopyValue — click-to-copy value with tooltip and antd message feedback.
23
- * Wraps the displayed value; clicking copies the `text` prop to clipboard.
24
- */
25
- export function CopyValue({ text, children }) {
26
- const theme = useTheme();
27
- const [messageApi, contextHolder] = message.useMessage();
28
- const handleClick = async () => {
29
- try {
30
- await navigator.clipboard.writeText(text);
31
- messageApi.success('Copied', 1.2);
32
- }
33
- catch {
34
- messageApi.error('Copy failed');
35
- }
36
- };
37
- return (_jsxs(_Fragment, { children: [contextHolder, _jsx(Tooltip, { title: text, placement: "topRight", children: _jsx("span", { css: valueStyle(theme), onClick: handleClick, children: children }) })] }));
38
- }
39
- //# sourceMappingURL=CopyValue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CopyValue.js","sourceRoot":"","sources":["../../src/components/CopyValue.tsx"],"names":[],"mappings":";AAAA,sCAAsC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AASxC,iCAAiC;AACjC,MAAM,UAAU,GAAG,CAAC,KAAkC,EAAE,EAAE,CAAC,GAAG,CAAA;WACnD,KAAK,CAAC,KAAK,CAAC,IAAI;;;;;;;;;;aAUd,KAAK,CAAC,KAAK,CAAC,OAAO;;CAE/B,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAkB;IAC1D,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAEzD,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC1C,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,8BACG,aAAa,EACd,KAAC,OAAO,IAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAC,UAAU,YACxC,eAAM,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,WAAW,YAC/C,QAAQ,GACJ,GACC,IACT,CACJ,CAAC;AACJ,CAAC"}
@@ -1,29 +0,0 @@
1
- import { type ReactNode } from 'react';
2
- /** Context provided to renderSummary callback. */
3
- export interface ExpandableItemContext {
4
- /** Current expanded state. */
5
- expanded: boolean;
6
- /** Toggle expanded state. */
7
- toggle: () => void;
8
- }
9
- export interface ExpandableItemProps {
10
- /** Controlled expand state. */
11
- expanded?: boolean;
12
- /** Uncontrolled initial state (default: false). */
13
- defaultExpanded?: boolean;
14
- /** Expand state change callback. */
15
- onToggle?: (expanded: boolean) => void;
16
- /** Whether this item can expand. */
17
- expandable?: boolean;
18
- /** Summary row — always visible. */
19
- renderSummary: (ctx: ExpandableItemContext) => ReactNode;
20
- /** Detail content — shown when expanded. */
21
- renderDetail?: () => ReactNode;
22
- /** Animation duration in ms (default: 150). */
23
- animationDuration?: number;
24
- /** Additional className. */
25
- className?: string;
26
- }
27
- /** Headless expandable list item — behavior only, no UI. */
28
- export declare const ExpandableItem: import("react").NamedExoticComponent<ExpandableItemProps>;
29
- //# sourceMappingURL=ExpandableItem.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExpandableItem.d.ts","sourceRoot":"","sources":["../../src/components/ExpandableItem.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI1D,kDAAkD;AAClD,MAAM,WAAW,qBAAqB;IACpC,8BAA8B;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mDAAmD;IACnD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oCAAoC;IACpC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,oCAAoC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oCAAoC;IACpC,aAAa,EAAE,CAAC,GAAG,EAAE,qBAAqB,KAAK,SAAS,CAAC;IACzD,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,SAAS,CAAC;IAC/B,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,4DAA4D;AAC5D,eAAO,MAAM,cAAc,2DA2CzB,CAAC"}
@@ -1,28 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
- import { useTheme } from '@agentskillmania/skill-ui-theme';
3
- import { css } from '@emotion/react';
4
- import { memo, useCallback } from 'react';
5
- import { useToggle } from '../hooks/index.js';
6
- /** Headless expandable list item — behavior only, no UI. */
7
- export const ExpandableItem = memo(function ExpandableItem({ expanded: controlledExpanded, defaultExpanded = false, onToggle, expandable = true, renderSummary, renderDetail, animationDuration = 150, className, }) {
8
- const theme = useTheme();
9
- const toggle = useToggle(defaultExpanded);
10
- const isExpanded = controlledExpanded !== undefined ? controlledExpanded : toggle.value;
11
- const canExpand = expandable && !!renderDetail;
12
- const handleToggle = useCallback(() => {
13
- if (!canExpand)
14
- return;
15
- const next = !isExpanded;
16
- toggle.set(next);
17
- onToggle?.(next);
18
- }, [canExpand, isExpanded, onToggle, toggle]);
19
- const ctx = {
20
- expanded: canExpand && isExpanded,
21
- toggle: handleToggle,
22
- };
23
- return (_jsxs("div", { className: className, children: [renderSummary(ctx), canExpand && isExpanded && (_jsx("div", { css: css `
24
- overflow: hidden;
25
- transition: max-height ${animationDuration}ms ${theme.motion.easing.out};
26
- `, children: renderDetail() }))] }));
27
- });
28
- //# sourceMappingURL=ExpandableItem.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExpandableItem.js","sourceRoot":"","sources":["../../src/components/ExpandableItem.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAkB,MAAM,OAAO,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AA6B9C,4DAA4D;AAC5D,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,cAAc,CAAC,EACzD,QAAQ,EAAE,kBAAkB,EAC5B,eAAe,GAAG,KAAK,EACvB,QAAQ,EACR,UAAU,GAAG,IAAI,EACjB,aAAa,EACb,YAAY,EACZ,iBAAiB,GAAG,GAAG,EACvB,SAAS,GACW;IACpB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC;IAE1C,MAAM,UAAU,GAAG,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IACxF,MAAM,SAAS,GAAG,UAAU,IAAI,CAAC,CAAC,YAAY,CAAC;IAE/C,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAE9C,MAAM,GAAG,GAA0B;QACjC,QAAQ,EAAE,SAAS,IAAI,UAAU;QACjC,MAAM,EAAE,YAAY;KACrB,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAE,SAAS,aACtB,aAAa,CAAC,GAAG,CAAC,EAClB,SAAS,IAAI,UAAU,IAAI,CAC1B,cACE,GAAG,EAAE,GAAG,CAAA;;qCAEmB,iBAAiB,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;WACxE,YAEA,YAAa,EAAE,GACZ,CACP,IACG,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -1,35 +0,0 @@
1
- import type { ReactNode } from 'react';
2
- /** Detail area style variant. */
3
- export type DetailVariant = 'default' | 'code';
4
- export interface ExpandableRowProps {
5
- /** Whether this item can expand. Default: true */
6
- expandable?: boolean;
7
- /** Uncontrolled initial state. Default: false */
8
- defaultExpanded?: boolean;
9
- /** Controlled expand state. */
10
- expanded?: boolean;
11
- /** Expand state change callback. */
12
- onToggle?: (expanded: boolean) => void;
13
- /** Summary content — always visible. */
14
- renderSummary: (ctx: {
15
- expanded: boolean;
16
- toggle: () => void;
17
- }) => ReactNode;
18
- /** Detail content — shown when expanded. */
19
- renderDetail?: () => ReactNode;
20
- /** Show chevron indicator. Default: false */
21
- showChevron?: boolean;
22
- /** Detail area style variant. Default: 'default' */
23
- detailVariant?: DetailVariant;
24
- /** Animation duration in ms. Default: 150 */
25
- animationDuration?: number;
26
- /** Additional className. */
27
- className?: string;
28
- }
29
- /**
30
- * ExpandableRow — visual shell for expandable list items.
31
- * Wraps ExpandableItem (headless behavior) with container-highlight styling:
32
- * left border + fillSubtle background when expanded, border-bottom separator, hover effect.
33
- */
34
- export declare function ExpandableRow({ expandable, defaultExpanded, expanded: controlledExpanded, onToggle, renderSummary, renderDetail, showChevron, detailVariant, animationDuration, className, }: ExpandableRowProps): import("@emotion/react/jsx-runtime").JSX.Element;
35
- //# sourceMappingURL=ExpandableRow.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExpandableRow.d.ts","sourceRoot":"","sources":["../../src/components/ExpandableRow.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,iCAAiC;AACjC,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,MAAM,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,kDAAkD;IAClD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iDAAiD;IACjD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvC,wCAAwC;IACxC,aAAa,EAAE,CAAC,GAAG,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,SAAS,CAAC;IAC7E,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,SAAS,CAAC;IAE/B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oDAAoD;IACpD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgDD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,UAAiB,EACjB,eAAuB,EACvB,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,WAAmB,EACnB,aAAyB,EACzB,iBAAuB,EACvB,SAAS,GACV,EAAE,kBAAkB,oDA2DpB"}
@@ -1,69 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
- /** @jsxImportSource @emotion/react */
3
- import { useTheme } from '@agentskillmania/skill-ui-theme';
4
- import { css } from '@emotion/react';
5
- import { ChevronDown, ChevronRight } from 'lucide-react';
6
- import { ExpandableItem } from './ExpandableItem.js';
7
- /** Container style — wraps both summary and detail. */
8
- const containerStyle = (theme, isExpanded) => css `
9
- border-left: 2px solid ${isExpanded ? theme.color.primary : 'transparent'};
10
- background: ${isExpanded ? theme.color.fillSubtle : 'transparent'};
11
- border-bottom: 1px solid ${theme.color.borderSecondary};
12
- transition:
13
- border-color ${theme.motion.duration.normal} ${theme.motion.easing.out},
14
- background ${theme.motion.duration.normal} ${theme.motion.easing.out};
15
- `;
16
- /** Summary row style — clickable with hover. */
17
- const summaryStyle = (theme, isExpanded) => css `
18
- display: flex;
19
- align-items: center;
20
- padding: ${theme.spacing[1]} ${theme.spacing[2]};
21
- cursor: pointer;
22
- transition: background ${theme.motion.duration.normal} ${theme.motion.easing.out};
23
-
24
- &:hover {
25
- background: ${isExpanded ? 'transparent' : theme.color.fillSecondary};
26
- }
27
- `;
28
- /** Detail area for default variant. */
29
- const detailDefaultStyle = (theme) => css `
30
- padding: ${theme.spacing['0.5']} ${theme.spacing[2]} ${theme.spacing[2]} ${theme.spacing[2]};
31
- font-size: ${theme.font.size.xs};
32
- color: ${theme.color.textSecondary};
33
- line-height: 1.5;
34
- `;
35
- /** Detail area for code variant. */
36
- const detailCodeStyle = (theme) => css `
37
- margin: 0 ${theme.spacing[1]} ${theme.spacing[1]} ${theme.spacing[1]};
38
- padding: ${theme.spacing[2]};
39
- background: ${theme.color.fillSecondary};
40
- border-radius: ${theme.radius.xs};
41
- font-size: ${theme.font.size.xs};
42
- font-family: ${theme.font.familyMono};
43
- color: ${theme.color.textSecondary};
44
- white-space: pre-wrap;
45
- word-break: break-all;
46
- max-height: 200px;
47
- overflow: auto;
48
- `;
49
- /**
50
- * ExpandableRow — visual shell for expandable list items.
51
- * Wraps ExpandableItem (headless behavior) with container-highlight styling:
52
- * left border + fillSubtle background when expanded, border-bottom separator, hover effect.
53
- */
54
- export function ExpandableRow({ expandable = true, defaultExpanded = false, expanded: controlledExpanded, onToggle, renderSummary, renderDetail, showChevron = false, detailVariant = 'default', animationDuration = 150, className, }) {
55
- const theme = useTheme();
56
- return (_jsx(ExpandableItem, { expandable: expandable, defaultExpanded: defaultExpanded, expanded: controlledExpanded, onToggle: onToggle, renderSummary: ({ expanded, toggle }) => (_jsx("div", { css: containerStyle(theme, expanded), children: _jsxs("div", { css: summaryStyle(theme, expanded), onClick: toggle, "data-testid": "expandable-summary", children: [showChevron && (_jsx("span", { css: css `
57
- flex-shrink: 0;
58
- margin-right: ${theme.spacing['0.5']};
59
- color: ${theme.color.textTertiary};
60
- display: flex;
61
- align-items: center;
62
- `, children: expanded ? _jsx(ChevronDown, { size: 12 }) : _jsx(ChevronRight, { size: 12 }) })), _jsx("div", { css: css `
63
- flex: 1;
64
- min-width: 0;
65
- `, children: renderSummary({ expanded, toggle }) })] }) })), renderDetail: renderDetail
66
- ? () => (_jsx("div", { "data-testid": "expandable-detail", children: _jsx("div", { css: detailVariant === 'code' ? detailCodeStyle(theme) : detailDefaultStyle(theme), children: renderDetail() }) }))
67
- : undefined, animationDuration: animationDuration, className: className }));
68
- }
69
- //# sourceMappingURL=ExpandableRow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExpandableRow.js","sourceRoot":"","sources":["../../src/components/ExpandableRow.tsx"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- /** Props for the InfoRow component. */
2
- export interface InfoRowProps {
3
- /** Label displayed on the left. */
4
- label: string;
5
- /** Text value passed to CopyValue for clipboard copy. */
6
- text: string;
7
- /** Value content rendered on the right (typically formatted value). */
8
- children: React.ReactNode;
9
- }
10
- /**
11
- * InfoRow — key-value display row with click-to-copy on the value.
12
- * Label on left, CopyValue on right.
13
- */
14
- export declare function InfoRow({ label, text, children }: InfoRowProps): import("@emotion/react/jsx-runtime").JSX.Element;
15
- //# sourceMappingURL=InfoRow.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"InfoRow.d.ts","sourceRoot":"","sources":["../../src/components/InfoRow.tsx"],"names":[],"mappings":"AAMA,uCAAuC;AACvC,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAiBD;;;GAGG;AACH,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,YAAY,oDAQ9D"}
@@ -1,27 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
- /** @jsxImportSource @emotion/react */
3
- import { useTheme } from '@agentskillmania/skill-ui-theme';
4
- import { css } from '@emotion/react';
5
- import { CopyValue } from './CopyValue.js';
6
- /** Key-value row style. */
7
- const rowStyle = (theme) => css `
8
- display: flex;
9
- justify-content: space-between;
10
- align-items: center;
11
- gap: ${theme.spacing['2']};
12
- padding: 2px 0;
13
- font-size: ${theme.font.size.sm};
14
- `;
15
- const labelStyle = (theme) => css `
16
- color: ${theme.color.textSecondary};
17
- flex-shrink: 0;
18
- `;
19
- /**
20
- * InfoRow — key-value display row with click-to-copy on the value.
21
- * Label on left, CopyValue on right.
22
- */
23
- export function InfoRow({ label, text, children }) {
24
- const theme = useTheme();
25
- return (_jsxs("div", { css: rowStyle(theme), children: [_jsx("span", { css: labelStyle(theme), children: label }), _jsx(CopyValue, { text: text, children: children })] }));
26
- }
27
- //# sourceMappingURL=InfoRow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"InfoRow.js","sourceRoot":"","sources":["../../src/components/InfoRow.tsx"],"names":[],"mappings":";AAAA,sCAAsC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAY3C,2BAA2B;AAC3B,MAAM,QAAQ,GAAG,CAAC,KAAkC,EAAE,EAAE,CAAC,GAAG,CAAA;;;;SAInD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;;eAEZ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;CAChC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,KAAkC,EAAE,EAAE,CAAC,GAAG,CAAA;WACnD,KAAK,CAAC,KAAK,CAAC,aAAa;;CAEnC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAgB;IAC7D,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,OAAO,CACL,eAAK,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,aACvB,eAAM,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,YAAG,KAAK,GAAQ,EAC5C,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,YAAG,QAAQ,GAAa,IACzC,CACP,CAAC;AACJ,CAAC"}
@@ -1,15 +0,0 @@
1
- /** Props for the MetricTile component. */
2
- export interface MetricTileProps {
3
- /** Statistic title label. */
4
- title: string;
5
- /** Statistic value — string for formatted values, number for raw counts. */
6
- value: string | number;
7
- /** Optional style override for the Statistic value (e.g. color: error). */
8
- valueStyle?: React.CSSProperties;
9
- }
10
- /**
11
- * MetricTile — small card wrapping antd Statistic with consistent styling.
12
- * Used for displaying metric values (step count, token count, etc.).
13
- */
14
- export declare function MetricTile({ title, value, valueStyle }: MetricTileProps): import("@emotion/react/jsx-runtime").JSX.Element;
15
- //# sourceMappingURL=MetricTile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MetricTile.d.ts","sourceRoot":"","sources":["../../src/components/MetricTile.tsx"],"names":[],"mappings":"AAMA,0CAA0C;AAC1C,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAClC;AAsBD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,eAAe,oDAOvE"}
@@ -1,32 +0,0 @@
1
- import { jsx as _jsx } from "@emotion/react/jsx-runtime";
2
- import { useTheme } from '@agentskillmania/skill-ui-theme';
3
- import { css } from '@emotion/react';
4
- import { Statistic } from 'antd';
5
- /** Tile style — background card for a single antd Statistic. */
6
- const tileStyle = (theme) => css `
7
- background: ${theme.color.fillSecondary};
8
- border-radius: ${theme.radius.base};
9
- padding: ${theme.spacing['2']};
10
- text-align: center;
11
-
12
- .ant-statistic-title {
13
- font-size: 10px;
14
- color: ${theme.color.textSecondary};
15
- margin-bottom: 2px;
16
- }
17
-
18
- .ant-statistic-content {
19
- font-size: ${theme.font.size.base};
20
- font-weight: ${theme.font.weight.bold};
21
- color: ${theme.color.text};
22
- }
23
- `;
24
- /**
25
- * MetricTile — small card wrapping antd Statistic with consistent styling.
26
- * Used for displaying metric values (step count, token count, etc.).
27
- */
28
- export function MetricTile({ title, value, valueStyle }) {
29
- const theme = useTheme();
30
- return (_jsx("div", { css: tileStyle(theme), children: _jsx(Statistic, { title: title, value: value, styles: { content: valueStyle } }) }));
31
- }
32
- //# sourceMappingURL=MetricTile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MetricTile.js","sourceRoot":"","sources":["../../src/components/MetricTile.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAYjC,gEAAgE;AAChE,MAAM,SAAS,GAAG,CAAC,KAAY,EAAE,EAAE,CAAC,GAAG,CAAA;gBACvB,KAAK,CAAC,KAAK,CAAC,aAAa;mBACtB,KAAK,CAAC,MAAM,CAAC,IAAI;aACvB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;;;;;aAKlB,KAAK,CAAC,KAAK,CAAC,aAAa;;;;;iBAKrB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;mBAClB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;aAC5B,KAAK,CAAC,KAAK,CAAC,IAAI;;CAE5B,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAmB;IACtE,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,OAAO,CACL,cAAK,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,YACxB,KAAC,SAAS,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,GAAI,GACtE,CACP,CAAC;AACJ,CAAC"}
@@ -1,17 +0,0 @@
1
- /** Props for the PaginationBar component. */
2
- export interface PaginationBarProps {
3
- /** 1-indexed current page. */
4
- current: number;
5
- /** Number of items per page. */
6
- pageSize: number;
7
- /** Total item count. */
8
- total: number;
9
- /** Callback fired when the page changes. */
10
- onChange: (page: number) => void;
11
- }
12
- /**
13
- * PaginationBar — antd Pagination hidden when total fits within a single page,
14
- * wrapped in a right-aligned container with consistent top spacing.
15
- */
16
- export declare function PaginationBar({ current, pageSize, total, onChange }: PaginationBarProps): import("@emotion/react/jsx-runtime").JSX.Element | null;
17
- //# sourceMappingURL=PaginationBar.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PaginationBar.d.ts","sourceRoot":"","sources":["../../src/components/PaginationBar.tsx"],"names":[],"mappings":"AAIA,6CAA6C;AAC7C,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAQD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,2DAOvF"}