@burdenoff/microfe-workspaces 2026.625.5 → 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.
Files changed (33) hide show
  1. package/dist/pages/ActivityListPage.js +94 -90
  2. package/dist/pages/ActivityListPage.js.map +1 -1
  3. package/dist/pages/CreateWorkspacePage.js +68 -63
  4. package/dist/pages/CreateWorkspacePage.js.map +1 -1
  5. package/dist/pages/InviteAcceptancePage.js +101 -96
  6. package/dist/pages/InviteAcceptancePage.js.map +1 -1
  7. package/dist/pages/MembersListPage.js +185 -184
  8. package/dist/pages/MembersListPage.js.map +1 -1
  9. package/dist/pages/PendingInvitesPage.js +70 -68
  10. package/dist/pages/PendingInvitesPage.js.map +1 -1
  11. package/dist/pages/ProjectDetailPage.js +119 -78
  12. package/dist/pages/ProjectDetailPage.js.map +1 -1
  13. package/dist/pages/ProjectMembersPage.js +105 -104
  14. package/dist/pages/ProjectMembersPage.js.map +1 -1
  15. package/dist/pages/ProjectsListPage.js +158 -157
  16. package/dist/pages/ProjectsListPage.js.map +1 -1
  17. package/dist/pages/WorkspaceDetailPage.js +236 -198
  18. package/dist/pages/WorkspaceDetailPage.js.map +1 -1
  19. package/dist/pages/WorkspaceInvitePage.js +341 -300
  20. package/dist/pages/WorkspaceInvitePage.js.map +1 -1
  21. package/dist/pages/WorkspaceSettingsPage.js +87 -85
  22. package/dist/pages/WorkspaceSettingsPage.js.map +1 -1
  23. package/dist/pages/WorkspacesListPage.js +122 -121
  24. package/dist/pages/WorkspacesListPage.js.map +1 -1
  25. package/dist/pages/dashboard/DashboardPage.js +55 -51
  26. package/dist/pages/dashboard/DashboardPage.js.map +1 -1
  27. package/dist/pages/dashboard/widgets/GroupsWidget.js +16 -17
  28. package/dist/pages/dashboard/widgets/GroupsWidget.js.map +1 -1
  29. package/dist/pages/dashboard/widgets/TagCloudWidget.js +18 -19
  30. package/dist/pages/dashboard/widgets/TagCloudWidget.js.map +1 -1
  31. package/dist/pages/dashboard/widgets/WorkflowStatsWidget.js +10 -11
  32. package/dist/pages/dashboard/widgets/WorkflowStatsWidget.js.map +1 -1
  33. package/package.json +2 -2
@@ -4,115 +4,119 @@ import { useWorkspacePermissions as n } from "../hooks/useWorkspacePermissions.j
4
4
  import { formatDate as r } from "../utils/formatters.js";
5
5
  import { useWorkspaceActivity as i } from "../hooks/useWorkspaceActivity.js";
6
6
  import { jsx as a, jsxs as o } from "react/jsx-runtime";
7
- import { CardContent as s, CardHeader as c, CardTitle as l, GlassCard as u, IllustratedEmptyState as d, Skeleton as f } from "@burdenoff/fe-libs/ui";
8
- import { useParams as p } from "react-router-dom";
9
- import { useI18n as m } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
7
+ import { CardContent as s, CardHeader as c, CardTitle as l, GlassCard as u, IllustratedEmptyState as d, PagePurpose as f, Skeleton as p } from "@burdenoff/fe-libs/ui";
8
+ import { useParams as m } from "react-router-dom";
9
+ import { useI18n as h } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
10
10
  //#region src/pages/ActivityListPage.tsx
