@burdenoff/microfe-workspaces 2026.510.50 → 2026.511.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.
- package/dist/generated/wspace-operations.d.ts +91 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -1
- package/dist/generated/wspace-operations.js +79 -51
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/hooks/useMemberMutations.d.ts.map +1 -1
- package/dist/hooks/useMemberMutations.js +141 -60
- package/dist/hooks/useMemberMutations.js.map +1 -1
- package/dist/hooks/useProjectMutations.d.ts.map +1 -1
- package/dist/hooks/useProjectMutations.js +84 -44
- package/dist/hooks/useProjectMutations.js.map +1 -1
- package/dist/hooks/useWorkspaceMutations.d.ts.map +1 -1
- package/dist/hooks/useWorkspaceMutations.js +64 -29
- package/dist/hooks/useWorkspaceMutations.js.map +1 -1
- package/dist/hooks/useWorkspacesEventEmitter.d.ts +5 -1
- package/dist/hooks/useWorkspacesEventEmitter.d.ts.map +1 -1
- package/dist/hooks/useWorkspacesEventEmitter.js +8 -7
- package/dist/hooks/useWorkspacesEventEmitter.js.map +1 -1
- package/dist/hooks/useWorkspacesPageView.d.ts +27 -0
- package/dist/hooks/useWorkspacesPageView.d.ts.map +1 -0
- package/dist/hooks/useWorkspacesPageView.js +29 -0
- package/dist/hooks/useWorkspacesPageView.js.map +1 -0
- package/dist/pages/ActivityListPage.d.ts.map +1 -1
- package/dist/pages/ActivityListPage.js +59 -56
- package/dist/pages/ActivityListPage.js.map +1 -1
- package/dist/pages/CreateWorkspacePage.d.ts.map +1 -1
- package/dist/pages/CreateWorkspacePage.js +104 -104
- package/dist/pages/CreateWorkspacePage.js.map +1 -1
- package/dist/pages/InviteAcceptancePage.d.ts.map +1 -1
- package/dist/pages/InviteAcceptancePage.js +197 -216
- package/dist/pages/InviteAcceptancePage.js.map +1 -1
- package/dist/pages/MembersListPage.d.ts.map +1 -1
- package/dist/pages/MembersListPage.js +142 -138
- package/dist/pages/MembersListPage.js.map +1 -1
- package/dist/pages/ProjectDetailPage.d.ts.map +1 -1
- package/dist/pages/ProjectDetailPage.js +181 -176
- package/dist/pages/ProjectDetailPage.js.map +1 -1
- package/dist/pages/ProjectsListPage.d.ts.map +1 -1
- package/dist/pages/ProjectsListPage.js +175 -171
- package/dist/pages/ProjectsListPage.js.map +1 -1
- package/dist/pages/WorkspaceDetailPage.d.ts.map +1 -1
- package/dist/pages/WorkspaceDetailPage.js +104 -101
- package/dist/pages/WorkspaceDetailPage.js.map +1 -1
- package/dist/pages/WorkspaceSettingsPage.d.ts.map +1 -1
- package/dist/pages/WorkspaceSettingsPage.js +182 -137
- package/dist/pages/WorkspaceSettingsPage.js.map +1 -1
- package/dist/pages/WorkspacesListPage.d.ts.map +1 -1
- package/dist/pages/WorkspacesListPage.js +77 -77
- package/dist/pages/WorkspacesListPage.js.map +1 -1
- package/dist/pages/dashboard/DashboardCustomizer.d.ts.map +1 -1
- package/dist/pages/dashboard/DashboardCustomizer.js +53 -55
- package/dist/pages/dashboard/DashboardCustomizer.js.map +1 -1
- package/dist/pages/dashboard/DashboardGrid.d.ts.map +1 -1
- package/dist/pages/dashboard/DashboardGrid.js +33 -36
- package/dist/pages/dashboard/DashboardGrid.js.map +1 -1
- package/dist/pages/dashboard/DashboardPage.d.ts.map +1 -1
- package/dist/pages/dashboard/DashboardPage.js +67 -65
- package/dist/pages/dashboard/DashboardPage.js.map +1 -1
- package/dist/pages/dashboard/WidgetWrapper.d.ts.map +1 -1
- package/dist/pages/dashboard/WidgetWrapper.js +3 -6
- package/dist/pages/dashboard/WidgetWrapper.js.map +1 -1
- package/dist/utils/i18n.d.ts +13 -0
- package/dist/utils/i18n.d.ts.map +1 -0
- package/dist/utils/i18n.js +12 -0
- package/dist/utils/i18n.js.map +1 -0
- package/dist/utils/telemetryError.d.ts +2 -0
- package/dist/utils/telemetryError.d.ts.map +1 -0
- package/dist/utils/telemetryError.js +28 -0
- package/dist/utils/telemetryError.js.map +1 -0
- package/package.json +9 -4
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useWorkspacesEventEmitter as e } from "./useWorkspacesEventEmitter.js";
|
|
2
|
+
import { useEffect as t, useRef as n } from "react";
|
|
3
|
+
//#region src/hooks/useWorkspacesPageView.ts
|
|
4
|
+
var r = (e) => typeof e == "string" && e.length > 0;
|
|
5
|
+
function i(i, a) {
|
|
6
|
+
let { emit: o } = e(), s = a?.workspaceId, c = a?.projectId, l = a?.requireParams ?? !1, u = n(null);
|
|
7
|
+
t(() => {
|
|
8
|
+
if (l) {
|
|
9
|
+
let e = [];
|
|
10
|
+
if (a && "workspaceId" in a && e.push(s), a && "projectId" in a && e.push(c), e.some((e) => !r(e))) return;
|
|
11
|
+
}
|
|
12
|
+
let e = `${i}::${s ?? ""}::${c ?? ""}`;
|
|
13
|
+
u.current !== e && (u.current = e, o("workspaces.page.viewed", {
|
|
14
|
+
page: i,
|
|
15
|
+
workspaceId: s ?? void 0,
|
|
16
|
+
projectId: c ?? void 0
|
|
17
|
+
}));
|
|
18
|
+
}, [
|
|
19
|
+
o,
|
|
20
|
+
i,
|
|
21
|
+
s,
|
|
22
|
+
c,
|
|
23
|
+
l
|
|
24
|
+
]);
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { i as useWorkspacesPageView };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=useWorkspacesPageView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWorkspacesPageView.js","names":[],"sources":["../../src/hooks/useWorkspacesPageView.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { useWorkspacesEventEmitter } from './useWorkspacesEventEmitter';\n\ninterface PageViewExtra {\n /**\n * Workspace context for the page. `undefined` / `null` / `''` are all\n * treated as \"unresolved\" when `requireParams` is true so that\n * `useParams()`'s `string | undefined` initial render doesn't fire\n * a phantom event with missing context.\n */\n workspaceId?: string | null;\n projectId?: string | null;\n /**\n * Set to `true` on routes that include `:workspaceId` / `:projectId`\n * in the path. The hook then skips the emit until **every value\n * supplied in `extra`** resolves to a non-empty string. Anything you\n * don't pass to `extra` is treated as \"not applicable to this page\"\n * — the hook ignores it.\n */\n requireParams?: boolean;\n}\n\nconst isResolved = (v: string | null | undefined): v is string =>\n typeof v === 'string' && v.length > 0;\n\n/**\n * Emit a `workspaces.page.viewed` event when a top-level workspaces page mounts\n * (and again when its `page` / `workspaceId` / `projectId` context changes).\n * The event is forwarded by the shell's bus to OtelBrowserSink / RybbitSink /\n * BackendAuditSink — the MFE never sinks directly.\n */\nexport function useWorkspacesPageView(page: string, extra?: PageViewExtra): void {\n const { emit } = useWorkspacesEventEmitter();\n const workspaceId = extra?.workspaceId;\n const projectId = extra?.projectId;\n const requireParams = extra?.requireParams ?? false;\n\n // Track the last (page, workspaceId, projectId) tuple we emitted for, so\n // when params resolve asynchronously and the same effect re-runs we don't\n // double-fire — and so a quick router transition that lands on the same\n // page only counts once.\n const lastKey = useRef<string | null>(null);\n\n useEffect(() => {\n // Skip while params are still resolving on routes that need them.\n // We check every key the caller actually supplied — if `extra.projectId`\n // wasn't passed it stays `undefined` and is ignored; if it WAS passed\n // (even as `undefined` from `useParams`) we wait for it to resolve.\n if (requireParams) {\n const passed: Array<string | null | undefined> = [];\n if (extra && 'workspaceId' in extra) passed.push(workspaceId);\n if (extra && 'projectId' in extra) passed.push(projectId);\n if (passed.some((v) => !isResolved(v))) {\n if (import.meta.env?.DEV) {\n // eslint-disable-next-line no-console\n console.debug('[useWorkspacesPageView] skipping — required params not yet resolved', {\n page,\n workspaceId,\n projectId,\n });\n }\n return;\n }\n }\n\n const key = `${page}::${workspaceId ?? ''}::${projectId ?? ''}`;\n if (lastKey.current === key) return;\n lastKey.current = key;\n\n emit('workspaces.page.viewed', {\n page,\n workspaceId: workspaceId ?? undefined,\n projectId: projectId ?? undefined,\n });\n // `extra` is read up-front and stable for the lifetime of this\n // page mount — the workspaceId/projectId values inside it ARE in\n // the dep array, which is what matters for effect re-runs.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [emit, page, workspaceId, projectId, requireParams]);\n}\n"],"mappings":";;;AAuBA,IAAM,KAAc,MAClB,OAAO,KAAM,YAAY,EAAE,SAAS;AAQtC,SAAgB,EAAsB,GAAc,GAA6B;CAC/E,IAAM,EAAE,YAAS,GAA2B,EACtC,IAAc,GAAO,aACrB,IAAY,GAAO,WACnB,IAAgB,GAAO,iBAAiB,IAMxC,IAAU,EAAsB,KAAK;AAE3C,SAAgB;AAKd,MAAI,GAAe;GACjB,IAAM,IAA2C,EAAE;AAGnD,OAFI,KAAS,iBAAiB,KAAO,EAAO,KAAK,EAAY,EACzD,KAAS,eAAe,KAAO,EAAO,KAAK,EAAU,EACrD,EAAO,MAAM,MAAM,CAAC,EAAW,EAAE,CAAC,CASpC;;EAIJ,IAAM,IAAM,GAAG,EAAK,IAAI,KAAe,GAAG,IAAI,KAAa;AACvD,IAAQ,YAAY,MACxB,EAAQ,UAAU,GAElB,EAAK,0BAA0B;GAC7B;GACA,aAAa,KAAe,KAAA;GAC5B,WAAW,KAAa,KAAA;GACzB,CAAC;IAKD;EAAC;EAAM;EAAM;EAAa;EAAW;EAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityListPage.d.ts","sourceRoot":"","sources":["../../src/pages/ActivityListPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ActivityListPage.d.ts","sourceRoot":"","sources":["../../src/pages/ActivityListPage.tsx"],"names":[],"mappings":"AAUA,wBAAgB,gBAAgB,4CA8G/B"}
|
|
@@ -1,97 +1,100 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
1
|
+
import { tWithFallback as e } from "../utils/i18n.js";
|
|
2
|
+
import { useWorkspacesPageView as t } from "../hooks/useWorkspacesPageView.js";
|
|
3
|
+
import { formatDate as n } from "../utils/formatters.js";
|
|
4
|
+
import { useWorkspaceActivity as r } from "../hooks/useWorkspaceActivity.js";
|
|
5
|
+
import { useWorkspacePermissions as i } from "../hooks/useWorkspacePermissions.js";
|
|
6
|
+
import { Activity as a } from "lucide-react";
|
|
7
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
8
|
+
import { Card as c, CardContent as l, CardHeader as u, CardTitle as d, Skeleton as f } from "@burdenoff/fe-libs/ui";
|
|
9
|
+
import { useParams as p } from "react-router-dom";
|
|
10
|
+
import { useI18n as m } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
10
11
|
//#region src/pages/ActivityListPage.tsx
|
|
11
|
-
function
|
|
12
|
-
let { t:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
function h() {
|
|
13
|
+
let { t: h } = m(), { workspaceId: g } = p();
|
|
14
|
+
t("workspaces.activity", {
|
|
15
|
+
workspaceId: g,
|
|
16
|
+
requireParams: !0
|
|
17
|
+
});
|
|
18
|
+
let { data: _, isLoading: v, error: y } = r(g), { canViewActivity: b, isLoading: x } = i();
|
|
19
|
+
return x ? /* @__PURE__ */ s("div", {
|
|
17
20
|
className: "space-y-4 p-6",
|
|
18
|
-
children: [/* @__PURE__ */
|
|
19
|
-
}) : b ? /* @__PURE__ */
|
|
21
|
+
children: [/* @__PURE__ */ o(f, { className: "h-10 w-1/3" }), /* @__PURE__ */ o(f, { className: "h-64" })]
|
|
22
|
+
}) : b ? /* @__PURE__ */ s("div", {
|
|
20
23
|
className: "space-y-4 sm:space-y-6 p-3 sm:p-6",
|
|
21
|
-
children: [/* @__PURE__ */
|
|
24
|
+
children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h1", {
|
|
22
25
|
className: "text-2xl sm:text-3xl font-bold",
|
|
23
|
-
children: h
|
|
24
|
-
}), /* @__PURE__ */
|
|
26
|
+
children: e(h, "activityList.title", "Activity")
|
|
27
|
+
}), /* @__PURE__ */ o("p", {
|
|
25
28
|
className: "text-muted-foreground",
|
|
26
|
-
children: h
|
|
27
|
-
})] }), v ? /* @__PURE__ */
|
|
29
|
+
children: e(h, "activityList.description", "Track workspace activity")
|
|
30
|
+
})] }), v ? /* @__PURE__ */ o(c, { children: /* @__PURE__ */ o(l, {
|
|
28
31
|
className: "py-8 text-sm text-muted-foreground",
|
|
29
|
-
children: h
|
|
30
|
-
}) }) : y ? /* @__PURE__ */
|
|
32
|
+
children: e(h, "activityList.loading", "Loading activity…")
|
|
33
|
+
}) }) : y ? /* @__PURE__ */ o(c, { children: /* @__PURE__ */ o(l, {
|
|
31
34
|
className: "py-8 text-sm text-destructive",
|
|
32
|
-
children: y instanceof Error ? y.message : h
|
|
33
|
-
}) }) : (_?.length ?? 0) === 0 ? /* @__PURE__ */
|
|
35
|
+
children: y instanceof Error ? y.message : e(h, "activityList.loadError", "Failed to load activity")
|
|
36
|
+
}) }) : (_?.length ?? 0) === 0 ? /* @__PURE__ */ s("div", {
|
|
34
37
|
className: "flex flex-col items-center justify-center py-12 text-center",
|
|
35
38
|
children: [
|
|
36
|
-
/* @__PURE__ */
|
|
39
|
+
/* @__PURE__ */ o("div", {
|
|
37
40
|
className: "rounded-full bg-muted p-6 mb-4",
|
|
38
|
-
children: /* @__PURE__ */ a
|
|
41
|
+
children: /* @__PURE__ */ o(a, {
|
|
39
42
|
size: 48,
|
|
40
43
|
className: "text-muted-foreground"
|
|
41
44
|
})
|
|
42
45
|
}),
|
|
43
|
-
/* @__PURE__ */
|
|
46
|
+
/* @__PURE__ */ o("h3", {
|
|
44
47
|
className: "text-lg font-semibold mb-2",
|
|
45
|
-
children: h
|
|
48
|
+
children: e(h, "activityList.emptyTitle", "No recent activity")
|
|
46
49
|
}),
|
|
47
|
-
/* @__PURE__ */
|
|
50
|
+
/* @__PURE__ */ o("p", {
|
|
48
51
|
className: "text-muted-foreground max-w-sm",
|
|
49
|
-
children: h
|
|
52
|
+
children: e(h, "activityList.emptyDescription", "Recent workspace actions will appear here as your team creates, updates, and manages work.")
|
|
50
53
|
})
|
|
51
54
|
]
|
|
52
|
-
}) : /* @__PURE__ */
|
|
55
|
+
}) : /* @__PURE__ */ o("div", {
|
|
53
56
|
className: "space-y-3",
|
|
54
|
-
children: _?.map((t) => /* @__PURE__ */
|
|
57
|
+
children: _?.map((t) => /* @__PURE__ */ s(c, { children: [/* @__PURE__ */ o(u, {
|
|
55
58
|
className: "pb-2",
|
|
56
|
-
children: /* @__PURE__ */
|
|
59
|
+
children: /* @__PURE__ */ o(d, {
|
|
57
60
|
className: "text-base",
|
|
58
61
|
children: t.description || t.action
|
|
59
62
|
})
|
|
60
|
-
}), /* @__PURE__ */
|
|
63
|
+
}), /* @__PURE__ */ s(l, {
|
|
61
64
|
className: "space-y-1 text-sm text-muted-foreground",
|
|
62
65
|
children: [
|
|
63
|
-
/* @__PURE__ */
|
|
64
|
-
h
|
|
66
|
+
/* @__PURE__ */ s("p", { children: [
|
|
67
|
+
e(h, "activityList.labelAction", "Action"),
|
|
65
68
|
":",
|
|
66
69
|
" ",
|
|
67
|
-
/* @__PURE__ */
|
|
70
|
+
/* @__PURE__ */ o("span", {
|
|
68
71
|
className: "text-foreground",
|
|
69
72
|
children: t.action
|
|
70
73
|
})
|
|
71
74
|
] }),
|
|
72
|
-
t.resourceType && /* @__PURE__ */
|
|
73
|
-
h
|
|
75
|
+
t.resourceType && /* @__PURE__ */ s("p", { children: [
|
|
76
|
+
e(h, "activityList.labelResource", "Resource"),
|
|
74
77
|
":",
|
|
75
78
|
" ",
|
|
76
|
-
/* @__PURE__ */
|
|
79
|
+
/* @__PURE__ */ o("span", {
|
|
77
80
|
className: "text-foreground",
|
|
78
81
|
children: t.resourceType
|
|
79
82
|
})
|
|
80
83
|
] }),
|
|
81
|
-
/* @__PURE__ */
|
|
82
|
-
h
|
|
84
|
+
/* @__PURE__ */ s("p", { children: [
|
|
85
|
+
e(h, "activityList.labelWhen", "When"),
|
|
83
86
|
":",
|
|
84
87
|
" ",
|
|
85
|
-
/* @__PURE__ */
|
|
88
|
+
/* @__PURE__ */ o("span", {
|
|
86
89
|
className: "text-foreground",
|
|
87
|
-
children:
|
|
90
|
+
children: n(t.timestamp)
|
|
88
91
|
})
|
|
89
92
|
] }),
|
|
90
|
-
/* @__PURE__ */
|
|
91
|
-
h
|
|
93
|
+
/* @__PURE__ */ s("p", { children: [
|
|
94
|
+
e(h, "activityList.labelActor", "Actor"),
|
|
92
95
|
":",
|
|
93
96
|
" ",
|
|
94
|
-
/* @__PURE__ */
|
|
97
|
+
/* @__PURE__ */ o("span", {
|
|
95
98
|
className: "break-all text-foreground",
|
|
96
99
|
children: t.userId
|
|
97
100
|
})
|
|
@@ -99,21 +102,21 @@ function m() {
|
|
|
99
102
|
]
|
|
100
103
|
})] }, t.id))
|
|
101
104
|
})]
|
|
102
|
-
}) : /* @__PURE__ */
|
|
105
|
+
}) : /* @__PURE__ */ o("div", {
|
|
103
106
|
className: "flex items-center justify-center min-h-[400px]",
|
|
104
|
-
children: /* @__PURE__ */
|
|
107
|
+
children: /* @__PURE__ */ s("div", {
|
|
105
108
|
className: "text-center space-y-2",
|
|
106
|
-
children: [/* @__PURE__ */
|
|
109
|
+
children: [/* @__PURE__ */ o("h2", {
|
|
107
110
|
className: "text-lg font-semibold",
|
|
108
|
-
children: h
|
|
109
|
-
}), /* @__PURE__ */
|
|
111
|
+
children: e(h, "activityList.accessDenied", "Access Denied")
|
|
112
|
+
}), /* @__PURE__ */ o("p", {
|
|
110
113
|
className: "text-sm text-muted-foreground",
|
|
111
|
-
children: h
|
|
114
|
+
children: e(h, "activityList.accessDeniedDescription", "You don't have permission to view activity.")
|
|
112
115
|
})]
|
|
113
116
|
})
|
|
114
117
|
});
|
|
115
118
|
}
|
|
116
119
|
//#endregion
|
|
117
|
-
export {
|
|
120
|
+
export { h as ActivityListPage };
|
|
118
121
|
|
|
119
122
|
//# sourceMappingURL=ActivityListPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityListPage.js","names":[],"sources":["../../src/pages/ActivityListPage.tsx"],"sourcesContent":["import { Activity } from 'lucide-react';\nimport { useParams } from 'react-router-dom';\nimport {
|
|
1
|
+
{"version":3,"file":"ActivityListPage.js","names":[],"sources":["../../src/pages/ActivityListPage.tsx"],"sourcesContent":["import { Activity } from 'lucide-react';\nimport { useParams } from 'react-router-dom';\nimport { Card, CardContent, CardHeader, CardTitle, Skeleton } from '@burdenoff/fe-libs/ui';\nimport { useWorkspaceActivity } from '../hooks/useWorkspaceActivity';\nimport { useWorkspacePermissions } from '../hooks/useWorkspacePermissions';\nimport { useWorkspacesPageView } from '../hooks/useWorkspacesPageView';\nimport { formatDate } from '../utils/formatters';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { tWithFallback } from '../utils/i18n';\n\nexport function ActivityListPage() {\n const { t } = useI18n();\n\n const { workspaceId } = useParams<{ workspaceId: string }>();\n useWorkspacesPageView('workspaces.activity', { workspaceId, requireParams: true });\n const { data: activities, isLoading, error } = useWorkspaceActivity(workspaceId);\n const { canViewActivity, isLoading: permissionsLoading } = useWorkspacePermissions();\n\n if (permissionsLoading) {\n return (\n <div className=\"space-y-4 p-6\">\n <Skeleton className=\"h-10 w-1/3\" />\n <Skeleton className=\"h-64\" />\n </div>\n );\n }\n\n if (!canViewActivity) {\n return (\n <div className=\"flex items-center justify-center min-h-[400px]\">\n <div className=\"text-center space-y-2\">\n <h2 className=\"text-lg font-semibold\">\n {tWithFallback(t, 'activityList.accessDenied', 'Access Denied')}\n </h2>\n <p className=\"text-sm text-muted-foreground\">\n {tWithFallback(\n t,\n 'activityList.accessDeniedDescription',\n \"You don't have permission to view activity.\"\n )}\n </p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-4 sm:space-y-6 p-3 sm:p-6\">\n <div>\n <h1 className=\"text-2xl sm:text-3xl font-bold\">\n {tWithFallback(t, 'activityList.title', 'Activity')}\n </h1>\n <p className=\"text-muted-foreground\">\n {tWithFallback(t, 'activityList.description', 'Track workspace activity')}\n </p>\n </div>\n\n {isLoading ? (\n <Card>\n <CardContent className=\"py-8 text-sm text-muted-foreground\">\n {tWithFallback(t, 'activityList.loading', 'Loading activity…')}\n </CardContent>\n </Card>\n ) : error ? (\n <Card>\n <CardContent className=\"py-8 text-sm text-destructive\">\n {error instanceof Error\n ? error.message\n : tWithFallback(t, 'activityList.loadError', 'Failed to load activity')}\n </CardContent>\n </Card>\n ) : (activities?.length ?? 0) === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-12 text-center\">\n <div className=\"rounded-full bg-muted p-6 mb-4\">\n <Activity size={48} className=\"text-muted-foreground\" />\n </div>\n <h3 className=\"text-lg font-semibold mb-2\">\n {tWithFallback(t, 'activityList.emptyTitle', 'No recent activity')}\n </h3>\n <p className=\"text-muted-foreground max-w-sm\">\n {tWithFallback(\n t,\n 'activityList.emptyDescription',\n 'Recent workspace actions will appear here as your team creates, updates, and manages work.'\n )}\n </p>\n </div>\n ) : (\n <div className=\"space-y-3\">\n {activities?.map((item) => (\n <Card key={item.id}>\n <CardHeader className=\"pb-2\">\n <CardTitle className=\"text-base\">{item.description || item.action}</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-1 text-sm text-muted-foreground\">\n <p>\n {tWithFallback(t, 'activityList.labelAction', 'Action')}:{' '}\n <span className=\"text-foreground\">{item.action}</span>\n </p>\n {item.resourceType && (\n <p>\n {tWithFallback(t, 'activityList.labelResource', 'Resource')}:{' '}\n <span className=\"text-foreground\">{item.resourceType}</span>\n </p>\n )}\n <p>\n {tWithFallback(t, 'activityList.labelWhen', 'When')}:{' '}\n <span className=\"text-foreground\">{formatDate(item.timestamp)}</span>\n </p>\n <p>\n {tWithFallback(t, 'activityList.labelActor', 'Actor')}:{' '}\n <span className=\"break-all text-foreground\">{item.userId}</span>\n </p>\n </CardContent>\n </Card>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateWorkspacePage.d.ts","sourceRoot":"","sources":["../../src/pages/CreateWorkspacePage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CreateWorkspacePage.d.ts","sourceRoot":"","sources":["../../src/pages/CreateWorkspacePage.tsx"],"names":[],"mappings":"AA+BA,wBAAgB,mBAAmB,4CA8alC"}
|