@burdenoff/microfe-crewfoundry 2026.626.1 → 2026.703.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 (82) hide show
  1. package/dist/crewfoundry/components/forms/ConfirmDialog.js +43 -0
  2. package/dist/crewfoundry/components/forms/ConfirmDialog.js.map +1 -0
  3. package/dist/crewfoundry/components/forms/FormModal.js +220 -0
  4. package/dist/crewfoundry/components/forms/FormModal.js.map +1 -0
  5. package/dist/crewfoundry/components/forms/formValues.js +20 -0
  6. package/dist/crewfoundry/components/forms/formValues.js.map +1 -0
  7. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +255 -65
  8. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
  9. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +28 -17
  10. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
  11. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +57 -53
  12. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
  13. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +32 -23
  14. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
  15. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +44 -29
  16. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
  17. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +183 -57
  18. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
  19. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
  20. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +214 -92
  21. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
  22. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +165 -131
  23. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
  24. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +163 -133
  25. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
  26. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +269 -54
  27. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
  28. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +225 -78
  29. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
  30. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +213 -59
  31. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
  32. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +287 -90
  33. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
  34. package/dist/crewfoundry/pages/HiringJobsPagePage.js +49 -47
  35. package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
  36. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +166 -59
  37. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
  38. package/dist/crewfoundry/pages/HrEmployeesPagePage.js +274 -83
  39. package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
  40. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +198 -88
  41. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
  42. package/dist/crewfoundry/pages/HrPayrollPagePage.js +216 -88
  43. package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
  44. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +216 -66
  45. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
  46. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +6 -7
  47. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
  48. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +83 -68
  49. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
  50. package/dist/crewfoundry/pages/LearningCoursesPagePage.js +167 -46
  51. package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
  52. package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
  53. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +75 -55
  54. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
  55. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +152 -79
  56. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
  57. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +75 -63
  58. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
  59. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +3 -1
  60. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
  61. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
  62. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +235 -87
  63. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
  64. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +199 -86
  65. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
  66. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
  67. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +21 -40
  68. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
  69. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +117 -45
  70. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
  71. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +249 -90
  72. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
  73. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +47 -45
  74. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
  75. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
  76. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +262 -133
  77. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
  78. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +144 -77
  79. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
  80. package/dist/crewfoundry/store/crewfoundryStore.js +306 -51
  81. package/dist/crewfoundry/store/crewfoundryStore.js.map +1 -1
  82. package/package.json +1 -1
@@ -1,105 +1,177 @@
1
- import { useState as e } from "react";
2
- import { FolderKanban as t, Save as n } from "lucide-react";
3
- import { jsx as r, jsxs as i } from "react/jsx-runtime";
4
- import { Button as a, EmphasisPanel as o, GradientText as s, Input as c, PagePurpose as l, Textarea as u } from "@burdenoff/fe-libs/ui";
1
+ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
+ import { useState as t } from "react";
3
+ import { FolderKanban as n, Save as r } from "lucide-react";
4
+ import { useNavigate as i } from "react-router-dom";
5
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
6
+ import { Button as s, EmphasisPanel as c, GradientText as l, Input as u, PagePurpose as d, Textarea as f } from "@burdenoff/fe-libs/ui";
7
+ import { useGlobalUi as p } from "@burdenoff/fe-libs/shared/providers/shell";
5
8
  //#region src/crewfoundry/pages/ProjectsCreateProjectPagePage.tsx
