@burdenoff/microfe-planmagnet 2026.716.1 → 2026.719.2

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 (77) hide show
  1. package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
  2. package/dist/planmagnet/PlanMagnetRoot.js +98 -173
  3. package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
  4. package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
  5. package/dist/planmagnet/PlanMagnetRoutes.js +43 -67
  6. package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
  7. package/dist/planmagnet/pages/ProductsCreateProductPagePage.js +2 -2
  8. package/dist/planmagnet/pages/ProductsCreateProductPagePage.js.map +1 -1
  9. package/dist/planmagnet/pages/ProductsCreateRoadmapPagePage.js +2 -2
  10. package/dist/planmagnet/pages/ProductsCreateRoadmapPagePage.js.map +1 -1
  11. package/dist/planmagnet/pages/ProductsEditProductPagePage.js +2 -2
  12. package/dist/planmagnet/pages/ProductsEditProductPagePage.js.map +1 -1
  13. package/dist/planmagnet/pages/ProductsEditReleasePagePage.js +2 -2
  14. package/dist/planmagnet/pages/ProductsEditReleasePagePage.js.map +1 -1
  15. package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.js +1 -1
  16. package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.js.map +1 -1
  17. package/dist/planmagnet/pages/ProductsFeaturesPagePage.js +1 -1
  18. package/dist/planmagnet/pages/ProductsFeaturesPagePage.js.map +1 -1
  19. package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js +2 -2
  20. package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js.map +1 -1
  21. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js +1 -1
  22. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js.map +1 -1
  23. package/dist/planmagnet/pages/ProductsProductsPagePage.js +1 -1
  24. package/dist/planmagnet/pages/ProductsProductsPagePage.js.map +1 -1
  25. package/dist/planmagnet/pages/ProductsReleasesPagePage.js +1 -1
  26. package/dist/planmagnet/pages/ProductsReleasesPagePage.js.map +1 -1
  27. package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js +1 -1
  28. package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js.map +1 -1
  29. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js +1 -1
  30. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js.map +1 -1
  31. package/dist/planmagnet/pages/ProjectsCreateProjectPagePage.js +2 -2
  32. package/dist/planmagnet/pages/ProjectsCreateProjectPagePage.js.map +1 -1
  33. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js +2 -2
  34. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js.map +1 -1
  35. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js +1 -1
  36. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js.map +1 -1
  37. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js +2 -2
  38. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js.map +1 -1
  39. package/dist/planmagnet/pages/SprintsStartSprintPagePage.d.ts.map +1 -1
  40. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js +75 -86
  41. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js.map +1 -1
  42. package/dist/planmagnet/pages/TasksCreateTaskPagePage.js +1 -1
  43. package/dist/planmagnet/pages/TasksCreateTaskPagePage.js.map +1 -1
  44. package/dist/planmagnet/pages/TasksEditTaskPagePage.d.ts.map +1 -1
  45. package/dist/planmagnet/pages/TasksEditTaskPagePage.js +6 -10
  46. package/dist/planmagnet/pages/TasksEditTaskPagePage.js.map +1 -1
  47. package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +1 -1
  48. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js +4 -8
  49. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js.map +1 -1
  50. package/dist/planmagnet/pages/TasksTasksPagePage.d.ts.map +1 -1
  51. package/dist/planmagnet/pages/TasksTasksPagePage.js +8 -9
  52. package/dist/planmagnet/pages/TasksTasksPagePage.js.map +1 -1
  53. package/package.json +1 -1
  54. package/dist/planmagnet/pages/CollaborationCollaborationPagePage.d.ts +0 -2
  55. package/dist/planmagnet/pages/CollaborationCollaborationPagePage.d.ts.map +0 -1
  56. package/dist/planmagnet/pages/CollaborationCollaborationPagePage.js +0 -110
  57. package/dist/planmagnet/pages/CollaborationCollaborationPagePage.js.map +0 -1
  58. package/dist/planmagnet/pages/CollaborationCreateChannelPagePage.d.ts +0 -2
  59. package/dist/planmagnet/pages/CollaborationCreateChannelPagePage.d.ts.map +0 -1
  60. package/dist/planmagnet/pages/CollaborationCreateChannelPagePage.js +0 -96
  61. package/dist/planmagnet/pages/CollaborationCreateChannelPagePage.js.map +0 -1
  62. package/dist/planmagnet/pages/CollaborationFilesPagePage.d.ts +0 -2
  63. package/dist/planmagnet/pages/CollaborationFilesPagePage.d.ts.map +0 -1
  64. package/dist/planmagnet/pages/CollaborationFilesPagePage.js +0 -112
  65. package/dist/planmagnet/pages/CollaborationFilesPagePage.js.map +0 -1
  66. package/dist/planmagnet/pages/CollaborationMessagesPagePage.d.ts +0 -2
  67. package/dist/planmagnet/pages/CollaborationMessagesPagePage.d.ts.map +0 -1
  68. package/dist/planmagnet/pages/CollaborationMessagesPagePage.js +0 -141
  69. package/dist/planmagnet/pages/CollaborationMessagesPagePage.js.map +0 -1
  70. package/dist/planmagnet/pages/CollaborationNewDiscussionPagePage.d.ts +0 -2
  71. package/dist/planmagnet/pages/CollaborationNewDiscussionPagePage.d.ts.map +0 -1
  72. package/dist/planmagnet/pages/CollaborationNewDiscussionPagePage.js +0 -124
  73. package/dist/planmagnet/pages/CollaborationNewDiscussionPagePage.js.map +0 -1
  74. package/dist/planmagnet/pages/MeetingsScheduleMeetingPagePage.d.ts +0 -2
  75. package/dist/planmagnet/pages/MeetingsScheduleMeetingPagePage.d.ts.map +0 -1
  76. package/dist/planmagnet/pages/MeetingsScheduleMeetingPagePage.js +0 -290
  77. package/dist/planmagnet/pages/MeetingsScheduleMeetingPagePage.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TasksTaskDetailPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/TasksTaskDetailPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\n\nconst GET_WORK_ITEM = gql`\n query GetWorkItemDetail($workspaceId: ID!, $workItemId: ID!) {\n planmagnetWorkItem(workspaceId: $workspaceId, id: $workItemId) {\n id\n title\n description\n type\n status\n priority\n key\n assigneeId\n reporterId\n sprintId\n boardColumnId\n storyPoints\n estimatedHours\n dueDate\n labels\n tags\n createdAt\n updatedAt\n }\n }\n`;\n\ninterface WorkItemNode {\n id: string;\n title: string;\n description: string | null;\n type: string;\n status: string;\n priority: string;\n key: string;\n assigneeId: string | null;\n reporterId: string | null;\n sprintId: string | null;\n boardColumnId: string | null;\n storyPoints: number | null;\n estimatedHours: number | null;\n dueDate: string | null;\n labels: string[];\n tags: string[];\n createdAt: string;\n updatedAt: string;\n}\n\nconst priorityColor: Record<string, string> = {\n LOW: 'bg-gray-100 text-gray-800',\n MEDIUM: 'bg-blue-100 text-blue-800',\n HIGH: 'bg-orange-100 text-orange-800',\n CRITICAL: 'bg-red-100 text-red-800',\n};\n\nconst statusColor: Record<string, string> = {\n BACKLOG: 'bg-gray-100 text-gray-800',\n TODO: 'bg-blue-100 text-blue-800',\n IN_PROGRESS: 'bg-yellow-100 text-yellow-800',\n IN_REVIEW: 'bg-purple-100 text-purple-800',\n DONE: 'bg-green-100 text-green-800',\n BLOCKED: 'bg-red-100 text-red-800',\n TESTING: 'bg-teal-100 text-teal-800',\n CANCELLED: 'bg-gray-100 text-gray-800',\n};\n\nexport function TasksTaskDetailPagePage() {\n const { workspaceId } = usePlanMagnet();\n\n // In a real app, workItemId comes from route params.\n const workItemId = new URLSearchParams(window.location.search).get('taskId') ?? '';\n\n const { data, loading, error } = useQuery<{\n workItem: WorkItemNode;\n }>(GET_WORK_ITEM, {\n variables: { workspaceId, workItemId },\n skip: !workspaceId || !workItemId,\n });\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-red-500\">Error: {error.message}</div>;\n }\n\n const task = data?.planmagnetWorkItem;\n if (!task) return <div className=\"p-6 text-muted-foreground\">Task not found.</div>;\n\n const statusDisplay = task.status.toLowerCase().replace('_', ' ');\n\n const activityLog = [\n { action: 'Task created', by: task.reporterId ?? 'Unknown', at: task.createdAt },\n {\n action: `Assigned to ${task.assigneeId ?? 'Unassigned'}`,\n by: task.reporterId ?? 'Unknown',\n at: task.createdAt,\n },\n {\n action: `Status changed to ${statusDisplay}`,\n by: task.assigneeId ?? 'Unknown',\n at: task.updatedAt,\n },\n ];\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">{task.title}</h1>\n <p className=\"text-sm text-muted-foreground\">\n {task.key} &middot; {task.type.toLowerCase()}\n </p>\n </div>\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Description</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm\">{task.description ?? 'No description provided.'}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Activity</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {activityLog.map((a, i) => (\n <div key={i} className=\"flex gap-3\">\n <div className=\"flex flex-col items-center\">\n <div className=\"h-2.5 w-2.5 rounded-full bg-primary mt-1.5\" />\n {i < activityLog.length - 1 && <div className=\"w-px flex-1 bg-border\" />}\n </div>\n <div className=\"pb-3\">\n <p className=\"text-sm\">{a.action}</p>\n <p className=\"text-xs text-muted-foreground\">\n {a.by} &middot; {a.at}\n </p>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Status</span>\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${statusColor[task.status] ?? ''}`}\n >\n {statusDisplay}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Priority</span>\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${priorityColor[task.priority] ?? ''}`}\n >\n {task.priority.toLowerCase()}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Type</span>\n <Badge variant=\"outline\" className=\"capitalize\">\n {task.type.toLowerCase()}\n </Badge>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Story Points</span>\n <span className=\"font-medium\">{task.storyPoints ?? 0}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Assignee</span>\n <span>{task.assigneeId ?? 'Unassigned'}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Reporter</span>\n <span>{task.reporterId ?? 'Unknown'}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Key</span>\n <span>{task.key}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Due Date</span>\n <span>{task.dueDate ?? 'Not set'}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Created</span>\n <span>{task.createdAt}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Updated</span>\n <span>{task.updatedAt}</span>\n </div>\n <div>\n <span className=\"text-muted-foreground text-xs\">Labels</span>\n <div className=\"flex gap-1 mt-1 flex-wrap\">\n {(task.labels ?? []).map((l) => (\n <span key={l} className=\"text-xs px-2 py-0.5 rounded bg-muted\">\n {l}\n </span>\n ))}\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;AAOA,IAAM,IAAgB,CAAG;;;;;;;;;;;;;;;;;;;;;;;GA8CnB,IAAwC;CAC5C,KAAK;CACL,QAAQ;CACR,MAAM;CACN,UAAU;CACX,EAEK,IAAsC;CAC1C,SAAS;CACT,MAAM;CACN,aAAa;CACb,WAAW;CACX,MAAM;CACN,SAAS;CACT,SAAS;CACT,WAAW;CACZ;AAED,SAAgB,IAA0B;CACxC,IAAM,EAAE,mBAAgB,GAAe,EAGjC,IAAa,IAAI,gBAAgB,OAAO,SAAS,OAAO,CAAC,IAAI,SAAS,IAAI,IAE1E,EAAE,SAAM,YAAS,aAAU,EAE9B,GAAe;EAChB,WAAW;GAAE;GAAa;GAAY;EACtC,MAAM,CAAC,KAAe,CAAC;EACxB,CAAC;AAEF,KAAI,EACF,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD,EAAK,WAAU,kFAAmF,CAAA;EAC9F,CAAA;AAIV,KAAI,EACF,QAAO,kBAAC,OAAD;EAAK,WAAU;YAAf,CAAkC,WAAQ,EAAM,QAAc;;CAGvE,IAAM,IAAO,GAAM;AACnB,KAAI,CAAC,EAAM,QAAO,kBAAC,OAAD;EAAK,WAAU;YAA4B;EAAqB,CAAA;CAElF,IAAM,IAAgB,EAAK,OAAO,aAAa,CAAC,QAAQ,KAAK,IAAI,EAE3D,IAAc;EAClB;GAAE,QAAQ;GAAgB,IAAI,EAAK,cAAc;GAAW,IAAI,EAAK;GAAW;EAChF;GACE,QAAQ,eAAe,EAAK,cAAc;GAC1C,IAAI,EAAK,cAAc;GACvB,IAAI,EAAK;GACV;EACD;GACE,QAAQ,qBAAqB;GAC7B,IAAI,EAAK,cAAc;GACvB,IAAI,EAAK;GACV;EACF;AAED,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;GAAI,WAAU;aAA0B,EAAK;GAAW,CAAA,EACxD,kBAAC,KAAD;GAAG,WAAU;aAAb;IACG,EAAK;IAAI;IAAW,EAAK,KAAK,aAAa;IAC1C;KACA,EAAA,CAAA,EACN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,eAAuB,CAAA,EACvB,CAAA,EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,KAAD;KAAG,WAAU;eAAW,EAAK,eAAe;KAA+B,CAAA,EAC/D,CAAA,CACT,EAAA,CAAA,EACP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,YAAoB,CAAA,EACpB,CAAA,EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAY,KAAK,GAAG,MACnB,kBAAC,OAAD;MAAa,WAAU;gBAAvB,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD,EAAK,WAAU,8CAA+C,CAAA,EAC7D,IAAI,EAAY,SAAS,KAAK,kBAAC,OAAD,EAAK,WAAU,yBAA0B,CAAA,CACpE;UACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAW,EAAE;QAAW,CAAA,EACrC,kBAAC,KAAD;QAAG,WAAU;kBAAb;SACG,EAAE;SAAG;SAAW,EAAE;SACjB;UACA;SACF;QAXI,EAWJ,CACN;KACE,CAAA,EACM,CAAA,CACT,EAAA,CAAA,CACH;OACN,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,WAAmB,CAAA,EACnB,CAAA,EACb,kBAAC,GAAD;KAAa,WAAU;eAAvB;MACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAa,CAAA,EACrD,kBAAC,QAAD;QACE,WAAW,+CAA+C,EAAY,EAAK,WAAW;kBAErF;QACI,CAAA,CACH;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAe,CAAA,EACvD,kBAAC,QAAD;QACE,WAAW,+CAA+C,EAAc,EAAK,aAAa;kBAEzF,EAAK,SAAS,aAAa;QACvB,CAAA,CACH;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAW,CAAA,EACnD,kBAAC,GAAD;QAAO,SAAQ;QAAU,WAAU;kBAChC,EAAK,KAAK,aAAa;QAClB,CAAA,CACJ;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAmB,CAAA,EAC3D,kBAAC,QAAD;QAAM,WAAU;kBAAe,EAAK,eAAe;QAAS,CAAA,CACxD;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAe,CAAA,EACvD,kBAAC,QAAD,EAAA,UAAO,EAAK,cAAc,cAAoB,CAAA,CAC1C;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAe,CAAA,EACvD,kBAAC,QAAD,EAAA,UAAO,EAAK,cAAc,WAAiB,CAAA,CACvC;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAU,CAAA,EAClD,kBAAC,QAAD,EAAA,UAAO,EAAK,KAAW,CAAA,CACnB;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAe,CAAA,EACvD,kBAAC,QAAD,EAAA,UAAO,EAAK,WAAW,WAAiB,CAAA,CACpC;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAc,CAAA,EACtD,kBAAC,QAAD,EAAA,UAAO,EAAK,WAAiB,CAAA,CACzB;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAwB;QAAc,CAAA,EACtD,kBAAC,QAAD,EAAA,UAAO,EAAK,WAAiB,CAAA,CACzB;;MACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,QAAD;OAAM,WAAU;iBAAgC;OAAa,CAAA,EAC7D,kBAAC,OAAD;OAAK,WAAU;kBACX,EAAK,UAAU,EAAE,EAAE,KAAK,MACxB,kBAAC,QAAD;QAAc,WAAU;kBACrB;QACI,EAFI,EAEJ,CACP;OACE,CAAA,CACF,EAAA,CAAA;MACM;OACT,EAAA,CAAA;IACH,CAAA,CACF;KACF"}
1
+ {"version":3,"file":"TasksTaskDetailPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/TasksTaskDetailPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\n\nconst GET_WORK_ITEM = gql`\n query GetWorkItemDetail($workItemId: ID!) {\n planmagnetWorkItem(id: $workItemId) {\n id\n title\n description\n type\n status\n priority\n key\n assigneeId\n reporterId\n sprintId\n storyPoints\n estimateMinutes\n dueDate\n labels\n tags\n createdAt\n updatedAt\n }\n }\n`;\n\ninterface WorkItemNode {\n id: string;\n title: string;\n description: string | null;\n type: string;\n status: string;\n priority: string;\n key: string;\n assigneeId: string | null;\n reporterId: string | null;\n sprintId: string | null;\n storyPoints: number | null;\n estimateMinutes: number | null;\n dueDate: string | null;\n labels: string[];\n tags: string[];\n createdAt: string;\n updatedAt: string;\n}\n\nconst priorityColor: Record<string, string> = {\n LOW: 'bg-gray-100 text-gray-800',\n MEDIUM: 'bg-blue-100 text-blue-800',\n HIGH: 'bg-orange-100 text-orange-800',\n CRITICAL: 'bg-red-100 text-red-800',\n};\n\nconst statusColor: Record<string, string> = {\n BACKLOG: 'bg-gray-100 text-gray-800',\n TODO: 'bg-blue-100 text-blue-800',\n IN_PROGRESS: 'bg-yellow-100 text-yellow-800',\n IN_REVIEW: 'bg-purple-100 text-purple-800',\n DONE: 'bg-green-100 text-green-800',\n BLOCKED: 'bg-red-100 text-red-800',\n TESTING: 'bg-teal-100 text-teal-800',\n CANCELLED: 'bg-gray-100 text-gray-800',\n};\n\nexport function TasksTaskDetailPagePage() {\n const { workspaceId } = usePlanMagnet();\n\n // In a real app, workItemId comes from route params.\n const workItemId = new URLSearchParams(window.location.search).get('taskId') ?? '';\n\n const { data, loading, error } = useQuery<{\n planmagnetWorkItem: WorkItemNode;\n }>(GET_WORK_ITEM, {\n variables: { workItemId },\n skip: !workspaceId || !workItemId,\n });\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-red-500\">Error: {error.message}</div>;\n }\n\n const task = data?.planmagnetWorkItem;\n if (!task) return <div className=\"p-6 text-muted-foreground\">Task not found.</div>;\n\n const statusDisplay = task.status.toLowerCase().replace('_', ' ');\n\n const activityLog = [\n { action: 'Task created', by: task.reporterId ?? 'Unknown', at: task.createdAt },\n {\n action: `Assigned to ${task.assigneeId ?? 'Unassigned'}`,\n by: task.reporterId ?? 'Unknown',\n at: task.createdAt,\n },\n {\n action: `Status changed to ${statusDisplay}`,\n by: task.assigneeId ?? 'Unknown',\n at: task.updatedAt,\n },\n ];\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">{task.title}</h1>\n <p className=\"text-sm text-muted-foreground\">\n {task.key} &middot; {task.type.toLowerCase()}\n </p>\n </div>\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Description</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm\">{task.description ?? 'No description provided.'}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Activity</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {activityLog.map((a, i) => (\n <div key={i} className=\"flex gap-3\">\n <div className=\"flex flex-col items-center\">\n <div className=\"h-2.5 w-2.5 rounded-full bg-primary mt-1.5\" />\n {i < activityLog.length - 1 && <div className=\"w-px flex-1 bg-border\" />}\n </div>\n <div className=\"pb-3\">\n <p className=\"text-sm\">{a.action}</p>\n <p className=\"text-xs text-muted-foreground\">\n {a.by} &middot; {a.at}\n </p>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Status</span>\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${statusColor[task.status] ?? ''}`}\n >\n {statusDisplay}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Priority</span>\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${priorityColor[task.priority] ?? ''}`}\n >\n {task.priority.toLowerCase()}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Type</span>\n <Badge variant=\"outline\" className=\"capitalize\">\n {task.type.toLowerCase()}\n </Badge>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Story Points</span>\n <span className=\"font-medium\">{task.storyPoints ?? 0}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Assignee</span>\n <span>{task.assigneeId ?? 'Unassigned'}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Reporter</span>\n <span>{task.reporterId ?? 'Unknown'}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Key</span>\n <span>{task.key}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Due Date</span>\n <span>{task.dueDate ?? 'Not set'}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Created</span>\n <span>{task.createdAt}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Updated</span>\n <span>{task.updatedAt}</span>\n </div>\n <div>\n <span className=\"text-muted-foreground text-xs\">Labels</span>\n <div className=\"flex gap-1 mt-1 flex-wrap\">\n {(task.labels ?? []).map((l) => (\n <span key={l} className=\"text-xs px-2 py-0.5 rounded bg-muted\">\n {l}\n </span>\n ))}\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TasksTasksPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksTasksPagePage.tsx"],"names":[],"mappings":"AA6FA,wBAAgB,kBAAkB,4CA6HjC"}
1
+ {"version":3,"file":"TasksTasksPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksTasksPagePage.tsx"],"names":[],"mappings":"AA2FA,wBAAgB,kBAAkB,4CA6HjC"}
@@ -9,7 +9,7 @@ import { Card as s, CardContent as c } from "@burdenoff/fe-libs/ui";
9
9
  var l = r`
10
10
  query GetWorkItems(
11
11
  $workspaceId: ID!
12
- $filter: WorkItemFilter
12
+ $filter: PlanmagnetWorkItemFilter
13
13
  $pagination: PlanmagnetPaginationInput
14
14
  ) {
15
15
  planmagnetWorkItems(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {
@@ -23,9 +23,8 @@ var l = r`
23
23
  assigneeId
