@plitzi/sdk-dev-tools 0.35.8 → 0.35.10

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 (39) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/dist/components/DevToolsPanel/tabs/ActionsViewer/ActionsViewer.d.ts +8 -1
  3. package/dist/components/DevToolsPanel/tabs/ActionsViewer/ActionsViewer.mjs +48 -138
  4. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/ActionsToolbar/ActionsToolbar.d.ts +12 -0
  5. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/ActionsToolbar/ActionsToolbar.mjs +68 -0
  6. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/ActionsToolbar/index.d.ts +3 -0
  7. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/ActionsToolbar/index.mjs +5 -0
  8. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/DetailShell/DetailShell.d.ts +7 -0
  9. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/DetailShell/DetailShell.mjs +26 -0
  10. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/DetailShell/index.d.ts +3 -0
  11. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/DetailShell/index.mjs +5 -0
  12. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/FlowTimeline/FlowTimeline.d.ts +15 -0
  13. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/FlowTimeline/FlowTimeline.mjs +29 -0
  14. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/FlowTimeline/index.d.ts +3 -0
  15. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/FlowTimeline/index.mjs +5 -0
  16. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/PayloadView/PayloadView.d.ts +6 -0
  17. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/PayloadView/PayloadView.mjs +26 -0
  18. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/PayloadView/index.d.ts +3 -0
  19. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/PayloadView/index.mjs +5 -0
  20. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunDetail/RunDetail.d.ts +9 -0
  21. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunDetail/RunDetail.mjs +140 -0
  22. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunDetail/index.d.ts +3 -0
  23. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunDetail/index.mjs +5 -0
  24. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunList/RunList.d.ts +11 -0
  25. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunList/RunList.mjs +24 -0
  26. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunList/index.d.ts +3 -0
  27. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunList/index.mjs +5 -0
  28. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunRow/RunRow.d.ts +10 -0
  29. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunRow/RunRow.mjs +88 -0
  30. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunRow/index.d.ts +3 -0
  31. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/RunRow/index.mjs +5 -0
  32. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/StepRow/StepRow.d.ts +9 -0
  33. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/StepRow/StepRow.mjs +57 -0
  34. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/StepRow/index.d.ts +3 -0
  35. package/dist/components/DevToolsPanel/tabs/ActionsViewer/components/StepRow/index.mjs +5 -0
  36. package/dist/components/DevToolsPanel/tabs/ActionsViewer/helpers.d.ts +53 -0
  37. package/dist/components/DevToolsPanel/tabs/ActionsViewer/helpers.mjs +65 -0
  38. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogInteraction/LogInteraction.mjs +15 -15
  39. package/package.json +105 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,51 @@
1
1
  # @plitzi/sdk-dev-tools
2
2
 