11
- function h() {
12
- let { t: h } = m(), { workspaceId: g } = p();
11
+ function g() {
12
+ let { t: g } = h(), { workspaceId: _ } = m();
13
13
  t("workspaces.activity", {
14
- workspaceId: g,
14
+ workspaceId: _,
15
15
  requireParams: !0
16
16
  });
17
- let { data: _, isLoading: v, error: y } = i(g), { canViewActivity: b, isLoading: x } = n();
18
- return x ? /* @__PURE__ */ o("div", {
17
+ let { data: v, isLoading: y, error: b } = i(_), { canViewActivity: x, isLoading: S } = n();
18
+ return S ? /* @__PURE__ */ o("div", {
19
19
  className: "space-y-4 p-6",
20
- children: [/* @__PURE__ */ a(f, { className: "h-10 w-1/3" }), /* @__PURE__ */ a(f, { className: "h-64" })]
21
- }) : b ? /* @__PURE__ */ o("div", {
20
+ children: [/* @__PURE__ */ a(p, { className: "h-10 w-1/3" }), /* @__PURE__ */ a(p, { className: "h-64" })]
21
+ }) : x ? /* @__PURE__ */ o("div", {
22
22
  className: "space-y-4 sm:space-y-6 p-3 sm:p-6",
23
- children: [/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
24
- className: "text-2xl sm:text-3xl font-bold",
25
- children: e(h, "activityList.title", "Activity")
26
- }), /* @__PURE__ */ a("p", {
27
- className: "text-text-secondary",
28
- children: e(h, "activityList.description", "Track workspace activity")
29
- })] }), v ? /* @__PURE__ */ a(u, {
30
- treatment: "plain",
31
- className: "border-border-seam",
32
- children: /* @__PURE__ */ a(s, {
33
- className: "py-8 text-sm text-text-muted",
34
- children: e(h, "activityList.loading", "Loading activity…")
35
- })
36
- }) : y ? /* @__PURE__ */ a(u, {
37
- treatment: "plain",
38
- className: "border-border-seam",
39
- children: /* @__PURE__ */ a(s, {
40
- className: "py-8 text-sm text-status-error-text",
41
- children: y instanceof Error ? y.message : e(h, "activityList.loadError", "Failed to load activity")
42
- })
43
- }) : (_?.length ?? 0) === 0 ? /* @__PURE__ */ a(d, {
44
- illustration: "empty-data",
45
- title: e(h, "activityList.emptyTitle", "No recent activity"),
46
- description: e(h, "activityList.emptyDescription", "Recent workspace actions will appear here as your team creates, updates, and manages work.")
47
- }) : /* @__PURE__ */ a("div", {
48
- className: "space-y-3",
49
- children: _?.map((t) => /* @__PURE__ */ o(u, {
50
- treatment: "insight",
23
+ children: [
24
+ /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
25
+ className: "text-2xl sm:text-3xl font-bold",
26
+ children: e(g, "activityList.title", "Activity")
27
+ }), /* @__PURE__ */ a("p", {
28
+ className: "text-text-secondary",
29
+ children: e(g, "activityList.description", "Track workspace activity")
30
+ })] }),
31
+ /* @__PURE__ */ a(f, { children: e(g, "activityList.purpose", "This is the audit trail for the workspace — a running log of who did what and when. Use it to catch up after time away, confirm a change went through, or investigate when and by whom a project or member was modified.") }),
32
+ y ? /* @__PURE__ */ a(u, {
33
+ treatment: "plain",
51
34
  className: "border-border-seam",
52
- children: [/* @__PURE__ */ a(c, {
53
- className: "pb-2",
54
- children: /* @__PURE__ */ a(l, {
55
- className: "text-base",
56
- children: t.description || t.action
57
- })
58
- }), /* @__PURE__ */ o(s, {
59
- className: "space-y-1 text-sm text-text-muted",
60
- children: [
61
- /* @__PURE__ */ o("p", { children: [
62
- e(h, "activityList.labelAction", "Action"),
63
- ":",
64
- " ",
65
- /* @__PURE__ */ a("span", {
66
- className: "text-text-primary",
67
- children: t.action
68
- })
69
- ] }),
70
- t.resourceType && /* @__PURE__ */ o("p", { children: [
71
- e(h, "activityList.labelResource", "Resource"),
72
- ":",
73
- " ",
74
- /* @__PURE__ */ a("span", {
75
- className: "text-text-primary",
76
- children: t.resourceType
77
- })
78
- ] }),
79
- /* @__PURE__ */ o("p", { children: [
80
- e(h, "activityList.labelWhen", "When"),
81
- ":",
82
- " ",
83
- /* @__PURE__ */ a("span", {
84
- className: "text-text-primary",
85
- children: r(t.timestamp)
86
- })
87
- ] }),
88
- /* @__PURE__ */ o("p", { children: [
89
- e(h, "activityList.labelActor", "Actor"),
90
- ":",
91
- " ",
92
- /* @__PURE__ */ a("span", {
93
- className: "break-all text-text-primary",
94
- children: t.userId
95
- })
96
- ] })
97
- ]
98
- })]
99
- }, t.id))
100
- })]
35
+ children: /* @__PURE__ */ a(s, {
36
+ className: "py-8 text-sm text-text-muted",
37
+ children: e(g, "activityList.loading", "Loading activity…")
38
+ })
39
+ }) : b ? /* @__PURE__ */ a(u, {
40
+ treatment: "plain",
41
+ className: "border-border-seam",
42
+ children: /* @__PURE__ */ a(s, {
43
+ className: "py-8 text-sm text-status-error-text",
44
+ children: b instanceof Error ? b.message : e(g, "activityList.loadError", "Failed to load activity")
45
+ })
46
+ }) : (v?.length ?? 0) === 0 ? /* @__PURE__ */ a(d, {
47
+ illustration: "empty-data",
48
+ title: e(g, "activityList.emptyTitle", "No recent activity"),
49
+ description: e(g, "activityList.emptyDescription", "Recent workspace actions will appear here as your team creates, updates, and manages work.")
50
+ }) : /* @__PURE__ */ a("div", {
51
+ className: "space-y-3",
52
+ children: v?.map((t) => /* @__PURE__ */ o(u, {
53
+ treatment: "insight",
54
+ className: "border-border-seam",
55
+ children: [/* @__PURE__ */ a(c, {
56
+ className: "pb-2",
57
+ children: /* @__PURE__ */ a(l, {
58
+ className: "text-base",
59
+ children: t.description || t.action
60
+ })
61
+ }), /* @__PURE__ */ o(s, {
62
+ className: "space-y-1 text-sm text-text-muted",
63
+ children: [
64
+ /* @__PURE__ */ o("p", { children: [
65
+ e(g, "activityList.labelAction", "Action"),
66
+ ":",
67
+ " ",
68
+ /* @__PURE__ */ a("span", {
69
+ className: "text-text-primary",
70
+ children: t.action
71
+ })
72
+ ] }),
73
+ t.resourceType && /* @__PURE__ */ o("p", { children: [
74
+ e(g, "activityList.labelResource", "Resource"),
75
+ ":",
76
+ " ",
77
+ /* @__PURE__ */ a("span", {
78
+ className: "text-text-primary",
79
+ children: t.resourceType
80
+ })
81
+ ] }),
82
+ /* @__PURE__ */ o("p", { children: [
83
+ e(g, "activityList.labelWhen", "When"),
84
+ ":",
85
+ " ",
86
+ /* @__PURE__ */ a("span", {
87
+ className: "text-text-primary",
88
+ children: r(t.timestamp)
89
+ })
90
+ ] }),
91
+ /* @__PURE__ */ o("p", { children: [
92
+ e(g, "activityList.labelActor", "Actor"),
93
+ ":",
94
+ " ",
95
+ /* @__PURE__ */ a("span", {
96
+ className: "break-all text-text-primary",
97
+ children: t.userId
98
+ })
99
+ ] })
100
+ ]
101
+ })]
102
+ }, t.id))
103
+ })
104
+ ]
101
105
  }) : /* @__PURE__ */ a("div", {
102
106
  className: "flex items-center justify-center min-h-[400px]",
103
107
  children: /* @__PURE__ */ o("div", {
104
108
  className: "text-center space-y-2",
105
109
  children: [/* @__PURE__ */ a("h2", {
106
110
  className: "text-lg font-semibold",
107
- children: e(h, "activityList.accessDenied", "Access Denied")
111
+ children: e(g, "activityList.accessDenied", "Access Denied")
108
112
  }), /* @__PURE__ */ a("p", {
109
113
  className: "text-sm text-text-secondary",
110
- children: e(h, "activityList.accessDeniedDescription", "You don't have permission to view activity.")
114
+ children: e(g, "activityList.accessDeniedDescription", "You don't have permission to view activity.")
111
115
  })]
112
116
  })
113
117
  });
