@plitzi/sdk-dev-tools 0.35.7 → 0.35.9

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 +49 -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,54 @@
1
1
  # @plitzi/sdk-dev-tools
2
2
 
3
+ ## 0.35.9
4
+
5
+ ### Patch Changes
6
+
7
+ - Debug a server action's whole flow from the dev-tools, not just its answer.
8
+
9
+ 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
10
+ the redacted error of the one that broke the flow — the compensation steps `flow.onFailure` ran included. It carries
11
+ nothing a step was given or returned, so it goes to any page whose debugging the deployment authorized (`devMode`, or
12
+ a space that switched dev tools on for its published site) and to no other. The full trace, with each step's results,
13
+ still reaches only an authoring request or a development server.
14
+
15
+ Runs the SERVER started while rendering a page — the ones feeding `runtime: 'server'` elements — reach the dev-tools
16
+ too, seeded into the page and added to by every `/_rsc` refresh, under the same authorization: a page nobody
17
+ authorized is not told they happened. A response carrying them is never cached. A run that died on its deadline now
18
+ reports the step it was on rather than nothing at all.
19
+
20
+ The Actions tab was rebuilt around it: filters and search over the log, a run list that names the step that broke,
21
+ and a detail panel with the flow's timeline, its compensation shown apart, and what the run carried in and out.
22
+
23
+ - Updated dependencies
24
+ - @plitzi/sdk-navigation@0.35.9
25
+ - @plitzi/sdk-schema@0.35.9
26
+ - @plitzi/sdk-shared@0.35.9
27
+ - @plitzi/sdk-style@0.35.9
28
+
29
+ ## 0.35.8
30
+
31
+ ### Patch Changes
32
+
33
+ - A space can switch the dev tools on for its own published site.
34
+
35
+ - **`settings.devTools`** in the space schema, set from the builder's Settings panel ("Dev tools on the published SSR
36
+ site (*.plitzi.app)"). It applies to sites served with SSR — usually a space's `*.plitzi.app` address, or a custom
37
+ domain pointed at it. A page server that left `debugMode` unset now authorizes debugging for a space that asked for it, as it
38
+ already did in `devMode`. A server that sets `debugMode` still decides for every space, and `false` cannot be
39
+ turned around by a space. Preview renders stay undebuggable either way.
40
+ - The space is read from the schema the server loaded, never from the request, and the visitor's cookie can still
41
+ only hide the panel.
42
+ - **The HTML cache keys whether a visitor hid the dev tools.** A cached page on a published environment used to be
43
+ keyed on the theme alone, so on a page authorizing dev tools the first visitor's choice — panel or no panel — was
44
+ served to everybody after them.
45
+
46
+ - Updated dependencies
47
+ - @plitzi/sdk-navigation@0.35.8
48
+ - @plitzi/sdk-schema@0.35.8
49
+ - @plitzi/sdk-shared@0.35.8
50
+ - @plitzi/sdk-style@0.35.8
51
+
3
52
  ## 0.35.7
4
53
 
5
54
  ### 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;