@burdenoff/microfe-crewfoundry 2026.704.5 → 2026.704.7

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 (155) hide show
  1. package/dist/crewfoundry/CrewFoundryRoutes.js +51 -43
  2. package/dist/crewfoundry/CrewFoundryRoutes.js.map +1 -1
  3. package/dist/crewfoundry/components/forms/formValues.js +5 -2
  4. package/dist/crewfoundry/components/forms/formValues.js.map +1 -1
  5. package/dist/crewfoundry/components/viz/AllocationBar.js +68 -0
  6. package/dist/crewfoundry/components/viz/AllocationBar.js.map +1 -0
  7. package/dist/crewfoundry/components/viz/AreaChart.js +102 -0
  8. package/dist/crewfoundry/components/viz/AreaChart.js.map +1 -0
  9. package/dist/crewfoundry/components/viz/AvatarStack.js +36 -0
  10. package/dist/crewfoundry/components/viz/AvatarStack.js.map +1 -0
  11. package/dist/crewfoundry/components/viz/BarChart.js +83 -0
  12. package/dist/crewfoundry/components/viz/BarChart.js.map +1 -0
  13. package/dist/crewfoundry/components/viz/CertificateCard.js +118 -0
  14. package/dist/crewfoundry/components/viz/CertificateCard.js.map +1 -0
  15. package/dist/crewfoundry/components/viz/DonutChart.js +109 -0
  16. package/dist/crewfoundry/components/viz/DonutChart.js.map +1 -0
  17. package/dist/crewfoundry/components/viz/HBarFunnel.js +54 -0
  18. package/dist/crewfoundry/components/viz/HBarFunnel.js.map +1 -0
  19. package/dist/crewfoundry/components/viz/Heatmap.js +91 -0
  20. package/dist/crewfoundry/components/viz/Heatmap.js.map +1 -0
  21. package/dist/crewfoundry/components/viz/KanbanBoard.js +50 -0
  22. package/dist/crewfoundry/components/viz/KanbanBoard.js.map +1 -0
  23. package/dist/crewfoundry/components/viz/LineChart.js +123 -0
  24. package/dist/crewfoundry/components/viz/LineChart.js.map +1 -0
  25. package/dist/crewfoundry/components/viz/OrgTree.js +83 -0
  26. package/dist/crewfoundry/components/viz/OrgTree.js.map +1 -0
  27. package/dist/crewfoundry/components/viz/PathSteps.js +68 -0
  28. package/dist/crewfoundry/components/viz/PathSteps.js.map +1 -0
  29. package/dist/crewfoundry/components/viz/ProgressRing.js +68 -0
  30. package/dist/crewfoundry/components/viz/ProgressRing.js.map +1 -0
  31. package/dist/crewfoundry/components/viz/RatingStars.js +51 -0
  32. package/dist/crewfoundry/components/viz/RatingStars.js.map +1 -0
  33. package/dist/crewfoundry/components/viz/SegmentedTabs.js +69 -0
  34. package/dist/crewfoundry/components/viz/SegmentedTabs.js.map +1 -0
  35. package/dist/crewfoundry/components/viz/SkillBar.js +3 -0
  36. package/dist/crewfoundry/components/viz/Sparkline.js +74 -0
  37. package/dist/crewfoundry/components/viz/Sparkline.js.map +1 -0
  38. package/dist/crewfoundry/components/viz/StatCard.js +60 -0
  39. package/dist/crewfoundry/components/viz/StatCard.js.map +1 -0
  40. package/dist/crewfoundry/components/viz/StepProgress.js +3 -0
  41. package/dist/crewfoundry/components/viz/Timeline.js +66 -0
  42. package/dist/crewfoundry/components/viz/Timeline.js.map +1 -0
  43. package/dist/crewfoundry/components/viz/index.js +23 -0
  44. package/dist/crewfoundry/components/viz/lib/Avatar.js +30 -0
  45. package/dist/crewfoundry/components/viz/lib/Avatar.js.map +1 -0
  46. package/dist/crewfoundry/components/viz/lib/CartesianFrame.js +119 -0
  47. package/dist/crewfoundry/components/viz/lib/CartesianFrame.js.map +1 -0
  48. package/dist/crewfoundry/components/viz/lib/ResponsiveSvg.js +35 -0
  49. package/dist/crewfoundry/components/viz/lib/ResponsiveSvg.js.map +1 -0
  50. package/dist/crewfoundry/components/viz/lib/format.js +21 -0
  51. package/dist/crewfoundry/components/viz/lib/format.js.map +1 -0
  52. package/dist/crewfoundry/components/viz/lib/geometry.js +69 -0
  53. package/dist/crewfoundry/components/viz/lib/geometry.js.map +1 -0
  54. package/dist/crewfoundry/components/viz/lib/hooks.js +39 -0
  55. package/dist/crewfoundry/components/viz/lib/hooks.js.map +1 -0
  56. package/dist/crewfoundry/components/viz/lib/palette.js +27 -0
  57. package/dist/crewfoundry/components/viz/lib/palette.js.map +1 -0
  58. package/dist/crewfoundry/lib/analytics.js +323 -0
  59. package/dist/crewfoundry/lib/analytics.js.map +1 -0
  60. package/dist/crewfoundry/lib/companyFinance.js +16 -0
  61. package/dist/crewfoundry/lib/companyFinance.js.map +1 -0
  62. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +226 -283
  63. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  64. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +107 -120
  65. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
  66. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +122 -162
  67. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
  68. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +121 -158
  69. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
  70. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +316 -211
  71. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
  72. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +75 -27
  73. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
  74. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +167 -165
  75. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
  76. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +168 -109
  77. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
  78. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +401 -290
  79. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
  80. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +84 -75
  81. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
  82. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +368 -174
  83. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
  84. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +236 -201
  85. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
  86. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +369 -196
  87. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
  88. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +252 -249
  89. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
  90. package/dist/crewfoundry/pages/HiringJobsPagePage.js +210 -110
  91. package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
  92. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +216 -178
  93. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
  94. package/dist/crewfoundry/pages/HrEmployeeProfilePagePage.js +385 -0
  95. package/dist/crewfoundry/pages/HrEmployeeProfilePagePage.js.map +1 -0
  96. package/dist/crewfoundry/pages/HrEmployeesPagePage.js +189 -130
  97. package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
  98. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +397 -241
  99. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
  100. package/dist/crewfoundry/pages/HrPayrollPagePage.js +262 -147
  101. package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
  102. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +345 -167
  103. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
  104. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +98 -24
  105. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
  106. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +35 -31
  107. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
  108. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +289 -108
  109. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
  110. package/dist/crewfoundry/pages/LearningCoursesPagePage.js +221 -114
  111. package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
  112. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +136 -133
  113. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
  114. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +148 -97
  115. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
  116. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +264 -157
  117. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
  118. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
  119. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +85 -93
  120. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
  121. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +211 -122
  122. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
  123. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +94 -54
  124. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
  125. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +28 -25
  126. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
  127. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +290 -138
  128. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
  129. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +169 -79
  130. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
  131. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
  132. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +65 -61
  133. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
  134. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +296 -125
  135. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
  136. package/dist/crewfoundry/pages/ProjectsResourcingPagePage.js +187 -0
  137. package/dist/crewfoundry/pages/ProjectsResourcingPagePage.js.map +1 -0
  138. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +142 -76
  139. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
  140. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +93 -43
  141. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
  142. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
  143. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +250 -98
  144. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
  145. package/dist/crewfoundry/store/crewfoundryStore.js +1 -1
  146. package/dist/crewfoundry/store/crewfoundryStore.js.map +1 -1
  147. package/dist/crewfoundry/utils/cn.js +10 -0
  148. package/dist/crewfoundry/utils/cn.js.map +1 -0
  149. package/dist/crewfoundry/utils/courseProgress.js +46 -0
  150. package/dist/crewfoundry/utils/courseProgress.js.map +1 -0
  151. package/dist/node_modules/clsx/dist/clsx.js +18 -0
  152. package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
  153. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +1716 -0
  154. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
  155. package/package.json +1 -1
