@pipelex/mthds-ui 0.5.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.
@@ -0,0 +1,284 @@
1
+ /* ─── StuffViewer component styles ────────────────────────────────────────── */
2
+ /* Uses CSS custom properties for consumer theming. Defaults match graph-core.css. */
3
+
4
+ .stuff-viewer {
5
+ --sv-bg: var(--color-bg, #0a0a0a);
6
+ --sv-surface: var(--color-surface, #16213e);
7
+ --sv-surface-hover: var(--color-surface-hover, #1f2b47);
8
+ --sv-border: var(--color-border, #2a3a5a);
9
+ --sv-text: var(--color-text, #e2e8f0);
10
+ --sv-text-muted: var(--color-text-muted, #94a3b8);
11
+ --sv-accent: var(--color-accent, #3b82f6);
12
+ --sv-success: #10b981;
13
+ --sv-success-bg: rgba(16, 185, 129, 0.2);
14
+ --sv-radius: 4px;
15
+ --sv-font-sans: var(
16
+ --font-sans,
17
+ "Inter",
18
+ -apple-system,
19
+ BlinkMacSystemFont,
20
+ "Segoe UI",
21
+ sans-serif
22
+ );
23
+ --sv-font-mono: var(--font-mono, "JetBrains Mono", "Monaco", "Menlo", monospace);
24
+
25
+ font-family: var(--sv-font-sans);
26
+ color: var(--sv-text);
27
+ display: flex;
28
+ flex-direction: column;
29
+ height: 100%;
30
+ }
31
+
32
+ /* ─── Header ─────────────────────────────────────────────────────────────── */
33
+
34
+ .stuff-viewer-header {
35
+ display: flex;
36
+ flex-direction: column;
37
+ gap: 2px;
38
+ padding: 12px 16px 8px;
39
+ border-bottom: 1px solid var(--sv-border);
40
+ flex-shrink: 0;
41
+ }
42
+
43
+ .stuff-viewer-title {
44
+ font-size: 14px;
45
+ font-weight: 600;
46
+ color: var(--sv-text);
47
+ margin: 0;
48
+ }
49
+
50
+ .stuff-viewer-subtitle {
51
+ font-size: 12px;
52
+ color: var(--sv-text-muted);
53
+ margin: 0;
54
+ }
55
+
56
+ /* ─── Toolbar: tabs + action buttons ─────────────────────────────────────── */
57
+
58
+ .stuff-viewer-toolbar {
59
+ display: flex;
60
+ justify-content: space-between;
61
+ align-items: center;
62
+ padding: 8px 16px;
63
+ gap: 8px;
64
+ flex-shrink: 0;
65
+ }
66
+
67
+ .stuff-viewer-tabs {
68
+ display: flex;
69
+ gap: 4px;
70
+ }
71
+
72
+ .stuff-viewer-tab {
73
+ padding: 5px 10px;
74
+ border-radius: var(--sv-radius);
75
+ cursor: pointer;
76
+ font-size: 12px;
77
+ font-weight: 500;
78
+ background: var(--sv-surface-hover);
79
+ color: var(--sv-text-muted);
80
+ border: none;
81
+ transition:
82
+ background 0.15s,
83
+ color 0.15s;
84
+ }
85
+
86
+ .stuff-viewer-tab:hover {
87
+ background: var(--sv-border);
88
+ color: var(--sv-text);
89
+ }
90
+
91
+ .stuff-viewer-tab--active {
92
+ background: var(--sv-accent);
93
+ color: #fff;
94
+ }
95
+
96
+ /* ─── Action buttons ─────────────────────────────────────────────────────── */
97
+
98
+ .stuff-viewer-actions {
99
+ display: flex;
100
+ gap: 4px;
101
+ }
102
+
103
+ .stuff-viewer-action-btn {
104
+ display: flex;
105
+ align-items: center;
106
+ justify-content: center;
107
+ width: 28px;
108
+ height: 28px;
109
+ border-radius: var(--sv-radius);
110
+ cursor: pointer;
111
+ background: var(--sv-surface-hover);
112
+ color: var(--sv-text-muted);
113
+ border: none;
114
+ transition:
115
+ background 0.15s,
116
+ color 0.15s;
117
+ }
118
+
119
+ .stuff-viewer-action-btn:hover {
120
+ background: var(--sv-border);
121
+ color: var(--sv-text);
122
+ }
123
+
124
+ .stuff-viewer-action-btn--copied {
125
+ background: var(--sv-success-bg);
126
+ color: var(--sv-success);
127
+ }
128
+
129
+ .stuff-viewer-action-btn svg {
130
+ width: 14px;
131
+ height: 14px;
132
+ fill: currentColor;
133
+ }
134
+
135
+ /* ─── Content area ───────────────────────────────────────────────────────── */
136
+
137
+ .stuff-viewer-content {
138
+ flex: 1;
139
+ overflow: auto;
140
+ padding: 12px 16px 16px;
141
+ min-height: 0;
142
+ }
143
+
144
+ /* Pre-formatted text (JSON and Pretty tabs) */
145
+ .stuff-viewer-pre {
146
+ font-family: var(--sv-font-mono);
147
+ font-size: 11px;
148
+ line-height: 1.5;
149
+ white-space: pre-wrap;
150
+ word-wrap: break-word;
151
+ margin: 0;
152
+ color: var(--sv-text-muted);
153
+ }
154
+
155
+ .stuff-viewer-pre--nowrap {
156
+ white-space: pre;
157
+ word-wrap: normal;
158
+ line-height: 1;
159
+ overflow-x: auto;
160
+ padding-right: 20px;
161
+ }
162
+
163
+ /* HTML content */
164
+ .stuff-viewer-html {
165
+ font-family: var(--sv-font-sans);
166
+ font-size: 11px;
167
+ color: var(--sv-text-muted);
168
+ line-height: 1.5;
169
+ }
170
+
171
+ .stuff-viewer-html table {
172
+ border-collapse: collapse;
173
+ width: 100%;
174
+ }
175
+
176
+ .stuff-viewer-html th,
177
+ .stuff-viewer-html td {
178
+ border: 1px solid var(--sv-border);
179
+ padding: 8px 12px;
180
+ text-align: left;
181
+ }
182
+
183
+ .stuff-viewer-html th {
184
+ background: var(--sv-surface-hover);
185
+ color: var(--sv-text);
186
+ font-weight: 600;
187
+ }
188
+
189
+ .stuff-viewer-html tr:hover {
190
+ background: var(--sv-surface-hover);
191
+ }
192
+
193
+ .stuff-viewer-html a {
194
+ color: var(--sv-accent);
195
+ text-decoration: none;
196
+ }
197
+
198
+ .stuff-viewer-html a:hover {
199
+ text-decoration: underline;
200
+ }
201
+
202
+ .stuff-viewer-html ul {
203
+ list-style: none;
204
+ padding-left: 0;
205
+ margin: 0;
206
+ }
207
+
208
+ /* PDF embed */
209
+ .stuff-viewer-pdf {
210
+ min-height: 400px;
211
+ height: 100%;
212
+ }
213
+
214
+ .stuff-viewer-pdf embed {
215
+ width: 100%;
216
+ height: 100%;
217
+ min-height: 500px;
218
+ border: none;
219
+ }
220
+
221
+ /* Image content */
222
+ .stuff-viewer-image {
223
+ display: flex;
224
+ justify-content: center;
225
+ align-items: center;
226
+ min-height: 200px;
227
+ }
228
+
229
+ .stuff-viewer-image img {
230
+ max-width: 100%;
231
+ max-height: 70vh;
232
+ object-fit: contain;
233
+ }
234
+
235
+ /* Local file fallback (file:// URLs that can't render inline) */
236
+ .stuff-viewer-local-file {
237
+ display: flex;
238
+ align-items: center;
239
+ gap: 12px;
240
+ padding: 16px;
241
+ border-radius: 6px;
242
+ background: var(--sv-surface);
243
+ border: 1px solid var(--sv-border);
244
+ }
245
+
246
+ .stuff-viewer-local-file-icon {
247
+ flex-shrink: 0;
248
+ width: 32px;
249
+ height: 32px;
250
+ color: var(--sv-text-muted);
251
+ }
252
+
253
+ .stuff-viewer-local-file-icon svg {
254
+ width: 100%;
255
+ height: 100%;
256
+ fill: currentColor;
257
+ }
258
+
259
+ .stuff-viewer-local-file-info {
260
+ flex: 1;
261
+ min-width: 0;
262
+ }
263
+
264
+ .stuff-viewer-local-file-name {
265
+ font-family: var(--sv-font-mono);
266
+ font-size: 12px;
267
+ color: var(--sv-text);
268
+ overflow: hidden;
269
+ text-overflow: ellipsis;
270
+ white-space: nowrap;
271
+ }
272
+
273
+ .stuff-viewer-local-file-hint {
274
+ font-size: 11px;
275
+ color: var(--sv-text-muted);
276
+ margin-top: 2px;
277
+ }
278
+
279
+ /* Placeholder for missing data */
280
+ .stuff-viewer-placeholder {
281
+ color: var(--sv-text-muted);
282
+ font-style: italic;
283
+ font-size: 13px;
284
+ }
@@ -0,0 +1,61 @@
1
+ /* ─── Graph Toolbar — floating controls over the graph background ─────── */
2
+
3
+ .graph-toolbar {
4
+ position: absolute;
5
+ top: 8px;
6
+ display: flex;
7
+ align-items: center;
8
+ gap: 4px;
9
+ z-index: 11;
10
+ pointer-events: auto;
11
+ }
12
+
13
+ .graph-toolbar-btn {
14
+ all: unset;
15
+ box-sizing: border-box;
16
+ cursor: pointer;
17
+ width: 28px;
18
+ height: 28px;
19
+ display: inline-flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ border-radius: 6px;
23
+ background: rgba(17, 17, 24, 0.8);
24
+ border: 1px solid rgba(255, 255, 255, 0.1);
25
+ color: #cbd5e1;
26
+ backdrop-filter: blur(6px);
27
+ transition:
28
+ background 0.15s,
29
+ color 0.15s,
30
+ border-color 0.15s;
31
+ }
32
+
33
+ .graph-toolbar-btn:hover {
34
+ background: rgba(30, 30, 40, 0.9);
35
+ color: #f1f5f9;
36
+ border-color: rgba(255, 255, 255, 0.18);
37
+ }
38
+
39
+ .graph-toolbar-btn:focus-visible {
40
+ outline: 2px solid rgba(59, 130, 246, 0.6);
41
+ outline-offset: 1px;
42
+ }
43
+
44
+ .graph-toolbar-btn--active {
45
+ background: #3b82f6;
46
+ border-color: #3b82f6;
47
+ color: #ffffff;
48
+ }
49
+
50
+ .graph-toolbar-btn--active:hover {
51
+ background: #2563eb;
52
+ border-color: #2563eb;
53
+ color: #ffffff;
54
+ }
55
+
56
+ .graph-toolbar-separator {
57
+ width: 1px;
58
+ height: 18px;
59
+ background: rgba(255, 255, 255, 0.12);
60
+ margin: 0 2px;
61
+ }
@@ -0,0 +1,3 @@
1
+ export { A as ARROW_CLOSED_MARKER, m as CONTROLLER_PADDING_BOTTOM, n as CONTROLLER_PADDING_TOP, o as CONTROLLER_PADDING_X, C as ConceptInfo, D as DataflowAnalysis, E as EDGE_TYPE, p as EdgeType, q as GRAPH_DIRECTION, d as GraphConfig, k as GraphData, e as GraphDirection, a as GraphEdge, b as GraphNode, G as GraphNodeData, c as GraphSpec, r as GraphSpecEdge, s as GraphSpecEdgeKind, h as GraphSpecNode, t as GraphSpecNodeError, u as GraphSpecNodeIo, i as GraphSpecNodeIoItem, v as GraphSpecNodeTiming, L as LabelDescriptor, l as LayoutConfig, N as NODE_TYPE_CONTROLLER, w as NODE_TYPE_PIPE_CARD, x as NODE_TYPE_STUFF, y as NodeKind, z as PipeBatchBlueprint, B as PipeBlueprintBase, j as PipeBlueprintUnion, F as PipeCardPayload, H as PipeComposeBlueprint, I as PipeComposeConstructBlueprint, J as PipeComposeConstructField, K as PipeConditionBlueprint, f as PipeControllerType, M as PipeExtractBlueprint, O as PipeFuncBlueprint, Q as PipeImgGenBlueprint, R as PipeLLMBlueprint, g as PipeOperatorType, S as PipeParallelBlueprint, T as PipeSearchBlueprint, U as PipeSequenceBlueprint, P as PipeStatus, V as PipeType, W as STUFF_ID_PREFIX, X as StuffRole, Y as StuffSpecInfo, Z as SubPipeSpec, _ as TemplateBlueprint, $ as isStuffNodeId, a0 as nodeHeight, a1 as nodeWidth, a2 as stuffDigestFromId, a3 as stuffNodeId } from './types-bV8F_WoM.js';
2
+ export { ControllerRect, DEFAULT_GRAPH_CONFIG, ElkPositionResult, LayoutResult, MAX_VISIBLE_CONTROLLER_CHILDREN, applyControllers, buildChildToControllerMap, buildControllerNodes, buildDataflowAnalysis, buildDataflowGraph, buildElkGraph, buildGraph, estimateNodeDimensions, extractAbsolutePositions, getConceptInfo, getLayoutedElements, getPaletteColors, getPipeBlueprint, inputPortId, outputPortId, resolveConceptRef } from './graph/index.js';
3
+ import 'elkjs/lib/elk-api';
package/dist/index.js ADDED
@@ -0,0 +1,73 @@
1
+ import "./chunk-IX35IG2I.js";
2
+ import {
3
+ ARROW_CLOSED_MARKER,
4
+ CONTROLLER_PADDING_BOTTOM,
5
+ CONTROLLER_PADDING_TOP,
6
+ CONTROLLER_PADDING_X,
7
+ DEFAULT_GRAPH_CONFIG,
8
+ EDGE_TYPE,
9
+ GRAPH_DIRECTION,
10
+ MAX_VISIBLE_CONTROLLER_CHILDREN,
11
+ NODE_TYPE_CONTROLLER,
12
+ NODE_TYPE_PIPE_CARD,
13
+ NODE_TYPE_STUFF,
14
+ STUFF_ID_PREFIX,
15
+ applyControllers,
16
+ buildChildToControllerMap,
17
+ buildControllerNodes,
18
+ buildDataflowAnalysis,
19
+ buildDataflowGraph,
20
+ buildElkGraph,
21
+ buildGraph,
22
+ estimateNodeDimensions,
23
+ extractAbsolutePositions,
24
+ getConceptInfo,
25
+ getLayoutedElements,
26
+ getPaletteColors,
27
+ getPipeBlueprint,
28
+ inputPortId,
29
+ isStuffNodeId,
30
+ nodeHeight,
31
+ nodeWidth,
32
+ outputPortId,
33
+ resolveConceptRef,
34
+ stuffDigestFromId,
35
+ stuffNodeId
36
+ } from "./chunk-CCUSQM3E.js";
37
+ import "./chunk-DDAAVRWG.js";
38
+ export {
39
+ ARROW_CLOSED_MARKER,
40
+ CONTROLLER_PADDING_BOTTOM,
41
+ CONTROLLER_PADDING_TOP,
42
+ CONTROLLER_PADDING_X,
43
+ DEFAULT_GRAPH_CONFIG,
44
+ EDGE_TYPE,
45
+ GRAPH_DIRECTION,
46
+ MAX_VISIBLE_CONTROLLER_CHILDREN,
47
+ NODE_TYPE_CONTROLLER,
48
+ NODE_TYPE_PIPE_CARD,
49
+ NODE_TYPE_STUFF,
50
+ STUFF_ID_PREFIX,
51
+ applyControllers,
52
+ buildChildToControllerMap,
53
+ buildControllerNodes,
54
+ buildDataflowAnalysis,
55
+ buildDataflowGraph,
56
+ buildElkGraph,
57
+ buildGraph,
58
+ estimateNodeDimensions,
59
+ extractAbsolutePositions,
60
+ getConceptInfo,
61
+ getLayoutedElements,
62
+ getPaletteColors,
63
+ getPipeBlueprint,
64
+ inputPortId,
65
+ isStuffNodeId,
66
+ nodeHeight,
67
+ nodeWidth,
68
+ outputPortId,
69
+ resolveConceptRef,
70
+ stuffDigestFromId,
71
+ stuffNodeId
72
+ };
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,13 @@
1
+ import { LanguageRegistration, ThemeRegistrationRaw } from '@shikijs/core';
2
+
3
+ declare const MTHDS_THEMES: readonly ["pipelex-dark", "dark-plus", "monokai", "dracula", "one-dark-pro"];
4
+ type MthdsThemeName = (typeof MTHDS_THEMES)[number];
5
+
6
+ declare function highlightMthds(code: string, theme?: MthdsThemeName): Promise<string>;
7
+ declare function getAvailableThemes(): MthdsThemeName[];
8
+ declare function getMthdsGrammar(): LanguageRegistration;
9
+ declare function getMthdsTheme(): ThemeRegistrationRaw;
10
+
11
+ declare const pipelexDarkTheme: ThemeRegistrationRaw;
12
+
13
+ export { type MthdsThemeName, getAvailableThemes, getMthdsGrammar, getMthdsTheme, highlightMthds, pipelexDarkTheme };