@burdenoff/microfe-planmagnet 2026.730.1 → 2026.730.3

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.
@@ -2,11 +2,11 @@ import { usePlanMagnet as e } from "../providers/PlanMagnetProvider.js";
2
2
  import { useState as t } from "react";
3
3
  import { CheckSquare as n, Save as r, X as i } from "lucide-react";
4
4
  import { gql as a } from "@apollo/client";
5
- import { useMutation as o } from "@apollo/client/react";
6
- import { jsx as s, jsxs as c } from "react/jsx-runtime";
7
- import { Button as l, Card as u, CardContent as d, CardHeader as f, CardTitle as p, Input as m } from "@burdenoff/fe-libs/ui";
5
+ import { useMutation as o, useQuery as s } from "@apollo/client/react";
6
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
7
+ import { Button as u, Card as d, CardContent as f, CardHeader as p, CardTitle as m, Input as h } from "@burdenoff/fe-libs/ui";
8
8
  //#region src/planmagnet/pages/TasksCreateTaskPagePage.tsx
9
- var h = a`
9
+ var g = a`
10
10
  mutation CreateWorkItem($input: PlanmagnetCreateWorkItemInput!) {
11
11
  planmagnetCreateWorkItem(input: $input) {
12
12
  id
@@ -22,112 +22,137 @@ var h = a`
22
22
  createdAt
23
23
  }
24
24
  }
25
+ `, _ = a`
26
+ query GetProjectsForTaskCreate($workspaceId: ID!) {
27
+ planmagnetProjects(workspaceId: $workspaceId, pagination: { first: 100 }) {
28
+ items {
29
+ id
30
+ name
31
+ key
32
+ }
33
+ }
34
+ }
25
35
  `;
26
- function g() {
27
- let { workspaceId: a } = e(), [g, _] = t({
36
+ function v() {
37
+ let { workspaceId: a } = e(), [v, y] = t({
28
38
  title: "",
29
39
  description: "",
30
- project: "",
40
+ projectId: "",
31
41
  priority: "MEDIUM",
32
42
  type: "STORY",
33
43
  storyPoints: "5",
34
44
  labels: "",
35
45
  sprintId: "",
36
46
  dueDate: ""
37
- }), [v, { loading: y, error: b }] = o(h, { refetchQueries: ["GetWorkItems"] });
38
- return /* @__PURE__ */ c("div", {
47
+ }), { data: b } = s(_, {
48
+ variables: { workspaceId: a ?? "default" },
49
+ skip: !a
50
+ }), x = b?.planmagnetProjects?.items ?? [], S = v.projectId || x[0]?.id || "", [C, { loading: w, error: T }] = o(g, { refetchQueries: ["GetWorkItems"] });
51
+ return /* @__PURE__ */ l("div", {
39
52
  className: "space-y-6 p-6 max-w-4xl",
40
53
  children: [
41
- /* @__PURE__ */ c("div", {
54
+ /* @__PURE__ */ l("div", {
42
55
  className: "flex items-center justify-between",
43
- children: [/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("h1", {
56
+ children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("h1", {
44
57
  className: "text-2xl font-semibold",
45
58
  children: "Create Task"
46
- }), /* @__PURE__ */ s("p", {
59
+ }), /* @__PURE__ */ c("p", {
47
60
  className: "text-sm text-muted-foreground",
48
61
  children: "Add a new task to the project backlog."
49
- })] }), /* @__PURE__ */ c("div", {
62
+ })] }), /* @__PURE__ */ l("div", {
50
63
  className: "flex gap-2",
51
- children: [/* @__PURE__ */ c(l, {
64
+ children: [/* @__PURE__ */ l(u, {
52
65
  variant: "outline",
53
66
  size: "sm",
54
- children: [/* @__PURE__ */ s(i, { className: "mr-1 h-4 w-4" }), "Cancel"]
55
- }), /* @__PURE__ */ c(l, {
67
+ children: [/* @__PURE__ */ c(i, { className: "mr-1 h-4 w-4" }), "Cancel"]
68
+ }), /* @__PURE__ */ l(u, {
56
69
  size: "sm",
57
70
  onClick: async () => {
58
- !g.title.trim() || !a || await v({ variables: { input: {
59
- title: g.title,
60
- description: g.description || void 0,
61
- type: g.type,
62
- priority: g.priority,
63
- storyPoints: g.storyPoints ? parseInt(g.storyPoints, 10) : void 0,
64
- labels: g.labels ? g.labels.split(",").map((e) => e.trim()).filter(Boolean) : void 0,
65
- sprintId: g.sprintId || void 0,
66
- dueDate: g.dueDate || void 0
71
+ !v.title.trim() || !S || !a || await C({ variables: { input: {
72
+ projectId: S,
73
+ title: v.title,
74
+ description: v.description || void 0,
75
+ type: v.type,
76
+ priority: v.priority,
77
+ storyPoints: v.storyPoints ? parseInt(v.storyPoints, 10) : void 0,
78
+ labels: v.labels ? v.labels.split(",").map((e) => e.trim()).filter(Boolean) : void 0,
79
+ sprintId: v.sprintId || void 0,
80
+ dueDate: v.dueDate || void 0
67
81
  } } });
68
82
  },
69
- disabled: y,
70
- children: [/* @__PURE__ */ s(r, { className: "mr-1 h-4 w-4" }), y ? "Creating..." : "Create Task"]
83
+ disabled: w || !v.title.trim() || !S,
84
+ children: [/* @__PURE__ */ c(r, { className: "mr-1 h-4 w-4" }), w ? "Creating..." : "Create Task"]
71
85
  })]
72
86
  })]
73
87
  }),
74
- b && /* @__PURE__ */ c("div", {
88
+ T && /* @__PURE__ */ l("div", {
75
89
  className: "p-6 text-red-500",
76
- children: ["Error: ", b.message]
90
+ children: ["Error: ", T.message]
77
91
  }),
78
- /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ s(f, { children: /* @__PURE__ */ c(p, {
92
+ /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ c(p, { children: /* @__PURE__ */ l(m, {
79
93
  className: "flex items-center gap-2",
80
- children: [/* @__PURE__ */ s(n, { className: "h-4 w-4" }), "Task Details"]
81
- }) }), /* @__PURE__ */ c(d, {
94
+ children: [/* @__PURE__ */ c(n, { className: "h-4 w-4" }), "Task Details"]
95
+ }) }), /* @__PURE__ */ l(f, {
82
96
  className: "space-y-4",
83
97
  children: [
84
- /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("label", {
98
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
85
99
  className: "text-sm font-medium",
86
100
  children: "Title"
87
- }), /* @__PURE__ */ s(m, {
88
- value: g.title,
89
- onChange: (e) => _({
90
- ...g,
101
+ }), /* @__PURE__ */ c(h, {
102
+ value: v.title,
103
+ onChange: (e) => y({
104
+ ...v,
91
105
  title: e.target.value
92
106
  }),
93
107
  className: "mt-1",
94
108
  placeholder: "e.g. Implement search query parser"
95
109
  })] }),
96
- /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("label", {
110
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
97
111
  className: "text-sm font-medium",
98
112
  children: "Description"
99
- }), /* @__PURE__ */ s("textarea", {
113
+ }), /* @__PURE__ */ c("textarea", {
100
114
  className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[100px]",
101
- value: g.description,
102
- onChange: (e) => _({
103
- ...g,
115
+ value: v.description,
116
+ onChange: (e) => y({
117
+ ...v,
104
118
  description: e.target.value
105
119
  }),
106
120
  placeholder: "Describe the task requirements..."
107
121
  })] }),
108
- /* @__PURE__ */ c("div", {
122
+ /* @__PURE__ */ l("div", {
109
123
  className: "grid grid-cols-3 gap-4",
110
124
  children: [
111
- /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("label", {
125
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
112
126
  className: "text-sm font-medium",
113
127
  children: "Project"
114
- }), /* @__PURE__ */ s(m, {
115
- value: g.project,
116
- onChange: (e) => _({
117
- ...g,
118
- project: e.target.value
128
+ }), /* @__PURE__ */ l("select", {
129
+ className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",
130
+ value: S,
131
+ onChange: (e) => y({
132
+ ...v,
133
+ projectId: e.target.value
119
134
  }),
120
- className: "mt-1",
121
- placeholder: "Project name"
135
+ children: [x.length === 0 && /* @__PURE__ */ c("option", {
136
+ value: "",
137
+ disabled: !0,
138
+ children: "No projects available"
139
+ }), x.map((e) => /* @__PURE__ */ l("option", {
140
+ value: e.id,
141
+ children: [
142
+ e.key,
143
+ " — ",
144
+ e.name
145
+ ]
146
+ }, e.id))]
122
147
  })] }),
123
- /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("label", {
148
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
124
149
  className: "text-sm font-medium",
125
150
  children: "Priority"
126
- }), /* @__PURE__ */ s("select", {
151
+ }), /* @__PURE__ */ c("select", {
127
152
  className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",
128
- value: g.priority,
129
- onChange: (e) => _({
130
- ...g,
153
+ value: v.priority,
154
+ onChange: (e) => y({
155
+ ...v,
131
156
  priority: e.target.value
132
157
  }),
133
158
  children: [
@@ -135,19 +160,19 @@ function g() {
135
160
  "MEDIUM",
136
161
  "HIGH",
137
162
  "CRITICAL"
138
- ].map((e) => /* @__PURE__ */ s("option", {
163
+ ].map((e) => /* @__PURE__ */ c("option", {
139
164
  value: e,
140
165
  children: e.toLowerCase()
141
166
  }, e))
142
167
  })] }),
143
- /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("label", {
168
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
144
169
  className: "text-sm font-medium",
145
170
  children: "Type"
146
- }), /* @__PURE__ */ s("select", {
171
+ }), /* @__PURE__ */ c("select", {
147
172
  className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",
148
- value: g.type,
149
- onChange: (e) => _({
150
- ...g,
173
+ value: v.type,
174
+ onChange: (e) => y({
175
+ ...v,
151
176
  type: e.target.value
152
177
  }),
153
178
  children: [
@@ -156,61 +181,61 @@ function g() {
156
181
  "TASK",
157
182
  "EPIC",
158
183
  "SUBTASK"
159
- ].map((e) => /* @__PURE__ */ s("option", {
184
+ ].map((e) => /* @__PURE__ */ c("option", {
160
185
  value: e,
161
186
  children: e.toLowerCase()
162
187
  }, e))
163
188
  })] })
164
189
  ]
165
190
  }),
166
- /* @__PURE__ */ c("div", {
191
+ /* @__PURE__ */ l("div", {
167
192
  className: "grid grid-cols-3 gap-4",
168
193
  children: [
169
- /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("label", {
194
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
170
195
  className: "text-sm font-medium",
171
196
  children: "Story Points"
172
- }), /* @__PURE__ */ s(m, {
197
+ }), /* @__PURE__ */ c(h, {
173
198
  type: "number",
174
- value: g.storyPoints,
175
- onChange: (e) => _({
176
- ...g,
199
+ value: v.storyPoints,
200
+ onChange: (e) => y({
201
+ ...v,
177
202
  storyPoints: e.target.value
178
203
  }),
179
204
  className: "mt-1"
180
205
  })] }),
181
- /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("label", {
206
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
182
207
  className: "text-sm font-medium",
183
208
  children: "Sprint ID"
184
- }), /* @__PURE__ */ s(m, {
185
- value: g.sprintId,
186
- onChange: (e) => _({
187
- ...g,
209
+ }), /* @__PURE__ */ c(h, {
210
+ value: v.sprintId,
211
+ onChange: (e) => y({
212
+ ...v,
188
213
  sprintId: e.target.value
189
214
  }),
190
215
  className: "mt-1",
191
216
  placeholder: "Sprint ID"
192
217
  })] }),
193
- /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("label", {
218
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
194
219
  className: "text-sm font-medium",
195
220
  children: "Due Date"
196
- }), /* @__PURE__ */ s(m, {
221
+ }), /* @__PURE__ */ c(h, {
197
222
  type: "date",
198
- value: g.dueDate,
199
- onChange: (e) => _({
200
- ...g,
223
+ value: v.dueDate,
224
+ onChange: (e) => y({
225
+ ...v,
201
226
  dueDate: e.target.value
202
227
  }),
203
228
  className: "mt-1"
204
229
  })] })
205
230
  ]
206
231
  }),
207
- /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("label", {
232
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
208
233
  className: "text-sm font-medium",
209
234
  children: "Labels (comma-separated)"
210
- }), /* @__PURE__ */ s(m, {
211
- value: g.labels,
212
- onChange: (e) => _({
213
- ...g,
235
+ }), /* @__PURE__ */ c(h, {
236
+ value: v.labels,
237
+ onChange: (e) => y({
238
+ ...v,
214
239
  labels: e.target.value
215
240
  }),
216
241
  className: "mt-1",
@@ -222,6 +247,6 @@ function g() {
222
247
  });
223
248
  }
224
249
  //#endregion
225
- export { g as TasksCreateTaskPagePage };
250
+ export { v as TasksCreateTaskPagePage };
226
251
 
227
252
  //# sourceMappingURL=TasksCreateTaskPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TasksCreateTaskPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/TasksCreateTaskPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useMutation } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Button, Input } from '@burdenoff/fe-libs/ui';\nimport { Save, X, CheckSquare } from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\n\nconst CREATE_WORK_ITEM = gql`\n mutation CreateWorkItem($input: PlanmagnetCreateWorkItemInput!) {\n planmagnetCreateWorkItem(input: $input) {\n id\n title\n type\n status\n priority\n key\n storyPoints\n dueDate\n labels\n sprintId\n createdAt\n }\n }\n`;\n\nexport function TasksCreateTaskPagePage() {\n const { workspaceId } = usePlanMagnet();\n const [form, setForm] = useState({\n title: '',\n description: '',\n project: '',\n priority: 'MEDIUM',\n type: 'STORY',\n storyPoints: '5',\n labels: '',\n sprintId: '',\n dueDate: '',\n });\n\n const [createWorkItem, { loading: saving, error }] = useMutation(CREATE_WORK_ITEM, {\n refetchQueries: ['GetWorkItems'],\n });\n\n const handleCreate = async () => {\n if (!form.title.trim() || !workspaceId) return;\n await createWorkItem({\n variables: {\n input: {\n title: form.title,\n description: form.description || undefined,\n type: form.type,\n priority: form.priority,\n storyPoints: form.storyPoints ? parseInt(form.storyPoints, 10) : undefined,\n labels: form.labels\n ? form.labels\n .split(',')\n .map((l) => l.trim())\n .filter(Boolean)\n : undefined,\n sprintId: form.sprintId || undefined,\n dueDate: form.dueDate || undefined,\n },\n },\n });\n };\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Create Task</h1>\n <p className=\"text-sm text-muted-foreground\">Add a new task to the project backlog.</p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <X className=\"mr-1 h-4 w-4\" />\n Cancel\n </Button>\n <Button size=\"sm\" onClick={handleCreate} disabled={saving}>\n <Save className=\"mr-1 h-4 w-4\" />\n {saving ? 'Creating...' : 'Create Task'}\n </Button>\n </div>\n </div>\n {error && <div className=\"p-6 text-red-500\">Error: {error.message}</div>}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <CheckSquare className=\"h-4 w-4\" />\n Task Details\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <label className=\"text-sm font-medium\">Title</label>\n <Input\n value={form.title}\n onChange={(e) => setForm({ ...form, title: e.target.value })}\n className=\"mt-1\"\n placeholder=\"e.g. Implement search query parser\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Description</label>\n <textarea\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[100px]\"\n value={form.description}\n onChange={(e) => setForm({ ...form, description: e.target.value })}\n placeholder=\"Describe the task requirements...\"\n />\n </div>\n <div className=\"grid grid-cols-3 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">Project</label>\n <Input\n value={form.project}\n onChange={(e) => setForm({ ...form, project: e.target.value })}\n className=\"mt-1\"\n placeholder=\"Project name\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Priority</label>\n <select\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n value={form.priority}\n onChange={(e) => setForm({ ...form, priority: e.target.value })}\n >\n {['LOW', 'MEDIUM', 'HIGH', 'CRITICAL'].map((p) => (\n <option key={p} value={p}>\n {p.toLowerCase()}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Type</label>\n <select\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n value={form.type}\n onChange={(e) => setForm({ ...form, type: e.target.value })}\n >\n {['STORY', 'BUG', 'TASK', 'EPIC', 'SUBTASK'].map((t) => (\n <option key={t} value={t}>\n {t.toLowerCase()}\n </option>\n ))}\n </select>\n </div>\n </div>\n <div className=\"grid grid-cols-3 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">Story Points</label>\n <Input\n type=\"number\"\n value={form.storyPoints}\n onChange={(e) => setForm({ ...form, storyPoints: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Sprint ID</label>\n <Input\n value={form.sprintId}\n onChange={(e) => setForm({ ...form, sprintId: e.target.value })}\n className=\"mt-1\"\n placeholder=\"Sprint ID\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Due Date</label>\n <Input\n type=\"date\"\n value={form.dueDate}\n onChange={(e) => setForm({ ...form, dueDate: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Labels (comma-separated)</label>\n <Input\n value={form.labels}\n onChange={(e) => setForm({ ...form, labels: e.target.value })}\n className=\"mt-1\"\n placeholder=\"backend, search, performance\"\n />\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TasksCreateTaskPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/TasksCreateTaskPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useMutation, useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Button, Input } from '@burdenoff/fe-libs/ui';\nimport { Save, X, CheckSquare } from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\n\ninterface PlanmagnetProjectOption {\n id: string;\n name: string;\n key: string;\n}\n\nconst CREATE_WORK_ITEM = gql`\n mutation CreateWorkItem($input: PlanmagnetCreateWorkItemInput!) {\n planmagnetCreateWorkItem(input: $input) {\n id\n title\n type\n status\n priority\n key\n storyPoints\n dueDate\n labels\n sprintId\n createdAt\n }\n }\n`;\n\n// BOFF-4442/4443 live-verify fix: a WorkItem must belong to a real project\n// (PlanmagnetCreateWorkItemInput.projectId is non-null); the form needs the\n// caller's actual projects to choose from rather than a free-text name.\nconst GET_PROJECTS = gql`\n query GetProjectsForTaskCreate($workspaceId: ID!) {\n planmagnetProjects(workspaceId: $workspaceId, pagination: { first: 100 }) {\n items {\n id\n name\n key\n }\n }\n }\n`;\n\nexport function TasksCreateTaskPagePage() {\n const { workspaceId } = usePlanMagnet();\n const [form, setForm] = useState({\n title: '',\n description: '',\n projectId: '',\n priority: 'MEDIUM',\n type: 'STORY',\n storyPoints: '5',\n labels: '',\n sprintId: '',\n dueDate: '',\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { data: projectsData } = useQuery<Record<string, any>>(GET_PROJECTS, {\n variables: { workspaceId: workspaceId ?? 'default' },\n skip: !workspaceId,\n });\n const projects: PlanmagnetProjectOption[] = projectsData?.planmagnetProjects?.items ?? [];\n // Fall back to the first loaded project when the user hasn't picked one\n // yet, without stashing derived state in an effect (avoids the extra\n // render cycle and keeps a single source of truth: `projects`).\n const selectedProjectId = form.projectId || projects[0]?.id || '';\n\n const [createWorkItem, { loading: saving, error }] = useMutation(CREATE_WORK_ITEM, {\n refetchQueries: ['GetWorkItems'],\n });\n\n const handleCreate = async () => {\n if (!form.title.trim() || !selectedProjectId || !workspaceId) return;\n await createWorkItem({\n variables: {\n input: {\n projectId: selectedProjectId,\n title: form.title,\n description: form.description || undefined,\n type: form.type,\n priority: form.priority,\n storyPoints: form.storyPoints ? parseInt(form.storyPoints, 10) : undefined,\n labels: form.labels\n ? form.labels\n .split(',')\n .map((l) => l.trim())\n .filter(Boolean)\n : undefined,\n sprintId: form.sprintId || undefined,\n dueDate: form.dueDate || undefined,\n },\n },\n });\n };\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Create Task</h1>\n <p className=\"text-sm text-muted-foreground\">Add a new task to the project backlog.</p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <X className=\"mr-1 h-4 w-4\" />\n Cancel\n </Button>\n <Button\n size=\"sm\"\n onClick={handleCreate}\n disabled={saving || !form.title.trim() || !selectedProjectId}\n >\n <Save className=\"mr-1 h-4 w-4\" />\n {saving ? 'Creating...' : 'Create Task'}\n </Button>\n </div>\n </div>\n {error && <div className=\"p-6 text-red-500\">Error: {error.message}</div>}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <CheckSquare className=\"h-4 w-4\" />\n Task Details\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <label className=\"text-sm font-medium\">Title</label>\n <Input\n value={form.title}\n onChange={(e) => setForm({ ...form, title: e.target.value })}\n className=\"mt-1\"\n placeholder=\"e.g. Implement search query parser\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Description</label>\n <textarea\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[100px]\"\n value={form.description}\n onChange={(e) => setForm({ ...form, description: e.target.value })}\n placeholder=\"Describe the task requirements...\"\n />\n </div>\n <div className=\"grid grid-cols-3 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">Project</label>\n <select\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n value={selectedProjectId}\n onChange={(e) => setForm({ ...form, projectId: e.target.value })}\n >\n {projects.length === 0 && (\n <option value=\"\" disabled>\n No projects available\n </option>\n )}\n {projects.map((p) => (\n <option key={p.id} value={p.id}>\n {p.key} — {p.name}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Priority</label>\n <select\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n value={form.priority}\n onChange={(e) => setForm({ ...form, priority: e.target.value })}\n >\n {['LOW', 'MEDIUM', 'HIGH', 'CRITICAL'].map((p) => (\n <option key={p} value={p}>\n {p.toLowerCase()}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Type</label>\n <select\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n value={form.type}\n onChange={(e) => setForm({ ...form, type: e.target.value })}\n >\n {['STORY', 'BUG', 'TASK', 'EPIC', 'SUBTASK'].map((t) => (\n <option key={t} value={t}>\n {t.toLowerCase()}\n </option>\n ))}\n </select>\n </div>\n </div>\n <div className=\"grid grid-cols-3 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">Story Points</label>\n <Input\n type=\"number\"\n value={form.storyPoints}\n onChange={(e) => setForm({ ...form, storyPoints: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Sprint ID</label>\n <Input\n value={form.sprintId}\n onChange={(e) => setForm({ ...form, sprintId: e.target.value })}\n className=\"mt-1\"\n placeholder=\"Sprint ID\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Due Date</label>\n <Input\n type=\"date\"\n value={form.dueDate}\n onChange={(e) => setForm({ ...form, dueDate: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Labels (comma-separated)</label>\n <Input\n value={form.labels}\n onChange={(e) => setForm({ ...form, labels: e.target.value })}\n className=\"mt-1\"\n placeholder=\"backend, search, performance\"\n />\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/microfe-planmagnet",
3
- "version": "2026.730.1",
3
+ "version": "2026.730.3",
4
4
  "description": "Burdenoff PlanMagnet Microfrontend",
5
5
  "type": "module",
6
6
  "files": [