@@ -1,13 +1,66 @@
1
1
  import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { formatEnumLabel as t } from "../utils/formatEnumLabel.js";
3
- import { FormModal as n, useFormModal as r } from "../components/forms/FormModal.js";
4
- import { useState as i } from "react";
5
- import { Eye as a, Pencil as o, Pin as s, Plus as c, Trash2 as l } from "lucide-react";
6
- import { jsx as u, jsxs as d } from "react/jsx-runtime";
7
- import { AlertDialog as f, AlertDialogAction as p, AlertDialogCancel as m, AlertDialogContent as h, AlertDialogDescription as g, AlertDialogFooter as _, AlertDialogHeader as v, AlertDialogTitle as y, Badge as b, Button as x, Card as S, CardContent as C, CardHeader as w, CardTitle as T, GlassCard as E, GradientText as D, IllustratedEmptyState as O, PagePurpose as k } from "@burdenoff/fe-libs/ui";
8
- import { useGlobalUi as A } from "@burdenoff/fe-libs/shared/providers/shell";
3
+ import { AvatarStack as n } from "../components/viz/AvatarStack.js";
4
+ import "../components/viz/index.js";
5
+ import { FormModal as r, useFormModal as ee } from "../components/forms/FormModal.js";
6
+ import { useMemo as i, useState as a } from "react";
7
+ import { Eye as o, MessageSquare as s, Pencil as te, Pin as c, PinOff as ne, Plus as re, Search as ie, Send as ae, Trash2 as l } from "lucide-react";
8
+ import { useNavigate as u } from "react-router-dom";
9
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
10
+ import { AlertDialog as p, AlertDialogAction as m, AlertDialogCancel as h, AlertDialogContent as g, AlertDialogDescription as _, AlertDialogFooter as oe, AlertDialogHeader as v, AlertDialogTitle as se, Badge as y, Button as b, Card as ce, CardContent as x, CardHeader as S, CardTitle as C, GlassCard as le, GradientText as ue, IllustratedEmptyState as de, Input as w, PagePurpose as T } from "@burdenoff/fe-libs/ui";
11
+ import { useGlobalUi as E } from "@burdenoff/fe-libs/shared/providers/shell";
12
+ import { formatRelativeTime as D } from "@burdenoff/fe-libs/shared/utils";
9
13
  //#region src/crewfoundry/pages/CommunicationsAnnouncementsPagePage.tsx
