@agentskillmania/skill-ui-shared 0.1.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 (159) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +51 -0
  3. package/dist/components/CollapsibleCard.d.ts +22 -0
  4. package/dist/components/CollapsibleCard.d.ts.map +1 -0
  5. package/dist/components/CollapsibleCard.js +30 -0
  6. package/dist/components/CollapsibleCard.js.map +1 -0
  7. package/dist/components/CollapsibleCard.stories.d.ts +16 -0
  8. package/dist/components/CollapsibleCard.stories.d.ts.map +1 -0
  9. package/dist/components/CollapsibleCard.stories.js +57 -0
  10. package/dist/components/CollapsibleCard.stories.js.map +1 -0
  11. package/dist/components/CopyValue.d.ts +12 -0
  12. package/dist/components/CopyValue.d.ts.map +1 -0
  13. package/dist/components/CopyValue.js +39 -0
  14. package/dist/components/CopyValue.js.map +1 -0
  15. package/dist/components/EmptyState.d.ts +16 -0
  16. package/dist/components/EmptyState.d.ts.map +1 -0
  17. package/dist/components/EmptyState.js +31 -0
  18. package/dist/components/EmptyState.js.map +1 -0
  19. package/dist/components/EmptyState.stories.d.ts +15 -0
  20. package/dist/components/EmptyState.stories.d.ts.map +1 -0
  21. package/dist/components/EmptyState.stories.js +45 -0
  22. package/dist/components/EmptyState.stories.js.map +1 -0
  23. package/dist/components/ExpandableItem.d.ts +29 -0
  24. package/dist/components/ExpandableItem.d.ts.map +1 -0
  25. package/dist/components/ExpandableItem.js +28 -0
  26. package/dist/components/ExpandableItem.js.map +1 -0
  27. package/dist/components/ExpandableItem.stories.d.ts +14 -0
  28. package/dist/components/ExpandableItem.stories.d.ts.map +1 -0
  29. package/dist/components/ExpandableItem.stories.js +178 -0
  30. package/dist/components/ExpandableItem.stories.js.map +1 -0
  31. package/dist/components/ExpandableRow.d.ts +35 -0
  32. package/dist/components/ExpandableRow.d.ts.map +1 -0
  33. package/dist/components/ExpandableRow.js +69 -0
  34. package/dist/components/ExpandableRow.js.map +1 -0
  35. package/dist/components/InfoRow.d.ts +15 -0
  36. package/dist/components/InfoRow.d.ts.map +1 -0
  37. package/dist/components/InfoRow.js +27 -0
  38. package/dist/components/InfoRow.js.map +1 -0
  39. package/dist/components/MetricTile.d.ts +15 -0
  40. package/dist/components/MetricTile.d.ts.map +1 -0
  41. package/dist/components/MetricTile.js +32 -0
  42. package/dist/components/MetricTile.js.map +1 -0
  43. package/dist/components/PaginationBar.d.ts +17 -0
  44. package/dist/components/PaginationBar.d.ts.map +1 -0
  45. package/dist/components/PaginationBar.js +19 -0
  46. package/dist/components/PaginationBar.js.map +1 -0
  47. package/dist/components/SectionHeader.d.ts +15 -0
  48. package/dist/components/SectionHeader.d.ts.map +1 -0
  49. package/dist/components/SectionHeader.js +34 -0
  50. package/dist/components/SectionHeader.js.map +1 -0
  51. package/dist/components/SectionHeader.stories.d.ts +13 -0
  52. package/dist/components/SectionHeader.stories.d.ts.map +1 -0
  53. package/dist/components/SectionHeader.stories.js +32 -0
  54. package/dist/components/SectionHeader.stories.js.map +1 -0
  55. package/dist/components/SectionLabel.d.ts +10 -0
  56. package/dist/components/SectionLabel.d.ts.map +1 -0
  57. package/dist/components/SectionLabel.js +22 -0
  58. package/dist/components/SectionLabel.js.map +1 -0
  59. package/dist/components/SplitDivider.d.ts +13 -0
  60. package/dist/components/SplitDivider.d.ts.map +1 -0
  61. package/dist/components/SplitDivider.js +70 -0
  62. package/dist/components/SplitDivider.js.map +1 -0
  63. package/dist/components/SplitDivider.stories.d.ts +12 -0
  64. package/dist/components/SplitDivider.stories.d.ts.map +1 -0
  65. package/dist/components/SplitDivider.stories.js +62 -0
  66. package/dist/components/SplitDivider.stories.js.map +1 -0
  67. package/dist/components/StatusDot.d.ts +11 -0
  68. package/dist/components/StatusDot.d.ts.map +1 -0
  69. package/dist/components/StatusDot.js +21 -0
  70. package/dist/components/StatusDot.js.map +1 -0
  71. package/dist/components/index.d.ts +27 -0
  72. package/dist/components/index.d.ts.map +1 -0
  73. package/dist/components/index.js +14 -0
  74. package/dist/components/index.js.map +1 -0
  75. package/dist/components/sidebar/Sidebar.d.ts +21 -0
  76. package/dist/components/sidebar/Sidebar.d.ts.map +1 -0
  77. package/dist/components/sidebar/Sidebar.js +41 -0
  78. package/dist/components/sidebar/Sidebar.js.map +1 -0
  79. package/dist/components/sidebar/Sidebar.stories.d.ts +14 -0
  80. package/dist/components/sidebar/Sidebar.stories.d.ts.map +1 -0
  81. package/dist/components/sidebar/Sidebar.stories.js +92 -0
  82. package/dist/components/sidebar/Sidebar.stories.js.map +1 -0
  83. package/dist/components/sidebar/SidebarIcons.d.ts +25 -0
  84. package/dist/components/sidebar/SidebarIcons.d.ts.map +1 -0
  85. package/dist/components/sidebar/SidebarIcons.js +65 -0
  86. package/dist/components/sidebar/SidebarIcons.js.map +1 -0
  87. package/dist/components/sidebar/SidebarPanel.d.ts +13 -0
  88. package/dist/components/sidebar/SidebarPanel.d.ts.map +1 -0
  89. package/dist/components/sidebar/SidebarPanel.js +32 -0
  90. package/dist/components/sidebar/SidebarPanel.js.map +1 -0
  91. package/dist/components/sidebar/index.d.ts +7 -0
  92. package/dist/components/sidebar/index.d.ts.map +1 -0
  93. package/dist/components/sidebar/index.js +4 -0
  94. package/dist/components/sidebar/index.js.map +1 -0
  95. package/dist/hooks/index.d.ts +5 -0
  96. package/dist/hooks/index.d.ts.map +1 -0
  97. package/dist/hooks/index.js +3 -0
  98. package/dist/hooks/index.js.map +1 -0
  99. package/dist/hooks/useResize.d.ts +28 -0
  100. package/dist/hooks/useResize.d.ts.map +1 -0
  101. package/dist/hooks/useResize.js +39 -0
  102. package/dist/hooks/useResize.js.map +1 -0
  103. package/dist/hooks/useToggle.d.ts +17 -0
  104. package/dist/hooks/useToggle.d.ts.map +1 -0
  105. package/dist/hooks/useToggle.js +14 -0
  106. package/dist/hooks/useToggle.js.map +1 -0
  107. package/dist/index.d.ts +15 -0
  108. package/dist/index.d.ts.map +1 -0
  109. package/dist/index.js +18 -0
  110. package/dist/index.js.map +1 -0
  111. package/dist/locales/en-US.d.ts +11 -0
  112. package/dist/locales/en-US.d.ts.map +1 -0
  113. package/dist/locales/en-US.js +11 -0
  114. package/dist/locales/en-US.js.map +1 -0
  115. package/dist/locales/index.d.ts +28 -0
  116. package/dist/locales/index.d.ts.map +1 -0
  117. package/dist/locales/index.js +10 -0
  118. package/dist/locales/index.js.map +1 -0
  119. package/dist/locales/zh-CN.d.ts +11 -0
  120. package/dist/locales/zh-CN.d.ts.map +1 -0
  121. package/dist/locales/zh-CN.js +11 -0
  122. package/dist/locales/zh-CN.js.map +1 -0
  123. package/dist/styles/card.d.ts +12 -0
  124. package/dist/styles/card.d.ts.map +1 -0
  125. package/dist/styles/card.js +39 -0
  126. package/dist/styles/card.js.map +1 -0
  127. package/dist/styles/empty-text.d.ts +7 -0
  128. package/dist/styles/empty-text.d.ts.map +1 -0
  129. package/dist/styles/empty-text.js +13 -0
  130. package/dist/styles/empty-text.js.map +1 -0
  131. package/dist/styles/expandable.d.ts +12 -0
  132. package/dist/styles/expandable.d.ts.map +1 -0
  133. package/dist/styles/expandable.js +34 -0
  134. package/dist/styles/expandable.js.map +1 -0
  135. package/dist/styles/index.d.ts +5 -0
  136. package/dist/styles/index.d.ts.map +1 -0
  137. package/dist/styles/index.js +5 -0
  138. package/dist/styles/index.js.map +1 -0
  139. package/dist/styles/metric.d.ts +12 -0
  140. package/dist/styles/metric.d.ts.map +1 -0
  141. package/dist/styles/metric.js +26 -0
  142. package/dist/styles/metric.js.map +1 -0
  143. package/dist/utils/avatar-color.d.ts +32 -0
  144. package/dist/utils/avatar-color.d.ts.map +1 -0
  145. package/dist/utils/avatar-color.js +31 -0
  146. package/dist/utils/avatar-color.js.map +1 -0
  147. package/dist/utils/fonts.d.ts +6 -0
  148. package/dist/utils/fonts.d.ts.map +1 -0
  149. package/dist/utils/fonts.js +6 -0
  150. package/dist/utils/fonts.js.map +1 -0
  151. package/dist/utils/format.d.ts +32 -0
  152. package/dist/utils/format.d.ts.map +1 -0
  153. package/dist/utils/format.js +75 -0
  154. package/dist/utils/format.js.map +1 -0
  155. package/dist/utils/pagination.d.ts +6 -0
  156. package/dist/utils/pagination.d.ts.map +1 -0
  157. package/dist/utils/pagination.js +6 -0
  158. package/dist/utils/pagination.js.map +1 -0
  159. package/package.json +80 -0