6
- function d() {
7
- let [d, f] = e(""), [p, m] = e(""), [h, g] = e(""), [_, v] = e(""), [y, b] = e("");
8
- return /* @__PURE__ */ i("div", {
9
+ function m() {
10
+ let m = i(), { showToast: h } = p(), g = e((e) => e.addProject), _ = e((e) => e.teams), [v, y] = t(""), [b, x] = t(""), [S, C] = t(""), [w, T] = t(""), [E, D] = t(""), [O, k] = t(""), [A, j] = t(!1), M = async (e) => {
11
+ if (A) return;
12
+ if (v.trim() === "") {
13
+ h("Project Name is required", "warning");
14
+ return;
15
+ }
16
+ let t = _.find((e) => e.id === O), n = E.trim() === "" ? void 0 : Number(E), r = {
17
+ name: v.trim(),
18
+ description: b.trim(),
19
+ status: e,
20
+ priority: "medium",
21
+ ...S ? { startDate: S } : {},
22
+ ...w ? { endDate: w } : {},
23
+ ...n !== void 0 && !Number.isNaN(n) ? { budget: n } : {},
24
+ ...t ? {
25
+ teamId: t.id,
26
+ teamName: t.name
27
+ } : {}
28
+ };
29
+ j(!0);
30
+ try {
31
+ await g(r), h(e === "planning" ? "Draft project saved" : "Project created", "success"), m("../../projects/projects-page");
32
+ } catch (e) {
33
+ h(e instanceof Error ? e.message : "Unable to create project", "error");
34
+ } finally {
35
+ j(!1);
36
+ }
37
+ };
38
+ return /* @__PURE__ */ o("div", {
9
39
  className: "space-y-6 p-6 max-w-3xl",
10
40
  children: [
11
- /* @__PURE__ */ i("div", { children: [
12
- /* @__PURE__ */ r("h1", {
41
+ /* @__PURE__ */ o("div", { children: [
42
+ /* @__PURE__ */ a("h1", {
13
43
  className: "text-2xl font-semibold",
14
- children: /* @__PURE__ */ r(s, { children: "Create Project" })
44
+ children: /* @__PURE__ */ a(l, { children: "Create Project" })
15
45
  }),
16
- /* @__PURE__ */ r("p", {
46
+ /* @__PURE__ */ a("p", {
17
47
  className: "text-sm text-text-secondary",
18
48
  children: "Set up a new project for your team"
19
49
  }),
20
- /* @__PURE__ */ r(l, {
50
+ /* @__PURE__ */ a(d, {
21
51
  className: "mt-1",
22
52
  children: "Start a new project — define its scope, budget, and team here so you can begin tracking work toward a clear goal."
23
53
  })
24
54
  ] }),
25
- /* @__PURE__ */ i(o, { children: [/* @__PURE__ */ i("div", {
55
+ /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ o("div", {
26
56
  className: "mb-4 flex items-center gap-2 text-lg font-semibold",
27
- children: [/* @__PURE__ */ r(t, { className: "h-5 w-5" }), "Project Details"]
28
- }), /* @__PURE__ */ i("div", {
57
+ children: [/* @__PURE__ */ a(n, { className: "h-5 w-5" }), "Project Details"]
58
+ }), /* @__PURE__ */ o("div", {
29
59
  className: "space-y-4",
30
60
  children: [
31
- /* @__PURE__ */ i("div", {
61
+ /* @__PURE__ */ o("div", {
32
62
  className: "space-y-2",
33
- children: [/* @__PURE__ */ r("label", {
63
+ children: [/* @__PURE__ */ a("label", {
64
+ htmlFor: "cpName",
34
65
  className: "text-sm font-medium",
35
66
  children: "Project Name"
36
- }), /* @__PURE__ */ r(c, {
67
+ }), /* @__PURE__ */ a(u, {
68
+ id: "cpName",
37
69
  placeholder: "e.g. HR Analytics Dashboard v3",
38
- value: d,
39
- onChange: (e) => f(e.target.value)
70
+ value: v,
71
+ disabled: A,
72
+ onChange: (e) => y(e.target.value)
40
73
  })]
41
74
  }),
42
- /* @__PURE__ */ i("div", {
75
+ /* @__PURE__ */ o("div", {
43
76
  className: "space-y-2",
44
- children: [/* @__PURE__ */ r("label", {
77
+ children: [/* @__PURE__ */ a("label", {
78
+ htmlFor: "cpDesc",
45
79
  className: "text-sm font-medium",
46
80
  children: "Description"
47
- }), /* @__PURE__ */ r(u, {
81
+ }), /* @__PURE__ */ a(f, {
82
+ id: "cpDesc",
48
83
  placeholder: "Describe the project objectives and scope...",
49
84
  rows: 3,
50
- value: p,
51
- onChange: (e) => m(e.target.value)
85
+ value: b,
86
+ disabled: A,
87
+ onChange: (e) => x(e.target.value)
52
88
  })]
53
89
  }),
54
- /* @__PURE__ */ i("div", {
90
+ _.length > 0 ? /* @__PURE__ */ o("div", {
91
+ className: "space-y-2",
92
+ children: [/* @__PURE__ */ a("label", {
93
+ htmlFor: "cpTeam",
94
+ className: "text-sm font-medium",
95
+ children: "Team"
96
+ }), /* @__PURE__ */ o("select", {
97
+ id: "cpTeam",
98
+ className: "flex h-10 w-full rounded-input border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary transition-colors duration-200 focus-visible:border-border-focus focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50",
99
+ value: O,
100
+ disabled: A,
101
+ onChange: (e) => k(e.target.value),
102
+ children: [/* @__PURE__ */ a("option", {
103
+ value: "",
104
+ children: "Unassigned"
105
+ }), _.map((e) => /* @__PURE__ */ a("option", {
106
+ value: e.id,
107
+ children: e.name
108
+ }, e.id))]
109
+ })]
110
+ }) : null,
111
+ /* @__PURE__ */ o("div", {
55
112
  className: "grid grid-cols-2 gap-4",
56
- children: [/* @__PURE__ */ i("div", {
113
+ children: [/* @__PURE__ */ o("div", {
57
114
  className: "space-y-2",
58
- children: [/* @__PURE__ */ r("label", {
115
+ children: [/* @__PURE__ */ a("label", {
116
+ htmlFor: "cpStart",
59
117
  className: "text-sm font-medium",
60
118
  children: "Start Date"
61
- }), /* @__PURE__ */ r(c, {
119
+ }), /* @__PURE__ */ a(u, {
120
+ id: "cpStart",
62
121
  type: "date",
63
- value: h,
64
- onChange: (e) => g(e.target.value)
122
+ value: S,
123
+ disabled: A,
124
+ onChange: (e) => C(e.target.value)
65
125
  })]
66
- }), /* @__PURE__ */ i("div", {
126
+ }), /* @__PURE__ */ o("div", {
67
127
  className: "space-y-2",
68
- children: [/* @__PURE__ */ r("label", {
128
+ children: [/* @__PURE__ */ a("label", {
129
+ htmlFor: "cpEnd",
69
130
  className: "text-sm font-medium",
70
131
  children: "End Date"
71
- }), /* @__PURE__ */ r(c, {
132
+ }), /* @__PURE__ */ a(u, {
133
+ id: "cpEnd",
72
134
  type: "date",
73
- value: _,
74
- onChange: (e) => v(e.target.value)
135
+ value: w,
136
+ disabled: A,
137
+ onChange: (e) => T(e.target.value)
75
138
  })]
76
139
  })]
77
140
  }),
78
- /* @__PURE__ */ i("div", {
141
+ /* @__PURE__ */ o("div", {
79
142
  className: "space-y-2",
80
- children: [/* @__PURE__ */ r("label", {
143
+ children: [/* @__PURE__ */ a("label", {
144
+ htmlFor: "cpBudget",
81
145
  className: "text-sm font-medium",
82
146
  children: "Budget ($)"
83
- }), /* @__PURE__ */ r(c, {
147
+ }), /* @__PURE__ */ a(u, {
148
+ id: "cpBudget",
84
149
  type: "number",
85
150
  placeholder: "e.g. 250000",
86
- value: y,
87
- onChange: (e) => b(e.target.value)
151
+ value: E,
152
+ disabled: A,
153
+ onChange: (e) => D(e.target.value)
88
154
  })]
89
155
  })
90
156
  ]
91
157
  })] }),
92
- /* @__PURE__ */ i("div", {
158
+ /* @__PURE__ */ o("div", {
93
159
  className: "flex justify-end gap-2",
94
- children: [/* @__PURE__ */ r(a, {
160
+ children: [/* @__PURE__ */ a(s, {
95
161
  variant: "outline",
162
+ disabled: A,
163
+ onClick: () => M("planning"),
96
164
  children: "Save as Draft"
97
- }), /* @__PURE__ */ i(a, { children: [/* @__PURE__ */ r(n, { className: "h-4 w-4 mr-1" }), "Create Project"] })]
165
+ }), /* @__PURE__ */ o(s, {
166
+ disabled: A,
167
+ onClick: () => M("active"),
168
+ children: [/* @__PURE__ */ a(r, { className: "h-4 w-4 mr-1" }), A ? "Saving…" : "Create Project"]
169
+ })]
98
170
  })
99
171
  ]
100
172
  });
101
173
  }
102
174
  //#endregion
103
- export { d as ProjectsCreateProjectPagePage };
175
+ export { m as ProjectsCreateProjectPagePage };
104
176
 
105
177
  //# sourceMappingURL=ProjectsCreateProjectPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectsCreateProjectPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/ProjectsCreateProjectPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Button,\n EmphasisPanel,\n GradientText,\n Input,\n PagePurpose,\n Textarea,\n} from '@burdenoff/fe-libs/ui';\nimport { FolderKanban, Save } from 'lucide-react';\n\nexport function ProjectsCreateProjectPagePage() {\n const [name, setName] = useState('');\n const [description, setDescription] = useState('');\n const [startDate, setStartDate] = useState('');\n const [endDate, setEndDate] = useState('');\n const [budget, setBudget] = useState('');\n\n return (\n <div className=\"space-y-6 p-6 max-w-3xl\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Create Project</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Set up a new project for your team</p>\n <PagePurpose className=\"mt-1\">Start a new project — define its scope, budget, and team here so you can begin tracking work toward a clear goal.</PagePurpose>\n </div>\n <EmphasisPanel>\n <div className=\"mb-4 flex items-center gap-2 text-lg font-semibold\">\n <FolderKanban className=\"h-5 w-5\" />\n Project Details\n </div>\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Project Name</label>\n <Input\n placeholder=\"e.g. HR Analytics Dashboard v3\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Description</label>\n <Textarea\n placeholder=\"Describe the project objectives and scope...\"\n rows={3}\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Start Date</label>\n <Input type=\"date\" value={startDate} onChange={(e) => setStartDate(e.target.value)} />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">End Date</label>\n <Input type=\"date\" value={endDate} onChange={(e) => setEndDate(e.target.value)} />\n </div>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Budget ($)</label>\n <Input\n type=\"number\"\n placeholder=\"e.g. 250000\"\n value={budget}\n onChange={(e) => setBudget(e.target.value)}\n />\n </div>\n </div>\n </EmphasisPanel>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\">Save as Draft</Button>\n <Button>\n <Save className=\"h-4 w-4 mr-1\" />\n Create Project\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;AAWA,SAAgB,IAAgC;CAC9C,IAAM,CAAC,GAAM,KAAW,EAAS,GAAG,EAC9B,CAAC,GAAa,KAAkB,EAAS,GAAG,EAC5C,CAAC,GAAW,KAAgB,EAAS,GAAG,EACxC,CAAC,GAAS,KAAc,EAAS,GAAG,EACpC,CAAC,GAAQ,KAAa,EAAS,GAAG;AAExC,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA;IACE,kBAAC,MAAD;KAAI,WAAU;eACZ,kBAAC,GAAD,EAAA,UAAc,kBAA6B,CAAA;KACxC,CAAA;IACL,kBAAC,KAAD;KAAG,WAAU;eAA8B;KAAsC,CAAA;IACjF,kBAAC,GAAD;KAAa,WAAU;eAAO;KAA+H,CAAA;IACzJ,EAAA,CAAA;GACN,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA,EAAA,kBAEhC;OACN,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,SAAD;OAAO,WAAU;iBAAsB;OAAoB,CAAA,EAC3D,kBAAC,GAAD;OACE,aAAY;OACZ,OAAO;OACP,WAAW,MAAM,EAAQ,EAAE,OAAO,MAAM;OACxC,CAAA,CACE;;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,SAAD;OAAO,WAAU;iBAAsB;OAAmB,CAAA,EAC1D,kBAAC,GAAD;OACE,aAAY;OACZ,MAAM;OACN,OAAO;OACP,WAAW,MAAM,EAAe,EAAE,OAAO,MAAM;OAC/C,CAAA,CACE;;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,SAAD;QAAO,WAAU;kBAAsB;QAAkB,CAAA,EACzD,kBAAC,GAAD;QAAO,MAAK;QAAO,OAAO;QAAW,WAAW,MAAM,EAAa,EAAE,OAAO,MAAM;QAAI,CAAA,CAClF;UACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,SAAD;QAAO,WAAU;kBAAsB;QAAgB,CAAA,EACvD,kBAAC,GAAD;QAAO,MAAK;QAAO,OAAO;QAAS,WAAW,MAAM,EAAW,EAAE,OAAO,MAAM;QAAI,CAAA,CAC9E;SACF;;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,SAAD;OAAO,WAAU;iBAAsB;OAAkB,CAAA,EACzD,kBAAC,GAAD;OACE,MAAK;OACL,aAAY;OACZ,OAAO;OACP,WAAW,MAAM,EAAU,EAAE,OAAO,MAAM;OAC1C,CAAA,CACE;;KACF;MACQ,EAAA,CAAA;GAChB,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD;KAAQ,SAAQ;eAAU;KAAsB,CAAA,EAChD,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAAA,iBAE1B,EAAA,CAAA,CACL;;GACF"}
1
+ {"version":3,"file":"ProjectsCreateProjectPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/ProjectsCreateProjectPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Button,\n EmphasisPanel,\n GradientText,\n Input,\n PagePurpose,\n Textarea,\n} from '@burdenoff/fe-libs/ui';\nimport { useGlobalUi } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { FolderKanban, Save } from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { useCrewFoundryStore, type Project } from '../store/crewfoundryStore';\n\nexport function ProjectsCreateProjectPagePage() {\n const navigate = useNavigate();\n const { showToast } = useGlobalUi();\n const addProject = useCrewFoundryStore((state) => state.addProject);\n const teams = useCrewFoundryStore((state) => state.teams);\n\n const [name, setName] = useState('');\n const [description, setDescription] = useState('');\n const [startDate, setStartDate] = useState('');\n const [endDate, setEndDate] = useState('');\n const [budget, setBudget] = useState('');\n const [teamId, setTeamId] = useState('');\n const [submitting, setSubmitting] = useState(false);\n\n const handleCreate = async (status: Project['status']) => {\n if (submitting) return;\n if (name.trim() === '') {\n showToast('Project Name is required', 'warning');\n return;\n }\n const selectedTeam = teams.find((team) => team.id === teamId);\n const budgetValue = budget.trim() === '' ? undefined : Number(budget);\n // CreateCrewProjectInput only accepts a known field subset; build exactly\n // that shape. The store replaces this optimistic row with the server's\n // complete Project, so display-only fields need not be provided here.\n const payload: Partial<Project> = {\n name: name.trim(),\n description: description.trim(),\n status,\n priority: 'medium',\n ...(startDate ? { startDate } : {}),\n ...(endDate ? { endDate } : {}),\n ...(budgetValue !== undefined && !Number.isNaN(budgetValue) ? { budget: budgetValue } : {}),\n ...(selectedTeam ? { teamId: selectedTeam.id, teamName: selectedTeam.name } : {}),\n };\n setSubmitting(true);\n try {\n await addProject(payload as Project);\n showToast(\n status === 'planning' ? 'Draft project saved' : 'Project created',\n 'success'\n );\n navigate('../../projects/projects-page');\n } catch (error) {\n showToast(error instanceof Error ? error.message : 'Unable to create project', 'error');\n } finally {\n setSubmitting(false);\n }\n };\n\n const selectClass =\n 'flex h-10 w-full rounded-input border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary transition-colors duration-200 focus-visible:border-border-focus focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50';\n\n return (\n <div className=\"space-y-6 p-6 max-w-3xl\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Create Project</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Set up a new project for your team</p>\n <PagePurpose className=\"mt-1\">Start a new project — define its scope, budget, and team here so you can begin tracking work toward a clear goal.</PagePurpose>\n </div>\n <EmphasisPanel>\n <div className=\"mb-4 flex items-center gap-2 text-lg font-semibold\">\n <FolderKanban className=\"h-5 w-5\" />\n Project Details\n </div>\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label htmlFor=\"cpName\" className=\"text-sm font-medium\">\n Project Name\n </label>\n <Input\n id=\"cpName\"\n placeholder=\"e.g. HR Analytics Dashboard v3\"\n value={name}\n disabled={submitting}\n onChange={(e) => setName(e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <label htmlFor=\"cpDesc\" className=\"text-sm font-medium\">\n Description\n </label>\n <Textarea\n id=\"cpDesc\"\n placeholder=\"Describe the project objectives and scope...\"\n rows={3}\n value={description}\n disabled={submitting}\n onChange={(e) => setDescription(e.target.value)}\n />\n </div>\n {teams.length > 0 ? (\n <div className=\"space-y-2\">\n <label htmlFor=\"cpTeam\" className=\"text-sm font-medium\">\n Team\n </label>\n <select\n id=\"cpTeam\"\n className={selectClass}\n value={teamId}\n disabled={submitting}\n onChange={(e) => setTeamId(e.target.value)}\n >\n <option value=\"\">Unassigned</option>\n {teams.map((team) => (\n <option key={team.id} value={team.id}>\n {team.name}\n </option>\n ))}\n </select>\n </div>\n ) : null}\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label htmlFor=\"cpStart\" className=\"text-sm font-medium\">\n Start Date\n </label>\n <Input\n id=\"cpStart\"\n type=\"date\"\n value={startDate}\n disabled={submitting}\n onChange={(e) => setStartDate(e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <label htmlFor=\"cpEnd\" className=\"text-sm font-medium\">\n End Date\n </label>\n <Input\n id=\"cpEnd\"\n type=\"date\"\n value={endDate}\n disabled={submitting}\n onChange={(e) => setEndDate(e.target.value)}\n />\n </div>\n </div>\n <div className=\"space-y-2\">\n <label htmlFor=\"cpBudget\" className=\"text-sm font-medium\">\n Budget ($)\n </label>\n <Input\n id=\"cpBudget\"\n type=\"number\"\n placeholder=\"e.g. 250000\"\n value={budget}\n disabled={submitting}\n onChange={(e) => setBudget(e.target.value)}\n />\n </div>\n </div>\n </EmphasisPanel>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" disabled={submitting} onClick={() => handleCreate('planning')}>\n Save as Draft\n </Button>\n <Button disabled={submitting} onClick={() => handleCreate('active')}>\n <Save className=\"h-4 w-4 mr-1\" />\n {submitting ? 'Saving…' : 'Create Project'}\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}