3
+ ## 0.35.10
4
+
5
+ ### Patch Changes
6
+
7
+ - **Breaking:** the space setting that lets a published site open the dev tools is now `settings.debugMode`, and
8
+ `settings.devTools` is gone.
9
+
10
+ It was always the same decision the SDK and the page server call `debugMode` — whether the dev-tools panel is
11
+ authorized — and having a third name for it invited confusing it with `devMode`, which is a different thing: it turns a
12
+ deployment into a development server (the unminified bundles, request timings, and the full action trace with every
13
+ step's results). A space can authorize debugging for its own site; it can never make its server a development one.
14
+
15
+ A space that stored `settings.devTools` needs it moved to `settings.debugMode`; nothing reads the old key.
16
+
17
+ - Updated dependencies
18
+ - @plitzi/sdk-navigation@0.35.10
19
+ - @plitzi/sdk-schema@0.35.10
20
+ - @plitzi/sdk-shared@0.35.10
21
+ - @plitzi/sdk-style@0.35.10
22
+
23
+ ## 0.35.9
24
+
25
+ ### Patch Changes
26
+
27
+ - Debug a server action's whole flow from the dev-tools, not just its answer.
28
+
29
+ A run now reports an OUTLINE of what it did: every step in order, with its task, how it ended, how long it took, and
30
+ the redacted error of the one that broke the flow — the compensation steps `flow.onFailure` ran included. It carries
31
+ nothing a step was given or returned, so it goes to any page whose debugging the deployment authorized (`devMode`, or
32
+ a space that switched dev tools on for its published site) and to no other. The full trace, with each step's results,
33
+ still reaches only an authoring request or a development server.
34
+
35
+ Runs the SERVER started while rendering a page — the ones feeding `runtime: 'server'` elements — reach the dev-tools
36
+ too, seeded into the page and added to by every `/_rsc` refresh, under the same authorization: a page nobody
37
+ authorized is not told they happened. A response carrying them is never cached. A run that died on its deadline now
38
+ reports the step it was on rather than nothing at all.
39
+
40
+ The Actions tab was rebuilt around it: filters and search over the log, a run list that names the step that broke,
41
+ and a detail panel with the flow's timeline, its compensation shown apart, and what the run carried in and out.
42
+
43
+ - Updated dependencies
44
+ - @plitzi/sdk-navigation@0.35.9
45
+ - @plitzi/sdk-schema@0.35.9
46
+ - @plitzi/sdk-shared@0.35.9
47
+ - @plitzi/sdk-style@0.35.9
48
+
3
49
  ## 0.35.8
4
50
 
5
51
  ### Patch Changes
@@ -1,3 +1,10 @@
1
- /** Server action runs; `detached` and `stream` modes leave no other trace in the UI. */
1
+ /**
2
+ * Every server action this page caused, including the ones it never asked for.
3
+ *
4
+ * A `detached` run has no answer to await and a `stream` returns before its frames arrive, so neither leaves a trace
5
+ * anywhere else; a `render` run happened before the page existed in the browser. What each shows beyond its own
6
+ * outcome is what the server was willing to send — the steps to a page allowed to debug them, and what those steps
7
+ * read and answered only to an authoring session or a dev server.
8
+ */
2
9
  declare const ActionsViewer: () => import("react").JSX.Element;
3
10
  export default ActionsViewer;
@@ -1,147 +1,57 @@
1
- import e from "clsx";
2
- import { useCallback as t, useState as n } from "react";
3
- import { jsx as r, jsxs as i } from "react/jsx-runtime";
4
- import { cancelActionRun as a, useActionRuns as o, useCommonStore as s } from "@plitzi/sdk-shared/store";
5
- import c from "@plitzi/plitzi-ui/Button";
1
+ import e from "./components/ActionsToolbar/index.mjs";
2
+ import t from "./components/DetailShell/index.mjs";
3
+ import { filterRuns as n, isLive as r } from "./helpers.mjs";
4
+ import i from "./components/RunDetail/index.mjs";
5
+ import a from "./components/RunList/index.mjs";
6
+ import o from "@plitzi/plitzi-ui/hooks/useStorage";
7
+ import { useCallback as s, useMemo as c, useState as l } from "react";
8
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
9
+ import { cancelActionRun as f, useActionRuns as p, useCommonStore as m } from "@plitzi/sdk-shared/store";
6
10
  //#region src/components/DevToolsPanel/tabs/ActionsViewer/ActionsViewer.tsx
7
- var l = {
8
- running: "text-blue-600 dark:text-blue-400",
9
- streaming: "text-blue-600 dark:text-blue-400",
10
- accepted: "text-blue-600 dark:text-blue-400",
11
- completed: "text-green-700 dark:text-green-400",
12
- failed: "text-red-600 dark:text-red-400",
13
- aborted: "text-amber-600 dark:text-amber-400",
14
- skipped: "text-zinc-500"
15
- }, u = (e) => new Date(e).toLocaleTimeString(), d = (e) => e.endedAt ? `${e.endedAt - e.startedAt}ms` : "…", f = (e) => e.endedAt === void 0, p = () => {
16
- let { runs: p, clear: m } = o(), [h] = s("actions.endpoint"), [g, _] = n(), v = p.filter(f), y = t((e) => () => _((t) => t === e ? void 0 : e), []), b = t((e) => () => a(e), []);
17
- return /* @__PURE__ */ i("div", {
18
- className: "flex h-full w-full flex-col overflow-auto",
11
+ var h = "This page is served without a Plitzi server: every action step is inert", g = () => {
12
+ let { runs: g, clear: _ } = p(), [v] = m("actions.endpoint"), [y, b] = o("plitzi-sdk.dev-tools.actions.filter", "all"), [x, S] = l(""), [C, w] = l(), [T, E] = l(), D = c(() => n(g, y, x), [
13
+ g,
14
+ y,
15
+ x
16
+ ]), O = c(() => g.filter(r).length, [g]), k = c(() => g.find((e) => e.id === C), [g, C]), A = s((e) => {
17
+ w((t) => t === e ? void 0 : e), E(void 0);
18
+ }, []), j = s((e) => {
19
+ E((t) => t === e ? void 0 : e);
20
+ }, []), M = s((e) => f(e), []), N = s(() => {
21
+ _(), w(void 0), E(void 0);
22
+ }, [_]);
23
+ return /* @__PURE__ */ d("div", {
24
+ className: "flex h-full w-full flex-col",
19
25
  children: [
20
- /* @__PURE__ */ i("div", {
21
- className: "flex items-center justify-between border-b border-zinc-200 px-2 py-1 dark:border-zinc-700",
22
- children: [/* @__PURE__ */ i("div", {
23
- className: "flex items-center gap-2",
24
- children: [v.length > 0 && /* @__PURE__ */ i("span", {
25
- className: "flex items-center gap-1 text-blue-600 dark:text-blue-400",
26
- children: [
27
- /* @__PURE__ */ r("i", { className: "fa-solid fa-circle-notch fa-spin" }),
28
- v.length,
29
- " running"
30
- ]
31
- }), /* @__PURE__ */ r("span", {
32
- className: "text-xs text-zinc-500 dark:text-zinc-400",
33
- children: h ? `Server actions run at ${h}` : "This page is served without a Plitzi server: every action step is inert"
34
- })]
35
- }), /* @__PURE__ */ r(c, {
36
- size: "xs",
37
- disabled: p.length === 0,
38
- onClick: m,
39
- children: "Clear"
40
- })]
26
+ /* @__PURE__ */ u(e, {
27
+ filter: y,
28
+ query: x,
29
+ liveCount: O,
30
+ runCount: g.length,
31
+ onFilterChange: b,
32
+ onQueryChange: S,
33
+ onClear: N
41
34
  }),
42
- p.length === 0 && /* @__PURE__ */ r("div", {
43
- className: "p-3 text-xs text-zinc-500 dark:text-zinc-400",
44
- children: "No server action has run on this page yet. A run appears the moment one is SENT — including the ones that never come back."
35
+ v === void 0 && /* @__PURE__ */ u("div", {
36
+ className: "shrink-0 border-b border-amber-200 bg-amber-50 px-2 py-1 text-[10px] text-amber-700 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-400",
37
+ children: h
45
38
  }),
46
- /* @__PURE__ */ r("div", {
47
- className: "flex flex-col",
48
- children: p.map((t) => /* @__PURE__ */ i("div", {
49
- className: "border-b border-zinc-100 dark:border-zinc-800",
50
- children: [/* @__PURE__ */ i("div", {
51
- className: "flex w-full items-center gap-2 px-2 hover:bg-zinc-50 dark:hover:bg-zinc-800",
52
- children: [/* @__PURE__ */ i("button", {
53
- type: "button",
54
- className: "flex grow items-center gap-2 py-1 text-left text-xs",
55
- onClick: y(t.id),
56
- children: [
57
- /* @__PURE__ */ r("span", {
58
- className: "text-zinc-400 dark:text-zinc-500",
59
- children: u(t.startedAt)
60
- }),
61
- /* @__PURE__ */ r("span", {
62
- className: "font-medium",
63
- children: t.actionId || "(no action named)"
64
- }),
65
- /* @__PURE__ */ r("span", {
66
- className: "rounded-sm bg-zinc-100 px-1 text-[10px] uppercase dark:bg-zinc-800",
67
- children: t.mode
68
- }),
69
- /* @__PURE__ */ r("span", {
70
- className: e("ml-auto", l[t.status] ?? ""),
71
- children: t.reason ?? t.status
72
- }),
73
- /* @__PURE__ */ r("span", {
74
- className: "text-zinc-400 dark:text-zinc-500",
75
- children: d(t)
76
- })
77
- ]
78
- }), f(t) && t.cancellable && /* @__PURE__ */ r(c, {
79
- size: "xs",
80
- intent: "secondary",
81
- onClick: b(t.id),
82
- children: "Cancel"
83
- })]
84
- }), g === t.id && /* @__PURE__ */ i("div", {
85
- className: "flex flex-col gap-2 bg-zinc-50 px-3 py-2 text-xs dark:bg-zinc-800/50",
86
- children: [
87
- t.runId && /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("span", {
88
- className: "text-zinc-500 dark:text-zinc-400",
89
- children: "Run id: "
90
- }), /* @__PURE__ */ r("span", {
91
- className: "font-mono",
92
- children: t.runId
93
- })] }),
94
- t.error && /* @__PURE__ */ r("div", {
95
- className: "break-words text-red-600 dark:text-red-400",
96
- children: t.error
97
- }),
98
- /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("div", {
99
- className: "text-zinc-500 dark:text-zinc-400",
100
- children: "Input"
101
- }), /* @__PURE__ */ r("pre", {
102
- className: "overflow-auto whitespace-pre-wrap",
103
- children: JSON.stringify(t.input ?? {}, null, 2)
104
- })] }),
105
- t.output && /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("div", {
106
- className: "text-zinc-500 dark:text-zinc-400",
107
- children: "Output"
108
- }), /* @__PURE__ */ r("pre", {
109
- className: "overflow-auto whitespace-pre-wrap",
110
- children: JSON.stringify(t.output, null, 2)
111
- })] }),
112
- t.progress.length > 0 && /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ i("div", {
113
- className: "text-zinc-500 dark:text-zinc-400",
114
- children: [
115
- "Progress (",
116
- t.progress.length,
117
- ")"
118
- ]
119
- }), /* @__PURE__ */ r("pre", {
120
- className: "overflow-auto whitespace-pre-wrap",
121
- children: JSON.stringify(t.progress, null, 2)
122
- })] }),
123
- t.trace && /* @__PURE__ */ i("div", {
124
- className: "flex flex-col gap-1",
125
- children: [/* @__PURE__ */ r("div", {
126
- className: "text-zinc-500 dark:text-zinc-400",
127
- children: "Server steps"
128
- }), t.trace.map((t, n) => {
129
- let a = t.node, o = typeof t.status == "string" ? t.status : "";
130
- return /* @__PURE__ */ i("div", {
131
- className: "flex items-center justify-between rounded-sm border border-zinc-200 px-2 py-1 dark:border-zinc-700",
132
- children: [/* @__PURE__ */ r("span", { children: a?.title ?? a?.action ?? "step" }), /* @__PURE__ */ r("span", {
133
- className: e(l[o === "success" ? "completed" : "failed"]),
134
- children: o
135
- })]
136
- }, `${String(a?.action)}-${n}`);
137
- })]
138
- })
139
- ]
140
- })]
141
- }, t.id))
39
+ /* @__PURE__ */ d("div", {
40
+ className: "flex min-h-0 grow",
41
+ children: [/* @__PURE__ */ u(a, {
42
+ runs: D,
43
+ total: g.length,
44
+ selectedRunId: C,
45
+ onSelect: A,
46
+ onCancel: M
47
+ }), k !== void 0 && /* @__PURE__ */ u(t, { children: /* @__PURE__ */ u(i, {
48
+ run: k,
49
+ selectedStepId: T,
50
+ onSelectStep: j
51
+ }) })]
142
52
  })
143
53
  ]
144
54
  });
