@mastra/playground-ui 22.2.0-alpha.8 → 23.0.0-alpha.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.
- package/CHANGELOG.md +52 -0
- package/dist/index.cjs.js +235 -31
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.css +222 -7
- package/dist/index.es.js +236 -34
- package/dist/index.es.js.map +1 -1
- package/dist/src/ds/components/BrandLoader/brand-loader.stories.d.ts +6 -0
- package/dist/src/ds/components/ErrorBoundary/ErrorBoundary.d.ts +44 -0
- package/dist/src/ds/components/ErrorBoundary/error-boundary.stories.d.ts +12 -0
- package/dist/src/ds/components/ErrorBoundary/index.d.ts +2 -0
- package/dist/src/ds/components/Logo/index.d.ts +1 -0
- package/dist/src/ds/components/Logo/logo.d.ts +8 -0
- package/dist/src/ds/components/Logo/logo.stories.d.ts +9 -0
- package/dist/src/index.d.ts +1 -0
- package/package.json +11 -11
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,57 @@
|
|
|
1
1
|
# @mastra/playground-ui
|
|
2
2
|
|
|
3
|
+
## 23.0.0-alpha.10
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Added `ErrorBoundary` component to catch and display runtime errors in the studio. Wraps routes in the local playground so a crash on one page (e.g. an agent editor referencing an unresolved workspace skill) surfaces a friendly recovery UI with **Try again** (in-place React reset), **Reload page** (full browser refresh), and **Report issue** (opens the Mastra GitHub issues page in a new tab) actions, plus a collapsible stack trace — instead of a blank screen. ([#15561](https://github.com/mastra-ai/mastra/pull/15561))
|
|
8
|
+
|
|
9
|
+
The fallback is spatially aware: it fills its parent and the icon, heading, and body text scale up on wider containers via Tailwind container queries. Scope the boundary to a single widget to keep the rest of the UI interactive while one panel fails.
|
|
10
|
+
|
|
11
|
+
**Usage**
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
import { ErrorBoundary } from '@mastra/playground-ui';
|
|
15
|
+
import { useLocation } from 'react-router';
|
|
16
|
+
|
|
17
|
+
// Route-level: wrap the router outlet, reset when the path changes
|
|
18
|
+
function Layout({ children }) {
|
|
19
|
+
const { pathname } = useLocation();
|
|
20
|
+
return <ErrorBoundary resetKeys={[pathname]}>{children}</ErrorBoundary>;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Scoped: contain the crash to one panel, leave the rest of the tree alone
|
|
24
|
+
<ErrorBoundary variant="inline" title="The editor failed to render">
|
|
25
|
+
<AgentEditor />
|
|
26
|
+
</ErrorBoundary>;
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Props: `fallback` (node or render prop with `{ error, errorInfo, reset }`), `onError` for reporting, `resetKeys` for automatic reset, `variant` (`'section'` — fills available space, default; `'inline'` — stays compact), and `title` / `description` overrides.
|
|
30
|
+
|
|
31
|
+
### Patch Changes
|
|
32
|
+
|
|
33
|
+
- Align BrandLoader geometry with the Mastra logo: match disk positions to the logo path, introduce per-size stroke widths and bubble radii (sm/md/lg), and rebalance the gooey filter for rounder ridge↔disk fillets. Shift the size scale so sm stays, md is now w-8, lg is now w-10, and the old w-16 size is removed. ([#15531](https://github.com/mastra-ai/mastra/pull/15531))
|
|
34
|
+
|
|
35
|
+
- Updated dependencies [[`aba393e`](https://github.com/mastra-ai/mastra/commit/aba393e2da7390c69b80e516a4f153cda6f09376), [`0a5fa1d`](https://github.com/mastra-ai/mastra/commit/0a5fa1d3cb0583889d06687155f26fd7d2edc76c), [`ea43e64`](https://github.com/mastra-ai/mastra/commit/ea43e646dd95d507694b6112b0bf1df22ad552b2), [`00d1b16`](https://github.com/mastra-ai/mastra/commit/00d1b16b401199cb294fa23f43336547db4dca9b), [`af8a57e`](https://github.com/mastra-ai/mastra/commit/af8a57ed9ba9685ad8601d5b71ae3706da6222f9), [`be49755`](https://github.com/mastra-ai/mastra/commit/be4975575e63b38f63af588ea8ce6f4cf5b8ff2c)]:
|
|
36
|
+
- @mastra/core@1.26.0-alpha.10
|
|
37
|
+
- @mastra/client-js@1.14.0-alpha.10
|
|
38
|
+
- @mastra/react@0.2.27-alpha.10
|
|
39
|
+
|
|
40
|
+
## 22.2.0-alpha.9
|
|
41
|
+
|
|
42
|
+
### Minor Changes
|
|
43
|
+
|
|
44
|
+
- Added new Logo component to the playground-ui design system. Supports two sizes (sm, md), uses currentColor for theming, and includes an optional outline-on-hover animation that respects prefers-reduced-motion. ([#15513](https://github.com/mastra-ai/mastra/pull/15513))
|
|
45
|
+
|
|
46
|
+
### Patch Changes
|
|
47
|
+
|
|
48
|
+
- dependencies updates: ([#15525](https://github.com/mastra-ai/mastra/pull/15525))
|
|
49
|
+
- Updated dependency [`prettier@^3.8.3` ↗︎](https://www.npmjs.com/package/prettier/v/3.8.3) (from `^3.8.1`, in `dependencies`)
|
|
50
|
+
- Updated dependencies [[`16e34ca`](https://github.com/mastra-ai/mastra/commit/16e34caa98b9a114b17a6125e4e3fd87f169d0d0)]:
|
|
51
|
+
- @mastra/core@1.26.0-alpha.9
|
|
52
|
+
- @mastra/client-js@1.13.5-alpha.9
|
|
53
|
+
- @mastra/react@0.2.27-alpha.9
|
|
54
|
+
|
|
3
55
|
## 22.2.0-alpha.8
|
|
4
56
|
|
|
5
57
|
### Patch Changes
|
package/dist/index.cjs.js
CHANGED
|
@@ -3386,7 +3386,7 @@ function cn(...inputs) {
|
|
|
3386
3386
|
return twMerge(clsx(inputs));
|
|
3387
3387
|
}
|
|
3388
3388
|
|
|
3389
|
-
const sizeClasses$
|
|
3389
|
+
const sizeClasses$6 = {
|
|
3390
3390
|
sm: `${formElementSizes.sm} text-ui-sm px-[.75em]`,
|
|
3391
3391
|
md: `${formElementSizes.md} text-ui-md px-[.75em]`,
|
|
3392
3392
|
default: `${formElementSizes.default} text-ui-md px-[.85em] `,
|
|
@@ -3419,7 +3419,7 @@ function resolveVariant(variant) {
|
|
|
3419
3419
|
function buttonVariants(options) {
|
|
3420
3420
|
const variant = resolveVariant(options?.variant || "default");
|
|
3421
3421
|
const size = options?.size || "default";
|
|
3422
|
-
return cn(sharedStyles, sizeClasses$
|
|
3422
|
+
return cn(sharedStyles, sizeClasses$6[size], variantClasses$4[variant], options?.iconOnly && "[&>svg]:opacity-75");
|
|
3423
3423
|
}
|
|
3424
3424
|
function flattenChildren(children) {
|
|
3425
3425
|
const result = [];
|
|
@@ -4797,7 +4797,7 @@ const AlertDescription = ({ children, as: As = "p" }) => {
|
|
|
4797
4797
|
return /* @__PURE__ */ jsxRuntime.jsx(Txt, { as: As, variant: "ui-sm", children });
|
|
4798
4798
|
};
|
|
4799
4799
|
|
|
4800
|
-
const sizeClasses$
|
|
4800
|
+
const sizeClasses$5 = {
|
|
4801
4801
|
sm: "h-avatar-sm w-avatar-sm",
|
|
4802
4802
|
md: "h-avatar-md w-avatar-md",
|
|
4803
4803
|
lg: "h-avatar-lg w-avatar-lg"
|
|
@@ -4807,7 +4807,7 @@ const Avatar = ({ src, name, size = "sm", interactive = false }) => {
|
|
|
4807
4807
|
"div",
|
|
4808
4808
|
{
|
|
4809
4809
|
className: cn(
|
|
4810
|
-
sizeClasses$
|
|
4810
|
+
sizeClasses$5[size],
|
|
4811
4811
|
"border border-border1 bg-surface3 shrink-0 overflow-hidden rounded-full flex items-center justify-center",
|
|
4812
4812
|
transitions.all,
|
|
4813
4813
|
interactive && "cursor-pointer hover:scale-105 hover:border-neutral2 hover:shadow-sm"
|
|
@@ -5622,6 +5622,59 @@ const LogoWithoutText = (props) => /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns
|
|
|
5622
5622
|
}
|
|
5623
5623
|
) });
|
|
5624
5624
|
|
|
5625
|
+
const PATH_D = "M4.49805 11.6934C6.98237 11.6934 8.99609 13.7081 8.99609 16.1924C8.9959 18.6765 6.98225 20.6904 4.49805 20.6904C2.01394 20.6903 0.000196352 18.6765 0 16.1924C0 13.7081 2.01382 11.6935 4.49805 11.6934ZM10.3867 0C12.8709 0 14.8846 2.01388 14.8848 4.49805C14.8848 4.8377 14.847 5.16846 14.7755 5.48643C14.4618 6.88139 14.1953 8.4633 14.9928 9.65L16.2575 11.5319C16.3363 11.6491 16.4727 11.7115 16.6137 11.703C16.7369 11.6957 16.8525 11.6343 16.9214 11.5318L18.1876 9.64717C18.9772 8.47198 18.7236 6.90783 18.4205 5.52484C18.3523 5.21392 18.3164 4.89094 18.3164 4.55957C18.3167 2.07546 20.3313 0.0615234 22.8154 0.0615234C25.2994 0.0617476 27.3132 2.0756 27.3135 4.55957C27.3135 4.93883 27.2665 5.30712 27.178 5.65896C26.8547 6.94441 26.5817 8.37932 27.2446 9.52714L28.459 11.6301C28.4819 11.6697 28.5245 11.6934 28.5703 11.6934C31.0545 11.6935 33.0684 13.7081 33.0684 16.1924C33.0682 18.6765 31.0544 20.6903 28.5703 20.6904C26.0861 20.6904 24.0725 18.6765 24.0723 16.1924C24.0723 15.8049 24.1212 15.4288 24.2133 15.0701C24.5458 13.7746 24.8298 12.3251 24.1609 11.1668L23.0044 9.16384C22.9656 9.09659 22.8931 9.05859 22.8154 9.05859C22.7983 9.05859 22.7824 9.06614 22.7728 9.08033L21.4896 10.9895C20.686 12.1851 20.9622 13.781 21.284 15.1851C21.3582 15.5089 21.3975 15.8461 21.3975 16.1924C21.3973 18.6764 19.3834 20.6902 16.8994 20.6904C14.4152 20.6904 12.4006 18.6765 12.4004 16.1924C12.4004 15.932 12.4226 15.6768 12.4651 15.4286C12.6859 14.14 12.8459 12.7122 12.1167 11.6271L11.2419 10.3253C10.6829 9.49347 9.71913 9.05932 8.78286 8.70188C7.0906 8.05584 5.88867 6.41734 5.88867 4.49805C5.88886 2.0139 7.90254 3.29835e-05 10.3867 0Z";
|
|
5626
|
+
const sizeClasses$4 = {
|
|
5627
|
+
sm: "w-6",
|
|
5628
|
+
md: "w-10"
|
|
5629
|
+
};
|
|
5630
|
+
function prefersReducedMotion() {
|
|
5631
|
+
if (typeof window === "undefined" || !window.matchMedia) return false;
|
|
5632
|
+
return window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
5633
|
+
}
|
|
5634
|
+
function Logo({ className, size = "md", animateOnHover = false, "aria-label": ariaLabel = "Mastra" }) {
|
|
5635
|
+
const reactId = React.useId();
|
|
5636
|
+
const clipId = `logo-clip-${reactId.replace(/[^a-zA-Z0-9_-]/g, "")}`;
|
|
5637
|
+
const [playing, setPlaying] = React.useState(false);
|
|
5638
|
+
const handleMouseEnter = animateOnHover ? () => {
|
|
5639
|
+
if (prefersReducedMotion()) return;
|
|
5640
|
+
setPlaying(true);
|
|
5641
|
+
} : void 0;
|
|
5642
|
+
const handleAnimationEnd = animateOnHover && playing ? (e) => {
|
|
5643
|
+
if (e.animationName !== "logo-stroke-cycle") return;
|
|
5644
|
+
setPlaying(false);
|
|
5645
|
+
} : void 0;
|
|
5646
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5647
|
+
"div",
|
|
5648
|
+
{
|
|
5649
|
+
role: "img",
|
|
5650
|
+
"aria-label": ariaLabel,
|
|
5651
|
+
onMouseEnter: handleMouseEnter,
|
|
5652
|
+
onAnimationEnd: handleAnimationEnd,
|
|
5653
|
+
className: cn(
|
|
5654
|
+
"logo inline-block text-neutral6",
|
|
5655
|
+
sizeClasses$4[size],
|
|
5656
|
+
animateOnHover && playing && "logo-animate-on-hover",
|
|
5657
|
+
className
|
|
5658
|
+
),
|
|
5659
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5660
|
+
"svg",
|
|
5661
|
+
{
|
|
5662
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
5663
|
+
viewBox: "0 0 34 21",
|
|
5664
|
+
fill: "none",
|
|
5665
|
+
className: "logo-svg block w-full h-auto",
|
|
5666
|
+
"aria-hidden": "true",
|
|
5667
|
+
children: [
|
|
5668
|
+
/* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsx("clipPath", { id: clipId, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: PATH_D }) }) }),
|
|
5669
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { className: "logo-fill", d: PATH_D }),
|
|
5670
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { className: "logo-stroke", d: PATH_D, clipPath: `url(#${clipId})` })
|
|
5671
|
+
]
|
|
5672
|
+
}
|
|
5673
|
+
)
|
|
5674
|
+
}
|
|
5675
|
+
);
|
|
5676
|
+
}
|
|
5677
|
+
|
|
5625
5678
|
const rowSize = {
|
|
5626
5679
|
default: "[&>tbody>tr]:h-table-row",
|
|
5627
5680
|
small: "[&>tbody>tr]:h-table-row-small"
|
|
@@ -7663,43 +7716,46 @@ Slider.displayName = SliderPrimitive__namespace.Root.displayName;
|
|
|
7663
7716
|
|
|
7664
7717
|
const sizeClasses$1 = {
|
|
7665
7718
|
sm: "w-6",
|
|
7666
|
-
md: "w-
|
|
7667
|
-
lg: "w-
|
|
7719
|
+
md: "w-8",
|
|
7720
|
+
lg: "w-10"
|
|
7721
|
+
};
|
|
7722
|
+
const strokeBySize = {
|
|
7723
|
+
sm: 2.2,
|
|
7724
|
+
md: 2.5,
|
|
7725
|
+
lg: 2.9
|
|
7726
|
+
};
|
|
7727
|
+
const bubbleBySize = {
|
|
7728
|
+
sm: 4.3,
|
|
7729
|
+
md: 4.4,
|
|
7730
|
+
lg: 4.498
|
|
7668
7731
|
};
|
|
7669
7732
|
function BrandLoader({ className, size = "md", "aria-label": ariaLabel = "Loading" }) {
|
|
7670
7733
|
const reactId = React.useId();
|
|
7671
7734
|
const filterId = `brand-loader-${reactId.replace(/[^a-zA-Z0-9_-]/g, "")}`;
|
|
7735
|
+
const r = bubbleBySize[size];
|
|
7672
7736
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
7673
7737
|
"div",
|
|
7674
7738
|
{
|
|
7675
7739
|
role: "status",
|
|
7676
7740
|
"aria-label": ariaLabel,
|
|
7677
7741
|
className: cn("brand-loader inline-block text-neutral6", sizeClasses$1[size], className),
|
|
7678
|
-
|
|
7679
|
-
|
|
7680
|
-
{
|
|
7681
|
-
|
|
7682
|
-
|
|
7683
|
-
|
|
7684
|
-
|
|
7685
|
-
|
|
7686
|
-
|
|
7687
|
-
|
|
7688
|
-
|
|
7689
|
-
|
|
7690
|
-
|
|
7691
|
-
|
|
7692
|
-
|
|
7693
|
-
|
|
7694
|
-
|
|
7695
|
-
/* @__PURE__ */ jsxRuntime.jsx("circle", { className: "brand-loader-b2", cx: "10.4", cy: "4.5", r: "4.5" }),
|
|
7696
|
-
/* @__PURE__ */ jsxRuntime.jsx("circle", { className: "brand-loader-b3", cx: "16.8", cy: "16.2", r: "4.5" }),
|
|
7697
|
-
/* @__PURE__ */ jsxRuntime.jsx("circle", { className: "brand-loader-b4", cx: "23.2", cy: "4.5", r: "4.5" }),
|
|
7698
|
-
/* @__PURE__ */ jsxRuntime.jsx("circle", { className: "brand-loader-b5", cx: "29.5", cy: "16.2", r: "4.5" })
|
|
7699
|
-
] })
|
|
7700
|
-
]
|
|
7701
|
-
}
|
|
7702
|
-
)
|
|
7742
|
+
style: { ["--brand-loader-stroke"]: strokeBySize[size] },
|
|
7743
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 34 21", "aria-hidden": "true", children: [
|
|
7744
|
+
/* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs("filter", { id: filterId, x: "-5%", y: "-5%", width: "110%", height: "110%", children: [
|
|
7745
|
+
/* @__PURE__ */ jsxRuntime.jsx("feGaussianBlur", { in: "SourceGraphic", stdDeviation: "0.9" }),
|
|
7746
|
+
/* @__PURE__ */ jsxRuntime.jsx("feColorMatrix", { values: "1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 11 -4.3" })
|
|
7747
|
+
] }) }),
|
|
7748
|
+
/* @__PURE__ */ jsxRuntime.jsxs("g", { filter: `url(#${filterId})`, children: [
|
|
7749
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { className: "brand-loader-ln23", x1: "10.387", y1: "4.498", x2: "16.899", y2: "16.192" }),
|
|
7750
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { className: "brand-loader-ln34", x1: "16.899", y1: "16.192", x2: "22.815", y2: "4.56" }),
|
|
7751
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { className: "brand-loader-ln45", x1: "22.815", y1: "4.56", x2: "28.57", y2: "16.192" }),
|
|
7752
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { className: "brand-loader-b1", cx: "4.498", cy: "16.192", r }),
|
|
7753
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { className: "brand-loader-b2", cx: "10.387", cy: "4.498", r }),
|
|
7754
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { className: "brand-loader-b3", cx: "16.899", cy: "16.192", r }),
|
|
7755
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { className: "brand-loader-b4", cx: "22.815", cy: "4.56", r }),
|
|
7756
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { className: "brand-loader-b5", cx: "28.57", cy: "16.192", r })
|
|
7757
|
+
] })
|
|
7758
|
+
] })
|
|
7703
7759
|
}
|
|
7704
7760
|
);
|
|
7705
7761
|
}
|
|
@@ -11950,6 +12006,152 @@ const ListSearch = ({
|
|
|
11950
12006
|
);
|
|
11951
12007
|
};
|
|
11952
12008
|
|
|
12009
|
+
const INITIAL_STATE = { error: null, errorInfo: null };
|
|
12010
|
+
function keysChanged(prev, next) {
|
|
12011
|
+
if (prev === next) return false;
|
|
12012
|
+
if (!prev || !next) return true;
|
|
12013
|
+
if (prev.length !== next.length) return true;
|
|
12014
|
+
for (let i = 0; i < prev.length; i++) {
|
|
12015
|
+
if (!Object.is(prev[i], next[i])) return true;
|
|
12016
|
+
}
|
|
12017
|
+
return false;
|
|
12018
|
+
}
|
|
12019
|
+
class ErrorBoundary extends React__namespace.Component {
|
|
12020
|
+
state = INITIAL_STATE;
|
|
12021
|
+
static getDerivedStateFromError(error) {
|
|
12022
|
+
return { error };
|
|
12023
|
+
}
|
|
12024
|
+
componentDidCatch(error, errorInfo) {
|
|
12025
|
+
this.setState({ errorInfo });
|
|
12026
|
+
if (this.props.onError) {
|
|
12027
|
+
try {
|
|
12028
|
+
this.props.onError(error, errorInfo);
|
|
12029
|
+
} catch (handlerError) {
|
|
12030
|
+
if (typeof console !== "undefined") {
|
|
12031
|
+
console.error("[ErrorBoundary] onError handler threw:", handlerError);
|
|
12032
|
+
}
|
|
12033
|
+
}
|
|
12034
|
+
}
|
|
12035
|
+
if (typeof console !== "undefined") {
|
|
12036
|
+
console.error("[ErrorBoundary] Uncaught error:", error, errorInfo);
|
|
12037
|
+
}
|
|
12038
|
+
}
|
|
12039
|
+
componentDidUpdate(prevProps) {
|
|
12040
|
+
if (this.state.error && keysChanged(prevProps.resetKeys, this.props.resetKeys)) {
|
|
12041
|
+
this.reset();
|
|
12042
|
+
}
|
|
12043
|
+
}
|
|
12044
|
+
reset = () => {
|
|
12045
|
+
this.setState(INITIAL_STATE);
|
|
12046
|
+
};
|
|
12047
|
+
render() {
|
|
12048
|
+
const { error, errorInfo } = this.state;
|
|
12049
|
+
const { children, fallback, title, description, variant, className } = this.props;
|
|
12050
|
+
if (!error) return children;
|
|
12051
|
+
if (typeof fallback === "function") {
|
|
12052
|
+
return fallback({ error, errorInfo, reset: this.reset });
|
|
12053
|
+
}
|
|
12054
|
+
if (fallback !== void 0) return fallback;
|
|
12055
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
12056
|
+
DefaultErrorFallback,
|
|
12057
|
+
{
|
|
12058
|
+
error,
|
|
12059
|
+
errorInfo,
|
|
12060
|
+
reset: this.reset,
|
|
12061
|
+
title,
|
|
12062
|
+
description,
|
|
12063
|
+
variant: variant ?? "section",
|
|
12064
|
+
className
|
|
12065
|
+
}
|
|
12066
|
+
);
|
|
12067
|
+
}
|
|
12068
|
+
}
|
|
12069
|
+
function DefaultErrorFallback({
|
|
12070
|
+
error,
|
|
12071
|
+
errorInfo,
|
|
12072
|
+
reset,
|
|
12073
|
+
title,
|
|
12074
|
+
description,
|
|
12075
|
+
variant,
|
|
12076
|
+
className
|
|
12077
|
+
}) {
|
|
12078
|
+
const stack = errorInfo?.componentStack ?? error.stack ?? "";
|
|
12079
|
+
const isInline = variant === "inline";
|
|
12080
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
12081
|
+
"div",
|
|
12082
|
+
{
|
|
12083
|
+
role: "alert",
|
|
12084
|
+
className: cn(
|
|
12085
|
+
"@container flex w-full items-center justify-center",
|
|
12086
|
+
isInline ? "py-6 px-4" : "h-full min-h-[240px] flex-1 py-10 px-6",
|
|
12087
|
+
className
|
|
12088
|
+
),
|
|
12089
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
12090
|
+
"div",
|
|
12091
|
+
{
|
|
12092
|
+
className: cn(
|
|
12093
|
+
"flex flex-col items-center text-center",
|
|
12094
|
+
isInline ? "gap-3 max-w-md" : "gap-4 max-w-2xl @md:gap-5 @lg:gap-6"
|
|
12095
|
+
),
|
|
12096
|
+
children: [
|
|
12097
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
12098
|
+
"div",
|
|
12099
|
+
{
|
|
12100
|
+
className: cn(
|
|
12101
|
+
"rounded-full bg-accent2/10 text-accent2 flex items-center justify-center",
|
|
12102
|
+
isInline ? "h-10 w-10 [&>svg]:h-5 [&>svg]:w-5" : "h-14 w-14 [&>svg]:h-7 [&>svg]:w-7 @md:h-16 @md:w-16 @md:[&>svg]:h-8 @md:[&>svg]:w-8 @lg:h-20 @lg:w-20 @lg:[&>svg]:h-10 @lg:[&>svg]:w-10"
|
|
12103
|
+
),
|
|
12104
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, {})
|
|
12105
|
+
}
|
|
12106
|
+
),
|
|
12107
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
12108
|
+
"h3",
|
|
12109
|
+
{
|
|
12110
|
+
className: cn(
|
|
12111
|
+
"font-medium text-neutral6",
|
|
12112
|
+
isInline ? "text-ui-md" : "text-ui-lg @md:text-header-md @lg:text-header-lg"
|
|
12113
|
+
),
|
|
12114
|
+
children: title ?? "Something went wrong"
|
|
12115
|
+
}
|
|
12116
|
+
),
|
|
12117
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-neutral3", isInline ? "text-ui-sm" : "text-ui-md @lg:text-ui-lg"), children: description ?? "An unexpected error occurred while rendering this part of the page." }),
|
|
12118
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
12119
|
+
"p",
|
|
12120
|
+
{
|
|
12121
|
+
className: cn(
|
|
12122
|
+
"font-mono text-neutral4 break-words rounded-md bg-surface3 px-3 py-2",
|
|
12123
|
+
isInline ? "text-ui-xs" : "text-ui-sm"
|
|
12124
|
+
),
|
|
12125
|
+
children: error.message
|
|
12126
|
+
}
|
|
12127
|
+
),
|
|
12128
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-wrap items-center justify-center gap-2", isInline ? "mt-1" : "mt-2"), children: [
|
|
12129
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "primary", size: isInline ? "sm" : "default", onClick: reset, children: "Try again" }),
|
|
12130
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "default", size: isInline ? "sm" : "default", onClick: () => window.location.reload(), children: "Reload page" }),
|
|
12131
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
12132
|
+
Button,
|
|
12133
|
+
{
|
|
12134
|
+
as: "a",
|
|
12135
|
+
variant: "default",
|
|
12136
|
+
size: isInline ? "sm" : "default",
|
|
12137
|
+
href: "https://github.com/mastra-ai/mastra/issues",
|
|
12138
|
+
target: "_blank",
|
|
12139
|
+
rel: "noopener noreferrer",
|
|
12140
|
+
children: "Report issue"
|
|
12141
|
+
}
|
|
12142
|
+
)
|
|
12143
|
+
] }),
|
|
12144
|
+
stack ? /* @__PURE__ */ jsxRuntime.jsxs("details", { className: cn("w-full text-left", isInline ? "mt-1" : "mt-2"), children: [
|
|
12145
|
+
/* @__PURE__ */ jsxRuntime.jsx("summary", { className: "cursor-pointer text-ui-sm text-neutral3 hover:text-neutral4", children: "Show error details" }),
|
|
12146
|
+
/* @__PURE__ */ jsxRuntime.jsx("pre", { className: "mt-2 max-h-64 overflow-auto rounded-md bg-surface3 p-3 text-ui-xs text-neutral4 whitespace-pre-wrap break-words", children: stack })
|
|
12147
|
+
] }) : null
|
|
12148
|
+
]
|
|
12149
|
+
}
|
|
12150
|
+
)
|
|
12151
|
+
}
|
|
12152
|
+
);
|
|
12153
|
+
}
|
|
12154
|
+
|
|
11953
12155
|
function ErrorState({ title, message }) {
|
|
11954
12156
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center h-[30vh]", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center text-center py-10 px-6", children: [
|
|
11955
12157
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CircleXIcon, { className: "h-8 w-8 text-red-900" }) }),
|
|
@@ -14303,6 +14505,7 @@ exports.EntryCell = EntryCell;
|
|
|
14303
14505
|
exports.EntryList = EntryList;
|
|
14304
14506
|
exports.EntryListSkeleton = EntryListSkeleton;
|
|
14305
14507
|
exports.EnvIcon = EnvIcon;
|
|
14508
|
+
exports.ErrorBoundary = ErrorBoundary;
|
|
14306
14509
|
exports.ErrorState = ErrorState;
|
|
14307
14510
|
exports.Field = Field;
|
|
14308
14511
|
exports.FieldBlock = FieldBlock;
|
|
@@ -14340,6 +14543,7 @@ exports.KeyValueList = KeyValueList;
|
|
|
14340
14543
|
exports.Label = Label;
|
|
14341
14544
|
exports.LatencyIcon = LatencyIcon;
|
|
14342
14545
|
exports.ListSearch = ListSearch;
|
|
14546
|
+
exports.Logo = Logo;
|
|
14343
14547
|
exports.LogoWithoutText = LogoWithoutText;
|
|
14344
14548
|
exports.LogsDataList = LogsDataList;
|
|
14345
14549
|
exports.LogsDataListSkeleton = DataListSkeleton;
|