@burdenoff/microfe-workspaces 2026.520.1 → 2026.529.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 (234) hide show
  1. package/dist/WorkspacesRoot.js +4 -1
  2. package/dist/WorkspacesRoot.js.map +1 -1
  3. package/dist/WorkspacesRoutes.js +4 -4
  4. package/dist/WorkspacesRoutes.js.map +1 -1
  5. package/dist/components/CreateProjectDialog.js +1 -1
  6. package/dist/components/CreateProjectDialog.js.map +1 -1
  7. package/dist/components/CreateWorkspaceDialog.js +2 -2
  8. package/dist/components/CreateWorkspaceDialog.js.map +1 -1
  9. package/dist/components/InviteMemberDialog.js +2 -2
  10. package/dist/components/InviteMemberDialog.js.map +1 -1
  11. package/dist/components/MemberListItem.js +71 -86
  12. package/dist/components/MemberListItem.js.map +1 -1
  13. package/dist/components/ProjectCard.js +12 -10
  14. package/dist/components/ProjectCard.js.map +1 -1
  15. package/dist/components/WorkspaceCard.js.map +1 -1
  16. package/dist/components/WorkspacesErrorBoundary.js +12 -4
  17. package/dist/components/WorkspacesErrorBoundary.js.map +1 -1
  18. package/dist/components/tags/ProjectTagsWidget.js +248 -0
  19. package/dist/components/tags/ProjectTagsWidget.js.map +1 -0
  20. package/dist/hooks/useOrgsWithPermission.js +1 -1
  21. package/dist/hooks/useOrgsWithPermission.js.map +1 -1
  22. package/dist/hooks/useWorkspacesEventEmitter.js.map +1 -1
  23. package/dist/hooks/useWorkspacesPageView.js +6 -4
  24. package/dist/hooks/useWorkspacesPageView.js.map +1 -1
  25. package/dist/pages/CreateWorkspacePage.js +239 -224
  26. package/dist/pages/CreateWorkspacePage.js.map +1 -1
  27. package/dist/pages/InviteAcceptancePage.js +28 -28
  28. package/dist/pages/InviteAcceptancePage.js.map +1 -1
  29. package/dist/pages/MembersListPage.js +380 -352
  30. package/dist/pages/MembersListPage.js.map +1 -1
  31. package/dist/pages/ProjectDetailPage.js +96 -97
  32. package/dist/pages/ProjectDetailPage.js.map +1 -1
  33. package/dist/pages/ProjectsListPage.js +307 -304
  34. package/dist/pages/ProjectsListPage.js.map +1 -1
  35. package/dist/pages/WorkspaceSettingsPage.js +94 -91
  36. package/dist/pages/WorkspaceSettingsPage.js.map +1 -1
  37. package/dist/pages/WorkspacesListPage.js +1 -1
  38. package/dist/pages/WorkspacesListPage.js.map +1 -1
  39. package/dist/pages/dashboard/DashboardCustomizer.js +68 -68
  40. package/dist/pages/dashboard/DashboardCustomizer.js.map +1 -1
  41. package/dist/pages/dashboard/DashboardGrid.js +52 -41
  42. package/dist/pages/dashboard/DashboardGrid.js.map +1 -1
  43. package/dist/pages/dashboard/DashboardPage.js +74 -65
  44. package/dist/pages/dashboard/DashboardPage.js.map +1 -1
  45. package/dist/pages/dashboard/WidgetWrapper.js +3 -3
  46. package/dist/pages/dashboard/WidgetWrapper.js.map +1 -1
  47. package/dist/pages/dashboard/config.js +126 -30
  48. package/dist/pages/dashboard/config.js.map +1 -1
  49. package/dist/pages/dashboard/hooks/useDashboardData.js +39 -2
  50. package/dist/pages/dashboard/hooks/useDashboardData.js.map +1 -1
  51. package/dist/pages/dashboard/widgets/AgentsWidget.js +109 -0
  52. package/dist/pages/dashboard/widgets/AgentsWidget.js.map +1 -0
  53. package/dist/pages/dashboard/widgets/GroupsWidget.js +6 -5
  54. package/dist/pages/dashboard/widgets/GroupsWidget.js.map +1 -1
  55. package/dist/pages/dashboard/widgets/MembersWidget.js +6 -6
  56. package/dist/pages/dashboard/widgets/MembersWidget.js.map +1 -1
  57. package/dist/pages/dashboard/widgets/ProjectsWidget.js +8 -7
  58. package/dist/pages/dashboard/widgets/ProjectsWidget.js.map +1 -1
  59. package/dist/pages/dashboard/widgets/QuickActionsWidget.js +72 -18
  60. package/dist/pages/dashboard/widgets/QuickActionsWidget.js.map +1 -1
  61. package/dist/pages/dashboard/widgets/RecentActivityWidget.js +3 -3
  62. package/dist/pages/dashboard/widgets/RecentActivityWidget.js.map +1 -1
  63. package/dist/pages/dashboard/widgets/SessionsWidget.js +78 -0
  64. package/dist/pages/dashboard/widgets/SessionsWidget.js.map +1 -0
  65. package/dist/pages/dashboard/widgets/StorageWidget.js +35 -20
  66. package/dist/pages/dashboard/widgets/StorageWidget.js.map +1 -1
  67. package/dist/pages/dashboard/widgets/TagCloudWidget.js +2 -2
  68. package/dist/pages/dashboard/widgets/TagCloudWidget.js.map +1 -1
  69. package/dist/pages/dashboard/widgets/TipsWidget.js +81 -22
  70. package/dist/pages/dashboard/widgets/TipsWidget.js.map +1 -1
  71. package/dist/pages/dashboard/widgets/UpcomingEventsWidget.js +6 -5
  72. package/dist/pages/dashboard/widgets/UpcomingEventsWidget.js.map +1 -1
  73. package/dist/pages/dashboard/widgets/VibesWidget.js +64 -0
  74. package/dist/pages/dashboard/widgets/VibesWidget.js.map +1 -0
  75. package/dist/pages/dashboard/widgets/WelcomeWidget.js +5 -5
  76. package/dist/pages/dashboard/widgets/WelcomeWidget.js.map +1 -1
  77. package/dist/pages/dashboard/widgets/WorkflowStatsWidget.js +3 -3
  78. package/dist/pages/dashboard/widgets/WorkflowStatsWidget.js.map +1 -1
  79. package/dist/pages/dashboard/widgets/WorkspacesWidget.js +6 -5
  80. package/dist/pages/dashboard/widgets/WorkspacesWidget.js.map +1 -1
  81. package/dist/providers/WorkspacesProvider.js +1 -1
  82. package/dist/providers/WorkspacesProvider.js.map +1 -1
  83. package/dist/store/workspacesStore.js.map +1 -1
  84. package/dist/utils/formatters.js +21 -16
  85. package/dist/utils/formatters.js.map +1 -1
  86. package/dist/utils/telemetryError.js +1 -1
  87. package/dist/utils/telemetryError.js.map +1 -1
  88. package/package.json +7 -7
  89. package/dist/WorkspacesRoot.d.ts +0 -35
  90. package/dist/WorkspacesRoot.d.ts.map +0 -1
  91. package/dist/WorkspacesRoutes.d.ts +0 -10
  92. package/dist/WorkspacesRoutes.d.ts.map +0 -1
  93. package/dist/components/CreateProjectDialog.d.ts +0 -6
  94. package/dist/components/CreateProjectDialog.d.ts.map +0 -1
  95. package/dist/components/CreateWorkspaceDialog.d.ts +0 -2
  96. package/dist/components/CreateWorkspaceDialog.d.ts.map +0 -1
  97. package/dist/components/InviteMemberDialog.d.ts +0 -7
  98. package/dist/components/InviteMemberDialog.d.ts.map +0 -1
  99. package/dist/components/MemberListItem.d.ts +0 -11
  100. package/dist/components/MemberListItem.d.ts.map +0 -1
  101. package/dist/components/ProjectCard.d.ts +0 -13
  102. package/dist/components/ProjectCard.d.ts.map +0 -1
  103. package/dist/components/WorkspaceCard.d.ts +0 -8
  104. package/dist/components/WorkspaceCard.d.ts.map +0 -1
  105. package/dist/components/WorkspacesErrorBoundary.d.ts +0 -27
  106. package/dist/components/WorkspacesErrorBoundary.d.ts.map +0 -1
  107. package/dist/components/index.d.ts +0 -8
  108. package/dist/components/index.d.ts.map +0 -1
  109. package/dist/constants/permissions.d.ts +0 -33
  110. package/dist/constants/permissions.d.ts.map +0 -1
  111. package/dist/generated/global-operations.d.ts +0 -319
  112. package/dist/generated/global-operations.d.ts.map +0 -1
  113. package/dist/generated/global-types.d.ts +0 -23527
  114. package/dist/generated/global-types.d.ts.map +0 -1
  115. package/dist/generated/wspace-operations.d.ts +0 -2300
  116. package/dist/generated/wspace-operations.d.ts.map +0 -1
  117. package/dist/generated/wspace-types.d.ts +0 -57851
  118. package/dist/generated/wspace-types.d.ts.map +0 -1
  119. package/dist/hooks/index.d.ts +0 -8
  120. package/dist/hooks/index.d.ts.map +0 -1
  121. package/dist/hooks/useMemberMutations.d.ts +0 -61
  122. package/dist/hooks/useMemberMutations.d.ts.map +0 -1
  123. package/dist/hooks/useOrgsWithPermission.d.ts +0 -7
  124. package/dist/hooks/useOrgsWithPermission.d.ts.map +0 -1
  125. package/dist/hooks/useProjectMutations.d.ts +0 -26
  126. package/dist/hooks/useProjectMutations.d.ts.map +0 -1
  127. package/dist/hooks/useProjects.d.ts +0 -16
  128. package/dist/hooks/useProjects.d.ts.map +0 -1
  129. package/dist/hooks/useScopedNavigation.d.ts +0 -4
  130. package/dist/hooks/useScopedNavigation.d.ts.map +0 -1
  131. package/dist/hooks/useTenants.d.ts +0 -13
  132. package/dist/hooks/useTenants.d.ts.map +0 -1
  133. package/dist/hooks/useWorkspaceActivity.d.ts +0 -12
  134. package/dist/hooks/useWorkspaceActivity.d.ts.map +0 -1
  135. package/dist/hooks/useWorkspaceMembers.d.ts +0 -24
  136. package/dist/hooks/useWorkspaceMembers.d.ts.map +0 -1
  137. package/dist/hooks/useWorkspaceMutations.d.ts +0 -36
  138. package/dist/hooks/useWorkspaceMutations.d.ts.map +0 -1
  139. package/dist/hooks/useWorkspacePermissions.d.ts +0 -29
  140. package/dist/hooks/useWorkspacePermissions.d.ts.map +0 -1
  141. package/dist/hooks/useWorkspaceRoles.d.ts +0 -8
  142. package/dist/hooks/useWorkspaceRoles.d.ts.map +0 -1
  143. package/dist/hooks/useWorkspaces.d.ts +0 -21
  144. package/dist/hooks/useWorkspaces.d.ts.map +0 -1
  145. package/dist/hooks/useWorkspacesEventEmitter.d.ts +0 -18
  146. package/dist/hooks/useWorkspacesEventEmitter.d.ts.map +0 -1
  147. package/dist/hooks/useWorkspacesPageView.d.ts +0 -27
  148. package/dist/hooks/useWorkspacesPageView.d.ts.map +0 -1
  149. package/dist/index.d.ts +0 -33
  150. package/dist/index.d.ts.map +0 -1
  151. package/dist/pages/ActivityListPage.d.ts +0 -2
  152. package/dist/pages/ActivityListPage.d.ts.map +0 -1
  153. package/dist/pages/CreateWorkspacePage.d.ts +0 -2
  154. package/dist/pages/CreateWorkspacePage.d.ts.map +0 -1
  155. package/dist/pages/InviteAcceptancePage.d.ts +0 -6
  156. package/dist/pages/InviteAcceptancePage.d.ts.map +0 -1
  157. package/dist/pages/MembersListPage.d.ts +0 -2
  158. package/dist/pages/MembersListPage.d.ts.map +0 -1
  159. package/dist/pages/ProjectDetailPage.d.ts +0 -2
  160. package/dist/pages/ProjectDetailPage.d.ts.map +0 -1
  161. package/dist/pages/ProjectsListPage.d.ts +0 -2
  162. package/dist/pages/ProjectsListPage.d.ts.map +0 -1
  163. package/dist/pages/WorkspaceDetailPage.d.ts +0 -2
  164. package/dist/pages/WorkspaceDetailPage.d.ts.map +0 -1
  165. package/dist/pages/WorkspaceSettingsPage.d.ts +0 -2
  166. package/dist/pages/WorkspaceSettingsPage.d.ts.map +0 -1
  167. package/dist/pages/WorkspacesListPage.d.ts +0 -2
  168. package/dist/pages/WorkspacesListPage.d.ts.map +0 -1
  169. package/dist/pages/dashboard/DashboardCustomizer.d.ts +0 -12
  170. package/dist/pages/dashboard/DashboardCustomizer.d.ts.map +0 -1
  171. package/dist/pages/dashboard/DashboardGrid.d.ts +0 -8
  172. package/dist/pages/dashboard/DashboardGrid.d.ts.map +0 -1
  173. package/dist/pages/dashboard/DashboardPage.d.ts +0 -14
  174. package/dist/pages/dashboard/DashboardPage.d.ts.map +0 -1
  175. package/dist/pages/dashboard/WidgetWrapper.d.ts +0 -17
  176. package/dist/pages/dashboard/WidgetWrapper.d.ts.map +0 -1
  177. package/dist/pages/dashboard/config.d.ts +0 -9
  178. package/dist/pages/dashboard/config.d.ts.map +0 -1
  179. package/dist/pages/dashboard/hooks/useDashboardData.d.ts +0 -9
  180. package/dist/pages/dashboard/hooks/useDashboardData.d.ts.map +0 -1
  181. package/dist/pages/dashboard/hooks/useDashboardPreferences.d.ts +0 -4
  182. package/dist/pages/dashboard/hooks/useDashboardPreferences.d.ts.map +0 -1
  183. package/dist/pages/dashboard/types.d.ts +0 -145
  184. package/dist/pages/dashboard/types.d.ts.map +0 -1
  185. package/dist/pages/dashboard/widgets/GroupsWidget.d.ts +0 -4
  186. package/dist/pages/dashboard/widgets/GroupsWidget.d.ts.map +0 -1
  187. package/dist/pages/dashboard/widgets/MembersWidget.d.ts +0 -4
  188. package/dist/pages/dashboard/widgets/MembersWidget.d.ts.map +0 -1
  189. package/dist/pages/dashboard/widgets/ProjectsWidget.d.ts +0 -4
  190. package/dist/pages/dashboard/widgets/ProjectsWidget.d.ts.map +0 -1
  191. package/dist/pages/dashboard/widgets/QuickActionsWidget.d.ts +0 -4
  192. package/dist/pages/dashboard/widgets/QuickActionsWidget.d.ts.map +0 -1
  193. package/dist/pages/dashboard/widgets/RecentActivityWidget.d.ts +0 -4
  194. package/dist/pages/dashboard/widgets/RecentActivityWidget.d.ts.map +0 -1
  195. package/dist/pages/dashboard/widgets/StorageWidget.d.ts +0 -4
  196. package/dist/pages/dashboard/widgets/StorageWidget.d.ts.map +0 -1
  197. package/dist/pages/dashboard/widgets/SystemHealthWidget.d.ts +0 -4
  198. package/dist/pages/dashboard/widgets/SystemHealthWidget.d.ts.map +0 -1
  199. package/dist/pages/dashboard/widgets/SystemHealthWidget.js +0 -59
  200. package/dist/pages/dashboard/widgets/SystemHealthWidget.js.map +0 -1
  201. package/dist/pages/dashboard/widgets/TagCloudWidget.d.ts +0 -4
  202. package/dist/pages/dashboard/widgets/TagCloudWidget.d.ts.map +0 -1
  203. package/dist/pages/dashboard/widgets/TipsWidget.d.ts +0 -4
  204. package/dist/pages/dashboard/widgets/TipsWidget.d.ts.map +0 -1
  205. package/dist/pages/dashboard/widgets/UpcomingEventsWidget.d.ts +0 -4
  206. package/dist/pages/dashboard/widgets/UpcomingEventsWidget.d.ts.map +0 -1
  207. package/dist/pages/dashboard/widgets/WelcomeWidget.d.ts +0 -4
  208. package/dist/pages/dashboard/widgets/WelcomeWidget.d.ts.map +0 -1
  209. package/dist/pages/dashboard/widgets/WorkflowStatsWidget.d.ts +0 -4
  210. package/dist/pages/dashboard/widgets/WorkflowStatsWidget.d.ts.map +0 -1
  211. package/dist/pages/dashboard/widgets/WorkspacesWidget.d.ts +0 -4
  212. package/dist/pages/dashboard/widgets/WorkspacesWidget.d.ts.map +0 -1
  213. package/dist/providers/WorkspacesProvider.d.ts +0 -13
  214. package/dist/providers/WorkspacesProvider.d.ts.map +0 -1
  215. package/dist/store/workspacesStore.d.ts +0 -82
  216. package/dist/store/workspacesStore.d.ts.map +0 -1
  217. package/dist/types/index.d.ts +0 -280
  218. package/dist/types/index.d.ts.map +0 -1
  219. package/dist/utils/formatters.d.ts +0 -60
  220. package/dist/utils/formatters.d.ts.map +0 -1
  221. package/dist/utils/i18n.d.ts +0 -13
  222. package/dist/utils/i18n.d.ts.map +0 -1
  223. package/dist/utils/index.d.ts +0 -3
  224. package/dist/utils/index.d.ts.map +0 -1
  225. package/dist/utils/nativeBridge.d.ts +0 -3
  226. package/dist/utils/nativeBridge.d.ts.map +0 -1
  227. package/dist/utils/projectTags.d.ts +0 -6
  228. package/dist/utils/projectTags.d.ts.map +0 -1
  229. package/dist/utils/slug.d.ts +0 -13
  230. package/dist/utils/slug.d.ts.map +0 -1
  231. package/dist/utils/telemetryError.d.ts +0 -2
  232. package/dist/utils/telemetryError.d.ts.map +0 -1
  233. package/dist/utils/tokenHelpers.d.ts +0 -114
  234. package/dist/utils/tokenHelpers.d.ts.map +0 -1
