@burdenoff/microfe-workflows 2026.623.1 → 2026.626.1

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.
@@ -3,95 +3,107 @@ import { WorkflowsProvider as t } from "./providers/WorkflowsProvider.js";
3
3
  import { WorkflowsRoutes as n } from "./WorkflowsRoutes.js";
4
4
  import { useEffect as r } from "react";
5
5
  import { ErrorBoundary as i } from "@burdenoff/fe-libs/shared/components";
6
- import { jsx as a } from "react/jsx-runtime";
7
- import { Boxes as o, FileCode2 as s, History as c, LayoutDashboard as l, Network as u, PlayCircle as d, Settings as f, Workflow as p } from "lucide-react";
6
+ import { AuroraBackground as a, Button as o, IllustratedEmptyState as s } from "@burdenoff/fe-libs/ui";
7
+ import { Boxes as c, FileCode2 as l, History as u, LayoutDashboard as d, Network as f, PlayCircle as p, RefreshCw as m, Settings as h, Workflow as g } from "lucide-react";
8
+ import { jsx as _, jsxs as v } from "react/jsx-runtime";
8
9
  //#region src/WorkflowsRoot.tsx
9
- function m(m) {
10
- let { basePath: h = "/", registerNavItems: g, registerFooterItems: _ } = m, v = e();
10
+ function y(y) {
11
+ let { basePath: b = "/", registerNavItems: x, registerFooterItems: S } = y, C = e();
11
12
  return r(() => {
12
- if (!g) return;
13
+ if (!x) return;
13
14
  let e = (e, t) => `${e.endsWith("/") ? e.slice(0, -1) : e}/${t}`, t = [
14
15
  {
15
16
  id: "workflows-list",
16
- label: v("workflows.nav.myWorkflows", "My Workflows"),
17
- path: e(h, "list"),
18
- icon: /* @__PURE__ */ a(p, { size: 18 }),
17
+ label: C("workflows.nav.myWorkflows", "My Workflows"),
18
+ path: e(b, "list"),
19
+ icon: /* @__PURE__ */ _(g, { size: 18 }),
19
20
  order: 2
20
21
  },
21
22
  {
22
23
  id: "workflows-builder",
23
- label: v("workflows.nav.builder", "Builder"),
24
- path: e(h, "new"),
25
- icon: /* @__PURE__ */ a(o, { size: 18 }),
24
+ label: C("workflows.nav.builder", "Builder"),
25
+ path: e(b, "new"),
26
+ icon: /* @__PURE__ */ _(c, { size: 18 }),
26
27
  order: 3
27
28
  },
28
29
  {
29
30
  id: "workflows-runs",
30
- label: v("workflows.nav.runs", "Runs"),
31
- path: e(h, "runs"),
32
- icon: /* @__PURE__ */ a(d, { size: 18 }),
31
+ label: C("workflows.nav.runs", "Runs"),
32
+ path: e(b, "runs"),
33
+ icon: /* @__PURE__ */ _(p, { size: 18 }),
33
34
  order: 4
34
35
  },
35
36
  {
36
37
  id: "workflows-history",
37
- label: v("workflows.nav.history", "History"),
38
- path: e(h, "history"),
39
- icon: /* @__PURE__ */ a(c, { size: 18 }),
38
+ label: C("workflows.nav.history", "History"),
39
+ path: e(b, "history"),
40
+ icon: /* @__PURE__ */ _(u, { size: 18 }),
40
41
  order: 5
41
42
  },
42
43
  {
43
44
  id: "workflows-templates",
44
- label: v("workflows.nav.templates", "Templates"),
45
- path: e(h, "templates"),
46
- icon: /* @__PURE__ */ a(l, { size: 18 }),
45
+ label: C("workflows.nav.templates", "Templates"),
46
+ path: e(b, "templates"),
47
+ icon: /* @__PURE__ */ _(d, { size: 18 }),
47
48
  order: 6
48
49
  },
49
50
  {
50
51
  id: "workflows-nodes",
51
- label: v("workflows.nav.nodes", "Nodes"),
52
- path: e(h, "nodes"),
53
- icon: /* @__PURE__ */ a(u, { size: 18 }),
52
+ label: C("workflows.nav.nodes", "Nodes"),
53
+ path: e(b, "nodes"),
54
+ icon: /* @__PURE__ */ _(f, { size: 18 }),
54
55
  order: 7
55
56
  },
56
57
  {
57
58
  id: "workflows-settings",
58
- label: v("workflows.nav.settings", "Settings"),
59
- path: e(h, "settings"),
60
- icon: /* @__PURE__ */ a(f, { size: 18 }),
59
+ label: C("workflows.nav.settings", "Settings"),
60
+ path: e(b, "settings"),
61
+ icon: /* @__PURE__ */ _(h, { size: 18 }),
61
62
  order: 8
62
63
  }
63
64
  ];
64
- return g([{
65
+ return x([{
65
66
  id: "workflows",
66
- label: v("workflows.nav.title", "Workflows"),
67
- path: h,
68
- icon: /* @__PURE__ */ a(s, { size: 20 }),
67
+ label: C("workflows.nav.title", "Workflows"),
68
+ path: b,
69
+ icon: /* @__PURE__ */ _(l, { size: 20 }),
69
70
  order: 200,
70
71
  group: "workflows",
71
72
  children: t
72
73
  }]);
73
74
  }, [
74
- g,
75
- h,
76
- v
75
+ x,
76
+ b,
77
+ C
77
78
  ]), r(() => {
78
- if (_) return _([{
79
+ if (S) return S([{
79
80
  id: "workflows-status",
80
- label: v("workflows.footer.status", "Workflows Ready"),
81
+ label: C("workflows.footer.status", "Workflows Ready"),
81
82
  type: "status",
82
83
  order: 10,
83
84
  section: "left"
84
85
  }]);
85
- }, [_, v]), /* @__PURE__ */ a(i, {
86
- fallback: /* @__PURE__ */ a("div", {
87
- className: "p-6 text-center text-text-secondary",
88
- children: v("workflows.error.loadFailed", "Something went wrong loading this module. Please refresh the page.")
86
+ }, [S, C]), /* @__PURE__ */ _(i, {
87
+ fallback: /* @__PURE__ */ v("div", {
88
+ className: "relative flex min-h-[60vh] w-full items-center justify-center overflow-hidden px-4 py-10",
89
+ children: [/* @__PURE__ */ _(a, { intensity: "subtle" }), /* @__PURE__ */ _(s, {
90
+ illustration: "empty-generic",
91
+ title: C("workflows.error.title", "Workflows hit a snag"),
92
+ description: C("workflows.error.loadFailed", "Something went wrong loading this module. Please refresh the page."),
93
+ action: /* @__PURE__ */ v(o, {
94
+ onClick: () => window.location.reload(),
95
+ children: [/* @__PURE__ */ _(m, {
96
+ className: "size-4",
97
+ "aria-hidden": "true"
98
+ }), C("workflows.error.refresh", "Refresh page")]
99
+ })
100
+ })]
89
101
  }),
90
- children: /* @__PURE__ */ a(t, {
91
- ...m,
92
- children: /* @__PURE__ */ a(n, {})
102
+ children: /* @__PURE__ */ _(t, {
103
+ ...y,
104
+ children: /* @__PURE__ */ _(n, {})
93
105
  })
94
106
  });
95
107
  }
96
108
  //#endregion
97
- export { m as WorkflowsRoot };
109
+ export { y as WorkflowsRoot };
@@ -1,115 +1,151 @@
1
1
  import { useWorkflowsTranslation as e } from "./i18n.js";
2
2
  import { Suspense as t } from "react";
3
- import { ExecutionDetailPage as n, ExecutionsListPage as r, HistoryPage as i, NodesPage as a, SettingsPage as o, TemplatesPage as s, WorkflowBuilderPage as c, WorkflowsList as l } from "@burdenoff/fluidgrids-fe-sdk";
4
- import { jsx as u, jsxs as d } from "react/jsx-runtime";
5
- import { Navigate as f, Route as p, Routes as m, useParams as h } from "react-router-dom";
3
+ import { GlassCard as n } from "@burdenoff/fe-libs/ui";
4
+ import { ExecutionDetailPage as r, ExecutionsListPage as i, HistoryPage as a, NodesPage as o, SettingsPage as s, TemplatesPage as c, WorkflowBuilderPage as l, WorkflowsList as u } from "@burdenoff/fluidgrids-fe-sdk";
5
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
6
+ import { Navigate as p, Route as m, Routes as h, useParams as g } from "react-router-dom";
6
7
  //#region src/WorkflowsRoutes.tsx
7
- function g() {
8
+ function _() {
8
9
  let t = e();
9
- return /* @__PURE__ */ d("div", {
10
- className: "flex h-full min-h-[200px] w-full flex-col items-center justify-center gap-3 px-6 text-center",
10
+ return /* @__PURE__ */ f("div", {
11
+ className: "mx-auto flex w-full max-w-6xl flex-col gap-6 px-4 py-6 sm:px-6",
11
12
  role: "status",
12
13
  "aria-live": "polite",
14
+ "aria-busy": "true",
13
15
  "aria-label": t("workflows.routes.loading.ariaLabel", "Loading workflow page"),
14
- children: [/* @__PURE__ */ u("div", { className: "h-8 w-8 animate-spin rounded-full border-4 border-primary border-t-transparent" }), /* @__PURE__ */ u("p", {
15
- className: "text-sm text-text-secondary",
16
- children: t("workflows.routes.loading.message", "Loading workflow page...")
17
- })]
16
+ children: [
17
+ /* @__PURE__ */ f("div", {
18
+ className: "flex flex-col gap-3",
19
+ children: [/* @__PURE__ */ d("div", { className: "h-7 w-48 rounded-md bg-muted/60 motion-safe:animate-vc-shimmer" }), /* @__PURE__ */ d("div", { className: "h-4 w-72 max-w-full rounded bg-muted/40 motion-safe:animate-vc-shimmer" })]
20
+ }),
21
+ /* @__PURE__ */ d("div", {
22
+ className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3",
23
+ children: [
24
+ 0,
25
+ 1,
26
+ 2
27
+ ].map((e) => /* @__PURE__ */ f(n, {
28
+ treatment: "metric",
29
+ className: "flex flex-col gap-3 border-border-seam p-5",
30
+ children: [/* @__PURE__ */ d("div", { className: "h-3 w-20 rounded bg-muted/50 motion-safe:animate-vc-shimmer" }), /* @__PURE__ */ d("div", { className: "h-8 w-24 rounded-md bg-muted/60 motion-safe:animate-vc-shimmer" })]
31
+ }, e))
32
+ }),
33
+ /* @__PURE__ */ d(n, {
34
+ treatment: "glass",
35
+ className: "flex flex-col gap-4 border-border-seam p-6",
36
+ children: [
37
+ 0,
38
+ 1,
39
+ 2,
40
+ 3
41
+ ].map((e) => /* @__PURE__ */ f("div", {
42
+ className: "flex items-center gap-4",
43
+ children: [/* @__PURE__ */ d("div", { className: "h-10 w-10 shrink-0 rounded-full bg-muted/50 motion-safe:animate-vc-shimmer" }), /* @__PURE__ */ f("div", {
44
+ className: "flex flex-1 flex-col gap-2",
45
+ children: [/* @__PURE__ */ d("div", { className: "h-4 w-1/3 rounded bg-muted/50 motion-safe:animate-vc-shimmer" }), /* @__PURE__ */ d("div", { className: "h-3 w-2/3 rounded bg-muted/30 motion-safe:animate-vc-shimmer" })]
46
+ })]
47
+ }, e))
48
+ }),
49
+ /* @__PURE__ */ d("p", {
50
+ className: "text-center text-sm text-text-secondary",
51
+ children: t("workflows.routes.loading.message", "Loading workflow page...")
52
+ })
53
+ ]
18
54
  });
19
55
  }
20
- function _() {
21
- let { runId: e } = h();
22
- return /* @__PURE__ */ u(f, {
56
+ function v() {
57
+ let { runId: e } = g();
58
+ return /* @__PURE__ */ d(p, {
23
59
  to: `../runs/${e}`,
24
60
  replace: !0
25
61
  });
26
62
  }
27
- function v() {
28
- return /* @__PURE__ */ u(t, {
29
- fallback: /* @__PURE__ */ u(g, {}),
30
- children: /* @__PURE__ */ d(m, { children: [
31
- /* @__PURE__ */ u(p, {
63
+ function y() {
64
+ return /* @__PURE__ */ d(t, {
65
+ fallback: /* @__PURE__ */ d(_, {}),
66
+ children: /* @__PURE__ */ f(h, { children: [
67
+ /* @__PURE__ */ d(m, {
32
68
  index: !0,
33
- element: /* @__PURE__ */ u(f, {
69
+ element: /* @__PURE__ */ d(p, {
34
70
  to: "list",
35
71
  replace: !0
36
72
  })
37
73
  }),
38
- /* @__PURE__ */ u(p, {
74
+ /* @__PURE__ */ d(m, {
39
75
  path: "list",
40
- element: /* @__PURE__ */ u(l, {})
76
+ element: /* @__PURE__ */ d(u, {})
41
77
  }),
42
- /* @__PURE__ */ u(p, {
78
+ /* @__PURE__ */ d(m, {
43
79
  path: "new",
44
- element: /* @__PURE__ */ u(c, {})
80
+ element: /* @__PURE__ */ d(l, {})
45
81
  }),
46
- /* @__PURE__ */ u(p, {
82
+ /* @__PURE__ */ d(m, {
47
83
  path: "workflow/:id/:version",
48
- element: /* @__PURE__ */ u(c, {})
84
+ element: /* @__PURE__ */ d(l, {})
49
85
  }),
50
- /* @__PURE__ */ u(p, {
86
+ /* @__PURE__ */ d(m, {
51
87
  path: "builder",
52
- element: /* @__PURE__ */ u(f, {
88
+ element: /* @__PURE__ */ d(p, {
53
89
  to: "../new",
54
90
  replace: !0
55
91
  })
56
92
  }),
57
- /* @__PURE__ */ u(p, {
93
+ /* @__PURE__ */ d(m, {
58
94
  path: "builder/:id/:version",
59
- element: /* @__PURE__ */ u(c, {})
95
+ element: /* @__PURE__ */ d(l, {})
60
96
  }),
61
- /* @__PURE__ */ u(p, {
97
+ /* @__PURE__ */ d(m, {
62
98
  path: "runs",
63
- element: /* @__PURE__ */ u(r, {})
99
+ element: /* @__PURE__ */ d(i, {})
64
100
  }),
65
- /* @__PURE__ */ u(p, {
101
+ /* @__PURE__ */ d(m, {
66
102
  path: "runs/:runId",
67
- element: /* @__PURE__ */ u(n, {})
103
+ element: /* @__PURE__ */ d(r, {})
68
104
  }),
69
- /* @__PURE__ */ u(p, {
105
+ /* @__PURE__ */ d(m, {
70
106
  path: "history",
71
- element: /* @__PURE__ */ u(i, {})
107
+ element: /* @__PURE__ */ d(a, {})
72
108
  }),
73
- /* @__PURE__ */ u(p, {
109
+ /* @__PURE__ */ d(m, {
74
110
  path: "templates",
75
- element: /* @__PURE__ */ u(s, {})
111
+ element: /* @__PURE__ */ d(c, {})
76
112
  }),
77
- /* @__PURE__ */ u(p, {
113
+ /* @__PURE__ */ d(m, {
78
114
  path: "nodes",
79
- element: /* @__PURE__ */ u(a, {})
115
+ element: /* @__PURE__ */ d(o, {})
80
116
  }),
81
- /* @__PURE__ */ u(p, {
117
+ /* @__PURE__ */ d(m, {
82
118
  path: "settings",
83
- element: /* @__PURE__ */ u(o, {})
119
+ element: /* @__PURE__ */ d(s, {})
84
120
  }),
85
- /* @__PURE__ */ u(p, {
121
+ /* @__PURE__ */ d(m, {
86
122
  path: "executions",
87
- element: /* @__PURE__ */ u(f, {
123
+ element: /* @__PURE__ */ d(p, {
88
124
  to: "../runs",
89
125
  replace: !0
90
126
  })
91
127
  }),
92
- /* @__PURE__ */ u(p, {
128
+ /* @__PURE__ */ d(m, {
93
129
  path: "executions/:runId",
94
- element: /* @__PURE__ */ u(_, {})
130
+ element: /* @__PURE__ */ d(v, {})
95
131
  }),
96
- /* @__PURE__ */ u(p, {
132
+ /* @__PURE__ */ d(m, {
97
133
  path: "credentials",
98
- element: /* @__PURE__ */ u(f, {
134
+ element: /* @__PURE__ */ d(p, {
99
135
  to: "/integrations/connections",
100
136
  replace: !0
101
137
  })
102
138
  }),
103
- /* @__PURE__ */ u(p, {
139
+ /* @__PURE__ */ d(m, {
104
140
  path: "oauth/callback",
105
- element: /* @__PURE__ */ u(f, {
141
+ element: /* @__PURE__ */ d(p, {
106
142
  to: "/integrations/connections",
107
143
  replace: !0
108
144
  })
109
145
  }),
110
- /* @__PURE__ */ u(p, {
146
+ /* @__PURE__ */ d(m, {
111
147
  path: "*",
112
- element: /* @__PURE__ */ u(f, {
148
+ element: /* @__PURE__ */ d(p, {
113
149
  to: "list",
114
150
  replace: !0
115
151
  })
@@ -118,4 +154,4 @@ function v() {
118
154
  });
119
155
  }
120
156
  //#endregion
121
- export { v as WorkflowsRoutes };
157
+ export { y as WorkflowsRoutes };
@@ -1,75 +1,133 @@
1
1
  import { setWorkflowsConfig as e } from "../config/index.js";
2
2
  import { useWorkflowsTranslation as t } from "../i18n.js";
3
3
  import { createContext as n, useEffect as r, useState as i } from "react";
4
- import { resetFluidGridsClient as a, resetGlobalStoreClient as o, setFluidGridsClient as s, setFluidGridsConfig as c, setGlobalStoreClient as l } from "@burdenoff/fluidgrids-fe-sdk";
5
- import { useGatewayClient as u } from "@burdenoff/fe-libs/shared/graphql";
6
- import { PermissionProvider as d } from "@burdenoff/fe-libs/shared/providers/shell";
7
- import { jsx as f, jsxs as p } from "react/jsx-runtime";
4
+ import { EmphasisPanel as a, GlassCard as o, IllustratedEmptyState as s, NextSteps as c, PagePurpose as l } from "@burdenoff/fe-libs/ui";
5
+ import { Boxes as u, LayoutDashboard as d, Workflow as f } from "lucide-react";
6
+ import { resetFluidGridsClient as p, resetGlobalStoreClient as m, setFluidGridsClient as h, setFluidGridsConfig as g, setGlobalStoreClient as _ } from "@burdenoff/fluidgrids-fe-sdk";
7
+ import { useGatewayClient as v } from "@burdenoff/fe-libs/shared/graphql";
8
+ import { PermissionProvider as y } from "@burdenoff/fe-libs/shared/providers/shell";
9
+ import { jsx as b, jsxs as x } from "react/jsx-runtime";
8
10
  //#region src/providers/WorkflowsProvider.tsx
9
- var m = n(null);
10
- function h(e) {
11
+ var S = n(null);
12
+ function C(e) {
11
13
  let t = e.endsWith("/") ? e.slice(0, -1) : e;
12
14
  return t.endsWith("/graphql") ? t : `${t}/workspaces/graphql`;
13
15
  }
14
- function g({ children: n, ...g }) {
15
- let _ = t(), v = u("workspace"), y = u("global"), [b, x] = i(!1);
16
- return r(() => (v && y && (s(v), l(y), x(!0)), () => {
17
- a(), o(), x(!1);
18
- }), [v, y]), r(() => {
19
- if (g.apiGatewayUrl) {
20
- let t = h(g.apiGatewayUrl), n = g.apiGatewayUrl.endsWith("/") ? g.apiGatewayUrl.slice(0, -1) : g.apiGatewayUrl;
16
+ function w({ children: n, ...w }) {
17
+ let T = t(), E = v("workspace"), D = v("global"), [O, k] = i(!1);
18
+ if (r(() => (E && D && (h(E), _(D), k(!0)), () => {
19
+ p(), m(), k(!1);
20
+ }), [E, D]), r(() => {
21
+ if (w.apiGatewayUrl) {
22
+ let t = C(w.apiGatewayUrl), n = w.apiGatewayUrl.endsWith("/") ? w.apiGatewayUrl.slice(0, -1) : w.apiGatewayUrl;
21
23
  e({
22
24
  workflowSvcUrl: t,
23
25
  apiGatewayUrl: n
24
26
  });
25
- let r = g.callbacks?.onWorkflowSaved;
26
- c({
27
+ let r = w.callbacks?.onWorkflowSaved;
28
+ g({
27
29
  apiGatewayUrl: n,
28
- authToken: g.authToken,
29
- workspaceId: g.workspaceId ?? "",
30
- tenantId: g.tenantId,
31
- productId: g.productId,
32
- productName: g.productName,
30
+ authToken: w.authToken,
31
+ workspaceId: w.workspaceId ?? "",
32
+ tenantId: w.tenantId,
33
+ productId: w.productId,
34
+ productName: w.productName,
33
35
  onWorkflowSaved: r
34
36
  });
35
37
  }
36
38
  }, [
37
- g.apiGatewayUrl,
38
- g.authToken,
39
- g.workspaceId,
40
- g.tenantId,
41
- g.productId,
42
- g.productName,
43
- g.callbacks
44
- ]), g.workspaceId ? b ? /* @__PURE__ */ f(m.Provider, {
45
- value: g,
46
- children: /* @__PURE__ */ f(d, {
47
- scopeId: g.workspaceId ?? null,
39
+ w.apiGatewayUrl,
40
+ w.authToken,
41
+ w.workspaceId,
42
+ w.tenantId,
43
+ w.productId,
44
+ w.productName,
45
+ w.callbacks
46
+ ]), !w.workspaceId) {
47
+ let e = (e, t) => `${e.endsWith("/") ? e.slice(0, -1) : e}/${t}`, t = (t) => w.navigate(e(w.basePath ?? "/", t));
48
+ return /* @__PURE__ */ x("div", {
49
+ className: "mx-auto flex h-full min-h-[60vh] w-full max-w-2xl flex-col justify-center gap-6 px-4 py-10",
50
+ children: [
51
+ /* @__PURE__ */ b(l, {
52
+ icon: /* @__PURE__ */ b(f, {
53
+ className: "size-4",
54
+ "aria-hidden": "true"
55
+ }),
56
+ children: T("workflows.provider.purpose", "Workflows let you automate multi-step processes — for example, sync a new signup into your CRM, post run results to Slack, or transform and route data between apps. You build them visually by wiring nodes together, then trigger them on a schedule, a webhook, or on demand.")
57
+ }),
58
+ /* @__PURE__ */ b(a, {
59
+ className: "p-6",
60
+ children: /* @__PURE__ */ b(s, {
61
+ illustration: "onboarding",
62
+ title: T("workflows.provider.workspaceRequired.title", "Pick a workspace to start building"),
63
+ description: T("workflows.provider.workspaceRequired.description", "Workflows live inside a workspace so your automations, runs, and connections stay scoped to the right team. Select or create an active workspace from the shell to load your workflows.")
64
+ })
65
+ }),
66
+ /* @__PURE__ */ b(c, {
67
+ storageKey: "workflows-get-started",
68
+ title: T("workflows.provider.nextSteps.title", "Once your workspace is active"),
69
+ steps: [
70
+ {
71
+ id: "open-workflows",
72
+ label: T("workflows.provider.nextSteps.open.label", "Open your workflows"),
73
+ description: T("workflows.provider.nextSteps.open.description", "Browse, search, and manage every automation in this workspace."),
74
+ icon: /* @__PURE__ */ b(f, {
75
+ className: "size-4",
76
+ "aria-hidden": "true"
77
+ }),
78
+ onClick: () => t("list")
79
+ },
80
+ {
81
+ id: "start-template",
82
+ label: T("workflows.provider.nextSteps.template.label", "Start from a template"),
83
+ description: T("workflows.provider.nextSteps.template.description", "Skip the blank canvas — adapt a ready-made workflow to your use-case."),
84
+ icon: /* @__PURE__ */ b(d, {
85
+ className: "size-4",
86
+ "aria-hidden": "true"
87
+ }),
88
+ onClick: () => t("templates")
89
+ },
90
+ {
91
+ id: "build-new",
92
+ label: T("workflows.provider.nextSteps.build.label", "Build a workflow from scratch"),
93
+ description: T("workflows.provider.nextSteps.build.description", "Open the visual builder and wire nodes together step by step."),
94
+ icon: /* @__PURE__ */ b(u, {
95
+ className: "size-4",
96
+ "aria-hidden": "true"
97
+ }),
98
+ onClick: () => t("new")
99
+ }
100
+ ]
101
+ })
102
+ ]
103
+ });
104
+ }
105
+ return O ? /* @__PURE__ */ b(S.Provider, {
106
+ value: w,
107
+ children: /* @__PURE__ */ b(y, {
108
+ scopeId: w.workspaceId ?? null,
48
109
  gateway: "workspace",
49
110
  children: n
50
111
  })
51
- }) : /* @__PURE__ */ p("div", {
52
- className: "flex h-full min-h-[200px] w-full flex-col items-center justify-center gap-3 px-6 text-center",
112
+ }) : /* @__PURE__ */ x("div", {
113
+ className: "mx-auto flex h-full min-h-[60vh] w-full max-w-md flex-col items-center justify-center gap-4 px-4 py-10 text-center",
53
114
  role: "status",
54
115
  "aria-live": "polite",
55
- "aria-label": _("workflows.provider.loading.ariaLabel", "Loading workflows"),
56
- children: [/* @__PURE__ */ f("div", { className: "h-8 w-8 animate-spin rounded-full border-4 border-primary border-t-transparent" }), /* @__PURE__ */ f("p", {
116
+ "aria-busy": "true",
117
+ "aria-label": T("workflows.provider.loading.ariaLabel", "Loading workflows"),
118
+ children: [/* @__PURE__ */ x(o, {
119
+ treatment: "glass",
120
+ className: "flex w-full flex-col items-center gap-4 border-border-seam p-6",
121
+ children: [
122
+ /* @__PURE__ */ b("div", { className: "h-12 w-12 rounded-full bg-muted/60 motion-safe:animate-vc-shimmer" }),
123
+ /* @__PURE__ */ b("div", { className: "h-4 w-40 rounded bg-muted/50 motion-safe:animate-vc-shimmer" }),
124
+ /* @__PURE__ */ b("div", { className: "h-3 w-56 max-w-full rounded bg-muted/30 motion-safe:animate-vc-shimmer" })
125
+ ]
126
+ }), /* @__PURE__ */ b("p", {
57
127
  className: "text-sm text-text-secondary",
58
- children: _("workflows.provider.loading.message", "Connecting workflows...")
128
+ children: T("workflows.provider.loading.message", "Connecting workflows...")
59
129
  })]
60
- }) : /* @__PURE__ */ f("div", {
61
- className: "flex h-full min-h-[200px] w-full items-center justify-center px-6 text-center",
62
- children: /* @__PURE__ */ p("div", {
63
- className: "max-w-md",
64
- children: [/* @__PURE__ */ f("h2", {
65
- className: "mb-2 text-lg font-semibold text-text-primary",
66
- children: _("workflows.provider.workspaceRequired.title", "Workspace context required")
67
- }), /* @__PURE__ */ f("p", {
68
- className: "text-sm text-text-secondary",
69
- children: _("workflows.provider.workspaceRequired.description", "This workflows module needs an active workspace before it can load workflow data.")
70
- })]
71
- })
72
130
  });
73
131
  }
74
132
  //#endregion
75
- export { g as WorkflowsProvider };
133
+ export { w as WorkflowsProvider };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/microfe-workflows",
3
- "version": "2026.623.1",
3
+ "version": "2026.626.1",
4
4
  "description": "Workflows microfrontend for Burdenoff products - thin shell over @burdenoff/fluidgrids-fe-sdk",
5
5
  "type": "module",
6
6
  "exports": {
@@ -28,7 +28,7 @@
28
28
  "format:check": "prettier --check \"src/**/*.{ts,tsx}\""
29
29
  },
30
30
  "dependencies": {
31
- "@burdenoff/fe-libs": "2026.518.7",
31
+ "@burdenoff/fe-libs": "2026.625.5",
32
32
  "lucide-react": "^0.468.0",
33
33
  "react": "^19.0.0",
34
34
  "react-dom": "^19.0.0",