10
- var j = [
14
+ var O = [
15
+ {
16
+ label: "General",
17
+ value: "general"
18
+ },
19
+ {
20
+ label: "HR",
21
+ value: "hr"
22
+ },
23
+ {
24
+ label: "IT",
25
+ value: "it"
26
+ },
27
+ {
28
+ label: "Emergency",
29
+ value: "emergency"
30
+ },
31
+ {
32
+ label: "Event",
33
+ value: "event"
34
+ }
35
+ ], k = [
36
+ {
37
+ label: "Low",
38
+ value: "low"
39
+ },
40
+ {
41
+ label: "Medium",
42
+ value: "medium"
43
+ },
44
+ {
45
+ label: "High",
46
+ value: "high"
47
+ },
48
+ {
49
+ label: "Urgent",
50
+ value: "urgent"
51
+ }
52
+ ], A = {
53
+ general: "bg-bg-sunken text-text-secondary",
54
+ hr: "bg-status-success-bg text-status-success-text",
55
+ it: "bg-bg-sunken text-text-secondary",
56
+ emergency: "bg-status-error-bg text-status-error-text",
57
+ event: "bg-status-info-bg text-status-info-text"
58
+ }, j = {
59
+ low: "bg-bg-sunken text-text-secondary",
60
+ medium: "bg-bg-sunken text-text-secondary",
61
+ high: "bg-status-warning-bg text-status-warning-text",
62
+ urgent: "bg-status-error-bg text-status-error-text"
63
+ }, M = [
11
64
  {
12
65
  name: "title",
13
66
  label: "Title",
@@ -39,28 +92,7 @@ var j = [
39
92
  label: "Category",
40
93
  type: "select",
41
94
  required: !0,
42
- options: [
43
- {
44
- label: "General",
45
- value: "general"
46
- },
47
- {
48
- label: "HR",
49
- value: "hr"
50
- },
51
- {
52
- label: "IT",
53
- value: "it"
54
- },
55
- {
56
- label: "Emergency",
57
- value: "emergency"
58
- },
59
- {
60
- label: "Event",
61
- value: "event"
62
- }
63
- ],
95
+ options: O,
64
96
  placeholder: "Select a category"
65
97
  },
66
98
  {
@@ -68,24 +100,7 @@ var j = [
68
100
  label: "Priority",
69
101
  type: "select",
70
102
  required: !0,
71
- options: [
72
- {
73
- label: "Low",
74
- value: "low"
75
- },
76
- {
77
- label: "Medium",
78
- value: "medium"
79
- },
80
- {
81
- label: "High",
82
- value: "high"
83
- },
84
- {
85
- label: "Urgent",
86
- value: "urgent"
87
- }
88
- ],
103
+ options: k,
89
104
  placeholder: "Select a priority"
90
105
  },
91
106
  {
@@ -99,12 +114,19 @@ var j = [
99
114
  label: "Pin to top",
100
115
  type: "switch"
101
116
  }
102
- ], M = j.filter((e) => e.name !== "author" && e.name !== "authorRole");
103
- function N() {
104
- let { announcements: N, addAnnouncement: P, updateAnnouncement: F, removeAnnouncement: I } = e(), { showToast: L } = A(), R = r(), [z, B] = i(null), [V, H] = i(!1), U = R.context, W = N.filter((e) => e.isPinned), G = N.filter((e) => !e.isPinned), K = async (e) => {
117
+ ], N = M.filter((e) => e.name !== "author" && e.name !== "authorRole"), P = (e) => {
118
+ if (!e) return "";
119
+ try {
120
+ return D(e);
121
+ } catch {
122
+ return e;
123
+ }
124
+ };
125
+ function F() {
126
+ let { announcements: D, notifications: O, addAnnouncement: k, updateAnnouncement: F, removeAnnouncement: I } = e(), { showToast: L } = E(), R = u(), z = ee(), [B, V] = a(null), [H, U] = a(!1), [W, fe] = a(""), [pe, me] = a(""), G = z.context, K = i(() => O.filter((e) => e.category === "communications"), [O]), q = W.trim().toLowerCase(), J = i(() => q.length === 0 ? D : D.filter((e) => `${e.title} ${e.content} ${e.tags.join(" ")}`.toLowerCase().includes(q)), [D, q]), Y = J.filter((e) => e.isPinned), X = J.filter((e) => !e.isPinned), he = async (e) => {
105
127
  let t = Array.isArray(e.tags) ? e.tags : [];
106
- if (U) {
107
- await F(U.id, {
128
+ if (G) {
129
+ await F(G.id, {
108
130
  title: String(e.title),
109
131
  content: String(e.content),
110
132
  category: String(e.category),
@@ -114,7 +136,7 @@ function N() {
114
136
  }), L("Announcement updated", "success");
115
137
  return;
116
138
  }
117
- await P({
139
+ await k({
118
140
  id: crypto.randomUUID(),
119
141
  title: String(e.title),
120
142
  content: String(e.content),
@@ -127,199 +149,282 @@ function N() {
127
149
  viewCount: 0,
128
150
  tags: t
129
151
  }), L("Announcement published", "success");
130
- }, q = async () => {
131
- if (z) {
132
- H(!0);
152
+ }, ge = async (e) => {
153
+ try {
154
+ await F(e.id, { isPinned: !e.isPinned }), L(e.isPinned ? "Unpinned" : "Pinned to top", "success");
155
+ } catch (e) {
156
+ L(e instanceof Error ? e.message : "Unable to update announcement", "error");
157
+ }
158
+ }, _e = async () => {
159
+ if (B) {
160
+ U(!0);
133
161
  try {
134
- await I(z.id), L("Announcement deleted", "success"), B(null);
162
+ await I(B.id), L("Announcement deleted", "success"), V(null);
135
163
  } catch (e) {
136
164
  L(e instanceof Error ? e.message : "Unable to delete announcement", "error");
137
165
  } finally {
138
- H(!1);
166
+ U(!1);
139
167
  }
140
168
  }
141
- }, J = U ? {
142
- title: U.title,
143
- content: U.content,
144
- category: U.category,
145
- priority: U.priority,
146
- tags: U.tags,
147
- isPinned: U.isPinned
148
- } : void 0, Y = (e) => /* @__PURE__ */ d("div", {
149
- className: "flex gap-1",
150
- children: [/* @__PURE__ */ u(x, {
151
- variant: "ghost",
152
- size: "icon",
153
- className: "h-7 w-7",
154
- "aria-label": `Edit announcement ${e.title}`,
155
- onClick: () => R.openModal(e),
156
- children: /* @__PURE__ */ u(o, { className: "h-3.5 w-3.5" })
157
- }), /* @__PURE__ */ u(x, {
158
- variant: "ghost",
159
- size: "icon",
160
- className: "h-7 w-7 text-status-error-text",
161
- "aria-label": `Delete announcement ${e.title}`,
162
- onClick: () => B(e),
163
- children: /* @__PURE__ */ u(l, { className: "h-3.5 w-3.5" })
169
+ }, Z = () => R("../communications/messages-page"), Q = G ? {
170
+ title: G.title,
171
+ content: G.content,
172
+ category: G.category,
173
+ priority: G.priority,
174
+ tags: G.tags,
175
+ isPinned: G.isPinned
176
+ } : void 0, $ = (e, r) => /* @__PURE__ */ f(le, {
177
+ treatment: r ? "glass" : "plain",
178
+ glow: r,
179
+ className: "transition-shadow hover:shadow-elevation-2",
180
+ children: [/* @__PURE__ */ f(S, {
181
+ className: "pb-3",
182
+ children: [/* @__PURE__ */ f("div", {
183
+ className: "flex items-start justify-between gap-3",
184
+ children: [/* @__PURE__ */ f("div", {
185
+ className: "flex flex-wrap items-center gap-2",
186
+ children: [
187
+ /* @__PURE__ */ d(y, {
188
+ className: `border-transparent text-[10px] ${j[e.priority]}`,
189
+ children: t(e.priority)
190
+ }),
191
+ /* @__PURE__ */ d(y, {
192
+ className: `border-transparent text-[10px] ${A[e.category]}`,
193
+ children: t(e.category)
194
+ }),
195
+ /* @__PURE__ */ f("span", {
196
+ className: "flex items-center gap-1.5 text-xs text-text-secondary",
197
+ children: [
198
+ /* @__PURE__ */ d(n, {
199
+ people: [{ name: e.author }],
200
+ size: 20
201
+ }),
202
+ e.author,
203
+ /* @__PURE__ */ f("span", {
204
+ className: "text-text-muted",
205
+ children: ["· ", P(e.createdAt)]
206
+ })
207
+ ]
208
+ })
209
+ ]
210
+ }), /* @__PURE__ */ f("div", {
211
+ className: "flex items-center gap-0.5",
212
+ children: [
213
+ /* @__PURE__ */ d(b, {
214
+ variant: "ghost",
215
+ size: "icon",
216
+ className: `h-7 w-7 ${e.isPinned ? "text-status-info-text" : ""}`,
217
+ "aria-label": e.isPinned ? `Unpin ${e.title}` : `Pin ${e.title}`,
218
+ "aria-pressed": e.isPinned,
219
+ onClick: () => void ge(e),
220
+ children: e.isPinned ? /* @__PURE__ */ d(ne, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ d(c, { className: "h-3.5 w-3.5" })
221
+ }),
222
+ /* @__PURE__ */ d(b, {
223
+ variant: "ghost",
224
+ size: "icon",
225
+ className: "h-7 w-7",
226
+ "aria-label": `Edit announcement ${e.title}`,
227
+ onClick: () => z.openModal(e),
228
+ children: /* @__PURE__ */ d(te, { className: "h-3.5 w-3.5" })
229
+ }),
230
+ /* @__PURE__ */ d(b, {
231
+ variant: "ghost",
232
+ size: "icon",
233
+ className: "h-7 w-7 text-status-error-text",
234
+ "aria-label": `Delete announcement ${e.title}`,
235
+ onClick: () => V(e),
236
+ children: /* @__PURE__ */ d(l, { className: "h-3.5 w-3.5" })
237
+ })
238
+ ]
239
+ })]
240
+ }), /* @__PURE__ */ d(C, {
241
+ className: "text-base",
242
+ children: e.title
243
+ })]
244
+ }), /* @__PURE__ */ f(x, {
245
+ className: "pt-0",
246
+ children: [
247
+ /* @__PURE__ */ d("p", {
248
+ className: "text-sm text-text-secondary",
249
+ children: e.content
250
+ }),
251
+ e.tags.length > 0 && /* @__PURE__ */ d("div", {
252
+ className: "mt-3 flex flex-wrap gap-1",
253
+ children: e.tags.map((e) => /* @__PURE__ */ d(y, {
254
+ variant: "outline",
255
+ className: "text-[9px]",
256
+ children: e
257
+ }, e))
258
+ }),
259
+ /* @__PURE__ */ f("div", {
260
+ className: "mt-3 flex items-center gap-1 text-xs text-text-muted",
261
+ children: [
262
+ /* @__PURE__ */ d(o, { className: "h-3 w-3" }),
263
+ e.viewCount,
264
+ " read"
265
+ ]
266
+ })
267
+ ]
164
268
  })]
165
- });
166
- return /* @__PURE__ */ d("div", {
269
+ }, e.id);
270
+ return /* @__PURE__ */ f("div", {
167
271
  className: "space-y-6 p-6",
168
272
  children: [
169
- /* @__PURE__ */ d("div", {
170
- className: "flex items-center justify-between",
171
- children: [/* @__PURE__ */ d("div", { children: [
172
- /* @__PURE__ */ u("h1", {
273
+ /* @__PURE__ */ f("div", {
274
+ className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",
275
+ children: [/* @__PURE__ */ f("div", { children: [
276
+ /* @__PURE__ */ d("h1", {
173
277
  className: "text-2xl font-semibold",
174
- children: /* @__PURE__ */ u(D, { children: "Announcements" })
278
+ children: /* @__PURE__ */ d(ue, { children: "Announcements" })
175
279
  }),
176
- /* @__PURE__ */ d("p", {
280
+ /* @__PURE__ */ f("p", {
177
281
  className: "text-sm text-text-secondary",
178
- children: [N.length, " company announcements"]
282
+ children: [D.length, " company announcements"]
179
283
  }),
180
- /* @__PURE__ */ u(k, {
284
+ /* @__PURE__ */ d(T, {
181
285
  className: "mt-1",
182
286
  children: "Broadcast company-wide news and updates so everyone stays informed — post announcements here when you have something the whole team needs to see."
183
287
  })
184
- ] }), /* @__PURE__ */ d(x, {
288
+ ] }), /* @__PURE__ */ f(b, {
185
289
  size: "sm",
186
- onClick: () => R.openModal(),
187
- children: [/* @__PURE__ */ u(c, { className: "h-4 w-4 mr-1" }), "New Announcement"]
290
+ onClick: () => z.openModal(),
291
+ children: [/* @__PURE__ */ d(re, { className: "h-4 w-4 mr-1" }), "New Announcement"]
188
292
  })]
189
293
  }),
190
- W.length > 0 && /* @__PURE__ */ d("div", {
191
- className: "space-y-3",
192
- children: [/* @__PURE__ */ d("h2", {
193
- className: "text-sm font-medium flex items-center gap-1",
194
- children: [/* @__PURE__ */ u(s, { className: "h-4 w-4" }), "Pinned"]
195
- }), W.map((e) => /* @__PURE__ */ d(E, {
196
- treatment: "glass",
197
- glow: !0,
198
- children: [/* @__PURE__ */ u(w, { children: /* @__PURE__ */ d("div", {
199
- className: "flex items-center justify-between",
200
- children: [/* @__PURE__ */ u(T, {
201
- className: "text-base",
202
- children: e.title
203
- }), /* @__PURE__ */ d("div", {
204
- className: "flex items-center gap-2",
205
- children: [/* @__PURE__ */ d("div", {
206
- className: "flex gap-1",
207
- children: [/* @__PURE__ */ u(b, {
208
- variant: e.priority === "urgent" ? "destructive" : e.priority === "high" ? "default" : "secondary",
209
- className: "text-[10px]",
210
- children: t(e.priority)
211
- }), /* @__PURE__ */ u(b, {
212
- variant: "outline",
213
- className: "text-[10px]",
214
- children: e.category
215
- })]
216
- }), Y(e)]
217
- })]
218
- }) }), /* @__PURE__ */ d(C, { children: [/* @__PURE__ */ u("p", {
219
- className: "text-sm text-text-secondary",
220
- children: e.content
221
- }), /* @__PURE__ */ d("div", {
222
- className: "flex items-center justify-between mt-3 text-xs text-text-secondary",
223
- children: [/* @__PURE__ */ d("span", { children: [
224
- e.author,
225
- " · ",
226
- e.authorRole
227
- ] }), /* @__PURE__ */ d("div", {
228
- className: "flex items-center gap-3",
229
- children: [/* @__PURE__ */ d("span", {
230
- className: "flex items-center gap-1",
231
- children: [/* @__PURE__ */ u(a, { className: "h-3 w-3" }), e.viewCount]
232
- }), /* @__PURE__ */ u("span", { children: e.createdAt })]
233
- })]
234
- })] })]
235
- }, e.id))]
236
- }),
237
- N.length === 0 && /* @__PURE__ */ u(O, {
238
- illustration: "empty-notifications",
239
- title: "No announcements yet",
240
- description: "Post an announcement to share news with the whole team."
294
+ /* @__PURE__ */ f("div", {
295
+ className: "relative max-w-md",
296
+ children: [/* @__PURE__ */ d(ie, { className: "absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-text-secondary" }), /* @__PURE__ */ d(w, {
297
+ placeholder: "Search announcements...",
298
+ className: "pl-9",
299
+ value: W,
300
+ onChange: (e) => fe(e.target.value)
301
+ })]
241
302
  }),
242
- /* @__PURE__ */ u("div", {
243
- className: "space-y-3",
244
- children: G.map((e) => /* @__PURE__ */ d(S, { children: [/* @__PURE__ */ u(w, { children: /* @__PURE__ */ d("div", {
245
- className: "flex items-center justify-between",
246
- children: [/* @__PURE__ */ u(T, {
247
- className: "text-base",
248
- children: e.title
249
- }), /* @__PURE__ */ d("div", {
250
- className: "flex items-center gap-2",
251
- children: [/* @__PURE__ */ d("div", {
252
- className: "flex gap-1",
253
- children: [/* @__PURE__ */ u(b, {
254
- variant: e.priority === "urgent" ? "destructive" : e.priority === "high" ? "default" : "secondary",
255
- className: "text-[10px]",
256
- children: t(e.priority)
257
- }), /* @__PURE__ */ u(b, {
258
- variant: "outline",
259
- className: "text-[10px]",
260
- children: e.category
303
+ /* @__PURE__ */ f("div", {
304
+ className: "grid gap-6 lg:grid-cols-3",
305
+ children: [/* @__PURE__ */ f("div", {
306
+ className: "space-y-4 lg:col-span-2",
307
+ children: [
308
+ J.length === 0 && /* @__PURE__ */ d(de, {
309
+ illustration: "empty-notifications",
310
+ title: q ? "No announcements match" : "No announcements yet",
311
+ description: q ? "Try a different search term." : "Post an announcement to share news with the whole team."
312
+ }),
313
+ Y.length > 0 && /* @__PURE__ */ f("div", {
314
+ className: "space-y-3",
315
+ children: [/* @__PURE__ */ f("h2", {
316
+ className: "flex items-center gap-1 text-sm font-medium",
317
+ children: [/* @__PURE__ */ d(c, { className: "h-4 w-4" }), "Pinned"]
318
+ }), Y.map((e) => $(e, !0))]
319
+ }),
320
+ X.length > 0 && /* @__PURE__ */ d("div", {
321
+ className: "space-y-3",
322
+ children: X.map((e) => $(e, !1))
323
+ })
324
+ ]
325
+ }), /* @__PURE__ */ d("div", {
326
+ className: "lg:col-span-1",
327
+ children: /* @__PURE__ */ f(ce, {
328
+ className: "lg:sticky lg:top-6",
329
+ children: [/* @__PURE__ */ f(S, {
330
+ className: "flex flex-row items-center justify-between space-y-0 pb-3",
331
+ children: [/* @__PURE__ */ d(C, {
332
+ className: "text-base",
333
+ children: "Conversations"
334
+ }), /* @__PURE__ */ f(b, {
335
+ variant: "ghost",
336
+ size: "sm",
337
+ onClick: Z,
338
+ children: [/* @__PURE__ */ d(s, { className: "mr-1 h-3.5 w-3.5" }), "Open"]
339
+ })]
340
+ }), /* @__PURE__ */ f(x, {
341
+ className: "space-y-1",
342
+ children: [K.length === 0 ? /* @__PURE__ */ d("p", {
343
+ className: "py-6 text-center text-xs text-text-muted",
344
+ children: "No active conversations yet. Team channels will appear here as they get activity."
345
+ }) : K.map((e) => /* @__PURE__ */ f("button", {
346
+ type: "button",
347
+ onClick: Z,
348
+ className: "flex w-full items-start gap-3 rounded-[var(--radius-card)] p-2 text-left transition-colors hover:bg-bg-sunken",
349
+ children: [
350
+ /* @__PURE__ */ d(n, {
351
+ people: [{ name: e.title }],
352
+ size: 32
353
+ }),
354
+ /* @__PURE__ */ f("div", {
355
+ className: "min-w-0 flex-1",
356
+ children: [/* @__PURE__ */ f("div", {
357
+ className: "flex items-center justify-between gap-2",
358
+ children: [/* @__PURE__ */ d("p", {
359
+ className: "truncate text-sm font-medium",
360
+ children: e.title
361
+ }), /* @__PURE__ */ d("span", {
362
+ className: "shrink-0 text-[10px] text-text-muted",
363
+ children: P(e.createdAt)
364
+ })]
365
+ }), /* @__PURE__ */ d("p", {
366
+ className: "truncate text-xs text-text-secondary",
367
+ children: e.message
368
+ })]
369
+ }),
370
+ !e.read && /* @__PURE__ */ d("span", {
371
+ className: "mt-1.5 h-2 w-2 shrink-0 rounded-full bg-status-success-text",
372
+ "aria-label": "Unread"
373
+ })
374
+ ]
375
+ }, e.id)), /* @__PURE__ */ f("div", {
376
+ className: "flex items-center gap-2 pt-3",
377
+ children: [/* @__PURE__ */ d(w, {
378
+ placeholder: "Type a message...",
379
+ className: "h-9 flex-1",
380
+ value: pe,
381
+ onChange: (e) => me(e.target.value),
382
+ onKeyDown: (e) => {
383
+ e.key === "Enter" && Z();
384
+ },
385
+ "aria-label": "Message composer"
386
+ }), /* @__PURE__ */ d(b, {
387
+ size: "icon",
388
+ className: "h-9 w-9 shrink-0",
389
+ "aria-label": "Open messages to send",
390
+ onClick: Z,
391
+ children: /* @__PURE__ */ d(ae, { className: "h-4 w-4" })
392
+ })]
261
393
  })]
262
- }), Y(e)]
263
- })]
264
- }) }), /* @__PURE__ */ d(C, { children: [
265
- /* @__PURE__ */ u("p", {
266
- className: "text-sm text-text-secondary",
267
- children: e.content
268
- }),
269
- /* @__PURE__ */ d("div", {
270
- className: "flex items-center justify-between mt-3 text-xs text-text-secondary",
271
- children: [/* @__PURE__ */ d("span", { children: [
272
- e.author,
273
- " · ",
274
- e.authorRole
275
- ] }), /* @__PURE__ */ d("div", {
276
- className: "flex items-center gap-3",
277
- children: [/* @__PURE__ */ d("span", {
278
- className: "flex items-center gap-1",
279
- children: [/* @__PURE__ */ u(a, { className: "h-3 w-3" }), e.viewCount]
280
- }), /* @__PURE__ */ u("span", { children: e.createdAt })]
281
394
  })]
282
- }),
283
- /* @__PURE__ */ u("div", {
284
- className: "flex gap-1 mt-2",
285
- children: e.tags.map((e) => /* @__PURE__ */ u(b, {
286
- variant: "outline",
287
- className: "text-[9px]",
288
- children: e
289
- }, e))
290
395
  })
291
- ] })] }, e.id))
396
+ })]
292
397
  }),
293
- /* @__PURE__ */ u(n, {
294
- open: R.open,
295
- onOpenChange: R.onOpenChange,
296
- title: U ? "Edit Announcement" : "New Announcement",
297
- description: U ? "Update this announcement for the whole team." : "Share news and updates across the company.",
298
- fields: U ? M : j,
299
- initialValues: J,
300
- submitLabel: U ? "Save changes" : "Publish",
301
- onSubmit: K
398
+ /* @__PURE__ */ d(r, {
399
+ open: z.open,
400
+ onOpenChange: z.onOpenChange,
401
+ title: G ? "Edit Announcement" : "New Announcement",
402
+ description: G ? "Update this announcement for the whole team." : "Share news and updates across the company.",
403
+ fields: G ? N : M,
404
+ initialValues: Q,
405
+ submitLabel: G ? "Save changes" : "Publish",
406
+ onSubmit: he
302
407
  }),
303
- /* @__PURE__ */ u(f, {
304
- open: z !== null,
408
+ /* @__PURE__ */ d(p, {
409
+ open: B !== null,
305
410
  onOpenChange: (e) => {
306
- e || B(null);
411
+ e || V(null);
307
412
  },
308
- children: /* @__PURE__ */ d(h, { children: [/* @__PURE__ */ d(v, { children: [/* @__PURE__ */ u(y, { children: "Delete announcement?" }), /* @__PURE__ */ u(g, { children: z ? `"${z.title}" will be permanently removed. This cannot be undone.` : "" })] }), /* @__PURE__ */ d(_, { children: [/* @__PURE__ */ u(m, {
309
- disabled: V,
413
+ children: /* @__PURE__ */ f(g, { children: [/* @__PURE__ */ f(v, { children: [/* @__PURE__ */ d(se, { children: "Delete announcement?" }), /* @__PURE__ */ d(_, { children: B ? `"${B.title}" will be permanently removed. This cannot be undone.` : "" })] }), /* @__PURE__ */ f(oe, { children: [/* @__PURE__ */ d(h, {
414
+ disabled: H,
310
415
  children: "Cancel"
311
- }), /* @__PURE__ */ u(p, {
416
+ }), /* @__PURE__ */ d(m, {
312
417
  onClick: (e) => {
313
- e.preventDefault(), q();
418
+ e.preventDefault(), _e();
314
419
  },
315
- disabled: V,
316
- children: V ? "Deleting…" : "Delete"
420
+ disabled: H,
421
+ children: H ? "Deleting…" : "Delete"
317
422
  })] })] })
318
423
  })
319
424
  ]
320
425
  });
321
426
  }
322
427
  //#endregion
323
- export { N as CommunicationsAnnouncementsPagePage };
428
+ export { F as CommunicationsAnnouncementsPagePage };
324
429
 
325
430
  //# sourceMappingURL=CommunicationsAnnouncementsPagePage.js.map