@@ -0,0 +1,178 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
+ import { css, useTheme } from '@emotion/react';
3
+ import { useState } from 'react';
4
+ import { ChevronDown, ChevronRight } from 'lucide-react';
5
+ import { ExpandableItem } from './ExpandableItem.js';
6
+ const meta = {
7
+ title: 'Shared/ExpandableItem',
8
+ component: ExpandableItem,
9
+ tags: ['autodocs'],
10
+ argTypes: {
11
+ renderSummary: { control: false },
12
+ renderDetail: { control: false },
13
+ },
14
+ };
15
+ export default meta;
16
+ /** Colored type tag for event log entries. */
17
+ function EventTypeTag({ type }) {
18
+ const theme = useTheme();
19
+ const colorMap = {
20
+ agent: { bg: 'rgba(34,197,94,0.1)', text: theme.color.success },
21
+ tool: { bg: 'rgba(67,97,238,0.1)', text: theme.color.primary },
22
+ context: { bg: 'rgba(234,179,8,0.1)', text: theme.color.warning },
23
+ error: { bg: 'rgba(239,68,68,0.1)', text: theme.color.error },
24
+ info: { bg: theme.color.fillSecondary, text: theme.color.textSecondary },
25
+ };
26
+ const colors = colorMap[type] || colorMap.info;
27
+ return (_jsx("span", { css: css `
28
+ font-size: ${theme.font.size.xs};
29
+ padding: 1px 8px;
30
+ border-radius: ${theme.radius.sm};
31
+ background: ${colors.bg};
32
+ color: ${colors.text};
33
+ font-weight: ${theme.font.weight.medium};
34
+ flex-shrink: 0;
35
+ `, children: type.charAt(0).toUpperCase() + type.slice(1) }));
36
+ }
37
+ /** Event log row with type tag, content, and timestamp. */
38
+ function EventLogRow({ type, label, time, ctx, }) {
39
+ const theme = useTheme();
40
+ return (_jsxs("div", { css: css `
41
+ display: flex;
42
+ align-items: center;
43
+ gap: ${theme.spacing[2]};
44
+ padding: ${theme.spacing[2]} ${theme.spacing[3]};
45
+ cursor: pointer;
46
+ transition: background ${theme.motion.duration.fast};
47
+ &:hover {
48
+ background: ${theme.color.fillTertiary};
49
+ }
50
+ `, onClick: ctx.toggle, children: [_jsx("span", { css: css `
51
+ font-size: 10px;
52
+ color: ${theme.color.textTertiary};
53
+ width: 16px;
54
+ text-align: center;
55
+ transition: transform 150ms ${theme.motion.easing.out};
56
+ transform: rotate(${ctx.expanded ? 90 : 0}deg);
57
+ flex-shrink: 0;
58
+ `, children: "\u25B6" }), _jsx(EventTypeTag, { type: type }), _jsx("span", { css: css `
59
+ font-size: ${theme.font.size.sm};
60
+ color: ${theme.color.text};
61
+ flex: 1;
62
+ min-width: 0;
63
+ overflow: hidden;
64
+ text-overflow: ellipsis;
65
+ white-space: nowrap;
66
+ `, children: label }), _jsx("span", { css: css `
67
+ font-size: ${theme.font.size.xs};
68
+ color: ${theme.color.textTertiary};
69
+ flex-shrink: 0;
70
+ `, children: time })] }));
71
+ }
72
+ /** JSON detail block with monospace formatting. */
73
+ function JsonDetail({ data }) {
74
+ const theme = useTheme();
75
+ return (_jsx("pre", { css: css `
76
+ margin: 0;
77
+ padding: ${theme.spacing[2]} ${theme.spacing[4]} ${theme.spacing[2]} 44px;
78
+ font-size: ${theme.font.size.xs};
79
+ background: ${theme.color.fillSecondary};
80
+ color: ${theme.color.textSecondary};
81
+ line-height: 1.5;
82
+ overflow-x: auto;
83
+ border-top: 1px solid ${theme.color.borderSecondary};
84
+ `, children: JSON.stringify(data, null, 2) }));
85
+ }
86
+ /** A list of expandable event log rows with colored type tags and JSON details. */
87
+ export const EventLogItems = {
88
+ render: () => (_jsxs("div", { style: {
89
+ width: '100%',
90
+ border: '1px solid #e5e7eb',
91
+ borderRadius: '6px',
92
+ overflow: 'hidden',
93
+ }, children: [_jsx(ExpandableItem, { renderSummary: (ctx) => (_jsx(EventLogRow, { type: "agent", label: "Agent started", time: "10:01:23", ctx: ctx })), renderDetail: () => (_jsx(JsonDetail, { data: { pid: 8492, runtime: 'colts', version: '0.3.0' } })) }), _jsx(ExpandableItem, { renderSummary: (ctx) => (_jsx(EventLogRow, { type: "tool", label: "readFile('src/runner.ts')", time: "10:01:25", ctx: ctx })), renderDetail: () => (_jsx(JsonDetail, { data: { tool: 'readFile', args: { path: 'src/runner.ts' }, result: '142 lines' } })) }), _jsx(ExpandableItem, { renderSummary: (ctx) => (_jsx(EventLogRow, { type: "context", label: "Context compressed 12.4k \u2192 3.2k", time: "10:01:30", ctx: ctx })), renderDetail: () => (_jsx(JsonDetail, { data: {
94
+ anchor: 'user-request-refactor',
95
+ removed: 9200,
96
+ summary: 'User requested JWT refactoring...',
97
+ } })) }), _jsx(ExpandableItem, { renderSummary: (ctx) => (_jsx(EventLogRow, { type: "error", label: "Tool execution failed", time: "10:01:35", ctx: ctx })), renderDetail: () => (_jsx(JsonDetail, { data: { tool: 'runCommand', exitCode: 1, stderr: 'Permission denied' } })) }), _jsx(ExpandableItem, { renderSummary: (ctx) => (_jsx(EventLogRow, { type: "info", label: "Session completed", time: "10:02:01", ctx: ctx })) })] })),
98
+ };
99
+ /** Test case rows — passed items not expandable, failed ones show error details. */
100
+ export const TestCaseItems = {
101
+ render: () => {
102
+ const theme = useTheme();
103
+ const tests = [
104
+ { name: 'should render header', passed: true },
105
+ { name: 'should apply theme colors', passed: true },
106
+ { name: 'should handle empty input', passed: false },
107
+ { name: 'should debounce onChange', passed: true },
108
+ ];
109
+ return (_jsx("div", { style: {
110
+ width: '100%',
111
+ border: '1px solid #e5e7eb',
112
+ borderRadius: '6px',
113
+ overflow: 'hidden',
114
+ }, children: tests.map((test, i) => (_jsx(ExpandableItem, { expandable: !test.passed, renderSummary: (ctx) => (_jsxs("div", { css: css `
115
+ display: flex;
116
+ align-items: center;
117
+ gap: ${theme.spacing[2]};
118
+ padding: ${theme.spacing[2]} ${theme.spacing[3]};
119
+ font-size: ${theme.font.size.sm};
120
+ color: ${test.passed ? theme.color.text : theme.color.error};
121
+ cursor: ${test.passed ? 'default' : 'pointer'};
122
+ &:hover {
123
+ background: ${test.passed ? 'transparent' : theme.color.fillTertiary};
124
+ }
125
+ `, children: [_jsx("span", { css: css `
126
+ width: 20px;
127
+ text-align: center;
128
+ color: ${test.passed ? theme.color.success : theme.color.error};
129
+ font-weight: ${theme.font.weight.bold};
130
+ `, children: test.passed ? '✓' : '✗' }), _jsx("span", { css: css `flex: 1; color: ${test.passed ? theme.color.text : theme.color.error};`, children: test.name })] })), renderDetail: test.passed
131
+ ? undefined
132
+ : () => (_jsxs("div", { css: css `
133
+ padding: ${theme.spacing[2]} ${theme.spacing[4]};
134
+ font-size: ${theme.font.size.xs};
135
+ color: ${theme.color.error};
136
+ background: rgba(239, 68, 68, 0.04);
137
+ border-top: 1px solid rgba(239, 68, 68, 0.1);
138
+ font-family: ${theme.font.familyMono};
139
+ `, children: ["AssertionError: expected \"\" to equal \"undefined\"", _jsx("br", {}), "at Context.<anonymous> (test/unit/input.test.ts:42:18)"] })) }, i))) }));
140
+ },
141
+ };
142
+ /** Single expandable item with controlled state via React.useState. */
143
+ export const SingleItem = {
144
+ render: () => {
145
+ // eslint-disable-next-line react-hooks/rules-of-hooks
146
+ const [expanded, setExpanded] = useState(false);
147
+ const theme = useTheme();
148
+ return (_jsx("div", { css: css `
149
+ border: 1px solid ${theme.color.border};
150
+ border-radius: ${theme.radius.md};
151
+ overflow: hidden;
152
+ width: 100%;
153
+ `, children: _jsx(ExpandableItem, { expanded: expanded, onToggle: (next) => setExpanded(next), renderSummary: (ctx) => (_jsxs("div", { css: css `
154
+ display: flex;
155
+ align-items: center;
156
+ justify-content: space-between;
157
+ padding: ${theme.spacing[2]} ${theme.spacing[3]};
158
+ cursor: pointer;
159
+ transition: background ${theme.motion.duration.fast};
160
+ &:hover {
161
+ background: ${theme.color.fillTertiary};
162
+ }
163
+ `, onClick: ctx.toggle, children: [_jsxs("div", { css: css `display: flex; align-items: center; gap: ${theme.spacing[2]};`, children: [ctx.expanded ? (_jsx(ChevronDown, { size: 14, css: css `color: ${theme.color.textTertiary};` })) : (_jsx(ChevronRight, { size: 14, css: css `color: ${theme.color.textTertiary};` })), _jsxs("span", { css: css `font-size: ${theme.font.size.sm}; color: ${theme.color.text};`, children: ["Click to ", ctx.expanded ? 'collapse' : 'expand'] })] }), _jsx("span", { css: css `
164
+ font-size: ${theme.font.size.xs};
165
+ color: ${theme.color.textTertiary};
166
+ background: ${theme.color.fillSecondary};
167
+ padding: 2px 8px;
168
+ border-radius: ${theme.radius.sm};
169
+ `, children: expanded ? 'OPEN' : 'CLOSED' })] })), renderDetail: () => (_jsxs("div", { css: css `
170
+ padding: ${theme.spacing[3]};
171
+ background: ${theme.color.fillSecondary};
172
+ font-size: ${theme.font.size.sm};
173
+ color: ${theme.color.textSecondary};
174
+ border-top: 1px solid ${theme.color.borderSecondary};
175
+ `, children: ["This content is controlled via React.useState. The expanded state is:", ' ', _jsx("strong", { children: expanded ? 'true' : 'false' }), "."] })) }) }));
176
+ },
177
+ };
178
+ //# sourceMappingURL=ExpandableItem.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpandableItem.stories.js","sourceRoot":"","sources":["../../src/components/ExpandableItem.stories.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,69 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpandableRow.js","sourceRoot":"","sources":["../../src/components/ExpandableRow.tsx"],"names":[],"mappings":";AAAA,sCAAsC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA8BrD,uDAAuD;AACvD,MAAM,cAAc,GAAG,CAAC,KAAkC,EAAE,UAAmB,EAAE,EAAE,CAAC,GAAG,CAAA;2BAC5D,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa;gBAC3D,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa;6BACtC,KAAK,CAAC,KAAK,CAAC,eAAe;;mBAErC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;iBACzD,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;CACvE,CAAC;AAEF,gDAAgD;AAChD,MAAM,YAAY,GAAG,CAAC,KAAkC,EAAE,UAAmB,EAAE,EAAE,CAAC,GAAG,CAAA;;;aAGxE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;;2BAEtB,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;;;kBAGhE,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa;;CAEvE,CAAC;AAEF,uCAAuC;AACvC,MAAM,kBAAkB,GAAG,CAAC,KAAkC,EAAE,EAAE,CAAC,GAAG,CAAA;aACzD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;eAC9E,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;WACtB,KAAK,CAAC,KAAK,CAAC,aAAa;;CAEnC,CAAC;AAEF,oCAAoC;AACpC,MAAM,eAAe,GAAG,CAAC,KAAkC,EAAE,EAAE,CAAC,GAAG,CAAA;cACrD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;aACzD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBACb,KAAK,CAAC,KAAK,CAAC,aAAa;mBACtB,KAAK,CAAC,MAAM,CAAC,EAAE;eACnB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAChB,KAAK,CAAC,IAAI,CAAC,UAAU;WAC3B,KAAK,CAAC,KAAK,CAAC,aAAa;;;;;CAKnC,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,UAAU,GAAG,IAAI,EACjB,eAAe,GAAG,KAAK,EACvB,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,WAAW,GAAG,KAAK,EACnB,aAAa,GAAG,SAAS,EACzB,iBAAiB,GAAG,GAAG,EACvB,SAAS,GACU;IACnB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,OAAO,CACL,KAAC,cAAc,IACb,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CACvC,cAAK,GAAG,EAAE,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,YACvC,eACE,GAAG,EAAE,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,EAClC,OAAO,EAAE,MAAM,iBACH,oBAAoB,aAE/B,WAAW,IAAI,CACd,eACE,GAAG,EAAE,GAAG,CAAA;;kCAEU,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;2BAC3B,KAAK,CAAC,KAAK,CAAC,YAAY;;;iBAGlC,YAEA,QAAQ,CAAC,CAAC,CAAC,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,GAAI,CAAC,CAAC,CAAC,KAAC,YAAY,IAAC,IAAI,EAAE,EAAE,GAAI,GAC7D,CACR,EACD,cACE,GAAG,EAAE,GAAG,CAAA;;;eAGP,YAEA,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,GAChC,IACF,GACF,CACP,EACD,YAAY,EACV,YAAY;YACV,CAAC,CAAC,GAAG,EAAE,CAAC,CACJ,6BAAiB,mBAAmB,YAClC,cACE,GAAG,EACD,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,YAG9E,YAAY,EAAE,GACX,GACF,CACP;YACH,CAAC,CAAC,SAAS,EAEf,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,SAAS,GACpB,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,27 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,15 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,32 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,17 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "@emotion/react/jsx-runtime";
2
+ /** @jsxImportSource @emotion/react */
3
+ import { css } from '@emotion/react';
4
+ import { Pagination } from 'antd';
5
+ const barStyle = css `
6
+ margin-top: 24px;
7
+ display: flex;
8
+ justify-content: flex-end;
9
+ `;
10
+ /**
11
+ * PaginationBar — antd Pagination hidden when total fits within a single page,
12
+ * wrapped in a right-aligned container with consistent top spacing.
13
+ */
14
+ export function PaginationBar({ current, pageSize, total, onChange }) {
15
+ if (total <= pageSize)
16
+ return null;
17
+ return (_jsx("div", { css: barStyle, children: _jsx(Pagination, { current: current, pageSize: pageSize, total: total, onChange: onChange }) }));
18
+ }
19
+ //# sourceMappingURL=PaginationBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaginationBar.js","sourceRoot":"","sources":["../../src/components/PaginationBar.tsx"],"names":[],"mappings":";AAAA,sCAAsC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAclC,MAAM,QAAQ,GAAG,GAAG,CAAA;;;;CAInB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAsB;IACtF,IAAI,KAAK,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,CACL,cAAK,GAAG,EAAE,QAAQ,YAChB,KAAC,UAAU,IAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAI,GAClF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { LucideIcon } from 'lucide-react';
2
+ import type { ReactNode } from 'react';
3
+ export interface SectionHeaderProps {
4
+ /** Section icon (rendered at 14px). */
5
+ icon: LucideIcon;
6
+ /** Section label (rendered uppercase via CSS). */
7
+ title: string;
8
+ /** Right-aligned extra content. */
9
+ extra?: ReactNode;
10
+ /** Optional explicit icon color. Defaults to inheriting from container (textSecondary). */
11
+ iconColor?: string;
12
+ }
13
+ /** Renders a section header with icon, uppercase title, and optional extra content. */
14
+ export declare function SectionHeader({ icon: Icon, title, extra, iconColor }: SectionHeaderProps): import("@emotion/react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=SectionHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SectionHeader.d.ts","sourceRoot":"","sources":["../../src/components/SectionHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,IAAI,EAAE,UAAU,CAAC;IACjB,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,kBAAkB,oDAoDxF"}
@@ -0,0 +1,34 @@
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
+ /** Renders a section header with icon, uppercase title, and optional extra content. */
5
+ export function SectionHeader({ icon: Icon, title, extra, iconColor }) {
6
+ const theme = useTheme();
7
+ return (_jsxs("div", { css: css `
8
+ display: flex;
9
+ align-items: center;
10
+ gap: ${theme.spacing[1]};
11
+ padding: ${theme.spacing[1]} 0;
12
+ font-size: ${theme.font.size.xs};
13
+ font-weight: ${theme.font.weight.bold};
14
+ text-transform: uppercase;
15
+ letter-spacing: 0.5px;
16
+ color: ${theme.color.textSecondary};
17
+ `, children: [_jsx(Icon, { size: 14, css: iconColor
18
+ ? css `
19
+ color: ${iconColor};
20
+ flex-shrink: 0;
21
+ `
22
+ : css `
23
+ flex-shrink: 0;
24
+ ` }), title, _jsx("div", { css: css `
25
+ flex: 1;
26
+ height: 1px;
27
+ background: ${theme.color.borderSecondary};
28
+ ` }), extra && (_jsx("span", { "data-testid": "section-extra", css: css `
29
+ margin-left: auto;
30
+ font-size: ${theme.font.size.xs};
31
+ color: ${theme.color.textTertiary};
32
+ `, children: extra }))] }));
33
+ }
34
+ //# sourceMappingURL=SectionHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SectionHeader.js","sourceRoot":"","sources":["../../src/components/SectionHeader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAerC,uFAAuF;AACvF,MAAM,UAAU,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAsB;IACvF,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,OAAO,CACL,eACE,GAAG,EAAE,GAAG,CAAA;;;eAGC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;mBACZ,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;qBACd,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;uBAChB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;;;iBAG5B,KAAK,CAAC,KAAK,CAAC,aAAa;OACnC,aAED,KAAC,IAAI,IACH,IAAI,EAAE,EAAE,EACR,GAAG,EACD,SAAS;oBACP,CAAC,CAAC,GAAG,CAAA;yBACQ,SAAS;;eAEnB;oBACH,CAAC,CAAC,GAAG,CAAA;;eAEF,GAEP,EACD,KAAK,EACN,cACE,GAAG,EAAE,GAAG,CAAA;;;wBAGQ,KAAK,CAAC,KAAK,CAAC,eAAe;SAC1C,GACD,EACD,KAAK,IAAI,CACR,8BACc,eAAe,EAC3B,GAAG,EAAE,GAAG,CAAA;;yBAEO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBACtB,KAAK,CAAC,KAAK,CAAC,YAAY;WAClC,YAEA,KAAK,GACD,CACR,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { SectionHeader } from './SectionHeader.js';
3
+ import type { SectionHeaderProps } from './SectionHeader.js';
4
+ declare const meta: Meta<typeof SectionHeader>;
5
+ export default meta;
6
+ type Story = StoryObj<SectionHeaderProps>;
7
+ /** Default section header with icon and title. */
8
+ export declare const Default: Story;
9
+ /** Section header with extra content aligned to the right. */
10
+ export declare const WithExtra: Story;
11
+ /** Multiple headers stacked to demonstrate the divider pattern. */
12
+ export declare const MultipleHeaders: Story;
13
+ //# sourceMappingURL=SectionHeader.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SectionHeader.stories.d.ts","sourceRoot":"","sources":["../../src/components/SectionHeader.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,aAAa,CAOpC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAE1C,kDAAkD;AAClD,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,eAAe,EAAE,KAQ7B,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
+ import { Cpu, Wrench, Settings } from 'lucide-react';
3
+ import { SectionHeader } from './SectionHeader.js';
4
+ const meta = {
5
+ title: 'Shared/SectionHeader',
6
+ component: SectionHeader,
7
+ tags: ['autodocs'],
8
+ argTypes: {
9
+ icon: { control: false },
10
+ },
11
+ };
12
+ export default meta;
13
+ /** Default section header with icon and title. */
14
+ export const Default = {
15
+ args: {
16
+ icon: Cpu,
17
+ title: 'Agent State',
18
+ },
19
+ };
20
+ /** Section header with extra content aligned to the right. */
21
+ export const WithExtra = {
22
+ args: {
23
+ icon: Wrench,
24
+ title: 'Skills',
25
+ extra: _jsx("span", { children: "3 active" }),
26
+ },
27
+ };
28
+ /** Multiple headers stacked to demonstrate the divider pattern. */
29
+ export const MultipleHeaders = {
30
+ render: () => (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: '16px' }, children: [_jsx(SectionHeader, { icon: Cpu, title: "Agent State" }), _jsx(SectionHeader, { icon: Wrench, title: "Skills", extra: _jsx("span", { children: "3 active" }) }), _jsx(SectionHeader, { icon: Settings, title: "Configuration" })] })),
31
+ };
32
+ //# sourceMappingURL=SectionHeader.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SectionHeader.stories.js","sourceRoot":"","sources":["../../src/components/SectionHeader.stories.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,MAAM,IAAI,GAA+B;IACvC,KAAK,EAAE,sBAAsB;IAC7B,SAAS,EAAE,aAAa;IACxB,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,QAAQ,EAAE;QACR,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;KACzB;CACF,CAAC;AAEF,eAAe,IAAI,CAAC;AAGpB,kDAAkD;AAClD,MAAM,CAAC,MAAM,OAAO,GAAU;IAC5B,IAAI,EAAE;QACJ,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,aAAa;KACrB;CACF,CAAC;AAEF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,SAAS,GAAU;IAC9B,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,sCAAqB;KAC7B;CACF,CAAC;AAEF,mEAAmE;AACnE,MAAM,CAAC,MAAM,eAAe,GAAU;IACpC,MAAM,EAAE,GAAG,EAAE,CAAC,CACZ,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,aACnE,KAAC,aAAa,IAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAC,aAAa,GAAG,EAChD,KAAC,aAAa,IAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAC,QAAQ,EAAC,KAAK,EAAE,sCAAqB,GAAI,EAC5E,KAAC,aAAa,IAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAC,eAAe,GAAG,IACnD,CACP;CACF,CAAC"}
@@ -0,0 +1,10 @@
1
+ /** Props for the SectionLabel component. */
2
+ export interface SectionLabelProps {
3
+ children: React.ReactNode;
4
+ }
5
+ /**
6
+ * SectionLabel — muted uppercase label above a content block.
7
+ * Canonical style: xs, semibold, textSecondary, uppercase, 0.3px letter-spacing.
8
+ */
9
+ export declare function SectionLabel({ children }: SectionLabelProps): import("@emotion/react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=SectionLabel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SectionLabel.d.ts","sourceRoot":"","sources":["../../src/components/SectionLabel.tsx"],"names":[],"mappings":"AAIA,4CAA4C;AAC5C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAYD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,iBAAiB,oDAG3D"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "@emotion/react/jsx-runtime";
2
+ /** @jsxImportSource @emotion/react */
3
+ import { useTheme } from '@agentskillmania/skill-ui-theme';
4
+ import { css } from '@emotion/react';
5
+ /** Canonical section label style — uppercase muted label. */
6
+ const labelStyle = (theme) => css `
7
+ font-size: ${theme.font.size.xs};
8
+ font-weight: ${theme.font.weight.semibold};
9
+ color: ${theme.color.textSecondary};
10
+ text-transform: uppercase;
11
+ letter-spacing: 0.3px;
12
+ margin-bottom: ${theme.spacing[1]};
13
+ `;
14
+ /**
15
+ * SectionLabel — muted uppercase label above a content block.
16
+ * Canonical style: xs, semibold, textSecondary, uppercase, 0.3px letter-spacing.
17
+ */
18
+ export function SectionLabel({ children }) {
19
+ const theme = useTheme();
20
+ return _jsx("div", { css: labelStyle(theme), children: children });
21
+ }
22
+ //# sourceMappingURL=SectionLabel.js.map