24
24
  reporterId
25
25
  sprintId
26
- boardColumnId
27
26
  storyPoints
28
- estimatedHours
27
+ estimateMinutes
29
28
  dueDate
30
29
  labels
31
30
  tags
@@ -39,22 +38,22 @@ var l = r`
39
38
  "TODO",
40
39
  "IN_PROGRESS",
41
40
  "IN_REVIEW",
42
- "DONE",
43
- "BLOCKED"
41
+ "TESTING",
42
+ "DONE"
44
43
  ], d = {
45
44
  BACKLOG: "Backlog",
46
45
  TODO: "To Do",
47
46
  IN_PROGRESS: "In Progress",
48
47
  IN_REVIEW: "In Review",
49
- DONE: "Done",
50
- BLOCKED: "Blocked"
48
+ TESTING: "Testing",
49
+ DONE: "Done"
51
50
  }, f = {
52
51
  BACKLOG: "border-t-gray-400",
53
52
  TODO: "border-t-blue-400",
54
53
  IN_PROGRESS: "border-t-yellow-400",
55
54
  IN_REVIEW: "border-t-purple-400",
56
- DONE: "border-t-green-400",
57
- BLOCKED: "border-t-red-400"
55
+ TESTING: "border-t-teal-400",
56
+ DONE: "border-t-green-400"
58
57
  }, p = {
59
58
  LOW: "bg-gray-100 text-gray-700",
60
59
  MEDIUM: "bg-blue-100 text-blue-700",
@@ -1 +1 @@
1
- {"version":3,"file":"TasksTasksPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/TasksTasksPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent } from '@burdenoff/fe-libs/ui';\nimport { Filter } from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\n\nconst GET_WORK_ITEMS = gql`\n query GetWorkItems(\n $workspaceId: ID!\n $filter: WorkItemFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetWorkItems(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items {\n id\n title\n type\n status\n priority\n key\n assigneeId\n reporterId\n sprintId\n boardColumnId\n storyPoints\n estimatedHours\n dueDate\n labels\n tags\n createdAt\n }\n totalCount\n }\n }\n`;\n\ninterface WorkItemNode {\n id: string;\n title: string;\n type: string;\n status: string;\n priority: string;\n key: string;\n assigneeId: string | null;\n reporterId: string | null;\n sprintId: string | null;\n boardColumnId: string | null;\n storyPoints: number | null;\n estimatedHours: number | null;\n dueDate: string | null;\n labels: string[];\n tags: string[];\n createdAt: string;\n}\n\nconst columns = ['BACKLOG', 'TODO', 'IN_PROGRESS', 'IN_REVIEW', 'DONE', 'BLOCKED'] as const;\n\nconst colLabel: Record<string, string> = {\n BACKLOG: 'Backlog',\n TODO: 'To Do',\n IN_PROGRESS: 'In Progress',\n IN_REVIEW: 'In Review',\n DONE: 'Done',\n BLOCKED: 'Blocked',\n};\n\nconst colColor: Record<string, string> = {\n BACKLOG: 'border-t-gray-400',\n TODO: 'border-t-blue-400',\n IN_PROGRESS: 'border-t-yellow-400',\n IN_REVIEW: 'border-t-purple-400',\n DONE: 'border-t-green-400',\n BLOCKED: 'border-t-red-400',\n};\n\nconst priorityColor: Record<string, string> = {\n LOW: 'bg-gray-100 text-gray-700',\n MEDIUM: 'bg-blue-100 text-blue-700',\n HIGH: 'bg-orange-100 text-orange-700',\n CRITICAL: 'bg-red-100 text-red-700',\n};\n\nconst typeColor: Record<string, string> = {\n STORY: 'bg-green-100 text-green-700',\n BUG: 'bg-red-100 text-red-700',\n TASK: 'bg-blue-100 text-blue-700',\n EPIC: 'bg-purple-100 text-purple-700',\n SUBTASK: 'bg-gray-100 text-gray-700',\n};\n\nexport function TasksTasksPagePage() {\n const { workspaceId } = usePlanMagnet();\n const [priorityFilter, setPriorityFilter] = useState<string>('all');\n const [typeFilter, setTypeFilter] = useState<string>('all');\n\n const { data, loading, error } = useQuery<{\n workItems: { items: WorkItemNode[]; totalCount: number };\n }>(GET_WORK_ITEMS, {\n variables: {\n workspaceId,\n pagination: { first: 200 },\n },\n skip: !workspaceId,\n });\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-red-500\">Error: {error.message}</div>;\n }\n\n const tasks = data?.planmagnetWorkItems?.items ?? [];\n\n const filtered = tasks.filter(\n (t) =>\n (priorityFilter === 'all' || t.priority === priorityFilter.toUpperCase()) &&\n (typeFilter === 'all' || t.type === typeFilter.toUpperCase())\n );\n\n return (\n <div className=\"space-y-4 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Task Board</h1>\n <p className=\"text-sm text-muted-foreground\">{tasks.length} tasks across all projects</p>\n </div>\n </div>\n <div className=\"flex gap-4 items-center flex-wrap\">\n <Filter className=\"h-4 w-4 text-muted-foreground\" />\n <div className=\"flex gap-1\">\n {['all', 'low', 'medium', 'high', 'critical'].map((p) => (\n <button\n key={p}\n onClick={() => setPriorityFilter(p)}\n className={`px-2 py-1 text-xs rounded capitalize ${priorityFilter === p ? 'bg-primary text-primary-foreground' : 'bg-muted text-muted-foreground'}`}\n >\n {p}\n </button>\n ))}\n </div>\n <div className=\"flex gap-1\">\n {['all', 'story', 'bug', 'task', 'epic'].map((t) => (\n <button\n key={t}\n onClick={() => setTypeFilter(t)}\n className={`px-2 py-1 text-xs rounded capitalize ${typeFilter === t ? 'bg-primary text-primary-foreground' : 'bg-muted text-muted-foreground'}`}\n >\n {t}\n </button>\n ))}\n </div>\n </div>\n <div className=\"grid grid-cols-6 gap-3 overflow-x-auto\">\n {columns.map((col) => {\n const colTasks = filtered.filter((t) => t.status === col);\n return (\n <div key={col} className=\"min-w-[200px]\">\n <div className={`border-t-2 ${colColor[col]} rounded-t-md p-2 bg-muted/50`}>\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm font-medium\">{colLabel[col]}</span>\n <span className=\"text-xs bg-muted rounded-full px-1.5\">{colTasks.length}</span>\n </div>\n </div>\n <div className=\"space-y-2 mt-2\">\n {colTasks.map((task) => (\n <Card key={task.id} className=\"shadow-sm\">\n <CardContent className=\"p-3 space-y-2\">\n <p className=\"text-sm font-medium leading-tight\">{task.title}</p>\n <p className=\"text-xs text-muted-foreground\">{task.key}</p>\n <div className=\"flex gap-1 flex-wrap\">\n <span\n className={`text-[10px] px-1.5 py-0.5 rounded-full capitalize ${priorityColor[task.priority] ?? ''}`}\n >\n {task.priority.toLowerCase()}\n </span>\n <span\n className={`text-[10px] px-1.5 py-0.5 rounded-full capitalize ${typeColor[task.type] ?? ''}`}\n >\n {task.type.toLowerCase()}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex gap-1\">\n {(task.labels ?? []).slice(0, 2).map((l) => (\n <span key={l} className=\"text-[9px] px-1 py-0.5 rounded bg-muted\">\n {l}\n </span>\n ))}\n </div>\n <div className=\"flex items-center gap-1\">\n <span className=\"text-[10px] font-medium bg-primary/10 text-primary rounded-full h-5 w-5 flex items-center justify-center\">\n {task.storyPoints ?? 0}\n </span>\n </div>\n </div>\n <div className=\"flex justify-between text-[10px] text-muted-foreground\">\n <span>{task.assigneeId ?? 'Unassigned'}</span>\n <span>{task.dueDate ?? ''}</span>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TasksTasksPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/TasksTasksPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent } from '@burdenoff/fe-libs/ui';\nimport { Filter } from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\n\nconst GET_WORK_ITEMS = gql`\n query GetWorkItems(\n $workspaceId: ID!\n $filter: PlanmagnetWorkItemFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetWorkItems(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items {\n id\n title\n type\n status\n priority\n key\n assigneeId\n reporterId\n sprintId\n storyPoints\n estimateMinutes\n dueDate\n labels\n tags\n createdAt\n }\n totalCount\n }\n }\n`;\n\ninterface WorkItemNode {\n id: string;\n title: string;\n type: string;\n status: string;\n priority: string;\n key: string;\n assigneeId: string | null;\n reporterId: string | null;\n sprintId: string | null;\n storyPoints: number | null;\n estimateMinutes: number | null;\n dueDate: string | null;\n labels: string[];\n tags: string[];\n createdAt: string;\n}\n\nconst columns = ['BACKLOG', 'TODO', 'IN_PROGRESS', 'IN_REVIEW', 'TESTING', 'DONE'] as const;\n\nconst colLabel: Record<string, string> = {\n BACKLOG: 'Backlog',\n TODO: 'To Do',\n IN_PROGRESS: 'In Progress',\n IN_REVIEW: 'In Review',\n TESTING: 'Testing',\n DONE: 'Done',\n};\n\nconst colColor: Record<string, string> = {\n BACKLOG: 'border-t-gray-400',\n TODO: 'border-t-blue-400',\n IN_PROGRESS: 'border-t-yellow-400',\n IN_REVIEW: 'border-t-purple-400',\n TESTING: 'border-t-teal-400',\n DONE: 'border-t-green-400',\n};\n\nconst priorityColor: Record<string, string> = {\n LOW: 'bg-gray-100 text-gray-700',\n MEDIUM: 'bg-blue-100 text-blue-700',\n HIGH: 'bg-orange-100 text-orange-700',\n CRITICAL: 'bg-red-100 text-red-700',\n};\n\nconst typeColor: Record<string, string> = {\n STORY: 'bg-green-100 text-green-700',\n BUG: 'bg-red-100 text-red-700',\n TASK: 'bg-blue-100 text-blue-700',\n EPIC: 'bg-purple-100 text-purple-700',\n SUBTASK: 'bg-gray-100 text-gray-700',\n};\n\nexport function TasksTasksPagePage() {\n const { workspaceId } = usePlanMagnet();\n const [priorityFilter, setPriorityFilter] = useState<string>('all');\n const [typeFilter, setTypeFilter] = useState<string>('all');\n\n const { data, loading, error } = useQuery<{\n planmagnetWorkItems: { items: WorkItemNode[]; totalCount: number };\n }>(GET_WORK_ITEMS, {\n variables: {\n workspaceId,\n pagination: { first: 200 },\n },\n skip: !workspaceId,\n });\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-red-500\">Error: {error.message}</div>;\n }\n\n const tasks = data?.planmagnetWorkItems?.items ?? [];\n\n const filtered = tasks.filter(\n (t) =>\n (priorityFilter === 'all' || t.priority === priorityFilter.toUpperCase()) &&\n (typeFilter === 'all' || t.type === typeFilter.toUpperCase())\n );\n\n return (\n <div className=\"space-y-4 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Task Board</h1>\n <p className=\"text-sm text-muted-foreground\">{tasks.length} tasks across all projects</p>\n </div>\n </div>\n <div className=\"flex gap-4 items-center flex-wrap\">\n <Filter className=\"h-4 w-4 text-muted-foreground\" />\n <div className=\"flex gap-1\">\n {['all', 'low', 'medium', 'high', 'critical'].map((p) => (\n <button\n key={p}\n onClick={() => setPriorityFilter(p)}\n className={`px-2 py-1 text-xs rounded capitalize ${priorityFilter === p ? 'bg-primary text-primary-foreground' : 'bg-muted text-muted-foreground'}`}\n >\n {p}\n </button>\n ))}\n </div>\n <div className=\"flex gap-1\">\n {['all', 'story', 'bug', 'task', 'epic'].map((t) => (\n <button\n key={t}\n onClick={() => setTypeFilter(t)}\n className={`px-2 py-1 text-xs rounded capitalize ${typeFilter === t ? 'bg-primary text-primary-foreground' : 'bg-muted text-muted-foreground'}`}\n >\n {t}\n </button>\n ))}\n </div>\n </div>\n <div className=\"grid grid-cols-6 gap-3 overflow-x-auto\">\n {columns.map((col) => {\n const colTasks = filtered.filter((t) => t.status === col);\n return (\n <div key={col} className=\"min-w-[200px]\">\n <div className={`border-t-2 ${colColor[col]} rounded-t-md p-2 bg-muted/50`}>\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm font-medium\">{colLabel[col]}</span>\n <span className=\"text-xs bg-muted rounded-full px-1.5\">{colTasks.length}</span>\n </div>\n </div>\n <div className=\"space-y-2 mt-2\">\n {colTasks.map((task) => (\n <Card key={task.id} className=\"shadow-sm\">\n <CardContent className=\"p-3 space-y-2\">\n <p className=\"text-sm font-medium leading-tight\">{task.title}</p>\n <p className=\"text-xs text-muted-foreground\">{task.key}</p>\n <div className=\"flex gap-1 flex-wrap\">\n <span\n className={`text-[10px] px-1.5 py-0.5 rounded-full capitalize ${priorityColor[task.priority] ?? ''}`}\n >\n {task.priority.toLowerCase()}\n </span>\n <span\n className={`text-[10px] px-1.5 py-0.5 rounded-full capitalize ${typeColor[task.type] ?? ''}`}\n >\n {task.type.toLowerCase()}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex gap-1\">\n {(task.labels ?? []).slice(0, 2).map((l) => (\n <span key={l} className=\"text-[9px] px-1 py-0.5 rounded bg-muted\">\n {l}\n </span>\n ))}\n </div>\n <div className=\"flex items-center gap-1\">\n <span className=\"text-[10px] font-medium bg-primary/10 text-primary rounded-full h-5 w-5 flex items-center justify-center\">\n {task.storyPoints ?? 0}\n </span>\n </div>\n </div>\n <div className=\"flex justify-between text-[10px] text-muted-foreground\">\n <span>{task.assigneeId ?? 'Unassigned'}</span>\n <span>{task.dueDate ?? ''}</span>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n })}\n </div>\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.716.1",
3
+ "version": "2026.719.2",
4
4
  "description": "Burdenoff PlanMagnet Microfrontend",
5
5
  "type": "module",
6
6
  "files": [
@@ -1,2 +0,0 @@
1
- export declare function CollaborationCollaborationPagePage(): import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=CollaborationCollaborationPagePage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CollaborationCollaborationPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/CollaborationCollaborationPagePage.tsx"],"names":[],"mappings":"AAsCA,wBAAgB,kCAAkC,4CAsFjD"}
@@ -1,110 +0,0 @@
1
- import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
2
- import { Hash as n, Plus as r } from "lucide-react";
3
- import { gql as i } from "@apollo/client";
4
- import { useQuery as a } from "@apollo/client/react";
5
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
6
- import { Button as c, Card as l, CardContent as u } from "@burdenoff/fe-libs/ui";
7
- //#region src/planmagnet/pages/CollaborationCollaborationPagePage.tsx
8
- var d = i`
9
- query GetProjectsForChannels($workspaceId: ID!, $pagination: PlanmagnetPaginationInput) {
10
- planmagnetProjects(workspaceId: $workspaceId, pagination: $pagination) {
11
- items {
12
- id
13
- name
14
- key
15
- status
16
- tags
17
- startDate
18
- }
19
- totalCount
20
- }
21
- }
22
- `;
23
- function f() {
24
- let { workspaceId: i } = e(), f = t(), { data: p, loading: m, error: h } = a(d, {
25
- variables: {
26
- workspaceId: i,
27
- pagination: { first: 100 }
28
- },
29
- skip: !i
30
- });
31
- if (m) return /* @__PURE__ */ o("div", {
32
- className: "flex items-center justify-center p-12",
33
- children: /* @__PURE__ */ o("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
34
- });
35
- if (h) return /* @__PURE__ */ s("div", {
36
- className: "p-6 text-red-500",
37
- children: ["Error: ", h.message]
38
- });
39
- let g = p?.planmagnetProjects?.items ?? [], _ = g.filter((e) => e.status === "ACTIVE").map((e) => ({
40
- id: e.id,
41
- name: e.name,
42
- description: `Discussion channel for ${e.key}`,
43
- type: "public",
44
- membersCount: 0,
45
- key: e.key,
46
- status: e.status
47
- })), v = _.length;
48
- return /* @__PURE__ */ s("div", {
49
- className: "space-y-6 p-6",
50
- children: [/* @__PURE__ */ s("div", {
51
- className: "flex items-center justify-between",
52
- children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h1", {
53
- className: "text-2xl font-semibold",
54
- children: "Collaboration"
55
- }), /* @__PURE__ */ s("p", {
56
- className: "text-sm text-muted-foreground",
57
- children: [
58
- v,
59
- " project channels · ",
60
- g.length,
61
- " total projects"
62
- ]
63
- })] }), /* @__PURE__ */ s(c, {
64
- size: "sm",
65
- onClick: () => f("/collaboration/create-channel"),
66
- children: [/* @__PURE__ */ o(r, { className: "mr-1 h-4 w-4" }), "New Channel"]
67
- })]
68
- }), /* @__PURE__ */ s("div", {
69
- className: "space-y-3",
70
- children: [_.map((e) => /* @__PURE__ */ o(l, {
71
- className: "hover:bg-muted/30 cursor-pointer transition-colors",
72
- children: /* @__PURE__ */ s(u, {
73
- className: "py-3 flex items-center justify-between",
74
- children: [/* @__PURE__ */ s("div", {
75
- className: "flex items-center gap-3",
76
- children: [/* @__PURE__ */ o(n, { className: "h-4 w-4 text-muted-foreground" }), /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ s("div", {
77
- className: "flex items-center gap-2",
78
- children: [/* @__PURE__ */ o("span", {
79
- className: "text-sm font-medium",
80
- children: e.name
81
- }), /* @__PURE__ */ o("span", {
82
- className: "text-[10px] px-1.5 py-0.5 rounded-full bg-green-100 text-green-700",
83
- children: e.key
84
- })]
85
- }), /* @__PURE__ */ o("p", {
86
- className: "text-xs text-muted-foreground",
87
- children: e.description
88
- })] })]
89
- }), /* @__PURE__ */ o("div", {
90
- className: "flex items-center gap-4 text-xs text-muted-foreground",
91
- children: /* @__PURE__ */ o("span", {
92
- className: "capitalize",
93
- children: e.status.toLowerCase()
94
- })
95
- })]
96
- })
97
- }, e.id)), _.length === 0 && /* @__PURE__ */ s("div", {
98
- className: "text-center py-12",
99
- children: [/* @__PURE__ */ o(n, { className: "h-12 w-12 text-muted-foreground mx-auto mb-3" }), /* @__PURE__ */ o("p", {
100
- className: "text-sm text-muted-foreground",
101
- children: "No active projects found. Create a project to start collaborating."
102
- })]
103
- })]
104
- })]
105
- });
106
- }
107
- //#endregion
108
- export { f as CollaborationCollaborationPagePage };
109
-
110
- //# sourceMappingURL=CollaborationCollaborationPagePage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CollaborationCollaborationPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/CollaborationCollaborationPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, Button } from '@burdenoff/fe-libs/ui';\nimport { Plus, Hash, Lock, Users } from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\nimport { usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\n\nconst GET_PROJECTS_FOR_CHANNELS = gql`\n query GetProjectsForChannels($workspaceId: ID!, $pagination: PlanmagnetPaginationInput) {\n planmagnetProjects(workspaceId: $workspaceId, pagination: $pagination) {\n items {\n id\n name\n key\n status\n tags\n startDate\n }\n totalCount\n }\n }\n`;\n\ninterface ProjectNode {\n id: string;\n name: string;\n key: string;\n status: string;\n tags: string[];\n startDate: string | null;\n}\n\ninterface ProjectsData {\n projects: { items: ProjectNode[]; totalCount: number };\n}\n\nexport function CollaborationCollaborationPagePage() {\n const { workspaceId } = usePlanMagnet();\n const navigate = usePlanMagnetNavigate();\n\n const { data, loading, error } = useQuery<ProjectsData>(GET_PROJECTS_FOR_CHANNELS, {\n variables: {\n workspaceId,\n pagination: { first: 100 },\n },\n skip: !workspaceId,\n });\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-red-500\">Error: {error.message}</div>;\n }\n\n const projects = data?.planmagnetProjects?.items ?? [];\n const activeProjects = projects.filter((p) => p.status === 'ACTIVE');\n\n const channels = activeProjects.map((project) => ({\n id: project.id,\n name: project.name,\n description: `Discussion channel for ${project.key}`,\n type: 'public' as const,\n membersCount: 0,\n key: project.key,\n status: project.status,\n }));\n\n const totalChannels = channels.length;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Collaboration</h1>\n <p className=\"text-sm text-muted-foreground\">\n {totalChannels} project channels &middot; {projects.length} total projects\n </p>\n </div>\n <Button size=\"sm\" onClick={() => navigate('/collaboration/create-channel')}>\n <Plus className=\"mr-1 h-4 w-4\" />\n New Channel\n </Button>\n </div>\n <div className=\"space-y-3\">\n {channels.map((ch) => (\n <Card key={ch.id} className=\"hover:bg-muted/30 cursor-pointer transition-colors\">\n <CardContent className=\"py-3 flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Hash className=\"h-4 w-4 text-muted-foreground\" />\n <div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium\">{ch.name}</span>\n <span className=\"text-[10px] px-1.5 py-0.5 rounded-full bg-green-100 text-green-700\">\n {ch.key}\n </span>\n </div>\n <p className=\"text-xs text-muted-foreground\">{ch.description}</p>\n </div>\n </div>\n <div className=\"flex items-center gap-4 text-xs text-muted-foreground\">\n <span className=\"capitalize\">{ch.status.toLowerCase()}</span>\n </div>\n </CardContent>\n </Card>\n ))}\n {channels.length === 0 && (\n <div className=\"text-center py-12\">\n <Hash className=\"h-12 w-12 text-muted-foreground mx-auto mb-3\" />\n <p className=\"text-sm text-muted-foreground\">\n No active projects found. Create a project to start collaborating.\n </p>\n </div>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;AASA,IAAM,IAA4B,CAAG;;;;;;;;;;;;;;;AA6BrC,SAAgB,IAAqC;CACnD,IAAM,EAAE,mBAAgB,GAAe,EACjC,IAAW,GAAuB,EAElC,EAAE,SAAM,YAAS,aAAU,EAAuB,GAA2B;EACjF,WAAW;GACT;GACA,YAAY,EAAE,OAAO,KAAK;GAC3B;EACD,MAAM,CAAC;EACR,CAAC;AAEF,KAAI,EACF,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD,EAAK,WAAU,kFAAmF,CAAA;EAC9F,CAAA;AAIV,KAAI,EACF,QAAO,kBAAC,OAAD;EAAK,WAAU;YAAf,CAAkC,WAAQ,EAAM,QAAc;;CAGvE,IAAM,IAAW,GAAM,oBAAoB,SAAS,EAAE,EAGhD,IAFiB,EAAS,QAAQ,MAAM,EAAE,WAAW,SAAS,CAEpC,KAAK,OAAa;EAChD,IAAI,EAAQ;EACZ,MAAM,EAAQ;EACd,aAAa,0BAA0B,EAAQ;EAC/C,MAAM;EACN,cAAc;EACd,KAAK,EAAQ;EACb,QAAQ,EAAQ;EACjB,EAAE,EAEG,IAAgB,EAAS;AAE/B,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAAyB;IAAkB,CAAA,EACzD,kBAAC,KAAD;IAAG,WAAU;cAAb;KACG;KAAc;KAA4B,EAAS;KAAO;KACzD;MACA,EAAA,CAAA,EACN,kBAAC,GAAD;IAAQ,MAAK;IAAK,eAAe,EAAS,gCAAgC;cAA1E,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAAA,cAE1B;MACL;MACN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,EAAS,KAAK,MACb,kBAAC,GAAD;IAAkB,WAAU;cAC1B,kBAAC,GAAD;KAAa,WAAU;eAAvB,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD,EAAM,WAAU,iCAAkC,CAAA,EAClD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAuB,EAAG;QAAY,CAAA,EACtD,kBAAC,QAAD;QAAM,WAAU;kBACb,EAAG;QACC,CAAA,CACH;UACN,kBAAC,KAAD;OAAG,WAAU;iBAAiC,EAAG;OAAgB,CAAA,CAC7D,EAAA,CAAA,CACF;SACN,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,QAAD;OAAM,WAAU;iBAAc,EAAG,OAAO,aAAa;OAAQ,CAAA;MACzD,CAAA,CACM;;IACT,EAlBI,EAAG,GAkBP,CACP,EACD,EAAS,WAAW,KACnB,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAM,WAAU,gDAAiD,CAAA,EACjE,kBAAC,KAAD;KAAG,WAAU;eAAgC;KAEzC,CAAA,CACA;MAEJ;KACF"}
@@ -1,2 +0,0 @@
1
- export declare function CollaborationCreateChannelPagePage(): import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=CollaborationCreateChannelPagePage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CollaborationCreateChannelPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/CollaborationCreateChannelPagePage.tsx"],"names":[],"mappings":"AAOA,wBAAgB,kCAAkC,4CA8EjD"}
@@ -1,96 +0,0 @@
1
- import { usePlanMagnetNavigate as e } from "../providers/PlanMagnetProvider.js";
2
- import { useState as t } from "react";
3
- import { Hash as n, Save as r, X as i } from "lucide-react";
4
- import { jsx as a, jsxs as o } from "react/jsx-runtime";
5
- import { Button as s, Card as c, CardContent as l, CardHeader as u, CardTitle as d, Input as f } from "@burdenoff/fe-libs/ui";
6
- //#region src/planmagnet/pages/CollaborationCreateChannelPagePage.tsx
7
- function p() {
8
- let [p, m] = t({
9
- name: "",
10
- description: "",
11
- type: "public"
12
- }), h = e();
13
- return /* @__PURE__ */ o("div", {
14
- className: "space-y-6 p-6 max-w-4xl",
15
- children: [/* @__PURE__ */ o("div", {
16
- className: "flex items-center justify-between",
17
- children: [/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
18
- className: "text-2xl font-semibold",
19
- children: "Create Channel"
20
- }), /* @__PURE__ */ a("p", {
21
- className: "text-sm text-muted-foreground",
22
- children: "Set up a new communication channel for your team."
23
- })] }), /* @__PURE__ */ o("div", {
24
- className: "flex gap-2",
25
- children: [/* @__PURE__ */ o(s, {
26
- variant: "outline",
27
- size: "sm",
28
- onClick: () => h("/collaboration"),
29
- children: [/* @__PURE__ */ a(i, { className: "mr-1 h-4 w-4" }), "Cancel"]
30
- }), /* @__PURE__ */ o(s, {
31
- size: "sm",
32
- onClick: () => {
33
- p.name.trim() && h("/collaboration");
34
- },
35
- children: [/* @__PURE__ */ a(r, { className: "mr-1 h-4 w-4" }), "Create Channel"]
36
- })]
37
- })]
38
- }), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a(u, { children: /* @__PURE__ */ o(d, {
39
- className: "flex items-center gap-2",
40
- children: [/* @__PURE__ */ a(n, { className: "h-4 w-4" }), "Channel Details"]
41
- }) }), /* @__PURE__ */ o(l, {
42
- className: "space-y-4",
43
- children: [
44
- /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("label", {
45
- className: "text-sm font-medium",
46
- children: "Channel Name"
47
- }), /* @__PURE__ */ a(f, {
48
- value: p.name,
49
- onChange: (e) => m({
50
- ...p,
51
- name: e.target.value
52
- }),
53
- className: "mt-1",
54
- placeholder: "e.g. engineering-updates"
55
- })] }),
56
- /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("label", {
57
- className: "text-sm font-medium",
58
- children: "Description"
59
- }), /* @__PURE__ */ a("textarea", {
60
- className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[80px]",
61
- value: p.description,
62
- onChange: (e) => m({
63
- ...p,
64
- description: e.target.value
65
- }),
66
- placeholder: "What is this channel for?"
67
- })] }),
68
- /* @__PURE__ */ o("div", { children: [
69
- /* @__PURE__ */ a("label", {
70
- className: "text-sm font-medium",
71
- children: "Type"
72
- }),
73
- /* @__PURE__ */ a("div", {
74
- className: "mt-1 flex gap-2",
75
- children: ["public", "private"].map((e) => /* @__PURE__ */ a("button", {
76
- onClick: () => m({
77
- ...p,
78
- type: e
79
- }),
80
- className: `px-4 py-2 rounded-md text-sm capitalize ${p.type === e ? "bg-primary text-primary-foreground" : "bg-muted text-muted-foreground"}`,
81
- children: e
82
- }, e))
83
- }),
84
- /* @__PURE__ */ a("p", {
85
- className: "text-xs text-muted-foreground mt-1",
86
- children: p.type === "public" ? "Anyone in the workspace can join" : "Only invited members can access"
87
- })
88
- ] })
89
- ]
90
- })] })]
91
- });
92
- }
93
- //#endregion
94
- export { p as CollaborationCreateChannelPagePage };
95
-
96
- //# sourceMappingURL=CollaborationCreateChannelPagePage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CollaborationCreateChannelPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/CollaborationCreateChannelPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState } from 'react';\nimport { Card, CardContent, CardHeader, CardTitle, Button, Input } from '@burdenoff/fe-libs/ui';\nimport { Save, X, Hash } from 'lucide-react';\nimport { usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\n\nexport function CollaborationCreateChannelPagePage() {\n const [form, setForm] = useState({ name: '', description: '', type: 'public' });\n const navigate = usePlanMagnetNavigate();\n\n const handleCreate = () => {\n if (!form.name.trim()) return;\n navigate('/collaboration');\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 Channel</h1>\n <p className=\"text-sm text-muted-foreground\">\n Set up a new communication channel for your team.\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => navigate('/collaboration')}>\n <X className=\"mr-1 h-4 w-4\" />\n Cancel\n </Button>\n <Button size=\"sm\" onClick={handleCreate}>\n <Save className=\"mr-1 h-4 w-4\" />\n Create Channel\n </Button>\n </div>\n </div>\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Hash className=\"h-4 w-4\" />\n Channel Details\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <label className=\"text-sm font-medium\">Channel Name</label>\n <Input\n value={form.name}\n onChange={(e) => setForm({ ...form, name: e.target.value })}\n className=\"mt-1\"\n placeholder=\"e.g. engineering-updates\"\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-[80px]\"\n value={form.description}\n onChange={(e) => setForm({ ...form, description: e.target.value })}\n placeholder=\"What is this channel for?\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Type</label>\n <div className=\"mt-1 flex gap-2\">\n {['public', 'private'].map((t) => (\n <button\n key={t}\n onClick={() => setForm({ ...form, type: t })}\n className={`px-4 py-2 rounded-md text-sm capitalize ${form.type === t ? 'bg-primary text-primary-foreground' : 'bg-muted text-muted-foreground'}`}\n >\n {t}\n </button>\n ))}\n </div>\n <p className=\"text-xs text-muted-foreground mt-1\">\n {form.type === 'public'\n ? 'Anyone in the workspace can join'\n : 'Only invited members can access'}\n </p>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":";;;;;;AAOA,SAAgB,IAAqC;CACnD,IAAM,CAAC,GAAM,KAAW,EAAS;EAAE,MAAM;EAAI,aAAa;EAAI,MAAM;EAAU,CAAC,EACzE,IAAW,GAAuB;AAOxC,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAAyB;IAAmB,CAAA,EAC1D,kBAAC,KAAD;IAAG,WAAU;cAAgC;IAEzC,CAAA,CACA,EAAA,CAAA,EACN,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD;KAAQ,SAAQ;KAAU,MAAK;KAAK,eAAe,EAAS,iBAAiB;eAA7E,CACE,kBAAC,GAAD,EAAG,WAAU,gBAAiB,CAAA,EAAA,SAEvB;QACT,kBAAC,GAAD;KAAQ,MAAK;KAAK,eAnBC;AACpB,QAAK,KAAK,MAAM,IACrB,EAAS,iBAAiB;;eAiBpB,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAAA,iBAE1B;OACL;MACF;MACN,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;GAAW,WAAU;aAArB,CACE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAAA,kBAElB;MACD,CAAA,EACb,kBAAC,GAAD;GAAa,WAAU;aAAvB;IACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;KAAO,WAAU;eAAsB;KAAoB,CAAA,EAC3D,kBAAC,GAAD;KACE,OAAO,EAAK;KACZ,WAAW,MAAM,EAAQ;MAAE,GAAG;MAAM,MAAM,EAAE,OAAO;MAAO,CAAC;KAC3D,WAAU;KACV,aAAY;KACZ,CAAA,CACE,EAAA,CAAA;IACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;KAAO,WAAU;eAAsB;KAAmB,CAAA,EAC1D,kBAAC,YAAD;KACE,WAAU;KACV,OAAO,EAAK;KACZ,WAAW,MAAM,EAAQ;MAAE,GAAG;MAAM,aAAa,EAAE,OAAO;MAAO,CAAC;KAClE,aAAY;KACZ,CAAA,CACE,EAAA,CAAA;IACN,kBAAC,OAAD,EAAA,UAAA;KACE,kBAAC,SAAD;MAAO,WAAU;gBAAsB;MAAY,CAAA;KACnD,kBAAC,OAAD;MAAK,WAAU;gBACZ,CAAC,UAAU,UAAU,CAAC,KAAK,MAC1B,kBAAC,UAAD;OAEE,eAAe,EAAQ;QAAE,GAAG;QAAM,MAAM;QAAG,CAAC;OAC5C,WAAW,2CAA2C,EAAK,SAAS,IAAI,uCAAuC;iBAE9G;OACM,EALF,EAKE,CACT;MACE,CAAA;KACN,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAK,SAAS,WACX,qCACA;MACF,CAAA;KACA,EAAA,CAAA;IACM;KACT,EAAA,CAAA,CACH"}
@@ -1,2 +0,0 @@
1
- export declare function CollaborationFilesPagePage(): import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=CollaborationFilesPagePage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CollaborationFilesPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/CollaborationFilesPagePage.tsx"],"names":[],"mappings":"AAyCA,wBAAgB,0BAA0B,4CAyFzC"}
@@ -1,112 +0,0 @@
1
- import { usePlanMagnet as e } from "../providers/PlanMagnetProvider.js";
2
- import { Calendar as t, File as n, FolderKanban as r } from "lucide-react";
3
- import { gql as i } from "@apollo/client";
4
- import { useQuery as a } from "@apollo/client/react";
5
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
6
- import { Card as c, CardContent as l } from "@burdenoff/fe-libs/ui";
7
- //#region src/planmagnet/pages/CollaborationFilesPagePage.tsx
8
- var u = i`
9
- query GetProjectsForFiles($workspaceId: ID!, $pagination: PlanmagnetPaginationInput) {
10
- planmagnetProjects(workspaceId: $workspaceId, pagination: $pagination) {
11
- items {
12
- id
13
- name
14
- key
15
- status
16
- methodology
17
- tags
18
- startDate
19
- endDate
20
- }
21
- totalCount
22
- }
23
- }
24
- `;
25
- function d() {
26
- let { workspaceId: i } = e(), { data: d, loading: f, error: p } = a(u, {
27
- variables: {
28
- workspaceId: i,
29
- pagination: { first: 100 }
30
- },
31
- skip: !i
32
- });
33
- if (f) return /* @__PURE__ */ o("div", {
34
- className: "flex items-center justify-center p-12",
35
- children: /* @__PURE__ */ o("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
36
- });
37
- if (p) return /* @__PURE__ */ s("div", {
38
- className: "p-6 text-red-500",
39
- children: ["Error: ", p.message]
40
- });
41
- let m = d?.planmagnetProjects?.items ?? [], h = m.map((e) => ({
42
- id: e.id,
43
- name: e.name,
44
- key: e.key,
45
- status: e.status,
46
- methodology: e.methodology,
47
- tags: e.tags,
48
- startDate: e.startDate,
49
- endDate: e.endDate
50
- }));
51
- return /* @__PURE__ */ s("div", {
52
- className: "space-y-6 p-6",
53
- children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h1", {
54
- className: "text-2xl font-semibold",
55
- children: "Shared Files"
56
- }), /* @__PURE__ */ s("p", {
57
- className: "text-sm text-muted-foreground",
58
- children: [m.length, " projects with associated resources"]
59
- })] }), /* @__PURE__ */ s("div", {
60
- className: "space-y-2",
61
- children: [h.map((e) => /* @__PURE__ */ o(c, {
62
- className: "hover:bg-muted/30 cursor-pointer transition-colors",
63
- children: /* @__PURE__ */ s(l, {
64
- className: "py-3 flex items-center justify-between",
65
- children: [/* @__PURE__ */ s("div", {
66
- className: "flex items-center gap-3",
67
- children: [/* @__PURE__ */ o(r, { className: "h-5 w-5 text-muted-foreground" }), /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("p", {
68
- className: "text-sm font-medium",
69
- children: e.name
70
- }), /* @__PURE__ */ s("p", {
71
- className: "text-xs text-muted-foreground",
72
- children: [
73
- e.key,
74
- " · ",
75
- e.methodology ?? "No methodology"
76
- ]
77
- })] })]
78
- }), /* @__PURE__ */ s("div", {
79
- className: "flex items-center gap-6 text-xs text-muted-foreground",
80
- children: [
81
- /* @__PURE__ */ o("span", {
82
- className: "capitalize",
83
- children: e.status.toLowerCase()
84
- }),
85
- e.tags.length > 0 && /* @__PURE__ */ o("div", {
86
- className: "flex gap-1",
87
- children: e.tags.slice(0, 3).map((e) => /* @__PURE__ */ o("span", {
88
- className: "px-1.5 py-0.5 bg-muted rounded text-[10px]",
89
- children: e
90
- }, e))
91
- }),
92
- e.startDate && /* @__PURE__ */ s("span", {
93
- className: "flex items-center gap-1",
94
- children: [/* @__PURE__ */ o(t, { className: "h-3 w-3" }), e.startDate]
95
- })
96
- ]
97
- })]
98
- })
99
- }, e.id)), h.length === 0 && /* @__PURE__ */ s("div", {
100
- className: "text-center py-12",
101
- children: [/* @__PURE__ */ o(n, { className: "h-12 w-12 text-muted-foreground mx-auto mb-3" }), /* @__PURE__ */ o("p", {
102
- className: "text-sm text-muted-foreground",
103
- children: "No projects found. Files will appear once projects are created."
104
- })]
105
- })]
106
- })]
107
- });
108
- }
109
- //#endregion
110
- export { d as CollaborationFilesPagePage };
111
-
112
- //# sourceMappingURL=CollaborationFilesPagePage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CollaborationFilesPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/CollaborationFilesPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent } from '@burdenoff/fe-libs/ui';\nimport { FileText, File, FolderKanban, Calendar } from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\n\nconst GET_PROJECTS_FOR_FILES = gql`\n query GetProjectsForFiles($workspaceId: ID!, $pagination: PlanmagnetPaginationInput) {\n planmagnetProjects(workspaceId: $workspaceId, pagination: $pagination) {\n items {\n id\n name\n key\n status\n methodology\n tags\n startDate\n endDate\n }\n totalCount\n }\n }\n`;\n\ninterface ProjectNode {\n id: string;\n name: string;\n key: string;\n status: string;\n methodology: string | null;\n tags: string[];\n startDate: string | null;\n endDate: string | null;\n}\n\ninterface ProjectsData {\n projects: { items: ProjectNode[]; totalCount: number };\n}\n\nexport function CollaborationFilesPagePage() {\n const { workspaceId } = usePlanMagnet();\n\n const { data, loading, error } = useQuery<ProjectsData>(GET_PROJECTS_FOR_FILES, {\n variables: {\n workspaceId,\n pagination: { first: 100 },\n },\n skip: !workspaceId,\n });\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-red-500\">Error: {error.message}</div>;\n }\n\n const projects = data?.planmagnetProjects?.items ?? [];\n\n const projectFiles = projects.map((project) => ({\n id: project.id,\n name: project.name,\n key: project.key,\n status: project.status,\n methodology: project.methodology,\n tags: project.tags,\n startDate: project.startDate,\n endDate: project.endDate,\n }));\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Shared Files</h1>\n <p className=\"text-sm text-muted-foreground\">\n {projects.length} projects with associated resources\n </p>\n </div>\n <div className=\"space-y-2\">\n {projectFiles.map((pf) => (\n <Card key={pf.id} className=\"hover:bg-muted/30 cursor-pointer transition-colors\">\n <CardContent className=\"py-3 flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <FolderKanban className=\"h-5 w-5 text-muted-foreground\" />\n <div>\n <p className=\"text-sm font-medium\">{pf.name}</p>\n <p className=\"text-xs text-muted-foreground\">\n {pf.key} &middot; {pf.methodology ?? 'No methodology'}\n </p>\n </div>\n </div>\n <div className=\"flex items-center gap-6 text-xs text-muted-foreground\">\n <span className=\"capitalize\">{pf.status.toLowerCase()}</span>\n {pf.tags.length > 0 && (\n <div className=\"flex gap-1\">\n {pf.tags.slice(0, 3).map((tag) => (\n <span key={tag} className=\"px-1.5 py-0.5 bg-muted rounded text-[10px]\">\n {tag}\n </span>\n ))}\n </div>\n )}\n {pf.startDate && (\n <span className=\"flex items-center gap-1\">\n <Calendar className=\"h-3 w-3\" />\n {pf.startDate}\n </span>\n )}\n </div>\n </CardContent>\n </Card>\n ))}\n {projectFiles.length === 0 && (\n <div className=\"text-center py-12\">\n <File className=\"h-12 w-12 text-muted-foreground mx-auto mb-3\" />\n <p className=\"text-sm text-muted-foreground\">\n No projects found. Files will appear once projects are created.\n </p>\n </div>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;AAQA,IAAM,IAAyB,CAAG;;;;;;;;;;;;;;;;;AAiClC,SAAgB,IAA6B;CAC3C,IAAM,EAAE,mBAAgB,GAAe,EAEjC,EAAE,SAAM,YAAS,aAAU,EAAuB,GAAwB;EAC9E,WAAW;GACT;GACA,YAAY,EAAE,OAAO,KAAK;GAC3B;EACD,MAAM,CAAC;EACR,CAAC;AAEF,KAAI,EACF,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD,EAAK,WAAU,kFAAmF,CAAA;EAC9F,CAAA;AAIV,KAAI,EACF,QAAO,kBAAC,OAAD;EAAK,WAAU;YAAf,CAAkC,WAAQ,EAAM,QAAc;;CAGvE,IAAM,IAAW,GAAM,oBAAoB,SAAS,EAAE,EAEhD,IAAe,EAAS,KAAK,OAAa;EAC9C,IAAI,EAAQ;EACZ,MAAM,EAAQ;EACd,KAAK,EAAQ;EACb,QAAQ,EAAQ;EAChB,aAAa,EAAQ;EACrB,MAAM,EAAQ;EACd,WAAW,EAAQ;EACnB,SAAS,EAAQ;EAClB,EAAE;AAEH,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;GAAI,WAAU;aAAyB;GAAiB,CAAA,EACxD,kBAAC,KAAD;GAAG,WAAU;aAAb,CACG,EAAS,QAAO,sCACf;KACA,EAAA,CAAA,EACN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,EAAa,KAAK,MACjB,kBAAC,GAAD;IAAkB,WAAU;cAC1B,kBAAC,GAAD;KAAa,WAAU;eAAvB,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD,EAAc,WAAU,iCAAkC,CAAA,EAC1D,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;iBAAuB,EAAG;OAAS,CAAA,EAChD,kBAAC,KAAD;OAAG,WAAU;iBAAb;QACG,EAAG;QAAI;QAAW,EAAG,eAAe;QACnC;SACA,EAAA,CAAA,CACF;SACN,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,QAAD;QAAM,WAAU;kBAAc,EAAG,OAAO,aAAa;QAAQ,CAAA;OAC5D,EAAG,KAAK,SAAS,KAChB,kBAAC,OAAD;QAAK,WAAU;kBACZ,EAAG,KAAK,MAAM,GAAG,EAAE,CAAC,KAAK,MACxB,kBAAC,QAAD;SAAgB,WAAU;mBACvB;SACI,EAFI,EAEJ,CACP;QACE,CAAA;OAEP,EAAG,aACF,kBAAC,QAAD;QAAM,WAAU;kBAAhB,CACE,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA,EAC/B,EAAG,UACC;;OAEL;QACM;;IACT,EA9BI,EAAG,GA8BP,CACP,EACD,EAAa,WAAW,KACvB,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAM,WAAU,gDAAiD,CAAA,EACjE,kBAAC,KAAD;KAAG,WAAU;eAAgC;KAEzC,CAAA,CACA;MAEJ;KACF"}
@@ -1,2 +0,0 @@
1
- export declare function CollaborationMessagesPagePage(): import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=CollaborationMessagesPagePage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CollaborationMessagesPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/CollaborationMessagesPagePage.tsx"],"names":[],"mappings":"AA0DA,wBAAgB,6BAA6B,4CAqG5C"}