@@ -11,19 +11,19 @@ import { useWorkspacePermissions as d } from "../hooks/useWorkspacePermissions.j
11
11
  import { useEffect as f, useMemo as p, useState as m } from "react";
12
12
  import { FolderKanban as te, Grid3x3 as ne, List as re, Plus as h, Search as ie } from "lucide-react";
13
13
  import { Fragment as ae, jsx as g, jsxs as _ } from "react/jsx-runtime";
14
- import { Button as v, Card as y, CardContent as b, Input as oe, Select as x, SelectContent as S, SelectItem as C, SelectTrigger as w, SelectValue as T, Skeleton as E } from "@burdenoff/fe-libs/ui";
15
- import { useParams as se } from "react-router-dom";
16
- import { useDebounce as ce } from "@burdenoff/fe-libs/shared/hooks";
17
- import { useI18n as le } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
18
- import { TagBadge as ue } from "@burdenoff/fe-libs/tag";
14
+ import { Button as v, Card as y, CardContent as b, Input as oe, PageContainer as se, Select as x, SelectContent as S, SelectItem as C, SelectTrigger as w, SelectValue as T, Skeleton as E } from "@burdenoff/fe-libs/ui";
15
+ import { useParams as ce } from "react-router-dom";
16
+ import { useDebounce as le } from "@burdenoff/fe-libs/shared/hooks";
17
+ import { useI18n as ue } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
18
+ import { TagBadge as de } from "@burdenoff/fe-libs/tag";
19
19
  //#region src/pages/ProjectsListPage.tsx