114
118
  }
115
119
  //#endregion
116
- export { h as ActivityListPage };
120
+ export { g as ActivityListPage };
117
121
 
118
122
  //# sourceMappingURL=ActivityListPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActivityListPage.js","names":[],"sources":["../../src/pages/ActivityListPage.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport {\n GlassCard,\n CardContent,\n CardHeader,\n CardTitle,\n Skeleton,\n IllustratedEmptyState,\n} 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 // The URL path `:workspaceId` (when present) intentionally overrides the active\n // context. WorkspaceContextPathSync rewrites this segment on a context switch so\n // the override can't point at a stale workspace. (BOFF-2805 follow-up)\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-text-secondary\">\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-text-secondary\">\n {tWithFallback(t, 'activityList.description', 'Track workspace activity')}\n </p>\n </div>\n\n {isLoading ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <CardContent className=\"py-8 text-sm text-text-muted\">\n {tWithFallback(t, 'activityList.loading', 'Loading activity…')}\n </CardContent>\n </GlassCard>\n ) : error ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <CardContent className=\"py-8 text-sm text-status-error-text\">\n {error instanceof Error\n ? error.message\n : tWithFallback(t, 'activityList.loadError', 'Failed to load activity')}\n </CardContent>\n </GlassCard>\n ) : (activities?.length ?? 0) === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={tWithFallback(t, 'activityList.emptyTitle', 'No recent activity')}\n description={tWithFallback(\n t,\n 'activityList.emptyDescription',\n 'Recent workspace actions will appear here as your team creates, updates, and manages work.'\n )}\n />\n ) : (\n <div className=\"space-y-3\">\n {activities?.map((item) => (\n <GlassCard key={item.id} treatment=\"insight\" className=\"border-border-seam\">\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-text-muted\">\n <p>\n {tWithFallback(t, 'activityList.labelAction', 'Action')}:{' '}\n <span className=\"text-text-primary\">{item.action}</span>\n </p>\n {item.resourceType && (\n <p>\n {tWithFallback(t, 'activityList.labelResource', 'Resource')}:{' '}\n <span className=\"text-text-primary\">{item.resourceType}</span>\n </p>\n )}\n <p>\n {tWithFallback(t, 'activityList.labelWhen', 'When')}:{' '}\n <span className=\"text-text-primary\">{formatDate(item.timestamp)}</span>\n </p>\n <p>\n {tWithFallback(t, 'activityList.labelActor', 'Actor')}:{' '}\n <span className=\"break-all text-text-primary\">{item.userId}</span>\n </p>\n </CardContent>\n </GlassCard>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;AAgBA,SAAgB,IAAmB;CACjC,IAAM,EAAE,SAAM,GAAS,EAKjB,EAAE,mBAAgB,GAAoC;AAC5D,GAAsB,uBAAuB;EAAE;EAAa,eAAe;EAAM,CAAC;CAClF,IAAM,EAAE,MAAM,GAAY,cAAW,aAAU,EAAqB,EAAY,EAC1E,EAAE,oBAAiB,WAAW,MAAuB,GAAyB;AA8BpF,QA5BI,IAEA,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,GAAD,EAAU,WAAU,cAAe,CAAA,EACnC,kBAAC,GAAD,EAAU,WAAU,QAAS,CAAA,CACzB;MAIL,IAoBH,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;GAAI,WAAU;aACX,EAAc,GAAG,sBAAsB,WAAW;GAChD,CAAA,EACL,kBAAC,KAAD;GAAG,WAAU;aACV,EAAc,GAAG,4BAA4B,2BAA2B;GACvE,CAAA,CACA,EAAA,CAAA,EAEL,IACC,kBAAC,GAAD;GAAW,WAAU;GAAQ,WAAU;aACrC,kBAAC,GAAD;IAAa,WAAU;cACpB,EAAc,GAAG,wBAAwB,oBAAoB;IAClD,CAAA;GACJ,CAAA,GACV,IACF,kBAAC,GAAD;GAAW,WAAU;GAAQ,WAAU;aACrC,kBAAC,GAAD;IAAa,WAAU;cACpB,aAAiB,QACd,EAAM,UACN,EAAc,GAAG,0BAA0B,0BAA0B;IAC7D,CAAA;GACJ,CAAA,IACT,GAAY,UAAU,OAAO,IAChC,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAc,GAAG,2BAA2B,qBAAqB;GACxE,aAAa,EACX,GACA,iCACA,6FACD;GACD,CAAA,GAEF,kBAAC,OAAD;GAAK,WAAU;aACZ,GAAY,KAAK,MAChB,kBAAC,GAAD;IAAyB,WAAU;IAAU,WAAU;cAAvD,CACE,kBAAC,GAAD;KAAY,WAAU;eACpB,kBAAC,GAAD;MAAW,WAAU;gBAAa,EAAK,eAAe,EAAK;MAAmB,CAAA;KACnE,CAAA,EACb,kBAAC,GAAD;KAAa,WAAU;eAAvB;MACE,kBAAC,KAAD,EAAA,UAAA;OACG,EAAc,GAAG,4BAA4B,SAAS;OAAC;OAAE;OAC1D,kBAAC,QAAD;QAAM,WAAU;kBAAqB,EAAK;QAAc,CAAA;OACtD,EAAA,CAAA;MACH,EAAK,gBACJ,kBAAC,KAAD,EAAA,UAAA;OACG,EAAc,GAAG,8BAA8B,WAAW;OAAC;OAAE;OAC9D,kBAAC,QAAD;QAAM,WAAU;kBAAqB,EAAK;QAAoB,CAAA;OAC5D,EAAA,CAAA;MAEN,kBAAC,KAAD,EAAA,UAAA;OACG,EAAc,GAAG,0BAA0B,OAAO;OAAC;OAAE;OACtD,kBAAC,QAAD;QAAM,WAAU;kBAAqB,EAAW,EAAK,UAAU;QAAQ,CAAA;OACrE,EAAA,CAAA;MACJ,kBAAC,KAAD,EAAA,UAAA;OACG,EAAc,GAAG,2BAA2B,QAAQ;OAAC;OAAE;OACxD,kBAAC,QAAD;QAAM,WAAU;kBAA+B,EAAK;QAAc,CAAA;OAChE,EAAA,CAAA;MACQ;OACJ;MAxBI,EAAK,GAwBT,CACZ;GACE,CAAA,CAEJ;MAnFJ,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,MAAD;IAAI,WAAU;cACX,EAAc,GAAG,6BAA6B,gBAAgB;IAC5D,CAAA,EACL,kBAAC,KAAD;IAAG,WAAU;cACV,EACC,GACA,wCACA,8CACD;IACC,CAAA,CACA;;EACF,CAAA"}