145
55
  };
146
56
  //#endregion
147
- export { p as default };
57
+ export { g as default };
@@ -0,0 +1,12 @@
1
+ import { RunFilter } from '../../helpers';
2
+ export type ActionsToolbarProps = {
3
+ filter: RunFilter;
4
+ query: string;
5
+ liveCount: number;
6
+ runCount: number;
7
+ onFilterChange: (filter: RunFilter) => void;
8
+ onQueryChange: (query: string) => void;
9
+ onClear: () => void;
10
+ };
11
+ declare const ActionsToolbar: ({ filter, query, liveCount, runCount, onFilterChange, onQueryChange, onClear }: ActionsToolbarProps) => import("react").JSX.Element;
12
+ export default ActionsToolbar;
@@ -0,0 +1,68 @@
1
+ import e from "clsx";
2
+ import { useCallback as t } from "react";
3
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
+ //#region src/components/DevToolsPanel/tabs/ActionsViewer/components/ActionsToolbar/ActionsToolbar.tsx
5
+ var i = [
6
+ {
7
+ id: "all",
8
+ label: "All",
9
+ icon: "fa-solid fa-list"
10
+ },
11
+ {
12
+ id: "live",
13
+ label: "Running",
14
+ icon: "fa-solid fa-circle-notch"
15
+ },
16
+ {
17
+ id: "failed",
18
+ label: "Failed",
19
+ icon: "fa-solid fa-circle-exclamation"
20
+ }
21
+ ], a = ({ filter: a, query: o, liveCount: s, runCount: c, onFilterChange: l, onQueryChange: u, onClear: d }) => {
22
+ let f = t((e) => () => l(e), [l]), p = t((e) => u(e.target.value), [u]);
23
+ return /* @__PURE__ */ r("div", {
24
+ className: "flex shrink-0 items-center gap-2 border-b border-zinc-200 bg-zinc-50 px-2 py-1.5 dark:border-zinc-800 dark:bg-zinc-900",
25
+ children: [
26
+ /* @__PURE__ */ n("div", {
27
+ className: "flex items-stretch gap-1",
28
+ children: i.map((t) => {
29
+ let i = a === t.id;
30
+ return /* @__PURE__ */ r("button", {
31
+ onClick: f(t.id),
32
+ "aria-pressed": i,
33
+ className: e("flex h-6 items-center gap-1 rounded px-2 text-xs font-medium transition-colors", {
34
+ "bg-violet-500 text-white": i,
35
+ "text-zinc-600 hover:bg-zinc-200 dark:text-zinc-400 dark:hover:bg-zinc-700": !i
36
+ }),
37
+ children: [
38
+ /* @__PURE__ */ n("i", { className: e(t.icon, t.id === "live" && s > 0 && "fa-spin") }),
39
+ t.label,
40
+ t.id === "live" && s > 0 && /* @__PURE__ */ n("span", {
41
+ className: "tabular-nums",
42
+ children: s
43
+ })
44
+ ]
45
+ }, t.id);
46
+ })
47
+ }),
48
+ /* @__PURE__ */ n("input", {
49
+ type: "search",
50
+ value: o,
51
+ onChange: p,
52
+ placeholder: "Filter by action, step or run id",
53
+ className: "h-6 min-w-0 grow rounded border border-zinc-200 bg-white px-2 text-xs text-zinc-700 placeholder:text-zinc-400 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-200"
54
+ }),
55
+ /* @__PURE__ */ r("span", {
56
+ className: "shrink-0 text-[10px] text-zinc-400 tabular-nums dark:text-zinc-500",
57
+ children: [c, " runs"]
58
+ }),
59
+ /* @__PURE__ */ r("button", {
60
+ onClick: d,
61
+ className: "flex h-6 shrink-0 items-center gap-1 rounded px-2 text-xs font-medium text-zinc-600 hover:bg-zinc-200 dark:text-zinc-300 dark:hover:bg-zinc-700",
62
+ children: [/* @__PURE__ */ n("i", { className: "fa-solid fa-trash" }), "Clear"]
63
+ })
64
+ ]
65
+ });
66
+ };
67
+ //#endregion
68
+ export { a as default };
@@ -0,0 +1,3 @@
1
+ import { default as ActionsToolbar } from './ActionsToolbar';
2
+ export type { ActionsToolbarProps } from './ActionsToolbar';
3
+ export default ActionsToolbar;
@@ -0,0 +1,5 @@
1
+ import e from "./ActionsToolbar.mjs";
2
+ //#region src/components/DevToolsPanel/tabs/ActionsViewer/components/ActionsToolbar/index.ts
3
+ var t = e;
4
+ //#endregion
5
+ export { t as default };
@@ -0,0 +1,7 @@
1
+ import { ReactNode } from 'react';
2
+ export type DetailShellProps = {
3
+ children: ReactNode;
4
+ };
5
+ /** The resizable column the selected run is inspected in; its width is remembered across sessions. */
6
+ declare const DetailShell: ({ children }: DetailShellProps) => import("react").JSX.Element;
7
+ export default DetailShell;
@@ -0,0 +1,26 @@
1
+ import e from "@plitzi/plitzi-ui/hooks/useStorage";
2
+ import { useCallback as t } from "react";
3
+ import { jsx as n } from "react/jsx-runtime";
4
+ import r from "@plitzi/plitzi-ui/ContainerResizable";
5
+ //#region src/components/DevToolsPanel/tabs/ActionsViewer/components/DetailShell/DetailShell.tsx
6
+ var i = 200, a = 520, o = 280, s = ({ children: s }) => {
7
+ let [c, l] = e("plitzi-sdk.dev-tools.actions.detail-width", o), u = t((e) => {
8
+ Number.isFinite(e) && l(e);
9
+ }, [l]);
10
+ return /* @__PURE__ */ n(r, {
11
+ className: "shrink-0 border-l border-zinc-200 dark:border-zinc-800",
12
+ resizeHandles: ["w"],
13
+ axis: "x",
14
+ autoGrow: !1,
15
+ width: c,
16
+ minConstraintsX: i,
17
+ maxConstraintsX: a,
18
+ onChange: u,
19
+ children: /* @__PURE__ */ n("aside", {
20
+ className: "flex h-full w-full flex-col gap-1.5 overflow-auto bg-zinc-50 px-3 py-2 text-[10px] dark:bg-zinc-900/50",
21
+ children: s
22
+ })
23
+ });
24
+ };
25
+ //#endregion
26
+ export { s as default };
@@ -0,0 +1,3 @@
1
+ import { default as DetailShell } from './DetailShell';
2
+ export type { DetailShellProps } from './DetailShell';
3
+ export default DetailShell;
@@ -0,0 +1,5 @@
1
+ import e from "./DetailShell.mjs";
2
+ //#region src/components/DevToolsPanel/tabs/ActionsViewer/components/DetailShell/index.ts
3
+ var t = e;
4
+ //#endregion
5
+ export { t as default };
@@ -0,0 +1,15 @@
1
+ import { ActionRunStep } from '@plitzi/sdk-shared';
2
+ export type FlowTimelineProps = {
3
+ steps: ActionRunStep[];
4
+ selectedStepId?: string;
5
+ onSelectStep: (stepId: string) => void;
6
+ };
7
+ /**
8
+ * The flow as it actually ran, in order, with the compensation kept apart from it.
9
+ *
10
+ * The `undo` steps are not more of the flow: they ran BECAUSE it failed, giving back what the steps above them
11
+ * already did. Drawn in the same list they read as a flow that carried on after the failure, which is the opposite
12
+ * of what happened.
13
+ */
14
+ declare const FlowTimeline: ({ steps, selectedStepId, onSelectStep }: FlowTimelineProps) => import("react").JSX.Element;
15
+ export default FlowTimeline;
@@ -0,0 +1,29 @@
1
+ import { stepBars as e } from "../../helpers.mjs";
2
+ import t from "../StepRow/index.mjs";
3
+ import { useMemo as n } from "react";
4
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
5
+ //#region src/components/DevToolsPanel/tabs/ActionsViewer/components/FlowTimeline/FlowTimeline.tsx
6
+ var a = ({ steps: a, selectedStepId: o, onSelectStep: s }) => {
7
+ let c = n(() => e(a), [a]), l = c.filter((e) => e.step.phase === "flow"), u = c.filter((e) => e.step.phase === "undo");
8
+ return /* @__PURE__ */ i("div", {
9
+ className: "flex flex-col gap-0.5",
10
+ children: [
11
+ l.map((e) => /* @__PURE__ */ r(t, {
12
+ bar: e,
13
+ selected: e.step.id === o,
14
+ onSelect: s
15
+ }, e.step.id)),
16
+ u.length > 0 && /* @__PURE__ */ i("div", {
17
+ className: "mt-2 flex items-center gap-1.5 px-1.5 text-[10px] font-medium tracking-wide text-amber-600 uppercase dark:text-amber-400",
18
+ children: [/* @__PURE__ */ r("i", { className: "fa-solid fa-rotate-left" }), "Compensation"]
19
+ }),
20
+ u.map((e) => /* @__PURE__ */ r(t, {
21
+ bar: e,
22
+ selected: e.step.id === o,
23
+ onSelect: s
24
+ }, e.step.id))
25
+ ]
26
+ });
27
+ };
28
+ //#endregion
29
+ export { a as default };
@@ -0,0 +1,3 @@
1
+ import { default as FlowTimeline } from './FlowTimeline';
2
+ export type { FlowTimelineProps } from './FlowTimeline';
3
+ export default FlowTimeline;
@@ -0,0 +1,5 @@
1
+ import e from "./FlowTimeline.mjs";
2
+ //#region src/components/DevToolsPanel/tabs/ActionsViewer/components/FlowTimeline/index.ts
3
+ var t = e;
4
+ //#endregion
5
+ export { t as default };
@@ -0,0 +1,6 @@
1
+ export type PayloadViewProps = {
2
+ value: unknown;
3
+ };
4
+ /** What a run was given, answered, or streamed — the same reader the Store tab uses, so it reads the same. */
5
+ declare const PayloadView: ({ value }: PayloadViewProps) => import("react").JSX.Element;
6
+ export default PayloadView;
@@ -0,0 +1,26 @@
1
+ import e from "@plitzi/sdk-shared/theme/useTheme";
2
+ import { jsx as t } from "react/jsx-runtime";
3
+ import n from "@uiw/react-json-view";
4
+ import * as r from "@uiw/react-json-view/vscode";
5
+ //#region src/components/DevToolsPanel/tabs/ActionsViewer/components/PayloadView/PayloadView.tsx
6
+ var i = {
7
+ ...r.vscodeTheme,
8
+ width: "100%",
9
+ overflow: "auto",
10
+ padding: "6px",
11
+ fontSize: "11px"
12
+ }, a = ({ value: r }) => {
13
+ let { resolvedTheme: a } = e();
14
+ return typeof r != "object" || !r ? /* @__PURE__ */ t("pre", {
15
+ className: "overflow-auto p-1.5 font-mono text-[11px] break-words whitespace-pre-wrap text-zinc-600 dark:text-zinc-300",
16
+ children: JSON.stringify(r)
17
+ }) : /* @__PURE__ */ t(n, {
18
+ value: r,
19
+ style: a === "dark" ? i : void 0,
20
+ enableClipboard: !1,
21
+ displayDataTypes: !1,
22
+ collapsed: 2
23
+ });
24
+ };
25
+ //#endregion
26
+ export { a as default };
@@ -0,0 +1,3 @@
1
+ import { default as PayloadView } from './PayloadView';
2
+ export type { PayloadViewProps } from './PayloadView';
3
+ export default PayloadView;
@@ -0,0 +1,5 @@
1
+ import e from "./PayloadView.mjs";
2
+ //#region src/components/DevToolsPanel/tabs/ActionsViewer/components/PayloadView/index.ts
3
+ var t = e;
4
+ //#endregion
5
+ export { t as default };
@@ -0,0 +1,9 @@
1
+ import { ActionRunEntry } from '@plitzi/sdk-shared';
2
+ export type RunDetailProps = {
3
+ run: ActionRunEntry;
4
+ selectedStepId?: string;
5
+ onSelectStep: (stepId: string) => void;
6
+ };
7
+ /** Everything known about one run: how it ended, what it did step by step, and what it carried. */
8
+ declare const RunDetail: ({ run, selectedStepId, onSelectStep }: RunDetailProps) => import("react").JSX.Element;
9
+ export default RunDetail;