20
20
  function D() {
21
- let { t: D } = le(), { workspaceId: O } = se();
21
+ let { t: D } = ue(), { workspaceId: O } = ce();
22
22
  n("workspaces.projects", {
23
23
  workspaceId: O,
24
24
  requireParams: !0
25
25
  });
26
- let { viewMode: k, setViewMode: A, projectFilters: j, setProjectFilters: M, clearProjectFilters: de, selectedProjectIds: N, toggleProjectSelection: P, clearProjectSelection: F, openCreateProjectDialog: fe, isCreateProjectDialogOpen: pe } = e(), [I, L] = m(j.search || ""), [R, z] = m([]), [B, V] = m(!0), H = ce(I, 500);
26
+ let { viewMode: k, setViewMode: A, projectFilters: j, setProjectFilters: M, clearProjectFilters: fe, selectedProjectIds: N, toggleProjectSelection: P, clearProjectSelection: F, openCreateProjectDialog: pe, isCreateProjectDialogOpen: me } = e(), [I, L] = m(j.search || ""), [R, z] = m([]), [B, V] = m(!0), H = le(I, 500);
27
27
  f(() => {
28
28
  M({ search: H });
29
29
  }, [H, M]), f(() => {
@@ -67,8 +67,8 @@ function D() {
67
67
  U?.hasMore,
68
68
  j,
69
69
  O
70
- ]), { mutateAsync: me } = o(O), { mutateAsync: he } = c(O), { mutateAsync: ge } = s(O), q = p(() => K?.items.filter((e) => N.has(e.id)) ?? [], [K?.items, N]), J = p(() => q.filter((e) => !e.archived), [q]), Y = p(() => q.filter((e) => e.archived), [q]), X = (K?.items.length ?? 0) > 0 && (K?.items ?? []).every((e) => N.has(e.id)), _e = (K?.items ?? []).some((e) => N.has(e.id)) && !X, { canCreateProject: ve, canDeleteProject: Z, canArchiveProject: Q, isLoading: ye } = d();
71
- if (ye) return /* @__PURE__ */ _("div", {
70
+ ]), { mutateAsync: he } = o(O), { mutateAsync: ge } = c(O), { mutateAsync: _e } = s(O), q = p(() => K?.items.filter((e) => N.has(e.id)) ?? [], [K?.items, N]), J = p(() => q.filter((e) => !e.archived), [q]), Y = p(() => q.filter((e) => e.archived), [q]), X = (K?.items.length ?? 0) > 0 && (K?.items ?? []).every((e) => N.has(e.id)), ve = (K?.items ?? []).some((e) => N.has(e.id)) && !X, { canCreateProject: ye, canDeleteProject: be, canArchiveProject: Z, isLoading: xe } = d();
71
+ if (xe) return /* @__PURE__ */ _("div", {
72
72
  className: "space-y-4 p-6",
73
73
  children: [/* @__PURE__ */ g(E, { className: "h-10 w-1/3" }), /* @__PURE__ */ _("div", {
74
74
  className: "grid grid-cols-1 md:grid-cols-3 gap-4",
@@ -79,329 +79,332 @@ function D() {
79
79
  ]
80
80
  })]
81
81
  });
82
- let be = () => {
83
- fe({});
84
- }, xe = (e) => {
82
+ let Q = () => {
83
+ pe({});
84
+ }, Se = (e) => {
85
85
  if (e === "all") {
86
86
  let e = { ...j };
87
87
  delete e.status, M(e);
88
88
  } else M({ status: e });
89
- }, Se = (e) => {
89
+ }, Ce = (e) => {
90
90
  if (e === "all") {
91
91
  let e = { ...j };
92
92
  delete e.archived, M(e);
93
93
  } else M({ archived: e === "true" });
94
94
  }, $ = (e) => {
95
95
  z((t) => t.some((t) => t.tagId === e.tagId) ? t.filter((t) => t.tagId !== e.tagId) : [...t, e]);
96
- }, Ce = () => {
97
- L(""), z([]), V(!0), de();
98
- }, we = (e) => {
96
+ }, we = () => {
97
+ L(""), z([]), V(!0), fe();
98
+ }, Te = (e) => {
99
99
  (K?.items ?? []).forEach((t) => {
100
100
  e !== N.has(t.id) && P(t.id);
101
101
  });
102
102
  };
103
- return /* @__PURE__ */ _("div", {
104
- className: "space-y-4 sm:space-y-6 p-3 sm:p-6",
105
- children: [
106
- /* @__PURE__ */ _("div", {
107
- className: "flex flex-col sm:flex-row sm:items-center justify-between gap-4",
108
- children: [/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("h1", {
109
- className: "text-2xl sm:text-3xl font-bold",
110
- children: t(D, "projectsList.pageTitle", "Projects")
111
- }), /* @__PURE__ */ g("p", {
112
- className: "text-muted-foreground",
113
- children: t(D, "projectsList.pageSubtitle", "Manage and organize your projects")
114
- })] }), /* @__PURE__ */ _("div", {
115
- className: "flex items-center gap-2",
116
- children: [/* @__PURE__ */ _("div", {
117
- className: "flex items-center gap-1 border rounded-lg p-1",
118
- children: [/* @__PURE__ */ g(v, {
119
- variant: k === "grid" ? "secondary" : "ghost",
120
- size: "sm",
121
- onClick: () => A("grid"),
122
- className: "h-8 w-8 p-0",
123
- "aria-label": t(D, "projectsList.gridViewAriaLabel", "Show projects in grid view"),
124
- children: /* @__PURE__ */ g(ne, { size: 16 })
125
- }), /* @__PURE__ */ g(v, {
126
- variant: k === "list" ? "secondary" : "ghost",
127
- size: "sm",
128
- onClick: () => A("list"),
129
- className: "h-8 w-8 p-0",
130
- "aria-label": t(D, "projectsList.listViewAriaLabel", "Show projects in list view"),
131
- children: /* @__PURE__ */ g(re, { size: 16 })
132
- })]
133
- }), ve && /* @__PURE__ */ _(v, {
134
- onClick: be,
135
- children: [/* @__PURE__ */ g(h, { className: "h-4 w-4 sm:mr-2" }), /* @__PURE__ */ g("span", {
136
- className: "hidden sm:inline",
137
- children: t(D, "projectsList.createProject", "Create Project")
138
- })]
139
- })]
140
- })]
141
- }),
142
- /* @__PURE__ */ _("div", {
143
- className: "flex flex-col sm:flex-row gap-3",
144
- children: [
145
- /* @__PURE__ */ _("div", {
146
- className: "relative flex-1",
147
- children: [/* @__PURE__ */ g(ie, {
148
- className: "absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground",
149
- size: 18
150
- }), /* @__PURE__ */ g(oe, {
151
- placeholder: t(D, "projectsList.searchPlaceholder", "Search projects..."),
152
- value: I,
153
- onChange: (e) => L(e.target.value),
154
- className: "pl-[3.25rem]"
155
- })]
156
- }),
157
- /* @__PURE__ */ _(x, {
158
- value: j.status || "all",
159
- onValueChange: xe,
160
- children: [/* @__PURE__ */ g(w, {
161
- className: "w-full sm:w-[180px]",
162
- children: /* @__PURE__ */ g(T, { placeholder: t(D, "projectsList.filterByStatus", "Filter by status") })
163
- }), /* @__PURE__ */ _(S, { children: [
164
- /* @__PURE__ */ g(C, {
165
- value: "all",
166
- children: t(D, "projectsList.statusAll", "All Statuses")
167
- }),
168
- /* @__PURE__ */ g(C, {
169
- value: "ACTIVE",
170
- children: t(D, "projectsList.statusActive", "Active")
171
- }),
172
- /* @__PURE__ */ g(C, {
173
- value: "INACTIVE",
174
- children: t(D, "projectsList.statusInactive", "Inactive")
175
- })
176
- ] })]
177
- }),
178
- /* @__PURE__ */ _(x, {
179
- value: j.archived === void 0 ? "all" : j.archived ? "true" : "false",
180
- onValueChange: Se,
181
- children: [/* @__PURE__ */ g(w, {
182
- className: "w-full sm:w-[180px]",
183
- children: /* @__PURE__ */ g(T, { placeholder: t(D, "projectsList.filterByArchive", "Filter by archive") })
184
- }), /* @__PURE__ */ _(S, { children: [
185
- /* @__PURE__ */ g(C, {
186
- value: "all",
187
- children: t(D, "projectsList.archiveAll", "All Projects")
188
- }),
189
- /* @__PURE__ */ g(C, {
190
- value: "false",
191
- children: t(D, "projectsList.archiveActiveProjects", "Active Projects")
192
- }),
193
- /* @__PURE__ */ g(C, {
194
- value: "true",
195
- children: t(D, "projectsList.archiveArchived", "Archived")
196
- })
197
- ] })]
198
- }),
199
- (j.search || j.status || j.archived !== void 0 || R.length > 0) && /* @__PURE__ */ g(v, {
200
- variant: "outline",
201
- onClick: Ce,
202
- children: t(D, "projectsList.clearFilters", "Clear Filters")
203
- })
204
- ]
205
- }),
206
- R.length > 0 && /* @__PURE__ */ _("div", {
207
- className: "flex flex-col gap-3 rounded-lg border border-border bg-card px-4 py-3",
208
- children: [/* @__PURE__ */ _("div", {
209
- className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",
210
- children: [/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
211
- className: "text-sm font-medium",
212
- children: t(D, "projectsList.activeTagFilters", "Active tag filters")
103
+ return /* @__PURE__ */ g(se, {
104
+ padded: !1,
105
+ children: /* @__PURE__ */ _("div", {
106
+ className: "space-y-4 sm:space-y-6 p-3 sm:p-6",
107
+ children: [
108
+ /* @__PURE__ */ _("div", {
109
+ className: "flex flex-col sm:flex-row sm:items-center justify-between gap-4",
110
+ children: [/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("h1", {
111
+ className: "text-2xl sm:text-3xl font-bold",
112
+ children: t(D, "projectsList.pageTitle", "Projects")
213
113
  }), /* @__PURE__ */ g("p", {
214
- className: "text-xs text-muted-foreground",
215
- children: t(D, "projectsList.activeTagFiltersDescription", "Click a project tag to add or remove it from the current filter set.")
216
- })] }), /* @__PURE__ */ _(x, {
217
- value: B ? "all" : "any",
218
- onValueChange: (e) => V(e === "all"),
219
- children: [/* @__PURE__ */ g(w, {
220
- className: "w-full sm:w-[180px]",
221
- children: /* @__PURE__ */ g(T, { placeholder: t(D, "projectsList.tagMatchMode", "Tag match mode") })
222
- }), /* @__PURE__ */ _(S, { children: [/* @__PURE__ */ g(C, {
223
- value: "all",
224
- children: t(D, "projectsList.tagMatchAll", "Match all tags")
225
- }), /* @__PURE__ */ g(C, {
226
- value: "any",
227
- children: t(D, "projectsList.tagMatchAny", "Match any tag")
228
- })] })]
229
- })]
230
- }), /* @__PURE__ */ g("div", {
231
- className: "flex flex-wrap gap-2",
232
- children: R.map((e) => /* @__PURE__ */ g(ue, {
233
- id: e.tagId,
234
- label: e.label,
235
- color: e.color ?? void 0,
236
- icon: e.icon ?? void 0,
237
- description: e.description ?? void 0,
238
- removable: !0,
239
- onRemove: () => $(e),
240
- size: "sm"
241
- }, e.tagId))
242
- })]
243
- }),
244
- G && /* @__PURE__ */ g(y, {
245
- className: "border-destructive",
246
- children: /* @__PURE__ */ g(b, {
247
- className: "pt-6",
248
- children: /* @__PURE__ */ _("div", {
249
- className: "flex flex-col items-center justify-center py-8 text-center",
250
- children: [/* @__PURE__ */ g("p", {
251
- className: "text-destructive font-semibold mb-2",
252
- children: t(D, "projectsList.errorLoading", "Error loading projects")
253
- }), /* @__PURE__ */ g("p", {
254
- className: "text-sm text-muted-foreground",
255
- children: G instanceof Error ? G.message : t(D, "projectsList.unknownError", "An unknown error occurred")
114
+ className: "text-muted-foreground",
115
+ children: t(D, "projectsList.pageSubtitle", "Manage and organize your projects")
116
+ })] }), /* @__PURE__ */ _("div", {
117
+ className: "flex items-center gap-2",
118
+ children: [/* @__PURE__ */ _("div", {
119
+ className: "flex items-center gap-1 border rounded-lg p-1",
120
+ children: [/* @__PURE__ */ g(v, {
121
+ variant: k === "grid" ? "secondary" : "ghost",
122
+ size: "sm",
123
+ onClick: () => A("grid"),
124
+ className: "size-8 p-0",
125
+ "aria-label": t(D, "projectsList.gridViewAriaLabel", "Show projects in grid view"),
126
+ children: /* @__PURE__ */ g(ne, { size: 16 })
127
+ }), /* @__PURE__ */ g(v, {
128
+ variant: k === "list" ? "secondary" : "ghost",
129
+ size: "sm",
130
+ onClick: () => A("list"),
131
+ className: "size-8 p-0",
132
+ "aria-label": t(D, "projectsList.listViewAriaLabel", "Show projects in list view"),
133
+ children: /* @__PURE__ */ g(re, { size: 16 })
134
+ })]
135
+ }), ye && /* @__PURE__ */ _(v, {
136
+ onClick: Q,
137
+ children: [/* @__PURE__ */ g(h, { className: "size-4 sm:mr-2" }), /* @__PURE__ */ g("span", {
138
+ className: "hidden sm:inline",
139
+ children: t(D, "projectsList.createProject", "Create Project")
140
+ })]
256
141
  })]
257
- })
258
- })
259
- }),
260
- W && /* @__PURE__ */ g("div", {
261
- className: "grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4",
262
- children: Array.from({ length: 6 }).map((e, t) => /* @__PURE__ */ g(y, { children: /* @__PURE__ */ g(b, {
263
- className: "pt-6",
264
- children: /* @__PURE__ */ _("div", {
265
- className: "space-y-3",
266
- children: [
267
- /* @__PURE__ */ g(E, { className: "h-12 w-12 rounded-lg" }),
268
- /* @__PURE__ */ g(E, { className: "h-4 w-3/4" }),
269
- /* @__PURE__ */ g(E, { className: "h-4 w-1/2" })
270
- ]
271
- })
272
- }) }, t))
273
- }),
274
- !W && !G && K?.items.length === 0 && /* @__PURE__ */ g(y, { children: /* @__PURE__ */ g(b, {
275
- className: "pt-6",
276
- children: /* @__PURE__ */ _("div", {
277
- className: "flex flex-col items-center justify-center py-12 text-center",
142
+ })]
143
+ }),
144
+ /* @__PURE__ */ _("div", {
145
+ className: "flex flex-col sm:flex-row gap-3",
278
146
  children: [
279
- /* @__PURE__ */ g("div", {
280
- className: "rounded-full bg-muted p-6 mb-4",
281
- children: /* @__PURE__ */ g(te, {
282
- size: 48,
283
- className: "text-muted-foreground"
284
- })
147
+ /* @__PURE__ */ _("div", {
148
+ className: "relative flex-1",
149
+ children: [/* @__PURE__ */ g(ie, {
150
+ className: "absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground",
151
+ size: 18
152
+ }), /* @__PURE__ */ g(oe, {
153
+ placeholder: t(D, "projectsList.searchPlaceholder", "Search projects..."),
154
+ value: I,
155
+ onChange: (e) => L(e.target.value),
156
+ className: "pl-[3.25rem]"
157
+ })]
285
158
  }),
286
- /* @__PURE__ */ g("h3", {
287
- className: "text-lg font-semibold mb-2",
288
- children: t(D, "projectsList.noProjectsFound", "No projects found")
159
+ /* @__PURE__ */ _(x, {
160
+ value: j.status || "all",
161
+ onValueChange: Se,
162
+ children: [/* @__PURE__ */ g(w, {
163
+ className: "w-full sm:w-[180px]",
164
+ children: /* @__PURE__ */ g(T, { placeholder: t(D, "projectsList.filterByStatus", "Filter by status") })
165
+ }), /* @__PURE__ */ _(S, { children: [
166
+ /* @__PURE__ */ g(C, {
167
+ value: "all",
168
+ children: t(D, "projectsList.statusAll", "All Statuses")
169
+ }),
170
+ /* @__PURE__ */ g(C, {
171
+ value: "ACTIVE",
172
+ children: t(D, "projectsList.statusActive", "Active")
173
+ }),
174
+ /* @__PURE__ */ g(C, {
175
+ value: "INACTIVE",
176
+ children: t(D, "projectsList.statusInactive", "Inactive")
177
+ })
178
+ ] })]
289
179
  }),
290
- /* @__PURE__ */ g("p", {
291
- className: "text-muted-foreground max-w-sm mb-4",
292
- children: j.search ? t(D, "projectsList.adjustSearchOrFilters", "Try adjusting your search or filters") : t(D, "projectsList.createFirstProject", "Create your first project to get started organizing your work")
180
+ /* @__PURE__ */ _(x, {
181
+ value: j.archived === void 0 ? "all" : j.archived ? "true" : "false",
182
+ onValueChange: Ce,
183
+ children: [/* @__PURE__ */ g(w, {
184
+ className: "w-full sm:w-[180px]",
185
+ children: /* @__PURE__ */ g(T, { placeholder: t(D, "projectsList.filterByArchive", "Filter by archive") })
186
+ }), /* @__PURE__ */ _(S, { children: [
187
+ /* @__PURE__ */ g(C, {
188
+ value: "all",
189
+ children: t(D, "projectsList.archiveAll", "All Projects")
190
+ }),
191
+ /* @__PURE__ */ g(C, {
192
+ value: "false",
193
+ children: t(D, "projectsList.archiveActiveProjects", "Active Projects")
194
+ }),
195
+ /* @__PURE__ */ g(C, {
196
+ value: "true",
197
+ children: t(D, "projectsList.archiveArchived", "Archived")
198
+ })
199
+ ] })]
293
200
  }),
294
- !j.search && ve && /* @__PURE__ */ _(v, {
295
- onClick: be,
296
- children: [/* @__PURE__ */ g(h, {
297
- size: 16,
298
- className: "mr-2"
299
- }), t(D, "projectsList.createProject", "Create Project")]
201
+ (j.search || j.status || j.archived !== void 0 || R.length > 0) && /* @__PURE__ */ g(v, {
202
+ variant: "outline",
203
+ onClick: we,
204
+ children: t(D, "projectsList.clearFilters", "Clear Filters")
300
205
  })
301
206
  ]
302
- })
303
- }) }),
304
- !W && !G && K && K.items.length > 0 && /* @__PURE__ */ _(ae, { children: [
305
- /* @__PURE__ */ _("div", {
306
- className: "flex flex-col gap-3 rounded-lg border bg-card p-4 sm:flex-row sm:items-center sm:justify-between",
307
- children: [/* @__PURE__ */ _("label", {
308
- className: "flex items-center gap-2 text-sm text-foreground",
309
- children: [/* @__PURE__ */ g("input", {
310
- type: "checkbox",
311
- checked: X,
312
- ref: (e) => {
313
- e && (e.indeterminate = _e && !X);
314
- },
315
- onChange: (e) => we(e.target.checked),
316
- "aria-label": t(D, "projectsList.selectAllAriaLabel", "Select all projects"),
317
- className: "h-4 w-4 rounded border-border text-primary"
318
- }), /* @__PURE__ */ g("span", { children: t(D, "projectsList.selectAllVisible", "Select all visible") })]
319
- }), /* @__PURE__ */ _("div", {
320
- className: "flex flex-wrap items-center gap-2",
321
- children: [
322
- /* @__PURE__ */ _("span", {
207
+ }),
208
+ R.length > 0 && /* @__PURE__ */ _("div", {
209
+ className: "flex flex-col gap-3 rounded-lg border border-border bg-card px-4 py-3",
210
+ children: [/* @__PURE__ */ _("div", {
211
+ className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",
212
+ children: [/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
213
+ className: "text-sm font-medium",
214
+ children: t(D, "projectsList.activeTagFilters", "Active tag filters")
215
+ }), /* @__PURE__ */ g("p", {
216
+ className: "text-xs text-muted-foreground",
217
+ children: t(D, "projectsList.activeTagFiltersDescription", "Click a project tag to add or remove it from the current filter set.")
218
+ })] }), /* @__PURE__ */ _(x, {
219
+ value: B ? "all" : "any",
220
+ onValueChange: (e) => V(e === "all"),
221
+ children: [/* @__PURE__ */ g(w, {
222
+ className: "w-full sm:w-[180px]",
223
+ children: /* @__PURE__ */ g(T, { placeholder: t(D, "projectsList.tagMatchMode", "Tag match mode") })
224
+ }), /* @__PURE__ */ _(S, { children: [/* @__PURE__ */ g(C, {
225
+ value: "all",
226
+ children: t(D, "projectsList.tagMatchAll", "Match all tags")
227
+ }), /* @__PURE__ */ g(C, {
228
+ value: "any",
229
+ children: t(D, "projectsList.tagMatchAny", "Match any tag")
230
+ })] })]
231
+ })]
232
+ }), /* @__PURE__ */ g("div", {
233
+ className: "flex flex-wrap gap-2",
234
+ children: R.map((e) => /* @__PURE__ */ g(de, {
235
+ id: e.tagId,
236
+ label: e.label,
237
+ color: e.color ?? void 0,
238
+ icon: e.icon ?? void 0,
239
+ description: e.description ?? void 0,
240
+ removable: !0,
241
+ onRemove: () => $(e),
242
+ size: "sm"
243
+ }, e.tagId))
244
+ })]
245
+ }),
246
+ G && /* @__PURE__ */ g(y, {
247
+ className: "border-destructive",
248
+ children: /* @__PURE__ */ g(b, {
249
+ className: "pt-6",
250
+ children: /* @__PURE__ */ _("div", {
251
+ className: "flex flex-col items-center justify-center py-8 text-center",
252
+ children: [/* @__PURE__ */ g("p", {
253
+ className: "text-destructive font-semibold mb-2",
254
+ children: t(D, "projectsList.errorLoading", "Error loading projects")
255
+ }), /* @__PURE__ */ g("p", {
323
256
  className: "text-sm text-muted-foreground",
324
- children: [
325
- N.size,
326
- " ",
327
- t(D, "projectsList.selected", "selected")
328
- ]
257
+ children: G instanceof Error ? G.message : t(D, "projectsList.unknownError", "An unknown error occurred")
258
+ })]
259
+ })
260
+ })
261
+ }),
262
+ W && /* @__PURE__ */ g("div", {
263
+ className: "grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4",
264
+ children: Array.from({ length: 6 }).map((e, t) => /* @__PURE__ */ g(y, { children: /* @__PURE__ */ g(b, {
265
+ className: "pt-6",
266
+ children: /* @__PURE__ */ _("div", {
267
+ className: "space-y-3",
268
+ children: [
269
+ /* @__PURE__ */ g(E, { className: "size-12 rounded-lg" }),
270
+ /* @__PURE__ */ g(E, { className: "h-4 w-3/4" }),
271
+ /* @__PURE__ */ g(E, { className: "h-4 w-1/2" })
272
+ ]
273
+ })
274
+ }) }, t))
275
+ }),
276
+ !W && !G && K?.items.length === 0 && /* @__PURE__ */ g(y, { children: /* @__PURE__ */ g(b, {
277
+ className: "pt-6",
278
+ children: /* @__PURE__ */ _("div", {
279
+ className: "flex flex-col items-center justify-center py-12 text-center",
280
+ children: [
281
+ /* @__PURE__ */ g("div", {
282
+ className: "rounded-full bg-muted p-6 mb-4",
283
+ children: /* @__PURE__ */ g(te, {
284
+ size: 48,
285
+ className: "text-muted-foreground"
286
+ })
329
287
  }),
330
- N.size > 0 && /* @__PURE__ */ g(v, {
331
- variant: "ghost",
332
- size: "sm",
333
- onClick: F,
334
- children: t(D, "projectsList.clearSelection", "Clear selection")
288
+ /* @__PURE__ */ g("h3", {
289
+ className: "text-lg font-semibold mb-2",
290
+ children: t(D, "projectsList.noProjectsFound", "No projects found")
335
291
  }),
336
- O && Q && /* @__PURE__ */ _(v, {
337
- variant: "outline",
338
- size: "sm",
339
- onClick: async () => {
340
- J.length !== 0 && (await Promise.allSettled(J.map((e) => me(e.id))), F());
341
- },
342
- disabled: J.length === 0,
343
- children: [t(D, "projectsList.archiveSelected", "Archive Selected"), J.length > 0 ? ` (${J.length})` : ""]
292
+ /* @__PURE__ */ g("p", {
293
+ className: "text-muted-foreground max-w-sm mb-4",
294
+ children: j.search ? t(D, "projectsList.adjustSearchOrFilters", "Try adjusting your search or filters") : t(D, "projectsList.createFirstProject", "Create your first project to get started organizing your work")
344
295
  }),
345
- O && Q && /* @__PURE__ */ _(v, {
346
- variant: "outline",
347
- size: "sm",
348
- onClick: async () => {
349
- Y.length !== 0 && (await Promise.allSettled(Y.map((e) => he(e.id))), F());
350
- },
351
- disabled: Y.length === 0,
352
- children: [t(D, "projectsList.unarchiveSelected", "Unarchive Selected"), Y.length > 0 ? ` (${Y.length})` : ""]
353
- }),
354
- O && Z && /* @__PURE__ */ _(v, {
355
- variant: "outline",
356
- size: "sm",
357
- onClick: async () => {
358
- if (q.length === 0) return;
359
- i("medium");
360
- let e = t(D, "projectsList.bulkDeleteConfirmPrefix", "Delete ") + q.length + " " + t(D, "projectsList.bulkDeleteConfirmProject", "selected project") + (q.length === 1 ? "" : t(D, "projectsList.bulkDeleteConfirmPluralSuffix", "s")) + t(D, "projectsList.bulkDeleteConfirmSuffix", "? This cannot be undone."), n = await r({
361
- title: "Delete projects",
362
- message: e,
363
- okButtonTitle: "Delete",
364
- cancelButtonTitle: "Cancel"
365
- });
366
- (n === null ? window.confirm(e) : n) && (await Promise.allSettled(q.map((e) => ge(e.id))), F());
367
- },
368
- disabled: q.length === 0,
369
- className: "text-destructive",
370
- children: [t(D, "projectsList.deleteSelected", "Delete Selected"), q.length > 0 ? ` (${q.length})` : ""]
296
+ !j.search && ye && /* @__PURE__ */ _(v, {
297
+ onClick: Q,
298
+ children: [/* @__PURE__ */ g(h, {
299
+ size: 16,
300
+ className: "mr-2"
301
+ }), t(D, "projectsList.createProject", "Create Project")]
371
302
  })
372
303
  ]
373
- })]
374
- }),
375
- /* @__PURE__ */ g("div", {
376
- className: k === "list" ? "space-y-3" : "grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4",
377
- children: K.items.map((e) => /* @__PURE__ */ g(l, {
378
- project: e,
379
- selected: N.has(e.id),
380
- canArchive: Q,
381
- canDelete: Z,
382
- onTagClick: $,
383
- onToggleSelect: (t) => {
384
- t !== N.has(e.id) && P(e.id);
385
- }
386
- }, e.id))
387
- }),
388
- K.total > K.items.length && /* @__PURE__ */ _("div", {
389
- className: "text-center text-sm text-muted-foreground",
390
- children: [
391
- t(D, "projectsList.showingPrefix", "Showing"),
392
- " ",
393
- K.items.length,
394
- " ",
395
- t(D, "projectsList.showingOf", "of"),
396
- " ",
397
- K.total,
398
- " ",
399
- t(D, "projectsList.showingProjects", "projects")
400
- ]
401
- })
402
- ] }),
403
- pe && /* @__PURE__ */ g(u, { workspaceId: O })
404
- ]
304
+ })
305
+ }) }),
306
+ !W && !G && K && K.items.length > 0 && /* @__PURE__ */ _(ae, { children: [
307
+ /* @__PURE__ */ _("div", {
308
+ className: "flex flex-col gap-3 rounded-lg border bg-card p-4 sm:flex-row sm:items-center sm:justify-between",
309
+ children: [/* @__PURE__ */ _("label", {
310
+ className: "flex items-center gap-2 text-sm text-foreground",
311
+ children: [/* @__PURE__ */ g("input", {
312
+ type: "checkbox",
313
+ checked: X,
314
+ ref: (e) => {
315
+ e && (e.indeterminate = ve && !X);
316
+ },
317
+ onChange: (e) => Te(e.target.checked),
318
+ "aria-label": t(D, "projectsList.selectAllAriaLabel", "Select all projects"),
319
+ className: "size-4 rounded border-border text-primary"
320
+ }), /* @__PURE__ */ g("span", { children: t(D, "projectsList.selectAllVisible", "Select all visible") })]
321
+ }), /* @__PURE__ */ _("div", {
322
+ className: "flex flex-wrap items-center gap-2",
323
+ children: [
324
+ /* @__PURE__ */ _("span", {
325
+ className: "text-sm text-muted-foreground",
326
+ children: [
327
+ N.size,
328
+ " ",
329
+ t(D, "projectsList.selected", "selected")
330
+ ]
331
+ }),
332
+ N.size > 0 && /* @__PURE__ */ g(v, {
333
+ variant: "ghost",
334
+ size: "sm",
335
+ onClick: F,
336
+ children: t(D, "projectsList.clearSelection", "Clear selection")
337
+ }),
338
+ O && Z && /* @__PURE__ */ _(v, {
339
+ variant: "outline",
340
+ size: "sm",
341
+ onClick: async () => {
342
+ J.length !== 0 && (await Promise.allSettled(J.map((e) => he(e.id))), F());
343
+ },
344
+ disabled: J.length === 0,
345
+ children: [t(D, "projectsList.archiveSelected", "Archive Selected"), J.length > 0 ? ` (${J.length})` : ""]
346
+ }),
347
+ O && Z && /* @__PURE__ */ _(v, {
348
+ variant: "outline",
349
+ size: "sm",
350
+ onClick: async () => {
351
+ Y.length !== 0 && (await Promise.allSettled(Y.map((e) => ge(e.id))), F());
352
+ },
353
+ disabled: Y.length === 0,
354
+ children: [t(D, "projectsList.unarchiveSelected", "Unarchive Selected"), Y.length > 0 ? ` (${Y.length})` : ""]
355
+ }),
356
+ O && be && /* @__PURE__ */ _(v, {
357
+ variant: "outline",
358
+ size: "sm",
359
+ onClick: async () => {
360
+ if (q.length === 0) return;
361
+ i("medium");
362
+ let e = t(D, "projectsList.bulkDeleteConfirmPrefix", "Delete ") + q.length + " " + t(D, "projectsList.bulkDeleteConfirmProject", "selected project") + (q.length === 1 ? "" : t(D, "projectsList.bulkDeleteConfirmPluralSuffix", "s")) + t(D, "projectsList.bulkDeleteConfirmSuffix", "? This cannot be undone."), n = await r({
363
+ title: "Delete projects",
364
+ message: e,
365
+ okButtonTitle: "Delete",
366
+ cancelButtonTitle: "Cancel"
367
+ });
368
+ (n === null ? window.confirm(e) : n) && (await Promise.allSettled(q.map((e) => _e(e.id))), F());
369
+ },
370
+ disabled: q.length === 0,
371
+ className: "text-destructive",
372
+ children: [t(D, "projectsList.deleteSelected", "Delete Selected"), q.length > 0 ? ` (${q.length})` : ""]
373
+ })
374
+ ]
375
+ })]
376
+ }),
377
+ /* @__PURE__ */ g("div", {
378
+ className: k === "list" ? "space-y-3" : "grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4",
379
+ children: K.items.map((e) => /* @__PURE__ */ g(l, {
380
+ project: e,
381
+ selected: N.has(e.id),
382
+ canArchive: Z,
383
+ canDelete: be,
384
+ onTagClick: $,
385
+ onToggleSelect: (t) => {
386
+ t !== N.has(e.id) && P(e.id);
387
+ }
388
+ }, e.id))
389
+ }),
390
+ K.total > K.items.length && /* @__PURE__ */ _("div", {
391
+ className: "text-center text-sm text-muted-foreground",
392
+ children: [
393
+ t(D, "projectsList.showingPrefix", "Showing"),
394
+ " ",
395
+ K.items.length,
396
+ " ",
397
+ t(D, "projectsList.showingOf", "of"),
398
+ " ",
399
+ K.total,
400
+ " ",
401
+ t(D, "projectsList.showingProjects", "projects")
402
+ ]
403
+ })
404
+ ] }),
405
+ me && /* @__PURE__ */ g(u, { workspaceId: O })
406
+ ]
407
+ })
405
408
  });
406
409
  }
407
410
  //#endregion