1
+ {"version":3,"file":"ActivityListPage.js","names":[],"sources":["../../src/pages/ActivityListPage.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport {\n GlassCard,\n CardContent,\n CardHeader,\n CardTitle,\n Skeleton,\n IllustratedEmptyState,\n PagePurpose,\n} 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 // The URL path `:workspaceId` (when present) intentionally overrides the active\n // context. WorkspaceContextPathSync rewrites this segment on a context switch so\n // the override can't point at a stale workspace. (BOFF-2805 follow-up)\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-text-secondary\">\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-text-secondary\">\n {tWithFallback(t, 'activityList.description', 'Track workspace activity')}\n </p>\n </div>\n\n <PagePurpose>\n {tWithFallback(\n t,\n 'activityList.purpose',\n 'This is the audit trail for the workspace — a running log of who did what and when. Use it to catch up after time away, confirm a change went through, or investigate when and by whom a project or member was modified.'\n )}\n </PagePurpose>\n\n {isLoading ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <CardContent className=\"py-8 text-sm text-text-muted\">\n {tWithFallback(t, 'activityList.loading', 'Loading activity…')}\n </CardContent>\n </GlassCard>\n ) : error ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <CardContent className=\"py-8 text-sm text-status-error-text\">\n {error instanceof Error\n ? error.message\n : tWithFallback(t, 'activityList.loadError', 'Failed to load activity')}\n </CardContent>\n </GlassCard>\n ) : (activities?.length ?? 0) === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={tWithFallback(t, 'activityList.emptyTitle', 'No recent activity')}\n description={tWithFallback(\n t,\n 'activityList.emptyDescription',\n 'Recent workspace actions will appear here as your team creates, updates, and manages work.'\n )}\n />\n ) : (\n <div className=\"space-y-3\">\n {activities?.map((item) => (\n <GlassCard key={item.id} treatment=\"insight\" className=\"border-border-seam\">\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-text-muted\">\n <p>\n {tWithFallback(t, 'activityList.labelAction', 'Action')}:{' '}\n <span className=\"text-text-primary\">{item.action}</span>\n </p>\n {item.resourceType && (\n <p>\n {tWithFallback(t, 'activityList.labelResource', 'Resource')}:{' '}\n <span className=\"text-text-primary\">{item.resourceType}</span>\n </p>\n )}\n <p>\n {tWithFallback(t, 'activityList.labelWhen', 'When')}:{' '}\n <span className=\"text-text-primary\">{formatDate(item.timestamp)}</span>\n </p>\n <p>\n {tWithFallback(t, 'activityList.labelActor', 'Actor')}:{' '}\n <span className=\"break-all text-text-primary\">{item.userId}</span>\n </p>\n </CardContent>\n </GlassCard>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;AAiBA,SAAgB,IAAmB;CACjC,IAAM,EAAE,SAAM,GAAS,EAKjB,EAAE,mBAAgB,GAAoC;AAC5D,GAAsB,uBAAuB;EAAE;EAAa,eAAe;EAAM,CAAC;CAClF,IAAM,EAAE,MAAM,GAAY,cAAW,aAAU,EAAqB,EAAY,EAC1E,EAAE,oBAAiB,WAAW,MAAuB,GAAyB;AA8BpF,QA5BI,IAEA,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,GAAD,EAAU,WAAU,cAAe,CAAA,EACnC,kBAAC,GAAD,EAAU,WAAU,QAAS,CAAA,CACzB;MAIL,IAoBH,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cACX,EAAc,GAAG,sBAAsB,WAAW;IAChD,CAAA,EACL,kBAAC,KAAD;IAAG,WAAU;cACV,EAAc,GAAG,4BAA4B,2BAA2B;IACvE,CAAA,CACA,EAAA,CAAA;GAEN,kBAAC,GAAD,EAAA,UACG,EACC,GACA,wBACA,2NACD,EACW,CAAA;GAEb,IACC,kBAAC,GAAD;IAAW,WAAU;IAAQ,WAAU;cACrC,kBAAC,GAAD;KAAa,WAAU;eACpB,EAAc,GAAG,wBAAwB,oBAAoB;KAClD,CAAA;IACJ,CAAA,GACV,IACF,kBAAC,GAAD;IAAW,WAAU;IAAQ,WAAU;cACrC,kBAAC,GAAD;KAAa,WAAU;eACpB,aAAiB,QACd,EAAM,UACN,EAAc,GAAG,0BAA0B,0BAA0B;KAC7D,CAAA;IACJ,CAAA,IACT,GAAY,UAAU,OAAO,IAChC,kBAAC,GAAD;IACE,cAAa;IACb,OAAO,EAAc,GAAG,2BAA2B,qBAAqB;IACxE,aAAa,EACX,GACA,iCACA,6FACD;IACD,CAAA,GAEF,kBAAC,OAAD;IAAK,WAAU;cACZ,GAAY,KAAK,MAChB,kBAAC,GAAD;KAAyB,WAAU;KAAU,WAAU;eAAvD,CACE,kBAAC,GAAD;MAAY,WAAU;gBACpB,kBAAC,GAAD;OAAW,WAAU;iBAAa,EAAK,eAAe,EAAK;OAAmB,CAAA;MACnE,CAAA,EACb,kBAAC,GAAD;MAAa,WAAU;gBAAvB;OACE,kBAAC,KAAD,EAAA,UAAA;QACG,EAAc,GAAG,4BAA4B,SAAS;QAAC;QAAE;QAC1D,kBAAC,QAAD;SAAM,WAAU;mBAAqB,EAAK;SAAc,CAAA;QACtD,EAAA,CAAA;OACH,EAAK,gBACJ,kBAAC,KAAD,EAAA,UAAA;QACG,EAAc,GAAG,8BAA8B,WAAW;QAAC;QAAE;QAC9D,kBAAC,QAAD;SAAM,WAAU;mBAAqB,EAAK;SAAoB,CAAA;QAC5D,EAAA,CAAA;OAEN,kBAAC,KAAD,EAAA,UAAA;QACG,EAAc,GAAG,0BAA0B,OAAO;QAAC;QAAE;QACtD,kBAAC,QAAD;SAAM,WAAU;mBAAqB,EAAW,EAAK,UAAU;SAAQ,CAAA;QACrE,EAAA,CAAA;OACJ,kBAAC,KAAD,EAAA,UAAA;QACG,EAAc,GAAG,2BAA2B,QAAQ;QAAC;QAAE;QACxD,kBAAC,QAAD;SAAM,WAAU;mBAA+B,EAAK;SAAc,CAAA;QAChE,EAAA,CAAA;OACQ;QACJ;OAxBI,EAAK,GAwBT,CACZ;IACE,CAAA;GAEJ;MA3FJ,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,MAAD;IAAI,WAAU;cACX,EAAc,GAAG,6BAA6B,gBAAgB;IAC5D,CAAA,EACL,kBAAC,KAAD;IAAG,WAAU;cACV,EACC,GACA,wCACA,8CACD;IACC,CAAA,CACA;;EACF,CAAA"}
@@ -3,26 +3,26 @@ import { tWithFallback as t } from "../utils/i18n.js";
3
3
  import { useWorkspacesPageView as n } from "../hooks/useWorkspacesPageView.js";
4
4
  import { useCreateWorkspace as ee } from "../hooks/useWorkspaceMutations.js";
5
5
  import { useMyOrganizations as r, useMyTenants as i } from "../hooks/useTenants.js";
6
- import { generateSlug as a } from "../utils/slug.js";
7
- import { useOrgsWithPermission as te } from "../hooks/useOrgsWithPermission.js";
6
+ import { generateSlug as te } from "../utils/slug.js";
7
+ import { useOrgsWithPermission as a } from "../hooks/useOrgsWithPermission.js";
8
8
  import { useEffect as o, useMemo as s } from "react";
9
9
  import { AlertCircle as c, ArrowLeft as l } from "lucide-react";
10
10
  import { jsx as u, jsxs as d } from "react/jsx-runtime";
11
- import { Button as f, CardContent as p, CardDescription as m, CardHeader as ne, CardTitle as h, GlassCard as g, Skeleton as _ } from "@burdenoff/fe-libs/ui";
12
- import { Link as v, useNavigate as y } from "react-router-dom";
13
- import { useUpgradePrompt as b } from "@burdenoff/fe-libs/shared/hooks";
14
- import { AccessDenied as x, UpgradeInlineBanner as S } from "@burdenoff/fe-libs/shared/components";
15
- import { useI18n as C } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
16
- import { useForm as w, z as T } from "@burdenoff/fe-libs/form";
11
+ import { Button as f, CardContent as p, CardDescription as m, CardHeader as h, CardTitle as ne, GlassCard as g, PagePurpose as _, Skeleton as v } from "@burdenoff/fe-libs/ui";
12
+ import { Link as y, useNavigate as b } from "react-router-dom";
13
+ import { useUpgradePrompt as x } from "@burdenoff/fe-libs/shared/hooks";
14
+ import { AccessDenied as S, UpgradeInlineBanner as C } from "@burdenoff/fe-libs/shared/components";
15
+ import { useI18n as w } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
16
+ import { useForm as T, z as E } from "@burdenoff/fe-libs/form";
17
17
  //#region src/pages/CreateWorkspacePage.tsx
18
- function E() {
18
+ function D() {
19
19
  n("workspaces.create");
20
- let { t: E } = C(), { isFree: D, approachingLimits: O, plan: k } = b({ resource: "workspaces" }), A = O[0], j = !!A && typeof A.limit == "number" && A.current >= A.limit, re = D && !!A, M = s(() => T.object({
21
- name: T.string().min(2, t(E, "createWorkspace.validation.nameMin", "Name must be at least 2 characters")).max(100),
22
- slug: T.string().min(2, t(E, "createWorkspace.validation.slugMin", "Slug must be at least 2 characters")).max(50).regex(/^[a-z0-9-]+$/, t(E, "createWorkspace.validation.slugFormat", "Slug can only contain lowercase letters, numbers, and hyphens")),
23
- tenantId: T.string().min(1, t(E, "createWorkspace.validation.tenantRequired", "Please select a tenant")),
24
- organizationId: T.string().min(1, t(E, "createWorkspace.validation.organizationRequired", "Please select an organization"))
25
- }), [E]), N = y(), { basePath: P = "/" } = e(), { mutate: F, isPending: I } = ee(), { data: L, isLoading: R, error: z } = i(), { data: B, isLoading: V, error: H } = r(), U = s(() => L?.items ?? [], [L]), W = s(() => B?.items ?? [], [B]), G = s(() => U.find((e) => e.type === "SHARED" || e.slug === "burdenoff-shared")?.id ?? U[0]?.id ?? "", [U]), K = w({
20
+ let { t: D } = w(), { isFree: O, approachingLimits: re, plan: ie } = x({ resource: "workspaces" }), k = re[0], A = !!k && typeof k.limit == "number" && k.current >= k.limit, j = O && !!k, M = s(() => E.object({
21
+ name: E.string().min(2, t(D, "createWorkspace.validation.nameMin", "Name must be at least 2 characters")).max(100),
22
+ slug: E.string().min(2, t(D, "createWorkspace.validation.slugMin", "Slug must be at least 2 characters")).max(50).regex(/^[a-z0-9-]+$/, t(D, "createWorkspace.validation.slugFormat", "Slug can only contain lowercase letters, numbers, and hyphens")),
23
+ tenantId: E.string().min(1, t(D, "createWorkspace.validation.tenantRequired", "Please select a tenant")),
24
+ organizationId: E.string().min(1, t(D, "createWorkspace.validation.organizationRequired", "Please select an organization"))
25
+ }), [D]), N = b(), { basePath: P = "/" } = e(), { mutate: F, isPending: I } = ee(), { data: L, isLoading: R, error: z } = i(), { data: B, isLoading: V, error: H } = r(), U = s(() => L?.items ?? [], [L]), W = s(() => B?.items ?? [], [B]), G = s(() => U.find((e) => e.type === "SHARED" || e.slug === "burdenoff-shared")?.id ?? U[0]?.id ?? "", [U]), K = T({
26
26
  schema: M,
27
27
  defaultValues: {
28
28
  name: "",
@@ -30,13 +30,13 @@ function E() {
30
30
  tenantId: "",
31
31
  organizationId: ""
32
32
  }
33
- }), q = K.watch("tenantId"), J = K.watch("name"), { allowedIds: Y, loading: X, isError: Z } = te(s(() => W.map((e) => e.id), [W]), "workspace", "create"), Q = s(() => q ? W.filter((e) => e.tenantId === q) : [], [q, W]), $ = s(() => Z ? Q : Q.filter((e) => Y.has(e.id)), [
33
+ }), q = K.watch("tenantId"), J = K.watch("name"), { allowedIds: Y, loading: X, isError: Z } = a(s(() => W.map((e) => e.id), [W]), "workspace", "create"), Q = s(() => q ? W.filter((e) => e.tenantId === q) : [], [q, W]), $ = s(() => Z ? Q : Q.filter((e) => Y.has(e.id)), [
34
34
  Q,
35
35
  Y,
36
36
  Z
37
37
  ]);
38
38
  o(() => {
39
- K.setValue("slug", J ? a(J) : "");
39
+ K.setValue("slug", J ? te(J) : "");
40
40
  }, [J, K]), o(() => {
41
41
  K.setValue("organizationId", "");
42
42
  }, [q, K]), o(() => {
@@ -51,7 +51,7 @@ function E() {
51
51
  shouldTouch: !1
52
52
  });
53
53
  }, [$, K]);
54
- let ie = (e) => {
54
+ let ae = (e) => {
55
55
  F({
56
56
  name: e.name,
57
57
  slug: e.slug,
@@ -60,53 +60,58 @@ function E() {
60
60
  }, { onSuccess: (e) => {
61
61
  N(`${P}/${e.id}`);
62
62
  } });
63
- }, ae = Y.size > 0, oe = R || V || X, se = !z && !H && W.length > 0;
64
- return !oe && !Z && se && !ae ? /* @__PURE__ */ d("div", {
63
+ }, oe = Y.size > 0, se = R || V || X, ce = !z && !H && W.length > 0;
64
+ return !se && !Z && ce && !oe ? /* @__PURE__ */ d("div", {
65
65
  className: "p-6",
66
- children: [/* @__PURE__ */ d(v, {
66
+ children: [/* @__PURE__ */ d(y, {
67
67
  to: `${P}/list`,
68
68
  className: "inline-flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors mb-6",
69
- children: [/* @__PURE__ */ u(l, { size: 20 }), t(E, "createWorkspace.backToWorkspaces", "Back to Workspaces")]
70
- }), /* @__PURE__ */ u(x, {
69
+ children: [/* @__PURE__ */ u(l, { size: 20 }), t(D, "createWorkspace.backToWorkspaces", "Back to Workspaces")]
70
+ }), /* @__PURE__ */ u(S, {
71
71
  variant: "card",
72
- title: t(E, "createWorkspace.permissionRequiredTitle", "Permission Required"),
73
- description: t(E, "createWorkspace.permissionRequiredDescription", "You don't have permission to create workspaces in any of your organizations."),
74
- details: t(E, "createWorkspace.permissionRequiredDetails", "Required: workspace:create"),
72
+ title: t(D, "createWorkspace.permissionRequiredTitle", "Permission Required"),
73
+ description: t(D, "createWorkspace.permissionRequiredDescription", "You don't have permission to create workspaces in any of your organizations."),
74
+ details: t(D, "createWorkspace.permissionRequiredDetails", "Required: workspace:create"),
75
75
  primaryAction: {
76
- label: t(E, "createWorkspace.goBack", "Go Back"),
76
+ label: t(D, "createWorkspace.goBack", "Go Back"),
77
77
  onClick: () => N(`${P}/list`)
78
78
  }
79
79
  })]
80
80
  }) : /* @__PURE__ */ d("div", {
81
81
  className: "space-y-4 sm:space-y-6 p-3 sm:p-6",
82
82
  children: [
83
- /* @__PURE__ */ d(v, {
83
+ /* @__PURE__ */ d(y, {
84
84
  to: `${P}/list`,
85
85
  className: "inline-flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
86
- children: [/* @__PURE__ */ u(l, { size: 20 }), t(E, "createWorkspace.backToWorkspaces", "Back to Workspaces")]
86
+ children: [/* @__PURE__ */ u(l, { size: 20 }), t(D, "createWorkspace.backToWorkspaces", "Back to Workspaces")]
87
87
  }),
88
- re && /* @__PURE__ */ u("div", {
88
+ /* @__PURE__ */ u("div", {
89
89
  className: "max-w-2xl mx-auto w-full",
90
- children: /* @__PURE__ */ u(S, {
90
+ children: /* @__PURE__ */ u(_, { children: t(D, "createWorkspace.purpose", "Create a workspace to give a team, client or initiative its own dedicated space — with its own projects, members, agents and activity, kept separate from the rest. Give it a clear name, pick the organization that owns it, and you can invite people and add projects right after.") })
91
+ }),
92
+ j && /* @__PURE__ */ u("div", {
93
+ className: "max-w-2xl mx-auto w-full",
94
+ children: /* @__PURE__ */ u(C, {
91
95
  resource: "workspaces",
92
- current: A.current,
93
- limit: A.limit ?? void 0,
94
- severity: j ? "critical" : void 0,
95
- message: j ? t(E, "createWorkspace.upgradeCapMessage", `You've used all workspaces in the ${k?.planName ?? "free"} plan.`) : t(E, "createWorkspace.upgradeApproachingMessage", "Upgrade to create more workspaces.")
96
+ current: k.current,
97
+ limit: k.limit ?? void 0,
98
+ severity: A ? "critical" : void 0,
99
+ message: A ? t(D, "createWorkspace.upgradeCapMessage", `You've used all workspaces in the ${ie?.planName ?? "free"} plan.`) : t(D, "createWorkspace.upgradeApproachingMessage", "Upgrade to create more workspaces.")
96
100
  })
97
101
  }),
98
102
  /* @__PURE__ */ d(g, {
99
- treatment: "plain",
103
+ treatment: "glass",
104
+ glow: !0,
100
105
  className: "max-w-2xl mx-auto border-border-seam",
101
- children: [/* @__PURE__ */ d(ne, { children: [/* @__PURE__ */ u(h, { children: t(E, "createWorkspace.title", "Create New Workspace") }), /* @__PURE__ */ u(m, { children: t(E, "createWorkspace.subtitle", "Set up a new workspace for your team") })] }), /* @__PURE__ */ d(p, { children: [Z && /* @__PURE__ */ d("div", {
106
+ children: [/* @__PURE__ */ d(h, { children: [/* @__PURE__ */ u(ne, { children: t(D, "createWorkspace.title", "Create New Workspace") }), /* @__PURE__ */ u(m, { children: t(D, "createWorkspace.subtitle", "Set up a new workspace for your team") })] }), /* @__PURE__ */ d(p, { children: [Z && /* @__PURE__ */ d("div", {
102
107
  role: "alert",
103
108
  className: "mb-4 flex items-start gap-2 rounded-md border border-warning/30 bg-warning/10 p-3 text-sm text-text-primary",
104
109
  children: [/* @__PURE__ */ u(c, {
105
110
  size: 16,
106
111
  className: "mt-0.5 shrink-0 text-warning"
107
- }), /* @__PURE__ */ u("span", { children: t(E, "createWorkspace.permissionCheckUnavailable", "We couldn't verify your workspace-create permissions just now, so the organization list isn't filtered. If you submit and don't have access, the request will be rejected and you can retry.") })]
112
+ }), /* @__PURE__ */ u("span", { children: t(D, "createWorkspace.permissionCheckUnavailable", "We couldn't verify your workspace-create permissions just now, so the organization list isn't filtered. If you submit and don't have access, the request will be rejected and you can retry.") })]
108
113
  }), /* @__PURE__ */ d("form", {
109
- onSubmit: K.handleSubmit(ie),
114
+ onSubmit: K.handleSubmit(ae),
110
115
  className: "space-y-6",
111
116
  children: [
112
117
  /* @__PURE__ */ d("div", {
@@ -115,17 +120,17 @@ function E() {
115
120
  /* @__PURE__ */ u("label", {
116
121
  htmlFor: "workspace-name",
117
122
  className: "text-sm font-medium text-text-primary",
118
- children: t(E, "createWorkspace.nameLabel", "Workspace Name *")
123
+ children: t(D, "createWorkspace.nameLabel", "Workspace Name *")
119
124
  }),
120
125
  /* @__PURE__ */ u("input", {
121
126
  id: "workspace-name",
122
- placeholder: t(E, "createWorkspace.namePlaceholder", "My Workspace"),
127
+ placeholder: t(D, "createWorkspace.namePlaceholder", "My Workspace"),
123
128
  className: "h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary",
124
129
  ...K.register("name")
125
130
  }),
126
131
  /* @__PURE__ */ u("p", {
127
132
  className: "text-xs text-text-secondary",
128
- children: t(E, "createWorkspace.nameHint", "A descriptive name for your workspace")
133
+ children: t(D, "createWorkspace.nameHint", "A descriptive name for your workspace")
129
134
  }),
130
135
  K.formState.errors.name?.message && /* @__PURE__ */ u("p", {
131
136
  className: "text-sm text-status-error-text",
@@ -139,17 +144,17 @@ function E() {
139
144
  /* @__PURE__ */ u("label", {
140
145
  htmlFor: "workspace-slug",
141
146
  className: "text-sm font-medium text-text-primary",
142
- children: t(E, "createWorkspace.slugLabel", "Slug *")
147
+ children: t(D, "createWorkspace.slugLabel", "Slug *")
143
148
  }),
144
149
  /* @__PURE__ */ u("input", {
145
150
  id: "workspace-slug",
146
- placeholder: t(E, "createWorkspace.slugPlaceholder", "my-workspace"),
151
+ placeholder: t(D, "createWorkspace.slugPlaceholder", "my-workspace"),
147
152
  className: "h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary",
148
153
  ...K.register("slug")
149
154
  }),
150
155
  /* @__PURE__ */ u("p", {
151
156
  className: "text-xs text-text-secondary",
152
- children: t(E, "createWorkspace.slugHint", "URL-friendly identifier (auto-generated, but you can edit it)")
157
+ children: t(D, "createWorkspace.slugHint", "URL-friendly identifier (auto-generated, but you can edit it)")
153
158
  }),
154
159
  K.formState.errors.slug?.message && /* @__PURE__ */ u("p", {
155
160
  className: "text-sm text-status-error-text",
@@ -163,21 +168,21 @@ function E() {
163
168
  /* @__PURE__ */ u("label", {
164
169
  htmlFor: "workspace-tenant",
165
170
  className: "text-sm font-medium text-text-primary",
166
- children: t(E, "createWorkspace.tenantLabel", "Tenant *")
171
+ children: t(D, "createWorkspace.tenantLabel", "Tenant *")
167
172
  }),
168
- R ? /* @__PURE__ */ u(_, { className: "h-10 w-full" }) : z ? /* @__PURE__ */ d("div", {
173
+ R ? /* @__PURE__ */ u(v, { className: "h-10 w-full" }) : z ? /* @__PURE__ */ d("div", {
169
174
  className: "flex items-center gap-2 text-sm text-status-error-text",
170
- children: [/* @__PURE__ */ u(c, { size: 16 }), t(E, "createWorkspace.failedToLoadTenants", "Failed to load tenants")]
175
+ children: [/* @__PURE__ */ u(c, { size: 16 }), t(D, "createWorkspace.failedToLoadTenants", "Failed to load tenants")]
171
176
  }) : U.length === 0 ? /* @__PURE__ */ u("div", {
172
177
  className: "text-sm text-text-secondary",
173
- children: t(E, "createWorkspace.noTenantsAvailable", "No tenants available. Contact your administrator.")
178
+ children: t(D, "createWorkspace.noTenantsAvailable", "No tenants available. Contact your administrator.")
174
179
  }) : /* @__PURE__ */ d("select", {
175
180
  id: "workspace-tenant",
176
181
  className: "h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary",
177
182
  ...K.register("tenantId"),
178
183
  children: [/* @__PURE__ */ u("option", {
179
184
  value: "",
180
- children: t(E, "createWorkspace.selectTenantPlaceholder", "Select a tenant")
185
+ children: t(D, "createWorkspace.selectTenantPlaceholder", "Select a tenant")
181
186
  }), U.map((e) => /* @__PURE__ */ u("option", {
182
187
  value: e.id,
183
188
  children: e.name
@@ -185,7 +190,7 @@ function E() {
185
190
  }),
186
191
  /* @__PURE__ */ u("p", {
187
192
  className: "text-xs text-text-secondary",
188
- children: t(E, "createWorkspace.tenantHint", "Select which tenant this workspace belongs to")
193
+ children: t(D, "createWorkspace.tenantHint", "Select which tenant this workspace belongs to")
189
194
  }),
190
195
  K.formState.errors.tenantId?.message && /* @__PURE__ */ u("p", {
191
196
  className: "text-sm text-status-error-text",
@@ -199,14 +204,14 @@ function E() {
199
204
  /* @__PURE__ */ u("label", {
200
205
  htmlFor: "workspace-organization",
201
206
  className: "text-sm font-medium text-text-primary",
202
- children: t(E, "createWorkspace.organizationLabel", "Organization *")
207
+ children: t(D, "createWorkspace.organizationLabel", "Organization *")
203
208
  }),
204
- V || X ? /* @__PURE__ */ u(_, { className: "h-10 w-full" }) : H ? /* @__PURE__ */ d("div", {
209
+ V || X ? /* @__PURE__ */ u(v, { className: "h-10 w-full" }) : H ? /* @__PURE__ */ d("div", {
205
210
  className: "flex items-center gap-2 text-sm text-status-error-text",
206
- children: [/* @__PURE__ */ u(c, { size: 16 }), t(E, "createWorkspace.failedToLoadOrganizations", "Failed to load organizations")]
211
+ children: [/* @__PURE__ */ u(c, { size: 16 }), t(D, "createWorkspace.failedToLoadOrganizations", "Failed to load organizations")]
207
212
  }) : q ? $.length === 0 ? /* @__PURE__ */ u("div", {
208
213
  className: "text-sm text-text-secondary",
209
- children: t(E, "createWorkspace.noOrganizationsFound", "No organizations found for this tenant")
214
+ children: t(D, "createWorkspace.noOrganizationsFound", "No organizations found for this tenant")
210
215
  }) : /* @__PURE__ */ d("select", {
211
216
  id: "workspace-organization",
212
217
  className: "h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary",
@@ -214,18 +219,18 @@ function E() {
214
219
  ...K.register("organizationId"),
215
220
  children: [/* @__PURE__ */ u("option", {
216
221
  value: "",
217
- children: t(E, "createWorkspace.selectOrganizationPlaceholder", "Select an organization")
222
+ children: t(D, "createWorkspace.selectOrganizationPlaceholder", "Select an organization")
218
223
  }), $.map((e) => /* @__PURE__ */ u("option", {
219
224
  value: e.id,
220
225
  children: e.name
221
226
  }, e.id))]
222
227
  }) : /* @__PURE__ */ u("div", {
223
228
  className: "text-sm text-text-secondary",
224
- children: t(E, "createWorkspace.selectTenantFirst", "Please select a tenant first")
229
+ children: t(D, "createWorkspace.selectTenantFirst", "Please select a tenant first")
225
230
  }),
226
231
  /* @__PURE__ */ u("p", {
227
232
  className: "text-xs text-text-secondary",
228
- children: t(E, "createWorkspace.organizationHint", "Select which organization owns this workspace")
233
+ children: t(D, "createWorkspace.organizationHint", "Select which organization owns this workspace")
229
234
  }),
230
235
  K.formState.errors.organizationId?.message && /* @__PURE__ */ u("p", {
231
236
  className: "text-sm text-status-error-text",
@@ -240,12 +245,12 @@ function E() {
240
245
  variant: "outline",
241
246
  onClick: () => N(`${P}/list`),
242
247
  disabled: I,
243
- children: t(E, "createWorkspace.cancel", "Cancel")
248
+ children: t(D, "createWorkspace.cancel", "Cancel")
244
249
  }), /* @__PURE__ */ u(f, {
245
250
  type: "submit",
246
- disabled: I || R || V || X || j,
247
- title: j ? t(E, "createWorkspace.disabledAtCap", "Workspace limit reached — upgrade your plan to create more.") : void 0,
248
- children: I ? t(E, "createWorkspace.creating", "Creating...") : t(E, "createWorkspace.submit", "Create Workspace")
251
+ disabled: I || R || V || X || A,
252
+ title: A ? t(D, "createWorkspace.disabledAtCap", "Workspace limit reached — upgrade your plan to create more.") : void 0,
253
+ children: I ? t(D, "createWorkspace.creating", "Creating...") : t(D, "createWorkspace.submit", "Create Workspace")
249
254
  })]
250
255
  })
251
256
  ]
@@ -255,6 +260,6 @@ function E() {
255
260
  });
256
261
  }
257
262
  //#endregion
258
- export { E as CreateWorkspacePage };
263
+ export { D as CreateWorkspacePage };
259
264
 
260
265
  //# sourceMappingURL=CreateWorkspacePage.js.map