@burdenoff/microfe-workspaces 2026.510.50

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 (260) hide show
  1. package/README.md +88 -0
  2. package/dist/WorkspacesRoot.d.ts +35 -0
  3. package/dist/WorkspacesRoot.d.ts.map +1 -0
  4. package/dist/WorkspacesRoot.js +71 -0
  5. package/dist/WorkspacesRoot.js.map +1 -0
  6. package/dist/WorkspacesRoutes.d.ts +10 -0
  7. package/dist/WorkspacesRoutes.d.ts.map +1 -0
  8. package/dist/WorkspacesRoutes.js +111 -0
  9. package/dist/WorkspacesRoutes.js.map +1 -0
  10. package/dist/components/CreateProjectDialog.d.ts +6 -0
  11. package/dist/components/CreateProjectDialog.d.ts.map +1 -0
  12. package/dist/components/CreateProjectDialog.js +115 -0
  13. package/dist/components/CreateProjectDialog.js.map +1 -0
  14. package/dist/components/CreateWorkspaceDialog.d.ts +2 -0
  15. package/dist/components/CreateWorkspaceDialog.d.ts.map +1 -0
  16. package/dist/components/CreateWorkspaceDialog.js +172 -0
  17. package/dist/components/CreateWorkspaceDialog.js.map +1 -0
  18. package/dist/components/InviteMemberDialog.d.ts +7 -0
  19. package/dist/components/InviteMemberDialog.d.ts.map +1 -0
  20. package/dist/components/InviteMemberDialog.js +148 -0
  21. package/dist/components/InviteMemberDialog.js.map +1 -0
  22. package/dist/components/MemberListItem.d.ts +11 -0
  23. package/dist/components/MemberListItem.d.ts.map +1 -0
  24. package/dist/components/MemberListItem.js +118 -0
  25. package/dist/components/MemberListItem.js.map +1 -0
  26. package/dist/components/ProjectCard.d.ts +13 -0
  27. package/dist/components/ProjectCard.d.ts.map +1 -0
  28. package/dist/components/ProjectCard.js +150 -0
  29. package/dist/components/ProjectCard.js.map +1 -0
  30. package/dist/components/WorkspaceCard.d.ts +8 -0
  31. package/dist/components/WorkspaceCard.d.ts.map +1 -0
  32. package/dist/components/WorkspaceCard.js +79 -0
  33. package/dist/components/WorkspaceCard.js.map +1 -0
  34. package/dist/components/WorkspacesErrorBoundary.d.ts +27 -0
  35. package/dist/components/WorkspacesErrorBoundary.d.ts.map +1 -0
  36. package/dist/components/WorkspacesErrorBoundary.js +136 -0
  37. package/dist/components/WorkspacesErrorBoundary.js.map +1 -0
  38. package/dist/components/index.d.ts +8 -0
  39. package/dist/components/index.d.ts.map +1 -0
  40. package/dist/components/index.js +7 -0
  41. package/dist/constants/permissions.d.ts +33 -0
  42. package/dist/constants/permissions.d.ts.map +1 -0
  43. package/dist/constants/permissions.js +31 -0
  44. package/dist/constants/permissions.js.map +1 -0
  45. package/dist/generated/global-operations.d.ts +279 -0
  46. package/dist/generated/global-operations.d.ts.map +1 -0
  47. package/dist/generated/global-operations.js +103 -0
  48. package/dist/generated/global-operations.js.map +1 -0
  49. package/dist/generated/global-types.d.ts +20714 -0
  50. package/dist/generated/global-types.d.ts.map +1 -0
  51. package/dist/generated/wspace-operations.d.ts +2209 -0
  52. package/dist/generated/wspace-operations.d.ts.map +1 -0
  53. package/dist/generated/wspace-operations.js +576 -0
  54. package/dist/generated/wspace-operations.js.map +1 -0
  55. package/dist/generated/wspace-types.d.ts +54990 -0
  56. package/dist/generated/wspace-types.d.ts.map +1 -0
  57. package/dist/hooks/index.d.ts +8 -0
  58. package/dist/hooks/index.d.ts.map +1 -0
  59. package/dist/hooks/index.js +7 -0
  60. package/dist/hooks/useMemberMutations.d.ts +61 -0
  61. package/dist/hooks/useMemberMutations.d.ts.map +1 -0
  62. package/dist/hooks/useMemberMutations.js +263 -0
  63. package/dist/hooks/useMemberMutations.js.map +1 -0
  64. package/dist/hooks/useProjectMutations.d.ts +26 -0
  65. package/dist/hooks/useProjectMutations.d.ts.map +1 -0
  66. package/dist/hooks/useProjectMutations.js +127 -0
  67. package/dist/hooks/useProjectMutations.js.map +1 -0
  68. package/dist/hooks/useProjects.d.ts +16 -0
  69. package/dist/hooks/useProjects.d.ts.map +1 -0
  70. package/dist/hooks/useProjects.js +103 -0
  71. package/dist/hooks/useProjects.js.map +1 -0
  72. package/dist/hooks/useScopedNavigation.d.ts +4 -0
  73. package/dist/hooks/useScopedNavigation.d.ts.map +1 -0
  74. package/dist/hooks/useScopedNavigation.js +11 -0
  75. package/dist/hooks/useScopedNavigation.js.map +1 -0
  76. package/dist/hooks/useTenants.d.ts +13 -0
  77. package/dist/hooks/useTenants.d.ts.map +1 -0
  78. package/dist/hooks/useTenants.js +47 -0
  79. package/dist/hooks/useTenants.js.map +1 -0
  80. package/dist/hooks/useWorkspaceActivity.d.ts +12 -0
  81. package/dist/hooks/useWorkspaceActivity.d.ts.map +1 -0
  82. package/dist/hooks/useWorkspaceActivity.js +31 -0
  83. package/dist/hooks/useWorkspaceActivity.js.map +1 -0
  84. package/dist/hooks/useWorkspaceMembers.d.ts +24 -0
  85. package/dist/hooks/useWorkspaceMembers.d.ts.map +1 -0
  86. package/dist/hooks/useWorkspaceMembers.js +130 -0
  87. package/dist/hooks/useWorkspaceMembers.js.map +1 -0
  88. package/dist/hooks/useWorkspaceMutations.d.ts +36 -0
  89. package/dist/hooks/useWorkspaceMutations.d.ts.map +1 -0
  90. package/dist/hooks/useWorkspaceMutations.js +119 -0
  91. package/dist/hooks/useWorkspaceMutations.js.map +1 -0
  92. package/dist/hooks/useWorkspacePermissions.d.ts +29 -0
  93. package/dist/hooks/useWorkspacePermissions.d.ts.map +1 -0
  94. package/dist/hooks/useWorkspacePermissions.js +33 -0
  95. package/dist/hooks/useWorkspacePermissions.js.map +1 -0
  96. package/dist/hooks/useWorkspaceRoles.d.ts +8 -0
  97. package/dist/hooks/useWorkspaceRoles.d.ts.map +1 -0
  98. package/dist/hooks/useWorkspaceRoles.js +31 -0
  99. package/dist/hooks/useWorkspaceRoles.js.map +1 -0
  100. package/dist/hooks/useWorkspaces.d.ts +21 -0
  101. package/dist/hooks/useWorkspaces.d.ts.map +1 -0
  102. package/dist/hooks/useWorkspaces.js +75 -0
  103. package/dist/hooks/useWorkspaces.js.map +1 -0
  104. package/dist/hooks/useWorkspacesEventEmitter.d.ts +14 -0
  105. package/dist/hooks/useWorkspacesEventEmitter.d.ts.map +1 -0
  106. package/dist/hooks/useWorkspacesEventEmitter.js +14 -0
  107. package/dist/hooks/useWorkspacesEventEmitter.js.map +1 -0
  108. package/dist/index.d.ts +33 -0
  109. package/dist/index.d.ts.map +1 -0
  110. package/dist/index.js +24 -0
  111. package/dist/pages/ActivityListPage.d.ts +2 -0
  112. package/dist/pages/ActivityListPage.d.ts.map +1 -0
  113. package/dist/pages/ActivityListPage.js +119 -0
  114. package/dist/pages/ActivityListPage.js.map +1 -0
  115. package/dist/pages/CreateWorkspacePage.d.ts +2 -0
  116. package/dist/pages/CreateWorkspacePage.d.ts.map +1 -0
  117. package/dist/pages/CreateWorkspacePage.js +264 -0
  118. package/dist/pages/CreateWorkspacePage.js.map +1 -0
  119. package/dist/pages/InviteAcceptancePage.d.ts +6 -0
  120. package/dist/pages/InviteAcceptancePage.d.ts.map +1 -0
  121. package/dist/pages/InviteAcceptancePage.js +495 -0
  122. package/dist/pages/InviteAcceptancePage.js.map +1 -0
  123. package/dist/pages/MembersListPage.d.ts +2 -0
  124. package/dist/pages/MembersListPage.d.ts.map +1 -0
  125. package/dist/pages/MembersListPage.js +420 -0
  126. package/dist/pages/MembersListPage.js.map +1 -0
  127. package/dist/pages/ProjectDetailPage.d.ts +2 -0
  128. package/dist/pages/ProjectDetailPage.d.ts.map +1 -0
  129. package/dist/pages/ProjectDetailPage.js +361 -0
  130. package/dist/pages/ProjectDetailPage.js.map +1 -0
  131. package/dist/pages/ProjectsListPage.d.ts +2 -0
  132. package/dist/pages/ProjectsListPage.d.ts.map +1 -0
  133. package/dist/pages/ProjectsListPage.js +398 -0
  134. package/dist/pages/ProjectsListPage.js.map +1 -0
  135. package/dist/pages/WorkspaceDetailPage.d.ts +2 -0
  136. package/dist/pages/WorkspaceDetailPage.d.ts.map +1 -0
  137. package/dist/pages/WorkspaceDetailPage.js +230 -0
  138. package/dist/pages/WorkspaceDetailPage.js.map +1 -0
  139. package/dist/pages/WorkspaceSettingsPage.d.ts +2 -0
  140. package/dist/pages/WorkspaceSettingsPage.d.ts.map +1 -0
  141. package/dist/pages/WorkspaceSettingsPage.js +157 -0
  142. package/dist/pages/WorkspaceSettingsPage.js.map +1 -0
  143. package/dist/pages/WorkspacesListPage.d.ts +2 -0
  144. package/dist/pages/WorkspacesListPage.d.ts.map +1 -0
  145. package/dist/pages/WorkspacesListPage.js +186 -0
  146. package/dist/pages/WorkspacesListPage.js.map +1 -0
  147. package/dist/pages/dashboard/DashboardCustomizer.d.ts +12 -0
  148. package/dist/pages/dashboard/DashboardCustomizer.d.ts.map +1 -0
  149. package/dist/pages/dashboard/DashboardCustomizer.js +136 -0
  150. package/dist/pages/dashboard/DashboardCustomizer.js.map +1 -0
  151. package/dist/pages/dashboard/DashboardGrid.d.ts +8 -0
  152. package/dist/pages/dashboard/DashboardGrid.d.ts.map +1 -0
  153. package/dist/pages/dashboard/DashboardGrid.js +58 -0
  154. package/dist/pages/dashboard/DashboardGrid.js.map +1 -0
  155. package/dist/pages/dashboard/DashboardPage.d.ts +14 -0
  156. package/dist/pages/dashboard/DashboardPage.d.ts.map +1 -0
  157. package/dist/pages/dashboard/DashboardPage.js +136 -0
  158. package/dist/pages/dashboard/DashboardPage.js.map +1 -0
  159. package/dist/pages/dashboard/WidgetWrapper.d.ts +17 -0
  160. package/dist/pages/dashboard/WidgetWrapper.d.ts.map +1 -0
  161. package/dist/pages/dashboard/WidgetWrapper.js +72 -0
  162. package/dist/pages/dashboard/WidgetWrapper.js.map +1 -0
  163. package/dist/pages/dashboard/config.d.ts +9 -0
  164. package/dist/pages/dashboard/config.d.ts.map +1 -0
  165. package/dist/pages/dashboard/config.js +214 -0
  166. package/dist/pages/dashboard/config.js.map +1 -0
  167. package/dist/pages/dashboard/hooks/useDashboardData.d.ts +9 -0
  168. package/dist/pages/dashboard/hooks/useDashboardData.d.ts.map +1 -0
  169. package/dist/pages/dashboard/hooks/useDashboardData.js +118 -0
  170. package/dist/pages/dashboard/hooks/useDashboardData.js.map +1 -0
  171. package/dist/pages/dashboard/hooks/useDashboardPreferences.d.ts +4 -0
  172. package/dist/pages/dashboard/hooks/useDashboardPreferences.d.ts.map +1 -0
  173. package/dist/pages/dashboard/hooks/useDashboardPreferences.js +32 -0
  174. package/dist/pages/dashboard/hooks/useDashboardPreferences.js.map +1 -0
  175. package/dist/pages/dashboard/types.d.ts +145 -0
  176. package/dist/pages/dashboard/types.d.ts.map +1 -0
  177. package/dist/pages/dashboard/widgets/GroupsWidget.d.ts +4 -0
  178. package/dist/pages/dashboard/widgets/GroupsWidget.d.ts.map +1 -0
  179. package/dist/pages/dashboard/widgets/GroupsWidget.js +59 -0
  180. package/dist/pages/dashboard/widgets/GroupsWidget.js.map +1 -0
  181. package/dist/pages/dashboard/widgets/MembersWidget.d.ts +4 -0
  182. package/dist/pages/dashboard/widgets/MembersWidget.d.ts.map +1 -0
  183. package/dist/pages/dashboard/widgets/MembersWidget.js +65 -0
  184. package/dist/pages/dashboard/widgets/MembersWidget.js.map +1 -0
  185. package/dist/pages/dashboard/widgets/ProjectsWidget.d.ts +4 -0
  186. package/dist/pages/dashboard/widgets/ProjectsWidget.d.ts.map +1 -0
  187. package/dist/pages/dashboard/widgets/ProjectsWidget.js +91 -0
  188. package/dist/pages/dashboard/widgets/ProjectsWidget.js.map +1 -0
  189. package/dist/pages/dashboard/widgets/QuickActionsWidget.d.ts +4 -0
  190. package/dist/pages/dashboard/widgets/QuickActionsWidget.d.ts.map +1 -0
  191. package/dist/pages/dashboard/widgets/QuickActionsWidget.js +80 -0
  192. package/dist/pages/dashboard/widgets/QuickActionsWidget.js.map +1 -0
  193. package/dist/pages/dashboard/widgets/RecentActivityWidget.d.ts +4 -0
  194. package/dist/pages/dashboard/widgets/RecentActivityWidget.d.ts.map +1 -0
  195. package/dist/pages/dashboard/widgets/RecentActivityWidget.js +81 -0
  196. package/dist/pages/dashboard/widgets/RecentActivityWidget.js.map +1 -0
  197. package/dist/pages/dashboard/widgets/StorageWidget.d.ts +4 -0
  198. package/dist/pages/dashboard/widgets/StorageWidget.d.ts.map +1 -0
  199. package/dist/pages/dashboard/widgets/StorageWidget.js +69 -0
  200. package/dist/pages/dashboard/widgets/StorageWidget.js.map +1 -0
  201. package/dist/pages/dashboard/widgets/SystemHealthWidget.d.ts +4 -0
  202. package/dist/pages/dashboard/widgets/SystemHealthWidget.d.ts.map +1 -0
  203. package/dist/pages/dashboard/widgets/SystemHealthWidget.js +59 -0
  204. package/dist/pages/dashboard/widgets/SystemHealthWidget.js.map +1 -0
  205. package/dist/pages/dashboard/widgets/TagCloudWidget.d.ts +4 -0
  206. package/dist/pages/dashboard/widgets/TagCloudWidget.d.ts.map +1 -0
  207. package/dist/pages/dashboard/widgets/TagCloudWidget.js +61 -0
  208. package/dist/pages/dashboard/widgets/TagCloudWidget.js.map +1 -0
  209. package/dist/pages/dashboard/widgets/TipsWidget.d.ts +4 -0
  210. package/dist/pages/dashboard/widgets/TipsWidget.d.ts.map +1 -0
  211. package/dist/pages/dashboard/widgets/TipsWidget.js +67 -0
  212. package/dist/pages/dashboard/widgets/TipsWidget.js.map +1 -0
  213. package/dist/pages/dashboard/widgets/UpcomingEventsWidget.d.ts +4 -0
  214. package/dist/pages/dashboard/widgets/UpcomingEventsWidget.d.ts.map +1 -0
  215. package/dist/pages/dashboard/widgets/UpcomingEventsWidget.js +83 -0
  216. package/dist/pages/dashboard/widgets/UpcomingEventsWidget.js.map +1 -0
  217. package/dist/pages/dashboard/widgets/WelcomeWidget.d.ts +4 -0
  218. package/dist/pages/dashboard/widgets/WelcomeWidget.d.ts.map +1 -0
  219. package/dist/pages/dashboard/widgets/WelcomeWidget.js +71 -0
  220. package/dist/pages/dashboard/widgets/WelcomeWidget.js.map +1 -0
  221. package/dist/pages/dashboard/widgets/WorkflowStatsWidget.d.ts +4 -0
  222. package/dist/pages/dashboard/widgets/WorkflowStatsWidget.d.ts.map +1 -0
  223. package/dist/pages/dashboard/widgets/WorkflowStatsWidget.js +97 -0
  224. package/dist/pages/dashboard/widgets/WorkflowStatsWidget.js.map +1 -0
  225. package/dist/pages/dashboard/widgets/WorkspacesWidget.d.ts +4 -0
  226. package/dist/pages/dashboard/widgets/WorkspacesWidget.d.ts.map +1 -0
  227. package/dist/pages/dashboard/widgets/WorkspacesWidget.js +67 -0
  228. package/dist/pages/dashboard/widgets/WorkspacesWidget.js.map +1 -0
  229. package/dist/providers/WorkspacesProvider.d.ts +13 -0
  230. package/dist/providers/WorkspacesProvider.d.ts.map +1 -0
  231. package/dist/providers/WorkspacesProvider.js +24 -0
  232. package/dist/providers/WorkspacesProvider.js.map +1 -0
  233. package/dist/store/workspacesStore.d.ts +82 -0
  234. package/dist/store/workspacesStore.d.ts.map +1 -0
  235. package/dist/store/workspacesStore.js +92 -0
  236. package/dist/store/workspacesStore.js.map +1 -0
  237. package/dist/types/index.d.ts +280 -0
  238. package/dist/types/index.d.ts.map +1 -0
  239. package/dist/utils/formatters.d.ts +60 -0
  240. package/dist/utils/formatters.d.ts.map +1 -0
  241. package/dist/utils/formatters.js +61 -0
  242. package/dist/utils/formatters.js.map +1 -0
  243. package/dist/utils/index.d.ts +3 -0
  244. package/dist/utils/index.d.ts.map +1 -0
  245. package/dist/utils/nativeBridge.d.ts +3 -0
  246. package/dist/utils/nativeBridge.d.ts.map +1 -0
  247. package/dist/utils/nativeBridge.js +2 -0
  248. package/dist/utils/projectTags.d.ts +6 -0
  249. package/dist/utils/projectTags.d.ts.map +1 -0
  250. package/dist/utils/projectTags.js +49 -0
  251. package/dist/utils/projectTags.js.map +1 -0
  252. package/dist/utils/slug.d.ts +13 -0
  253. package/dist/utils/slug.d.ts.map +1 -0
  254. package/dist/utils/slug.js +8 -0
  255. package/dist/utils/slug.js.map +1 -0
  256. package/dist/utils/tokenHelpers.d.ts +114 -0
  257. package/dist/utils/tokenHelpers.d.ts.map +1 -0
  258. package/dist/utils/tokenHelpers.js +80 -0
  259. package/dist/utils/tokenHelpers.js.map +1 -0
  260. package/package.json +113 -0
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Utility functions for formatting dates and strings in the workspace module
3
+ */
4
+ /**
5
+ * Format a date string or Date object to a human-readable format
6
+ * @param date - Date string or Date object
7
+ * @param options - Intl.DateTimeFormatOptions
8
+ * @returns Formatted date string
9
+ */
10
+ export declare function formatDate(date: string | Date, options?: Intl.DateTimeFormatOptions): string;
11
+ /**
12
+ * Format a date to a relative time string (e.g., "2 days ago")
13
+ * @param date - Date string or Date object
14
+ * @returns Relative time string
15
+ */
16
+ export declare function formatRelativeTime(date: string | Date): string;
17
+ /**
18
+ * Format a date and time to a readable string
19
+ * @param date - Date string or Date object
20
+ * @returns Formatted date and time string
21
+ */
22
+ export declare function formatDateTime(date: string | Date): string;
23
+ /**
24
+ * Truncate a string to a maximum length and add ellipsis
25
+ * @param str - String to truncate
26
+ * @param maxLength - Maximum length before truncation
27
+ * @returns Truncated string
28
+ */
29
+ export declare function truncate(str: string, maxLength: number): string;
30
+ /**
31
+ * Convert a string to title case
32
+ * @param str - String to convert
33
+ * @returns Title cased string
34
+ */
35
+ export declare function toTitleCase(str: string): string;
36
+ /**
37
+ * Format a workspace status to a human-readable string
38
+ * @param status - Workspace status
39
+ * @returns Formatted status string
40
+ */
41
+ export declare function formatWorkspaceStatus(status: string): string;
42
+ /**
43
+ * Format a project status to a human-readable string
44
+ * @param status - Project status
45
+ * @returns Formatted status string
46
+ */
47
+ export declare function formatProjectStatus(status: string): string;
48
+ /**
49
+ * Generate initials from a name
50
+ * @param name - Full name
51
+ * @returns Initials (up to 2 characters)
52
+ */
53
+ export declare function getInitials(name: string): string;
54
+ /**
55
+ * Format a file size in bytes to a human-readable string
56
+ * @param bytes - Size in bytes
57
+ * @returns Formatted size string (e.g., "1.5 MB")
58
+ */
59
+ export declare function formatFileSize(bytes: number): string;
60
+ //# sourceMappingURL=formatters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/utils/formatters.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,OAAO,GAAE,IAAI,CAAC,qBAIb,GACA,MAAM,CAOR;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CA+B9D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAQ1D;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMhD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQpD"}
@@ -0,0 +1,61 @@
1
+ //#region src/utils/formatters.ts
2
+ function e(e, t = {
3
+ year: "numeric",
4
+ month: "short",
5
+ day: "numeric"
6
+ }) {
7
+ try {
8
+ let n = typeof e == "string" ? new Date(e) : e;
9
+ return new Intl.DateTimeFormat("en-US", t).format(n);
10
+ } catch {
11
+ return "Invalid date";
12
+ }
13
+ }
14
+ function t(e) {
15
+ try {
16
+ let t = typeof e == "string" ? new Date(e) : e, n = (/* @__PURE__ */ new Date()).getTime() - t.getTime(), r = Math.floor(n / 1e3), i = Math.floor(r / 60), a = Math.floor(i / 60), o = Math.floor(a / 24), s = Math.floor(o / 7), c = Math.floor(o / 30), l = Math.floor(o / 365);
17
+ return r < 60 ? "just now" : i < 60 ? `${i} ${i === 1 ? "minute" : "minutes"} ago` : a < 24 ? `${a} ${a === 1 ? "hour" : "hours"} ago` : o < 7 ? `${o} ${o === 1 ? "day" : "days"} ago` : s < 4 ? `${s} ${s === 1 ? "week" : "weeks"} ago` : c < 12 ? `${c} ${c === 1 ? "month" : "months"} ago` : `${l} ${l === 1 ? "year" : "years"} ago`;
18
+ } catch {
19
+ return "Invalid date";
20
+ }
21
+ }
22
+ function n(t) {
23
+ return e(t, {
24
+ year: "numeric",
25
+ month: "short",
26
+ day: "numeric",
27
+ hour: "numeric",
28
+ minute: "2-digit"
29
+ });
30
+ }
31
+ function r(e, t) {
32
+ return e.length <= t ? e : `${e.slice(0, t)}...`;
33
+ }
34
+ function i(e) {
35
+ return e.toLowerCase().split(" ").map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(" ");
36
+ }
37
+ function a(e) {
38
+ return i(e.replace(/_/g, " "));
39
+ }
40
+ function o(e) {
41
+ return i(e.replace(/_/g, " "));
42
+ }
43
+ function s(e) {
44
+ let t = e.trim().split(/\s+/);
45
+ return t.length === 1 ? t[0].charAt(0).toUpperCase() : (t[0].charAt(0) + t[t.length - 1].charAt(0)).toUpperCase();
46
+ }
47
+ function c(e) {
48
+ if (e === 0) return "0 Bytes";
49
+ let t = 1024, n = [
50
+ "Bytes",
51
+ "KB",
52
+ "MB",
53
+ "GB",
54
+ "TB"
55
+ ], r = Math.floor(Math.log(e) / Math.log(t));
56
+ return `${parseFloat((e / t ** +r).toFixed(2))} ${n[r]}`;
57
+ }
58
+ //#endregion
59
+ export { e as formatDate, n as formatDateTime, c as formatFileSize, o as formatProjectStatus, t as formatRelativeTime, a as formatWorkspaceStatus, s as getInitials, i as toTitleCase, r as truncate };
60
+
61
+ //# sourceMappingURL=formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.js","names":[],"sources":["../../src/utils/formatters.ts"],"sourcesContent":["/**\n * Utility functions for formatting dates and strings in the workspace module\n */\n\n/**\n * Format a date string or Date object to a human-readable format\n * @param date - Date string or Date object\n * @param options - Intl.DateTimeFormatOptions\n * @returns Formatted date string\n */\nexport function formatDate(\n date: string | Date,\n options: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n }\n): string {\n try {\n const dateObj = typeof date === 'string' ? new Date(date) : date;\n return new Intl.DateTimeFormat('en-US', options).format(dateObj);\n } catch {\n return 'Invalid date';\n }\n}\n\n/**\n * Format a date to a relative time string (e.g., \"2 days ago\")\n * @param date - Date string or Date object\n * @returns Relative time string\n */\nexport function formatRelativeTime(date: string | Date): string {\n try {\n const dateObj = typeof date === 'string' ? new Date(date) : date;\n const now = new Date();\n const diffMs = now.getTime() - dateObj.getTime();\n const diffSec = Math.floor(diffMs / 1000);\n const diffMin = Math.floor(diffSec / 60);\n const diffHour = Math.floor(diffMin / 60);\n const diffDay = Math.floor(diffHour / 24);\n const diffWeek = Math.floor(diffDay / 7);\n const diffMonth = Math.floor(diffDay / 30);\n const diffYear = Math.floor(diffDay / 365);\n\n if (diffSec < 60) {\n return 'just now';\n } else if (diffMin < 60) {\n return `${diffMin} ${diffMin === 1 ? 'minute' : 'minutes'} ago`;\n } else if (diffHour < 24) {\n return `${diffHour} ${diffHour === 1 ? 'hour' : 'hours'} ago`;\n } else if (diffDay < 7) {\n return `${diffDay} ${diffDay === 1 ? 'day' : 'days'} ago`;\n } else if (diffWeek < 4) {\n return `${diffWeek} ${diffWeek === 1 ? 'week' : 'weeks'} ago`;\n } else if (diffMonth < 12) {\n return `${diffMonth} ${diffMonth === 1 ? 'month' : 'months'} ago`;\n } else {\n return `${diffYear} ${diffYear === 1 ? 'year' : 'years'} ago`;\n }\n } catch {\n return 'Invalid date';\n }\n}\n\n/**\n * Format a date and time to a readable string\n * @param date - Date string or Date object\n * @returns Formatted date and time string\n */\nexport function formatDateTime(date: string | Date): string {\n return formatDate(date, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n });\n}\n\n/**\n * Truncate a string to a maximum length and add ellipsis\n * @param str - String to truncate\n * @param maxLength - Maximum length before truncation\n * @returns Truncated string\n */\nexport function truncate(str: string, maxLength: number): string {\n if (str.length <= maxLength) return str;\n return `${str.slice(0, maxLength)}...`;\n}\n\n/**\n * Convert a string to title case\n * @param str - String to convert\n * @returns Title cased string\n */\nexport function toTitleCase(str: string): string {\n return str\n .toLowerCase()\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n}\n\n/**\n * Format a workspace status to a human-readable string\n * @param status - Workspace status\n * @returns Formatted status string\n */\nexport function formatWorkspaceStatus(status: string): string {\n return toTitleCase(status.replace(/_/g, ' '));\n}\n\n/**\n * Format a project status to a human-readable string\n * @param status - Project status\n * @returns Formatted status string\n */\nexport function formatProjectStatus(status: string): string {\n return toTitleCase(status.replace(/_/g, ' '));\n}\n\n/**\n * Generate initials from a name\n * @param name - Full name\n * @returns Initials (up to 2 characters)\n */\nexport function getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 1) {\n return parts[0].charAt(0).toUpperCase();\n }\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase();\n}\n\n/**\n * Format a file size in bytes to a human-readable string\n * @param bytes - Size in bytes\n * @returns Formatted size string (e.g., \"1.5 MB\")\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;\n}\n"],"mappings":";AAUA,SAAgB,EACd,GACA,IAAsC;CACpC,MAAM;CACN,OAAO;CACP,KAAK;CACN,EACO;AACR,KAAI;EACF,IAAM,IAAU,OAAO,KAAS,WAAW,IAAI,KAAK,EAAK,GAAG;AAC5D,SAAO,IAAI,KAAK,eAAe,SAAS,EAAQ,CAAC,OAAO,EAAQ;SAC1D;AACN,SAAO;;;AASX,SAAgB,EAAmB,GAA6B;AAC9D,KAAI;EACF,IAAM,IAAU,OAAO,KAAS,WAAW,IAAI,KAAK,EAAK,GAAG,GAEtD,qBADM,IAAI,MAAM,EACH,SAAS,GAAG,EAAQ,SAAS,EAC1C,IAAU,KAAK,MAAM,IAAS,IAAK,EACnC,IAAU,KAAK,MAAM,IAAU,GAAG,EAClC,IAAW,KAAK,MAAM,IAAU,GAAG,EACnC,IAAU,KAAK,MAAM,IAAW,GAAG,EACnC,IAAW,KAAK,MAAM,IAAU,EAAE,EAClC,IAAY,KAAK,MAAM,IAAU,GAAG,EACpC,IAAW,KAAK,MAAM,IAAU,IAAI;AAexC,SAbE,IAAU,KACL,aACE,IAAU,KACZ,GAAG,EAAQ,GAAG,MAAY,IAAI,WAAW,UAAU,QACjD,IAAW,KACb,GAAG,EAAS,GAAG,MAAa,IAAI,SAAS,QAAQ,QAC/C,IAAU,IACZ,GAAG,EAAQ,GAAG,MAAY,IAAI,QAAQ,OAAO,QAC3C,IAAW,IACb,GAAG,EAAS,GAAG,MAAa,IAAI,SAAS,QAAQ,QAC/C,IAAY,KACd,GAAG,EAAU,GAAG,MAAc,IAAI,UAAU,SAAS,QAErD,GAAG,EAAS,GAAG,MAAa,IAAI,SAAS,QAAQ;SAEpD;AACN,SAAO;;;AASX,SAAgB,EAAe,GAA6B;AAC1D,QAAO,EAAW,GAAM;EACtB,MAAM;EACN,OAAO;EACP,KAAK;EACL,MAAM;EACN,QAAQ;EACT,CAAC;;AASJ,SAAgB,EAAS,GAAa,GAA2B;AAE/D,QADI,EAAI,UAAU,IAAkB,IAC7B,GAAG,EAAI,MAAM,GAAG,EAAU,CAAC;;AAQpC,SAAgB,EAAY,GAAqB;AAC/C,QAAO,EACJ,aAAa,CACb,MAAM,IAAI,CACV,KAAK,MAAS,EAAK,OAAO,EAAE,CAAC,aAAa,GAAG,EAAK,MAAM,EAAE,CAAC,CAC3D,KAAK,IAAI;;AAQd,SAAgB,EAAsB,GAAwB;AAC5D,QAAO,EAAY,EAAO,QAAQ,MAAM,IAAI,CAAC;;AAQ/C,SAAgB,EAAoB,GAAwB;AAC1D,QAAO,EAAY,EAAO,QAAQ,MAAM,IAAI,CAAC;;AAQ/C,SAAgB,EAAY,GAAsB;CAChD,IAAM,IAAQ,EAAK,MAAM,CAAC,MAAM,MAAM;AAItC,QAHI,EAAM,WAAW,IACZ,EAAM,GAAG,OAAO,EAAE,CAAC,aAAa,IAEjC,EAAM,GAAG,OAAO,EAAE,GAAG,EAAM,EAAM,SAAS,GAAG,OAAO,EAAE,EAAE,aAAa;;AAQ/E,SAAgB,EAAe,GAAuB;AACpD,KAAI,MAAU,EAAG,QAAO;CAExB,IAAM,IAAI,MACJ,IAAQ;EAAC;EAAS;EAAM;EAAM;EAAM;EAAK,EACzC,IAAI,KAAK,MAAM,KAAK,IAAI,EAAM,GAAG,KAAK,IAAI,EAAE,CAAC;AAEnD,QAAO,GAAG,YAAY,IAAiB,MAAG,GAAI,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAM"}
@@ -0,0 +1,3 @@
1
+ export * from './formatters';
2
+ export * from './tokenHelpers';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { getPlatform, isNative, isIOS, isAndroid, isWeb, nativeImpact, nativeNotify, nativeToast, nativeConfirm, nativeCopyText, nativeShare, nativeOpenUrl, useNativePlatform, useSafeArea, useNativeKeyboard, useAppState, useDeviceInfo, useHaptics, useStatusBar, } from '@burdenoff/fe-libs/shared/native';
2
+ export type { BurdenoffNativePlatform, BurdenoffNativeBridge, SafeAreaInsets, DeviceInfo, HapticImpactStyle, HapticNotificationType, ToastDuration, ConfirmOptions, ShareOptions, AppState, StatusBarTheme, } from '@burdenoff/fe-libs/shared/native';
3
+ //# sourceMappingURL=nativeBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeBridge.d.ts","sourceRoot":"","sources":["../../src/utils/nativeBridge.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,QAAQ,EACR,KAAK,EACL,SAAS,EACT,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,UAAU,EACV,YAAY,GACb,MAAM,kCAAkC,CAAC;AAE1C,YAAY,EACV,uBAAuB,EACvB,qBAAqB,EACrB,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,cAAc,GACf,MAAM,kCAAkC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { nativeConfirm as e, nativeImpact as t, nativeNotify as n } from "@burdenoff/fe-libs/shared/native";
2
+ export { e as nativeConfirm, t as nativeImpact, n as nativeNotify };
@@ -0,0 +1,6 @@
1
+ import { TagItem } from '../../../../fe-libs/src/tag/index.ts';
2
+ import { ProjectTag } from '../types';
3
+
4
+ export declare function normalizeProjectTags(value: unknown): ProjectTag[];
5
+ export declare function toProjectTag(tag: TagItem): ProjectTag;
6
+ //# sourceMappingURL=projectTags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectTags.d.ts","sourceRoot":"","sources":["../../src/utils/projectTags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAU3C,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,EAAE,CAoCjE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAgBrD"}
@@ -0,0 +1,49 @@
1
+ //#region src/utils/projectTags.ts
2
+ function e(e) {
3
+ return typeof e == "object" && !!e && !Array.isArray(e);
4
+ }
5
+ function t(e) {
6
+ return typeof e == "string" && e.trim().length > 0 ? e.trim() : void 0;
7
+ }
8
+ function n(n) {
9
+ return Array.isArray(n) ? n.flatMap((n) => {
10
+ if (!e(n)) return [];
11
+ let r = t(n.tagId) ?? t(n.id), i = t(n.key), a = t(n.label) ?? t(n.name);
12
+ return !r || !i || !a ? [] : [{
13
+ id: r,
14
+ tagId: r,
15
+ key: i,
16
+ label: a,
17
+ value: t(n.value) ?? null,
18
+ vocabularyId: t(n.vocabularyId) ?? null,
19
+ vocabularyKey: t(n.vocabularyKey) ?? null,
20
+ parentTagId: t(n.parentTagId) ?? null,
21
+ hierarchyPath: t(n.hierarchyPath) ?? null,
22
+ color: t(n.color) ?? null,
23
+ icon: t(n.icon) ?? null,
24
+ description: t(n.description) ?? null,
25
+ metadata: e(n.metadata) ? n.metadata : null
26
+ }];
27
+ }) : [];
28
+ }
29
+ function r(e) {
30
+ return {
31
+ id: e.id,
32
+ tagId: e.id,
33
+ key: e.key,
34
+ label: e.label,
35
+ value: e.value ?? null,
36
+ vocabularyId: e.vocabularyId ?? null,
37
+ vocabularyKey: e.vocabularyKey ?? e.vocabulary?.key ?? null,
38
+ parentTagId: e.parentId ?? null,
39
+ hierarchyPath: e.hierarchyPath ?? null,
40
+ color: e.color ?? null,
41
+ icon: e.icon ?? null,
42
+ description: e.description ?? null,
43
+ metadata: null
44
+ };
45
+ }
46
+ //#endregion
47
+ export { n as normalizeProjectTags, r as toProjectTag };
48
+
49
+ //# sourceMappingURL=projectTags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectTags.js","names":[],"sources":["../../src/utils/projectTags.ts"],"sourcesContent":["import type { TagItem } from '@burdenoff/fe-libs/tag';\n\nimport type { ProjectTag } from '../types';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction asOptionalString(value: unknown): string | null | undefined {\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nexport function normalizeProjectTags(value: unknown): ProjectTag[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value.flatMap((entry) => {\n if (!isRecord(entry)) {\n return [];\n }\n\n const id = asOptionalString(entry['tagId']) ?? asOptionalString(entry['id']);\n const key = asOptionalString(entry['key']);\n const label = asOptionalString(entry['label']) ?? asOptionalString(entry['name']);\n\n if (!id || !key || !label) {\n return [];\n }\n\n return [\n {\n id,\n tagId: id,\n key,\n label,\n value: asOptionalString(entry['value']) ?? null,\n vocabularyId: asOptionalString(entry['vocabularyId']) ?? null,\n vocabularyKey: asOptionalString(entry['vocabularyKey']) ?? null,\n parentTagId: asOptionalString(entry['parentTagId']) ?? null,\n hierarchyPath: asOptionalString(entry['hierarchyPath']) ?? null,\n color: asOptionalString(entry['color']) ?? null,\n icon: asOptionalString(entry['icon']) ?? null,\n description: asOptionalString(entry['description']) ?? null,\n metadata: isRecord(entry['metadata']) ? entry['metadata'] : null,\n } satisfies ProjectTag,\n ];\n });\n}\n\nexport function toProjectTag(tag: TagItem): ProjectTag {\n return {\n id: tag.id,\n tagId: tag.id,\n key: tag.key,\n label: tag.label,\n value: tag.value ?? null,\n vocabularyId: tag.vocabularyId ?? null,\n vocabularyKey: tag.vocabularyKey ?? tag.vocabulary?.key ?? null,\n parentTagId: tag.parentId ?? null,\n hierarchyPath: tag.hierarchyPath ?? null,\n color: tag.color ?? null,\n icon: tag.icon ?? null,\n description: tag.description ?? null,\n metadata: null,\n };\n}\n"],"mappings":";AAIA,SAAS,EAAS,GAAkD;AAClE,QAAO,OAAO,KAAU,cAAY,KAAkB,CAAC,MAAM,QAAQ,EAAM;;AAG7E,SAAS,EAAiB,GAA2C;AACnE,QAAO,OAAO,KAAU,YAAY,EAAM,MAAM,CAAC,SAAS,IAAI,EAAM,MAAM,GAAG,KAAA;;AAG/E,SAAgB,EAAqB,GAA8B;AAKjE,QAJK,MAAM,QAAQ,EAAM,GAIlB,EAAM,SAAS,MAAU;AAC9B,MAAI,CAAC,EAAS,EAAM,CAClB,QAAO,EAAE;EAGX,IAAM,IAAK,EAAiB,EAAM,MAAS,IAAI,EAAiB,EAAM,GAAM,EACtE,IAAM,EAAiB,EAAM,IAAO,EACpC,IAAQ,EAAiB,EAAM,MAAS,IAAI,EAAiB,EAAM,KAAQ;AAMjF,SAJI,CAAC,KAAM,CAAC,KAAO,CAAC,IACX,EAAE,GAGJ,CACL;GACE;GACA,OAAO;GACP;GACA;GACA,OAAO,EAAiB,EAAM,MAAS,IAAI;GAC3C,cAAc,EAAiB,EAAM,aAAgB,IAAI;GACzD,eAAe,EAAiB,EAAM,cAAiB,IAAI;GAC3D,aAAa,EAAiB,EAAM,YAAe,IAAI;GACvD,eAAe,EAAiB,EAAM,cAAiB,IAAI;GAC3D,OAAO,EAAiB,EAAM,MAAS,IAAI;GAC3C,MAAM,EAAiB,EAAM,KAAQ,IAAI;GACzC,aAAa,EAAiB,EAAM,YAAe,IAAI;GACvD,UAAU,EAAS,EAAM,SAAY,GAAG,EAAM,WAAc;GAC7D,CACF;GACD,GAjCO,EAAE;;AAoCb,SAAgB,EAAa,GAA0B;AACrD,QAAO;EACL,IAAI,EAAI;EACR,OAAO,EAAI;EACX,KAAK,EAAI;EACT,OAAO,EAAI;EACX,OAAO,EAAI,SAAS;EACpB,cAAc,EAAI,gBAAgB;EAClC,eAAe,EAAI,iBAAiB,EAAI,YAAY,OAAO;EAC3D,aAAa,EAAI,YAAY;EAC7B,eAAe,EAAI,iBAAiB;EACpC,OAAO,EAAI,SAAS;EACpB,MAAM,EAAI,QAAQ;EAClB,aAAa,EAAI,eAAe;EAChC,UAAU;EACX"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Slug utility functions
3
+ *
4
+ * Shared utilities for generating URL-friendly slugs
5
+ */
6
+ /**
7
+ * Generate a URL-friendly slug from a name
8
+ *
9
+ * @param name - The name to convert to a slug
10
+ * @returns A lowercase, hyphenated string suitable for URLs
11
+ */
12
+ export declare function generateSlug(name: string): string;
13
+ //# sourceMappingURL=slug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../../src/utils/slug.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMjD"}
@@ -0,0 +1,8 @@
1
+ //#region src/utils/slug.ts
2
+ function e(e) {
3
+ return e.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").substring(0, 50);
4
+ }
5
+ //#endregion
6
+ export { e as generateSlug };
7
+
8
+ //# sourceMappingURL=slug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slug.js","names":[],"sources":["../../src/utils/slug.ts"],"sourcesContent":["/**\n * Slug utility functions\n *\n * Shared utilities for generating URL-friendly slugs\n */\n\n/**\n * Generate a URL-friendly slug from a name\n *\n * @param name - The name to convert to a slug\n * @returns A lowercase, hyphenated string suitable for URLs\n */\nexport function generateSlug(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .substring(0, 50);\n}\n"],"mappings":";AAYA,SAAgB,EAAa,GAAsB;AACjD,QAAO,EACJ,aAAa,CACb,QAAQ,eAAe,IAAI,CAC3B,QAAQ,YAAY,GAAG,CACvB,UAAU,GAAG,GAAG"}
@@ -0,0 +1,114 @@
1
+ import { WorkspaceStatus, ProjectStatus, WorkspaceRole } from '../types';
2
+
3
+ /**
4
+ * Get semantic token classes for workspace status badges
5
+ *
6
+ * Uses semantic tokens that automatically adapt to theme (light/dark)
7
+ * and brand (workspaces, fluidgrids, etc.)
8
+ *
9
+ * @param status - The workspace status
10
+ * @returns Tailwind class string with semantic token classes
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * <Badge className={getWorkspaceStatusClasses('ACTIVE')}>
15
+ * ACTIVE
16
+ * </Badge>
17
+ * ```
18
+ */
19
+ export declare function getWorkspaceStatusClasses(status: WorkspaceStatus): string;
20
+ /**
21
+ * Get semantic token classes for project status badges
22
+ *
23
+ * @param status - The project status
24
+ * @returns Tailwind class string with semantic token classes
25
+ *
26
+ * @example
27
+ * ```tsx
28
+ * <Badge className={getProjectStatusClasses('ACTIVE')}>
29
+ * ACTIVE
30
+ * </Badge>
31
+ * ```
32
+ */
33
+ export declare function getProjectStatusClasses(status: ProjectStatus): string;
34
+ /**
35
+ * Get semantic token classes for member role badges
36
+ *
37
+ * @param role - The workspace member role
38
+ * @returns Tailwind class string with semantic token classes
39
+ *
40
+ * @example
41
+ * ```tsx
42
+ * <Badge className={getMemberRoleClasses('owner')}>
43
+ * Owner
44
+ * </Badge>
45
+ * ```
46
+ */
47
+ export declare function getMemberRoleClasses(role: WorkspaceRole): string;
48
+ /**
49
+ * Get semantic icon color class for workspace status
50
+ *
51
+ * Used for status indicator icons that need to match the status color
52
+ *
53
+ * @param status - The workspace status
54
+ * @returns Tailwind class string for text color
55
+ *
56
+ * @example
57
+ * ```tsx
58
+ * <CheckCircle className={getWorkspaceStatusIconClass('ACTIVE')} size={16} />
59
+ * ```
60
+ */
61
+ export declare function getWorkspaceStatusIconClass(status: WorkspaceStatus): string;
62
+ /**
63
+ * Get semantic icon color class for project status
64
+ *
65
+ * @param status - The project status
66
+ * @returns Tailwind class string for text color
67
+ *
68
+ * @example
69
+ * ```tsx
70
+ * <Circle className={getProjectStatusIconClass(project.status)} size={12} />
71
+ * ```
72
+ */
73
+ export declare function getProjectStatusIconClass(status: ProjectStatus): string;
74
+ /**
75
+ * Get semantic background class for workspace status (for larger areas)
76
+ *
77
+ * @param status - The workspace status
78
+ * @returns Tailwind class string for background color
79
+ *
80
+ * @example
81
+ * ```tsx
82
+ * <div className={getWorkspaceStatusBgClass('SUSPENDED')}>
83
+ * Workspace is suspended
84
+ * </div>
85
+ * ```
86
+ */
87
+ export declare function getWorkspaceStatusBgClass(status: WorkspaceStatus): string;
88
+ /**
89
+ * Get human-readable label for workspace status
90
+ *
91
+ * @param status - The workspace status
92
+ * @returns Formatted status label
93
+ *
94
+ * @example
95
+ * ```tsx
96
+ * getWorkspaceStatusLabel('ACTIVE') // "Active"
97
+ * ```
98
+ */
99
+ export declare function getWorkspaceStatusLabel(status: WorkspaceStatus): string;
100
+ /**
101
+ * Get human-readable label for project status
102
+ *
103
+ * @param status - The project status
104
+ * @returns Formatted status label
105
+ */
106
+ export declare function getProjectStatusLabel(status: ProjectStatus): string;
107
+ /**
108
+ * Get human-readable label for member role
109
+ *
110
+ * @param role - The workspace member role
111
+ * @returns Formatted role label
112
+ */
113
+ export declare function getMemberRoleLabel(role: WorkspaceRole): string;
114
+ //# sourceMappingURL=tokenHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/tokenHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAazE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAUrE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAShE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAS3E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAQvE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CASzE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CASvE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAQnE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAS9D"}
@@ -0,0 +1,80 @@
1
+ //#region src/utils/tokenHelpers.ts
2
+ function e(e) {
3
+ let t = {
4
+ ACTIVE: "bg-workspace-active-bgSubtle text-workspace-active-text border-workspace-active-border",
5
+ SUSPENDED: "bg-workspace-suspended-bgSubtle text-workspace-suspended-text border-workspace-suspended-border",
6
+ ARCHIVED: "bg-workspace-archived-bgSubtle text-workspace-archived-text border-workspace-archived-border",
7
+ DELETED: "bg-workspace-deleted-bgSubtle text-workspace-deleted-text border-workspace-deleted-border"
8
+ };
9
+ return t[e] || t.ARCHIVED;
10
+ }
11
+ function t(e) {
12
+ let t = {
13
+ ACTIVE: "bg-project-active-bgSubtle text-project-active-text border-project-active-border",
14
+ INACTIVE: "bg-project-inactive-bgSubtle text-project-inactive-text border-project-inactive-border",
15
+ ARCHIVED: "bg-workspace-archived-bgSubtle text-workspace-archived-text border-workspace-archived-border"
16
+ };
17
+ return t[e] || t.INACTIVE;
18
+ }
19
+ function n(e) {
20
+ let t = {
21
+ owner: "bg-role-owner-bgSubtle text-role-owner-text border-role-owner-border",
22
+ admin: "bg-role-admin-bgSubtle text-role-admin-text border-role-admin-border",
23
+ member: "bg-role-member-bgSubtle text-role-member-text border-role-member-border",
24
+ guest: "bg-role-member-bgSubtle text-role-member-text border-role-member-border"
25
+ };
26
+ return t[e] || t.member;
27
+ }
28
+ function r(e) {
29
+ let t = {
30
+ ACTIVE: "text-workspace-active-text",
31
+ SUSPENDED: "text-workspace-suspended-text",
32
+ ARCHIVED: "text-workspace-archived-text",
33
+ DELETED: "text-workspace-deleted-text"
34
+ };
35
+ return t[e] || t.ARCHIVED;
36
+ }
37
+ function i(e) {
38
+ let t = {
39
+ ACTIVE: "text-project-active-text",
40
+ INACTIVE: "text-project-inactive-text",
41
+ ARCHIVED: "text-workspace-archived-text"
42
+ };
43
+ return t[e] || t.INACTIVE;
44
+ }
45
+ function a(e) {
46
+ let t = {
47
+ ACTIVE: "bg-workspace-active-bg",
48
+ SUSPENDED: "bg-workspace-suspended-bg",
49
+ ARCHIVED: "bg-workspace-archived-bg",
50
+ DELETED: "bg-workspace-deleted-bg"
51
+ };
52
+ return t[e] || t.ARCHIVED;
53
+ }
54
+ function o(e) {
55
+ return {
56
+ ACTIVE: "Active",
57
+ SUSPENDED: "Suspended",
58
+ ARCHIVED: "Archived",
59
+ DELETED: "Deleted"
60
+ }[e] || e;
61
+ }
62
+ function s(e) {
63
+ return {
64
+ ACTIVE: "Active",
65
+ INACTIVE: "Inactive",
66
+ ARCHIVED: "Archived"
67
+ }[e] || e;
68
+ }
69
+ function c(e) {
70
+ return {
71
+ owner: "Owner",
72
+ admin: "Admin",
73
+ member: "Member",
74
+ guest: "Guest"
75
+ }[e] || e;
76
+ }
77
+ //#endregion
78
+ export { n as getMemberRoleClasses, c as getMemberRoleLabel, t as getProjectStatusClasses, i as getProjectStatusIconClass, s as getProjectStatusLabel, a as getWorkspaceStatusBgClass, e as getWorkspaceStatusClasses, r as getWorkspaceStatusIconClass, o as getWorkspaceStatusLabel };
79
+
80
+ //# sourceMappingURL=tokenHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenHelpers.js","names":[],"sources":["../../src/utils/tokenHelpers.ts"],"sourcesContent":["/**\n * Token-based style helpers for Workspaces module\n *\n * These helpers map domain concepts (workspace status, project status, member roles)\n * to semantic tokens, ensuring consistent, theme-aware styling across components.\n *\n * @module workspaces/utils/tokenHelpers\n */\n\nimport type { WorkspaceStatus, ProjectStatus, WorkspaceRole } from '../types';\n\n/**\n * Get semantic token classes for workspace status badges\n *\n * Uses semantic tokens that automatically adapt to theme (light/dark)\n * and brand (workspaces, fluidgrids, etc.)\n *\n * @param status - The workspace status\n * @returns Tailwind class string with semantic token classes\n *\n * @example\n * ```tsx\n * <Badge className={getWorkspaceStatusClasses('ACTIVE')}>\n * ACTIVE\n * </Badge>\n * ```\n */\nexport function getWorkspaceStatusClasses(status: WorkspaceStatus): string {\n const statusClasses: Record<WorkspaceStatus, string> = {\n ACTIVE:\n 'bg-workspace-active-bgSubtle text-workspace-active-text border-workspace-active-border',\n SUSPENDED:\n 'bg-workspace-suspended-bgSubtle text-workspace-suspended-text border-workspace-suspended-border',\n ARCHIVED:\n 'bg-workspace-archived-bgSubtle text-workspace-archived-text border-workspace-archived-border',\n DELETED:\n 'bg-workspace-deleted-bgSubtle text-workspace-deleted-text border-workspace-deleted-border',\n };\n\n return statusClasses[status] || statusClasses.ARCHIVED;\n}\n\n/**\n * Get semantic token classes for project status badges\n *\n * @param status - The project status\n * @returns Tailwind class string with semantic token classes\n *\n * @example\n * ```tsx\n * <Badge className={getProjectStatusClasses('ACTIVE')}>\n * ACTIVE\n * </Badge>\n * ```\n */\nexport function getProjectStatusClasses(status: ProjectStatus): string {\n const statusClasses: Record<ProjectStatus, string> = {\n ACTIVE: 'bg-project-active-bgSubtle text-project-active-text border-project-active-border',\n INACTIVE:\n 'bg-project-inactive-bgSubtle text-project-inactive-text border-project-inactive-border',\n ARCHIVED:\n 'bg-workspace-archived-bgSubtle text-workspace-archived-text border-workspace-archived-border',\n };\n\n return statusClasses[status] || statusClasses.INACTIVE;\n}\n\n/**\n * Get semantic token classes for member role badges\n *\n * @param role - The workspace member role\n * @returns Tailwind class string with semantic token classes\n *\n * @example\n * ```tsx\n * <Badge className={getMemberRoleClasses('owner')}>\n * Owner\n * </Badge>\n * ```\n */\nexport function getMemberRoleClasses(role: WorkspaceRole): string {\n const roleClasses: Record<WorkspaceRole, string> = {\n owner: 'bg-role-owner-bgSubtle text-role-owner-text border-role-owner-border',\n admin: 'bg-role-admin-bgSubtle text-role-admin-text border-role-admin-border',\n member: 'bg-role-member-bgSubtle text-role-member-text border-role-member-border',\n guest: 'bg-role-member-bgSubtle text-role-member-text border-role-member-border', // Guest uses member styling\n };\n\n return roleClasses[role] || roleClasses.member;\n}\n\n/**\n * Get semantic icon color class for workspace status\n *\n * Used for status indicator icons that need to match the status color\n *\n * @param status - The workspace status\n * @returns Tailwind class string for text color\n *\n * @example\n * ```tsx\n * <CheckCircle className={getWorkspaceStatusIconClass('ACTIVE')} size={16} />\n * ```\n */\nexport function getWorkspaceStatusIconClass(status: WorkspaceStatus): string {\n const iconClasses: Record<WorkspaceStatus, string> = {\n ACTIVE: 'text-workspace-active-text',\n SUSPENDED: 'text-workspace-suspended-text',\n ARCHIVED: 'text-workspace-archived-text',\n DELETED: 'text-workspace-deleted-text',\n };\n\n return iconClasses[status] || iconClasses.ARCHIVED;\n}\n\n/**\n * Get semantic icon color class for project status\n *\n * @param status - The project status\n * @returns Tailwind class string for text color\n *\n * @example\n * ```tsx\n * <Circle className={getProjectStatusIconClass(project.status)} size={12} />\n * ```\n */\nexport function getProjectStatusIconClass(status: ProjectStatus): string {\n const iconClasses: Record<ProjectStatus, string> = {\n ACTIVE: 'text-project-active-text',\n INACTIVE: 'text-project-inactive-text',\n ARCHIVED: 'text-workspace-archived-text',\n };\n\n return iconClasses[status] || iconClasses.INACTIVE;\n}\n\n/**\n * Get semantic background class for workspace status (for larger areas)\n *\n * @param status - The workspace status\n * @returns Tailwind class string for background color\n *\n * @example\n * ```tsx\n * <div className={getWorkspaceStatusBgClass('SUSPENDED')}>\n * Workspace is suspended\n * </div>\n * ```\n */\nexport function getWorkspaceStatusBgClass(status: WorkspaceStatus): string {\n const bgClasses: Record<WorkspaceStatus, string> = {\n ACTIVE: 'bg-workspace-active-bg',\n SUSPENDED: 'bg-workspace-suspended-bg',\n ARCHIVED: 'bg-workspace-archived-bg',\n DELETED: 'bg-workspace-deleted-bg',\n };\n\n return bgClasses[status] || bgClasses.ARCHIVED;\n}\n\n/**\n * Get human-readable label for workspace status\n *\n * @param status - The workspace status\n * @returns Formatted status label\n *\n * @example\n * ```tsx\n * getWorkspaceStatusLabel('ACTIVE') // \"Active\"\n * ```\n */\nexport function getWorkspaceStatusLabel(status: WorkspaceStatus): string {\n const labels: Record<WorkspaceStatus, string> = {\n ACTIVE: 'Active',\n SUSPENDED: 'Suspended',\n ARCHIVED: 'Archived',\n DELETED: 'Deleted',\n };\n\n return labels[status] || status;\n}\n\n/**\n * Get human-readable label for project status\n *\n * @param status - The project status\n * @returns Formatted status label\n */\nexport function getProjectStatusLabel(status: ProjectStatus): string {\n const labels: Record<ProjectStatus, string> = {\n ACTIVE: 'Active',\n INACTIVE: 'Inactive',\n ARCHIVED: 'Archived',\n };\n\n return labels[status] || status;\n}\n\n/**\n * Get human-readable label for member role\n *\n * @param role - The workspace member role\n * @returns Formatted role label\n */\nexport function getMemberRoleLabel(role: WorkspaceRole): string {\n const labels: Record<WorkspaceRole, string> = {\n owner: 'Owner',\n admin: 'Admin',\n member: 'Member',\n guest: 'Guest',\n };\n\n return labels[role] || role;\n}\n"],"mappings":";AA2BA,SAAgB,EAA0B,GAAiC;CACzE,IAAM,IAAiD;EACrD,QACE;EACF,WACE;EACF,UACE;EACF,SACE;EACH;AAED,QAAO,EAAc,MAAW,EAAc;;AAgBhD,SAAgB,EAAwB,GAA+B;CACrE,IAAM,IAA+C;EACnD,QAAQ;EACR,UACE;EACF,UACE;EACH;AAED,QAAO,EAAc,MAAW,EAAc;;AAgBhD,SAAgB,EAAqB,GAA6B;CAChE,IAAM,IAA6C;EACjD,OAAO;EACP,OAAO;EACP,QAAQ;EACR,OAAO;EACR;AAED,QAAO,EAAY,MAAS,EAAY;;AAgB1C,SAAgB,EAA4B,GAAiC;CAC3E,IAAM,IAA+C;EACnD,QAAQ;EACR,WAAW;EACX,UAAU;EACV,SAAS;EACV;AAED,QAAO,EAAY,MAAW,EAAY;;AAc5C,SAAgB,EAA0B,GAA+B;CACvE,IAAM,IAA6C;EACjD,QAAQ;EACR,UAAU;EACV,UAAU;EACX;AAED,QAAO,EAAY,MAAW,EAAY;;AAgB5C,SAAgB,EAA0B,GAAiC;CACzE,IAAM,IAA6C;EACjD,QAAQ;EACR,WAAW;EACX,UAAU;EACV,SAAS;EACV;AAED,QAAO,EAAU,MAAW,EAAU;;AAcxC,SAAgB,EAAwB,GAAiC;AAQvE,QAPgD;EAC9C,QAAQ;EACR,WAAW;EACX,UAAU;EACV,SAAS;EACV,CAEa,MAAW;;AAS3B,SAAgB,EAAsB,GAA+B;AAOnE,QAN8C;EAC5C,QAAQ;EACR,UAAU;EACV,UAAU;EACX,CAEa,MAAW;;AAS3B,SAAgB,EAAmB,GAA6B;AAQ9D,QAP8C;EAC5C,OAAO;EACP,OAAO;EACP,QAAQ;EACR,OAAO;EACR,CAEa,MAAS"}
package/package.json ADDED
@@ -0,0 +1,113 @@
1
+ {
2
+ "name": "@burdenoff/microfe-workspaces",
3
+ "version": "2026.510.50",
4
+ "description": "Workspaces microfrontend for Burdenoff products",
5
+ "type": "module",
6
+ "files": [
7
+ "dist",
8
+ "package.json",
9
+ "README.md"
10
+ ],
11
+ "imports": {
12
+ "#generated/*": "./src/generated/*",
13
+ "#src/*": "./src/*",
14
+ "#workspaces/*": "./src/workspaces/*"
15
+ },
16
+ "exports": {
17
+ ".": {
18
+ "types": "./dist/index.d.ts",
19
+ "import": "./dist/index.js"
20
+ }
21
+ },
22
+ "main": "./dist/index.js",
23
+ "types": "./dist/index.d.ts",
24
+ "scripts": {
25
+ "dev": "vite",
26
+ "build": "tsc && vite build",
27
+ "lint": "eslint .",
28
+ "lint:sanity": "if [ \"${CI:-}\" = \"true\" ]; then bun run lint; else bun run lint -- --cache --cache-location .eslintcache; fi",
29
+ "format": "prettier --write \"src/**/*.{ts,tsx}\"",
30
+ "format:check": "prettier --check \"src/**/*.{ts,tsx}\"",
31
+ "type:check": "tsc --noEmit",
32
+ "sanity": "bun run codegen && bun run lint:sanity && bun run format && bun run type:check && bun run build",
33
+ "schema:pull": "graphql-codegen --project schema-wspace && graphql-codegen --project schema-global",
34
+ "codegen": "graphql-codegen --project wspace && graphql-codegen --project global",
35
+ "codegen:all": "bun run schema:pull && bun run codegen",
36
+ "switch:status": "bun scripts/deps-mode.ts status",
37
+ "switch:remote": "bun scripts/deps-mode.ts remote",
38
+ "switch:local": "bun scripts/deps-mode.ts local",
39
+ "switch:check": "bun scripts/deps-mode.ts check",
40
+ "prepare": "lefthook install || true"
41
+ },
42
+ "dependencies": {
43
+ "@apollo/client": "^4.0.11",
44
+ "@burdenoff/fe-libs": "2026.507.125",
45
+ "@iconify/react": "^6.0.2",
46
+ "@radix-ui/react-icons": "^1.3.2",
47
+ "@tanstack/react-query": "^5.62.13",
48
+ "axios": ">=1.15.0",
49
+ "graphql": "^16.10.0",
50
+ "graphql-ws": "^5.16.0",
51
+ "immer": "^11.1.0",
52
+ "lucide-react": "^0.468.0",
53
+ "nanoid": "^5.1.6",
54
+ "react": "^19.0.0",
55
+ "react-dom": "^19.0.0",
56
+ "react-hook-form": "^7.56.4",
57
+ "react-router-dom": "^7.1.3",
58
+ "sonner": "^2.0.7",
59
+ "zustand": "^5.0.3"
60
+ },
61
+ "devDependencies": {
62
+ "@eslint/js": "^9.39.1",
63
+ "@graphql-codegen/add": "^5.0.0",
64
+ "@graphql-codegen/cli": "^5.0.0",
65
+ "@graphql-codegen/import-types-preset": "^3.0.0",
66
+ "@graphql-codegen/schema-ast": "^4.0.0",
67
+ "@graphql-codegen/typescript": "^4.0.0",
68
+ "@graphql-codegen/typescript-operations": "^4.0.0",
69
+ "@graphql-codegen/typescript-react-apollo": "^4.0.0",
70
+ "@types/node": "^24.5.2",
71
+ "@types/react": "^19.0.2",
72
+ "@types/react-dom": "^19.0.2",
73
+ "@vitejs/plugin-react": "^4.3.4",
74
+ "autoprefixer": "^10.4.20",
75
+ "eslint": "^9.18.0",
76
+ "eslint-plugin-react": "^7.37.5",
77
+ "eslint-plugin-react-hooks": "^7.0.1",
78
+ "lefthook": "^2.1.1",
79
+ "postcss": "^8.4.49",
80
+ "prettier": "^3.4.2",
81
+ "tailwindcss": "^4.0.0",
82
+ "typescript": "^5.9.0",
83
+ "typescript-eslint": "^8.46.0",
84
+ "vite": "8.0.8",
85
+ "vite-plugin-dts": "3.9.1"
86
+ },
87
+ "peerDependencies": {
88
+ "@apollo/client": "^4.0.11",
89
+ "react": "^19.0.0",
90
+ "react-dom": "^19.0.0",
91
+ "zustand": "^5.0.0"
92
+ },
93
+ "publishConfig": {
94
+ "access": "restricted"
95
+ },
96
+ "overrides": {
97
+ "lodash": ">=4.17.21",
98
+ "lodash-es": ">=4.17.21",
99
+ "dompurify": ">=3.3.4",
100
+ "fast-xml-parser": ">=4.5.5",
101
+ "@xmldom/xmldom": ">=0.8.12",
102
+ "swiper": ">=12.1.2",
103
+ "brace-expansion": ">=1.1.13",
104
+ "follow-redirects": ">=1.15.12",
105
+ "smol-toml": ">=1.6.1",
106
+ "axios": ">=1.15.0",
107
+ "flatted": ">=3.4.1",
108
+ "yaml": ">=2.8.3",
109
+ "picomatch": ">=2.3.2",
110
+ "immutable": ">=3.8.3",
111
+ "minimatch": ">=3.1.3"
112
+ }
113
+ }