@burdenoff/microfe-planmagnet 2026.925.14 → 2026.925.16
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.
- package/dist/generated/wspace-types.d.ts +21 -0
- package/dist/generated/wspace-types.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.js +67 -59
- package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
- package/dist/planmagnet/docs/DocStatusBadge.d.ts +8 -0
- package/dist/planmagnet/docs/DocStatusBadge.d.ts.map +1 -0
- package/dist/planmagnet/docs/DocStatusBadge.js +28 -0
- package/dist/planmagnet/docs/DocStatusBadge.js.map +1 -0
- package/dist/planmagnet/pages/DocsDocDetailPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/DocsDocDetailPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/DocsDocDetailPagePage.js +410 -0
- package/dist/planmagnet/pages/DocsDocDetailPagePage.js.map +1 -0
- package/dist/planmagnet/pages/DocsDocsPagePage.d.ts +3 -0
- package/dist/planmagnet/pages/DocsDocsPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/DocsDocsPagePage.js +224 -0
- package/dist/planmagnet/pages/DocsDocsPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js +100 -94
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.js +130 -128
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.js.map +1 -1
- package/dist/planmagnet/releases/ReleaseGatesCard.d.ts +6 -0
- package/dist/planmagnet/releases/ReleaseGatesCard.d.ts.map +1 -0
- package/dist/planmagnet/releases/ReleaseGatesCard.js +173 -0
- package/dist/planmagnet/releases/ReleaseGatesCard.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductsReleaseDetailPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProductsReleaseDetailPagePage.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 { Markdown } from '@burdenoff/fe-libs/shared/components';\nimport { GitBranch, Calendar, Clock, Server, Loader2 } from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\nimport { useParams } from 'react-router';\nimport { PersonName } from '../people/People';\nimport { ReleaseNotesCard } from '../releases/ReleaseNotesCard';\n\nconst GET_RELEASE = gql`\n query GetRelease($id: ID!) {\n planmagnetRelease(id: $id) {\n id\n workspaceId\n projectId\n name\n description\n version\n status\n plannedDate\n releasedAt\n releaseNotes\n ownerId\n tags\n metadata\n createdAt\n updatedAt\n workItems {\n id\n title\n status\n type\n priority\n }\n }\n }\n`;\n\ninterface WorkItemSummary {\n id: string;\n title: string;\n status: string;\n type: string;\n priority: string;\n}\n\nconst statusColor: Record<string, string> = {\n DRAFT: 'bg-gray-100 text-gray-800',\n PLANNING: 'bg-yellow-100 text-yellow-800',\n IN_PROGRESS: 'bg-blue-100 text-blue-800',\n READY: 'bg-orange-100 text-orange-800',\n RELEASED: 'bg-green-100 text-green-800',\n CANCELLED: 'bg-red-100 text-red-800',\n ROLLED_BACK: 'bg-red-100 text-red-800',\n};\n\nexport function ProductsReleaseDetailPagePage() {\n const { workspaceId } = usePlanMagnet();\n const params = useParams<{ id: string }>();\n const releaseId = params.id ?? '';\n\n const {\n data,\n loading,\n error,\n } = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useQuery<Record<string, any>>(GET_RELEASE, {\n variables: { id: releaseId },\n skip: !releaseId,\n });\n\n // Only before the first load: a refetch must not blank the page (it\n\n // unmounts every component on it and loses their state).\n\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-destructive\">Failed to load release: {error.message}</div>;\n }\n\n const release = data?.planmagnetRelease;\n if (!release) return <div className=\"p-6 text-muted-foreground\">Release not found.</div>;\n\n const workItems: WorkItemSummary[] = release.workItems ?? [];\n const featureItems = workItems.filter((w) => w.type === 'STORY' || w.type === 'FEATURE');\n const bugItems = workItems.filter((w) => w.type === 'BUG');\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <div className=\"flex items-center gap-2\">\n <GitBranch className=\"h-5 w-5 text-primary\" />\n <h1 className=\"text-2xl font-semibold\">{release.version}</h1>\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${statusColor[release.status] ?? 'bg-gray-100'}`}\n >\n {release.status.toLowerCase().replace('_', ' ')}\n </span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">{release.name}</p>\n </div>\n <Badge variant=\"outline\" className=\"capitalize\">\n {release.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n\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>Overview</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"text-sm prose prose-sm dark:prose-invert max-w-none\">\n {release.description ? (\n <Markdown>{release.description}</Markdown>\n ) : (\n <p>No description provided.</p>\n )}\n </div>\n <div className=\"grid grid-cols-3 gap-4\">\n <div className=\"text-center p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-semibold mt-1\">{featureItems.length}</p>\n <p className=\"text-xs text-muted-foreground\">Features</p>\n </div>\n <div className=\"text-center p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-semibold mt-1\">{bugItems.length}</p>\n <p className=\"text-xs text-muted-foreground\">Bug Fixes</p>\n </div>\n <div className=\"text-center p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-semibold mt-1\">{workItems.length}</p>\n <p className=\"text-xs text-muted-foreground\">Total Items</p>\n </div>\n </div>\n </CardContent>\n </Card>\n\n <ReleaseNotesCard releaseId={release.id} notes={release.releaseNotes ?? null} />\n\n {workItems.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Work Items ({workItems.length})</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {workItems.map((item) => (\n <div\n key={item.id}\n className=\"flex items-center justify-between border rounded-md p-3\"\n >\n <div>\n <p className=\"text-sm font-medium\">{item.title}</p>\n <p className=\"text-xs text-muted-foreground capitalize\">\n {item.type.toLowerCase()} · {item.priority.toLowerCase()} priority\n </p>\n </div>\n <Badge variant=\"outline\" className=\"text-xs capitalize\">\n {item.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n ))}\n </CardContent>\n </Card>\n )}\n </div>\n\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Timeline</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3 text-sm\">\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">Planned:</span>\n <span className=\"font-medium\">\n {release.plannedDate\n ? new Date(release.plannedDate).toLocaleDateString()\n : 'Not set'}\n </span>\n </div>\n {release.releasedAt && (\n <div className=\"flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-green-500\" />\n <span className=\"text-muted-foreground\">Released:</span>\n <span className=\"font-medium\">\n {new Date(release.releasedAt).toLocaleDateString()}\n </span>\n </div>\n )}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Version</span>\n <span className=\"font-medium\">{release.version}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Status</span>\n <Badge variant=\"outline\" className=\"text-xs capitalize\">\n {release.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Owner</span>\n <span>\n <PersonName id={release.ownerId} />\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Created</span>\n <span>{new Date(release.createdAt).toLocaleDateString()}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Updated</span>\n <span>{new Date(release.updatedAt).toLocaleDateString()}</span>\n </div>\n </CardContent>\n </Card>\n\n {release.tags?.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Tags</CardTitle>\n </CardHeader>\n <CardContent className=\"flex flex-wrap gap-1\">\n {release.tags.map((tag: string) => (\n <Badge key={tag} variant=\"outline\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </CardContent>\n </Card>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProductsReleaseDetailPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProductsReleaseDetailPagePage.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 { Markdown } from '@burdenoff/fe-libs/shared/components';\nimport { GitBranch, Calendar, Clock, Server, Loader2 } from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\nimport { useParams } from 'react-router';\nimport { PersonName } from '../people/People';\nimport { ReleaseNotesCard } from '../releases/ReleaseNotesCard';\nimport { ReleaseGatesCard } from '../releases/ReleaseGatesCard';\n\nconst GET_RELEASE = gql`\n query GetRelease($id: ID!) {\n planmagnetRelease(id: $id) {\n id\n workspaceId\n projectId\n name\n description\n version\n status\n plannedDate\n releasedAt\n releaseNotes\n ownerId\n tags\n metadata\n createdAt\n updatedAt\n workItems {\n id\n title\n status\n type\n priority\n }\n }\n }\n`;\n\ninterface WorkItemSummary {\n id: string;\n title: string;\n status: string;\n type: string;\n priority: string;\n}\n\nconst statusColor: Record<string, string> = {\n DRAFT: 'bg-gray-100 text-gray-800',\n PLANNING: 'bg-yellow-100 text-yellow-800',\n IN_PROGRESS: 'bg-blue-100 text-blue-800',\n READY: 'bg-orange-100 text-orange-800',\n RELEASED: 'bg-green-100 text-green-800',\n CANCELLED: 'bg-red-100 text-red-800',\n ROLLED_BACK: 'bg-red-100 text-red-800',\n};\n\nexport function ProductsReleaseDetailPagePage() {\n const { workspaceId } = usePlanMagnet();\n const params = useParams<{ id: string }>();\n const releaseId = params.id ?? '';\n\n const {\n data,\n loading,\n error,\n } = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useQuery<Record<string, any>>(GET_RELEASE, {\n variables: { id: releaseId },\n skip: !releaseId,\n });\n\n // Only before the first load: a refetch must not blank the page (it\n\n // unmounts every component on it and loses their state).\n\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-destructive\">Failed to load release: {error.message}</div>;\n }\n\n const release = data?.planmagnetRelease;\n if (!release) return <div className=\"p-6 text-muted-foreground\">Release not found.</div>;\n\n const workItems: WorkItemSummary[] = release.workItems ?? [];\n const featureItems = workItems.filter((w) => w.type === 'STORY' || w.type === 'FEATURE');\n const bugItems = workItems.filter((w) => w.type === 'BUG');\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <div className=\"flex items-center gap-2\">\n <GitBranch className=\"h-5 w-5 text-primary\" />\n <h1 className=\"text-2xl font-semibold\">{release.version}</h1>\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${statusColor[release.status] ?? 'bg-gray-100'}`}\n >\n {release.status.toLowerCase().replace('_', ' ')}\n </span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">{release.name}</p>\n </div>\n <Badge variant=\"outline\" className=\"capitalize\">\n {release.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n\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>Overview</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"text-sm prose prose-sm dark:prose-invert max-w-none\">\n {release.description ? (\n <Markdown>{release.description}</Markdown>\n ) : (\n <p>No description provided.</p>\n )}\n </div>\n <div className=\"grid grid-cols-3 gap-4\">\n <div className=\"text-center p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-semibold mt-1\">{featureItems.length}</p>\n <p className=\"text-xs text-muted-foreground\">Features</p>\n </div>\n <div className=\"text-center p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-semibold mt-1\">{bugItems.length}</p>\n <p className=\"text-xs text-muted-foreground\">Bug Fixes</p>\n </div>\n <div className=\"text-center p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-semibold mt-1\">{workItems.length}</p>\n <p className=\"text-xs text-muted-foreground\">Total Items</p>\n </div>\n </div>\n </CardContent>\n </Card>\n\n <ReleaseGatesCard\n releaseId={release.id}\n projectId={release.projectId ?? null}\n releaseStatus={release.status}\n />\n <ReleaseNotesCard releaseId={release.id} notes={release.releaseNotes ?? null} />\n\n {workItems.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Work Items ({workItems.length})</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {workItems.map((item) => (\n <div\n key={item.id}\n className=\"flex items-center justify-between border rounded-md p-3\"\n >\n <div>\n <p className=\"text-sm font-medium\">{item.title}</p>\n <p className=\"text-xs text-muted-foreground capitalize\">\n {item.type.toLowerCase()} · {item.priority.toLowerCase()} priority\n </p>\n </div>\n <Badge variant=\"outline\" className=\"text-xs capitalize\">\n {item.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n ))}\n </CardContent>\n </Card>\n )}\n </div>\n\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Timeline</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3 text-sm\">\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">Planned:</span>\n <span className=\"font-medium\">\n {release.plannedDate\n ? new Date(release.plannedDate).toLocaleDateString()\n : 'Not set'}\n </span>\n </div>\n {release.releasedAt && (\n <div className=\"flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-green-500\" />\n <span className=\"text-muted-foreground\">Released:</span>\n <span className=\"font-medium\">\n {new Date(release.releasedAt).toLocaleDateString()}\n </span>\n </div>\n )}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Version</span>\n <span className=\"font-medium\">{release.version}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Status</span>\n <Badge variant=\"outline\" className=\"text-xs capitalize\">\n {release.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Owner</span>\n <span>\n <PersonName id={release.ownerId} />\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Created</span>\n <span>{new Date(release.createdAt).toLocaleDateString()}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Updated</span>\n <span>{new Date(release.updatedAt).toLocaleDateString()}</span>\n </div>\n </CardContent>\n </Card>\n\n {release.tags?.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Tags</CardTitle>\n </CardHeader>\n <CardContent className=\"flex flex-wrap gap-1\">\n {release.tags.map((tag: string) => (\n <Badge key={tag} variant=\"outline\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </CardContent>\n </Card>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAaA,IAAM,IAAc,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCjB,IAAsC;CAC1C,OAAO;CACP,UAAU;CACV,aAAa;CACb,OAAO;CACP,UAAU;CACV,WAAW;CACX,aAAa;CACd;AAED,SAAgB,IAAgC;CAC9C,IAAM,EAAE,mBAAgB,GAAe,EAEjC,IADS,GAA2B,CACjB,MAAM,IAEzB,EACJ,SACA,YACA,aAGA,EAA8B,GAAa;EACzC,WAAW,EAAE,IAAI,GAAW;EAC5B,MAAM,CAAC;EACR,CAAC;AAMJ,KAAI,KAAW,CAAC,EACd,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD,EAAS,WAAU,8CAA+C,CAAA;EAC9D,CAAA;AAIV,KAAI,EACF,QAAO,kBAAC,OAAD;EAAK,WAAU;YAAf,CAAsC,4BAAyB,EAAM,QAAc;;CAG5F,IAAM,IAAU,GAAM;AACtB,KAAI,CAAC,EAAS,QAAO,kBAAC,OAAD;EAAK,WAAU;YAA4B;EAAwB,CAAA;CAExF,IAAM,IAA+B,EAAQ,aAAa,EAAE,EACtD,IAAe,EAAU,QAAQ,MAAM,EAAE,SAAS,WAAW,EAAE,SAAS,UAAU,EAClF,IAAW,EAAU,QAAQ,MAAM,EAAE,SAAS,MAAM;AAE1D,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD,EAAW,WAAU,wBAAyB,CAAA;KAC9C,kBAAC,MAAD;MAAI,WAAU;gBAA0B,EAAQ;MAAa,CAAA;KAC7D,kBAAC,QAAD;MACE,WAAW,+CAA+C,EAAY,EAAQ,WAAW;gBAExF,EAAQ,OAAO,aAAa,CAAC,QAAQ,KAAK,IAAI;MAC1C,CAAA;KACH;OACN,kBAAC,KAAD;IAAG,WAAU;cAAsC,EAAQ;IAAS,CAAA,CAChE,EAAA,CAAA,EACN,kBAAC,GAAD;IAAO,SAAQ;IAAU,WAAU;cAChC,EAAQ,OAAO,aAAa,CAAC,QAAQ,KAAK,IAAI;IACzC,CAAA,CACJ;MAEN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,YAAoB,CAAA,EACpB,CAAA,EACb,kBAAC,GAAD;MAAa,WAAU;gBAAvB,CACE,kBAAC,OAAD;OAAK,WAAU;iBACZ,EAAQ,cACP,kBAAC,GAAD,EAAA,UAAW,EAAQ,aAAuB,CAAA,GAE1C,kBAAC,KAAD,EAAA,UAAG,4BAA4B,CAAA;OAE7B,CAAA,EACN,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,KAAD;UAAG,WAAU;oBAA8B,EAAa;UAAW,CAAA,EACnE,kBAAC,KAAD;UAAG,WAAU;oBAAgC;UAAY,CAAA,CACrD;;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,KAAD;UAAG,WAAU;oBAA8B,EAAS;UAAW,CAAA,EAC/D,kBAAC,KAAD;UAAG,WAAU;oBAAgC;UAAa,CAAA,CACtD;;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,KAAD;UAAG,WAAU;oBAA8B,EAAU;UAAW,CAAA,EAChE,kBAAC,KAAD;UAAG,WAAU;oBAAgC;UAAe,CAAA,CACxD;;QACF;SACM;QACT,EAAA,CAAA;KAEP,kBAAC,GAAD;MACE,WAAW,EAAQ;MACnB,WAAW,EAAQ,aAAa;MAChC,eAAe,EAAQ;MACvB,CAAA;KACF,kBAAC,GAAD;MAAkB,WAAW,EAAQ;MAAI,OAAO,EAAQ,gBAAgB;MAAQ,CAAA;KAE/E,EAAU,SAAS,KAClB,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAA;MAAW;MAAa,EAAU;MAAO;MAAa,EAAA,CAAA,EAC3C,CAAA,EACb,kBAAC,GAAD;MAAa,WAAU;gBACpB,EAAU,KAAK,MACd,kBAAC,OAAD;OAEE,WAAU;iBAFZ,CAIE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAuB,EAAK;QAAU,CAAA,EACnD,kBAAC,KAAD;QAAG,WAAU;kBAAb;SACG,EAAK,KAAK,aAAa;SAAC;SAAW,EAAK,SAAS,aAAa;SAAC;SAC9D;UACA,EAAA,CAAA,EACN,kBAAC,GAAD;QAAO,SAAQ;QAAU,WAAU;kBAChC,EAAK,OAAO,aAAa,CAAC,QAAQ,KAAK,IAAI;QACtC,CAAA,CACJ;SAZC,EAAK,GAYN,CACN;MACU,CAAA,CACT,EAAA,CAAA;KAEL;OAEN,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,YAAoB,CAAA,EACpB,CAAA,EACb,kBAAC,GAAD;MAAa,WAAU;gBAAvB,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,GAAD,EAAU,WAAU,iCAAkC,CAAA;QACtD,kBAAC,QAAD;SAAM,WAAU;mBAAwB;SAAe,CAAA;QACvD,kBAAC,QAAD;SAAM,WAAU;mBACb,EAAQ,cACL,IAAI,KAAK,EAAQ,YAAY,CAAC,oBAAoB,GAClD;SACC,CAAA;QACH;UACL,EAAQ,cACP,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,GAAD,EAAO,WAAU,0BAA2B,CAAA;QAC5C,kBAAC,QAAD;SAAM,WAAU;mBAAwB;SAAgB,CAAA;QACxD,kBAAC,QAAD;SAAM,WAAU;mBACb,IAAI,KAAK,EAAQ,WAAW,CAAC,oBAAoB;SAC7C,CAAA;QACH;SAEI;QACT,EAAA,CAAA;KAEP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,WAAmB,CAAA,EACnB,CAAA,EACb,kBAAC,GAAD;MAAa,WAAU;gBAAvB;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,QAAD;SAAM,WAAU;mBAAwB;SAAc,CAAA,EACtD,kBAAC,QAAD;SAAM,WAAU;mBAAe,EAAQ;SAAe,CAAA,CAClD;;OACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,QAAD;SAAM,WAAU;mBAAwB;SAAa,CAAA,EACrD,kBAAC,GAAD;SAAO,SAAQ;SAAU,WAAU;mBAChC,EAAQ,OAAO,aAAa,CAAC,QAAQ,KAAK,IAAI;SACzC,CAAA,CACJ;;OACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,QAAD;SAAM,WAAU;mBAAwB;SAAY,CAAA,EACpD,kBAAC,QAAD,EAAA,UACE,kBAAC,GAAD,EAAY,IAAI,EAAQ,SAAW,CAAA,EAC9B,CAAA,CACH;;OACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,QAAD;SAAM,WAAU;mBAAwB;SAAc,CAAA,EACtD,kBAAC,QAAD,EAAA,UAAO,IAAI,KAAK,EAAQ,UAAU,CAAC,oBAAoB,EAAQ,CAAA,CAC3D;;OACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,QAAD;SAAM,WAAU;mBAAwB;SAAc,CAAA,EACtD,kBAAC,QAAD,EAAA,UAAO,IAAI,KAAK,EAAQ,UAAU,CAAC,oBAAoB,EAAQ,CAAA,CAC3D;;OACM;QACT,EAAA,CAAA;KAEN,EAAQ,MAAM,SAAS,KACtB,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,QAAgB,CAAA,EAChB,CAAA,EACb,kBAAC,GAAD;MAAa,WAAU;gBACpB,EAAQ,KAAK,KAAK,MACjB,kBAAC,GAAD;OAAiB,SAAQ;OAAU,WAAU;iBAC1C;OACK,EAFI,EAEJ,CACR;MACU,CAAA,CACT,EAAA,CAAA;KAEL;MACF;KACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TasksTaskDetailPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksTaskDetailPagePage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TasksTaskDetailPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksTaskDetailPagePage.tsx"],"names":[],"mappings":"AAsSA,wBAAgB,uBAAuB,4CAgItC"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { usePlanMagnet as e } from "../providers/PlanMagnetProvider.js";
|
|
2
|
-
import { throwOnError as t } from "../utils/mutationResult.js";
|
|
1
|
+
import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
|
|
3
2
|
import { MarkdownEditor as n } from "../../components/MarkdownEditor.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
3
|
+
import { throwOnError as r } from "../utils/mutationResult.js";
|
|
4
|
+
import { WorkItemComments as i } from "../comments/WorkItemComments.js";
|
|
5
|
+
import { WorkItemActivity as a } from "../comments/WorkItemActivity.js";
|
|
6
|
+
import { useState as o } from "react";
|
|
7
|
+
import { FileText as s, Plus as c, X as l } from "lucide-react";
|
|
8
|
+
import { gql as u } from "@apollo/client";
|
|
9
|
+
import { useMutation as d, useQuery as f } from "@apollo/client/react";
|
|
10
|
+
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
11
|
+
import { Badge as h, Button as g, Card as _, CardContent as v, CardHeader as y, CardTitle as b, Input as x } from "@burdenoff/fe-libs/ui";
|
|
12
12
|
//#region src/planmagnet/pages/TasksTaskDetailPagePage.tsx
|
|
13
|
-
var
|
|
13
|
+
var S = u`
|
|
14
14
|
query GetWorkItemDetail($workItemId: ID!) {
|
|
15
15
|
planmagnetWorkItem(id: $workItemId) {
|
|
16
16
|
id
|
|
@@ -32,7 +32,7 @@ var x = l`
|
|
|
32
32
|
updatedAt
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
-
`,
|
|
35
|
+
`, C = u`
|
|
36
36
|
query GetWorkItemDocs($workItemId: ID!) {
|
|
37
37
|
planmagnetWorkItemDocs(workItemId: $workItemId) {
|
|
38
38
|
id
|
|
@@ -42,28 +42,28 @@ var x = l`
|
|
|
42
42
|
updatedAt
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
`,
|
|
45
|
+
`, w = u`
|
|
46
46
|
mutation CreateDocForWorkItem($input: PlanmagnetCreateDocInput!) {
|
|
47
47
|
planmagnetCreateDoc(input: $input) {
|
|
48
48
|
id
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
-
`,
|
|
51
|
+
`, T = u`
|
|
52
52
|
mutation LinkDocToWorkItem($docId: ID!, $workItemId: ID!) {
|
|
53
53
|
planmagnetLinkDocToWorkItem(docId: $docId, workItemId: $workItemId) {
|
|
54
54
|
id
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
`,
|
|
57
|
+
`, E = u`
|
|
58
58
|
mutation UnlinkDocFromWorkItem($docId: ID!, $workItemId: ID!) {
|
|
59
59
|
planmagnetUnlinkDocFromWorkItem(docId: $docId, workItemId: $workItemId)
|
|
60
60
|
}
|
|
61
|
-
`,
|
|
61
|
+
`, D = {
|
|
62
62
|
LOW: "bg-gray-100 text-gray-800",
|
|
63
63
|
MEDIUM: "bg-blue-100 text-blue-800",
|
|
64
64
|
HIGH: "bg-orange-100 text-orange-800",
|
|
65
65
|
CRITICAL: "bg-red-100 text-red-800"
|
|
66
|
-
},
|
|
66
|
+
}, O = {
|
|
67
67
|
BACKLOG: "bg-gray-100 text-gray-800",
|
|
68
68
|
TODO: "bg-blue-100 text-blue-800",
|
|
69
69
|
IN_PROGRESS: "bg-yellow-100 text-yellow-800",
|
|
@@ -72,276 +72,278 @@ var x = l`
|
|
|
72
72
|
BLOCKED: "bg-red-100 text-red-800",
|
|
73
73
|
TESTING: "bg-teal-100 text-teal-800",
|
|
74
74
|
CANCELLED: "bg-gray-100 text-gray-800"
|
|
75
|
-
},
|
|
75
|
+
}, k = {
|
|
76
76
|
DRAFT: "bg-gray-100 text-gray-800",
|
|
77
77
|
PUBLISHED: "bg-green-100 text-green-800",
|
|
78
78
|
ARCHIVED: "bg-gray-100 text-gray-500"
|
|
79
79
|
};
|
|
80
|
-
function
|
|
81
|
-
let [
|
|
80
|
+
function A({ workItemId: e }) {
|
|
81
|
+
let i = t(), [a, u] = o(!1), [h, S] = o(""), [D, O] = o(""), { data: A, loading: j, error: M, refetch: N } = f(C, {
|
|
82
82
|
variables: { workItemId: e },
|
|
83
83
|
skip: !e
|
|
84
|
-
}), [
|
|
85
|
-
if (!(!
|
|
86
|
-
|
|
84
|
+
}), [P, { loading: F }] = d(w), [I] = d(T), [L, { loading: R }] = d(E), [z, B] = o(null), V = A?.planmagnetWorkItemDocs ?? [], H = async () => {
|
|
85
|
+
if (!(!h.trim() || !D.trim())) {
|
|
86
|
+
B(null);
|
|
87
87
|
try {
|
|
88
|
-
let
|
|
89
|
-
title:
|
|
90
|
-
content:
|
|
88
|
+
let t = (await r(P({ variables: { input: {
|
|
89
|
+
title: h.trim(),
|
|
90
|
+
content: D.trim()
|
|
91
91
|
} } }))).data?.planmagnetCreateDoc?.id;
|
|
92
|
-
|
|
93
|
-
docId:
|
|
92
|
+
t && await r(I({ variables: {
|
|
93
|
+
docId: t,
|
|
94
94
|
workItemId: e
|
|
95
95
|
} }));
|
|
96
96
|
} catch (e) {
|
|
97
|
-
|
|
97
|
+
B(e instanceof Error ? e.message : "The doc could not be saved.");
|
|
98
98
|
return;
|
|
99
99
|
}
|
|
100
|
-
|
|
100
|
+
S(""), O(""), u(!1), N();
|
|
101
101
|
}
|
|
102
|
-
},
|
|
103
|
-
|
|
102
|
+
}, U = async (t) => {
|
|
103
|
+
B(null);
|
|
104
104
|
try {
|
|
105
|
-
await
|
|
106
|
-
docId:
|
|
105
|
+
await r(L({ variables: {
|
|
106
|
+
docId: t,
|
|
107
107
|
workItemId: e
|
|
108
108
|
} }));
|
|
109
109
|
} catch (e) {
|
|
110
|
-
|
|
110
|
+
B(e instanceof Error ? e.message : "The doc could not be unlinked.");
|
|
111
111
|
return;
|
|
112
112
|
}
|
|
113
|
-
|
|
113
|
+
N();
|
|
114
114
|
};
|
|
115
|
-
return /* @__PURE__ */
|
|
115
|
+
return /* @__PURE__ */ m(_, { children: [/* @__PURE__ */ m(y, {
|
|
116
116
|
className: "flex flex-row items-center justify-between space-y-0",
|
|
117
|
-
children: [/* @__PURE__ */
|
|
117
|
+
children: [/* @__PURE__ */ p(b, { children: "Linked Docs" }), !a && /* @__PURE__ */ m(g, {
|
|
118
118
|
size: "sm",
|
|
119
119
|
variant: "outline",
|
|
120
|
-
onClick: () =>
|
|
121
|
-
children: [/* @__PURE__ */
|
|
120
|
+
onClick: () => u(!0),
|
|
121
|
+
children: [/* @__PURE__ */ p(c, { className: "h-4 w-4 mr-1" }), "New Doc"]
|
|
122
122
|
})]
|
|
123
|
-
}), /* @__PURE__ */
|
|
123
|
+
}), /* @__PURE__ */ m(v, {
|
|
124
124
|
className: "space-y-4",
|
|
125
125
|
children: [
|
|
126
|
-
|
|
126
|
+
a && /* @__PURE__ */ m("div", {
|
|
127
127
|
className: "space-y-3 rounded-md border border-input p-3",
|
|
128
128
|
children: [
|
|
129
|
-
/* @__PURE__ */
|
|
129
|
+
/* @__PURE__ */ p(x, {
|
|
130
130
|
placeholder: "Doc title",
|
|
131
|
-
value:
|
|
132
|
-
onChange: (e) =>
|
|
131
|
+
value: h,
|
|
132
|
+
onChange: (e) => S(e.target.value)
|
|
133
133
|
}),
|
|
134
|
-
/* @__PURE__ */
|
|
135
|
-
value:
|
|
136
|
-
onChange:
|
|
134
|
+
/* @__PURE__ */ p(n, {
|
|
135
|
+
value: D,
|
|
136
|
+
onChange: O,
|
|
137
137
|
placeholder: "Write the spec/doc content...",
|
|
138
138
|
minHeight: 140
|
|
139
139
|
}),
|
|
140
|
-
/* @__PURE__ */
|
|
140
|
+
/* @__PURE__ */ m("div", {
|
|
141
141
|
className: "flex gap-2 justify-end",
|
|
142
|
-
children: [/* @__PURE__ */
|
|
142
|
+
children: [/* @__PURE__ */ p(g, {
|
|
143
143
|
size: "sm",
|
|
144
144
|
variant: "ghost",
|
|
145
145
|
onClick: () => {
|
|
146
|
-
|
|
146
|
+
u(!1), S(""), O("");
|
|
147
147
|
},
|
|
148
148
|
children: "Cancel"
|
|
149
|
-
}), /* @__PURE__ */
|
|
149
|
+
}), /* @__PURE__ */ p(g, {
|
|
150
150
|
size: "sm",
|
|
151
|
-
disabled:
|
|
152
|
-
onClick:
|
|
153
|
-
children:
|
|
151
|
+
disabled: F || !h.trim() || !D.trim(),
|
|
152
|
+
onClick: H,
|
|
153
|
+
children: F ? "Creating..." : "Create & Link"
|
|
154
154
|
})]
|
|
155
155
|
})
|
|
156
156
|
]
|
|
157
157
|
}),
|
|
158
|
-
|
|
158
|
+
j && /* @__PURE__ */ p("p", {
|
|
159
159
|
className: "text-sm text-muted-foreground",
|
|
160
160
|
children: "Loading docs..."
|
|
161
161
|
}),
|
|
162
|
-
|
|
162
|
+
M && /* @__PURE__ */ m("p", {
|
|
163
163
|
className: "text-sm text-red-500",
|
|
164
|
-
children: ["Error: ",
|
|
164
|
+
children: ["Error: ", M.message]
|
|
165
165
|
}),
|
|
166
|
-
|
|
166
|
+
z && /* @__PURE__ */ p("p", {
|
|
167
167
|
role: "alert",
|
|
168
168
|
className: "text-sm text-destructive",
|
|
169
|
-
children:
|
|
169
|
+
children: z
|
|
170
170
|
}),
|
|
171
|
-
!
|
|
171
|
+
!j && !M && V.length === 0 && !a && /* @__PURE__ */ p("p", {
|
|
172
172
|
className: "text-sm text-muted-foreground",
|
|
173
173
|
children: "No docs linked to this work item yet."
|
|
174
174
|
}),
|
|
175
|
-
|
|
175
|
+
V.map((e) => /* @__PURE__ */ m("div", {
|
|
176
176
|
className: "flex items-center justify-between gap-3 rounded-md border border-input p-3",
|
|
177
|
-
children: [/* @__PURE__ */
|
|
177
|
+
children: [/* @__PURE__ */ m("div", {
|
|
178
178
|
className: "flex items-center gap-2 min-w-0",
|
|
179
|
-
children: [/* @__PURE__ */
|
|
179
|
+
children: [/* @__PURE__ */ p(s, { className: "h-4 w-4 text-muted-foreground shrink-0" }), /* @__PURE__ */ m("div", {
|
|
180
180
|
className: "min-w-0",
|
|
181
|
-
children: [/* @__PURE__ */
|
|
182
|
-
|
|
181
|
+
children: [/* @__PURE__ */ p("button", {
|
|
182
|
+
type: "button",
|
|
183
|
+
className: "block max-w-full truncate text-left text-sm font-medium hover:underline",
|
|
184
|
+
onClick: () => i(`/docs/doc-detail-page?docId=${encodeURIComponent(e.id)}`),
|
|
183
185
|
children: e.title
|
|
184
|
-
}), /* @__PURE__ */
|
|
186
|
+
}), /* @__PURE__ */ m("p", {
|
|
185
187
|
className: "text-xs text-muted-foreground",
|
|
186
188
|
children: ["v", e.version]
|
|
187
189
|
})]
|
|
188
190
|
})]
|
|
189
|
-
}), /* @__PURE__ */
|
|
191
|
+
}), /* @__PURE__ */ m("div", {
|
|
190
192
|
className: "flex items-center gap-2 shrink-0",
|
|
191
|
-
children: [/* @__PURE__ */
|
|
192
|
-
className: `text-xs px-2 py-0.5 rounded-full capitalize ${
|
|
193
|
+
children: [/* @__PURE__ */ p("span", {
|
|
194
|
+
className: `text-xs px-2 py-0.5 rounded-full capitalize ${k[e.status] ?? ""}`,
|
|
193
195
|
children: e.status.toLowerCase()
|
|
194
|
-
}), /* @__PURE__ */
|
|
196
|
+
}), /* @__PURE__ */ p(g, {
|
|
195
197
|
size: "icon",
|
|
196
198
|
variant: "ghost",
|
|
197
|
-
disabled:
|
|
198
|
-
onClick: () =>
|
|
199
|
+
disabled: R,
|
|
200
|
+
onClick: () => U(e.id),
|
|
199
201
|
"aria-label": `Unlink ${e.title}`,
|
|
200
|
-
children: /* @__PURE__ */
|
|
202
|
+
children: /* @__PURE__ */ p(l, { className: "h-4 w-4" })
|
|
201
203
|
})]
|
|
202
204
|
})]
|
|
203
205
|
}, e.id))
|
|
204
206
|
]
|
|
205
207
|
})] });
|
|
206
208
|
}
|
|
207
|
-
function
|
|
208
|
-
let { workspaceId: t } = e(), n = new URLSearchParams(window.location.search).get("taskId") ?? "", { data:
|
|
209
|
+
function j() {
|
|
210
|
+
let { workspaceId: t } = e(), n = new URLSearchParams(window.location.search).get("taskId") ?? "", { data: r, loading: o, error: s } = f(S, {
|
|
209
211
|
variables: { workItemId: n },
|
|
210
212
|
skip: !t || !n
|
|
211
213
|
});
|
|
212
|
-
if (o && !
|
|
214
|
+
if (o && !r) return /* @__PURE__ */ p("div", {
|
|
213
215
|
className: "flex items-center justify-center p-12",
|
|
214
|
-
children: /* @__PURE__ */
|
|
216
|
+
children: /* @__PURE__ */ p("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
|
|
215
217
|
});
|
|
216
|
-
if (s) return /* @__PURE__ */
|
|
218
|
+
if (s) return /* @__PURE__ */ m("div", {
|
|
217
219
|
className: "p-6 text-red-500",
|
|
218
220
|
children: ["Error: ", s.message]
|
|
219
221
|
});
|
|
220
|
-
let c =
|
|
221
|
-
if (!c) return /* @__PURE__ */
|
|
222
|
+
let c = r?.planmagnetWorkItem;
|
|
223
|
+
if (!c) return /* @__PURE__ */ p("div", {
|
|
222
224
|
className: "p-6 text-muted-foreground",
|
|
223
225
|
children: "Task not found."
|
|
224
226
|
});
|
|
225
227
|
let l = c.status.toLowerCase().replace("_", " ");
|
|
226
|
-
return /* @__PURE__ */
|
|
228
|
+
return /* @__PURE__ */ m("div", {
|
|
227
229
|
className: "space-y-6 p-6",
|
|
228
|
-
children: [/* @__PURE__ */
|
|
230
|
+
children: [/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("h1", {
|
|
229
231
|
className: "text-2xl font-semibold",
|
|
230
232
|
children: c.title
|
|
231
|
-
}), /* @__PURE__ */
|
|
233
|
+
}), /* @__PURE__ */ m("p", {
|
|
232
234
|
className: "text-sm text-muted-foreground",
|
|
233
235
|
children: [
|
|
234
236
|
c.key,
|
|
235
237
|
" · ",
|
|
236
238
|
c.type.toLowerCase()
|
|
237
239
|
]
|
|
238
|
-
})] }), /* @__PURE__ */
|
|
240
|
+
})] }), /* @__PURE__ */ m("div", {
|
|
239
241
|
className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
|
|
240
|
-
children: [/* @__PURE__ */
|
|
242
|
+
children: [/* @__PURE__ */ m("div", {
|
|
241
243
|
className: "lg:col-span-2 space-y-6",
|
|
242
244
|
children: [
|
|
243
|
-
/* @__PURE__ */
|
|
245
|
+
/* @__PURE__ */ m(_, { children: [/* @__PURE__ */ p(y, { children: /* @__PURE__ */ p(b, { children: "Description" }) }), /* @__PURE__ */ p(v, { children: /* @__PURE__ */ p("p", {
|
|
244
246
|
className: "text-sm",
|
|
245
247
|
children: c.description ?? "No description provided."
|
|
246
248
|
}) })] }),
|
|
247
|
-
/* @__PURE__ */
|
|
248
|
-
/* @__PURE__ */
|
|
249
|
-
/* @__PURE__ */
|
|
249
|
+
/* @__PURE__ */ p(A, { workItemId: c.id }),
|
|
250
|
+
/* @__PURE__ */ p(i, { workItemId: c.id }),
|
|
251
|
+
/* @__PURE__ */ p(a, { workItemId: c.id })
|
|
250
252
|
]
|
|
251
|
-
}), /* @__PURE__ */
|
|
253
|
+
}), /* @__PURE__ */ p("div", {
|
|
252
254
|
className: "space-y-6",
|
|
253
|
-
children: /* @__PURE__ */
|
|
255
|
+
children: /* @__PURE__ */ m(_, { children: [/* @__PURE__ */ p(y, { children: /* @__PURE__ */ p(b, { children: "Details" }) }), /* @__PURE__ */ m(v, {
|
|
254
256
|
className: "space-y-3 text-sm",
|
|
255
257
|
children: [
|
|
256
|
-
/* @__PURE__ */
|
|
258
|
+
/* @__PURE__ */ m("div", {
|
|
257
259
|
className: "flex justify-between",
|
|
258
|
-
children: [/* @__PURE__ */
|
|
260
|
+
children: [/* @__PURE__ */ p("span", {
|
|
259
261
|
className: "text-muted-foreground",
|
|
260
262
|
children: "Status"
|
|
261
|
-
}), /* @__PURE__ */
|
|
262
|
-
className: `text-xs px-2 py-0.5 rounded-full capitalize ${
|
|
263
|
+
}), /* @__PURE__ */ p("span", {
|
|
264
|
+
className: `text-xs px-2 py-0.5 rounded-full capitalize ${O[c.status] ?? ""}`,
|
|
263
265
|
children: l
|
|
264
266
|
})]
|
|
265
267
|
}),
|
|
266
|
-
/* @__PURE__ */
|
|
268
|
+
/* @__PURE__ */ m("div", {
|
|
267
269
|
className: "flex justify-between",
|
|
268
|
-
children: [/* @__PURE__ */
|
|
270
|
+
children: [/* @__PURE__ */ p("span", {
|
|
269
271
|
className: "text-muted-foreground",
|
|
270
272
|
children: "Priority"
|
|
271
|
-
}), /* @__PURE__ */
|
|
272
|
-
className: `text-xs px-2 py-0.5 rounded-full capitalize ${
|
|
273
|
+
}), /* @__PURE__ */ p("span", {
|
|
274
|
+
className: `text-xs px-2 py-0.5 rounded-full capitalize ${D[c.priority] ?? ""}`,
|
|
273
275
|
children: c.priority.toLowerCase()
|
|
274
276
|
})]
|
|
275
277
|
}),
|
|
276
|
-
/* @__PURE__ */
|
|
278
|
+
/* @__PURE__ */ m("div", {
|
|
277
279
|
className: "flex justify-between",
|
|
278
|
-
children: [/* @__PURE__ */
|
|
280
|
+
children: [/* @__PURE__ */ p("span", {
|
|
279
281
|
className: "text-muted-foreground",
|
|
280
282
|
children: "Type"
|
|
281
|
-
}), /* @__PURE__ */
|
|
283
|
+
}), /* @__PURE__ */ p(h, {
|
|
282
284
|
variant: "outline",
|
|
283
285
|
className: "capitalize",
|
|
284
286
|
children: c.type.toLowerCase()
|
|
285
287
|
})]
|
|
286
288
|
}),
|
|
287
|
-
/* @__PURE__ */
|
|
289
|
+
/* @__PURE__ */ m("div", {
|
|
288
290
|
className: "flex justify-between",
|
|
289
|
-
children: [/* @__PURE__ */
|
|
291
|
+
children: [/* @__PURE__ */ p("span", {
|
|
290
292
|
className: "text-muted-foreground",
|
|
291
293
|
children: "Story Points"
|
|
292
|
-
}), /* @__PURE__ */
|
|
294
|
+
}), /* @__PURE__ */ p("span", {
|
|
293
295
|
className: "font-medium",
|
|
294
296
|
children: c.storyPoints ?? 0
|
|
295
297
|
})]
|
|
296
298
|
}),
|
|
297
|
-
/* @__PURE__ */
|
|
299
|
+
/* @__PURE__ */ m("div", {
|
|
298
300
|
className: "flex justify-between",
|
|
299
|
-
children: [/* @__PURE__ */
|
|
301
|
+
children: [/* @__PURE__ */ p("span", {
|
|
300
302
|
className: "text-muted-foreground",
|
|
301
303
|
children: "Assignee"
|
|
302
|
-
}), /* @__PURE__ */
|
|
304
|
+
}), /* @__PURE__ */ p("span", { children: c.assigneeId ?? "Unassigned" })]
|
|
303
305
|
}),
|
|
304
|
-
/* @__PURE__ */
|
|
306
|
+
/* @__PURE__ */ m("div", {
|
|
305
307
|
className: "flex justify-between",
|
|
306
|
-
children: [/* @__PURE__ */
|
|
308
|
+
children: [/* @__PURE__ */ p("span", {
|
|
307
309
|
className: "text-muted-foreground",
|
|
308
310
|
children: "Reporter"
|
|
309
|
-
}), /* @__PURE__ */
|
|
311
|
+
}), /* @__PURE__ */ p("span", { children: c.reporterId ?? "Unknown" })]
|
|
310
312
|
}),
|
|
311
|
-
/* @__PURE__ */
|
|
313
|
+
/* @__PURE__ */ m("div", {
|
|
312
314
|
className: "flex justify-between",
|
|
313
|
-
children: [/* @__PURE__ */
|
|
315
|
+
children: [/* @__PURE__ */ p("span", {
|
|
314
316
|
className: "text-muted-foreground",
|
|
315
317
|
children: "Key"
|
|
316
|
-
}), /* @__PURE__ */
|
|
318
|
+
}), /* @__PURE__ */ p("span", { children: c.key })]
|
|
317
319
|
}),
|
|
318
|
-
/* @__PURE__ */
|
|
320
|
+
/* @__PURE__ */ m("div", {
|
|
319
321
|
className: "flex justify-between",
|
|
320
|
-
children: [/* @__PURE__ */
|
|
322
|
+
children: [/* @__PURE__ */ p("span", {
|
|
321
323
|
className: "text-muted-foreground",
|
|
322
324
|
children: "Due Date"
|
|
323
|
-
}), /* @__PURE__ */
|
|
325
|
+
}), /* @__PURE__ */ p("span", { children: c.dueDate ?? "Not set" })]
|
|
324
326
|
}),
|
|
325
|
-
/* @__PURE__ */
|
|
327
|
+
/* @__PURE__ */ m("div", {
|
|
326
328
|
className: "flex justify-between",
|
|
327
|
-
children: [/* @__PURE__ */
|
|
329
|
+
children: [/* @__PURE__ */ p("span", {
|
|
328
330
|
className: "text-muted-foreground",
|
|
329
331
|
children: "Created"
|
|
330
|
-
}), /* @__PURE__ */
|
|
332
|
+
}), /* @__PURE__ */ p("span", { children: c.createdAt })]
|
|
331
333
|
}),
|
|
332
|
-
/* @__PURE__ */
|
|
334
|
+
/* @__PURE__ */ m("div", {
|
|
333
335
|
className: "flex justify-between",
|
|
334
|
-
children: [/* @__PURE__ */
|
|
336
|
+
children: [/* @__PURE__ */ p("span", {
|
|
335
337
|
className: "text-muted-foreground",
|
|
336
338
|
children: "Updated"
|
|
337
|
-
}), /* @__PURE__ */
|
|
339
|
+
}), /* @__PURE__ */ p("span", { children: c.updatedAt })]
|
|
338
340
|
}),
|
|
339
|
-
/* @__PURE__ */
|
|
341
|
+
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("span", {
|
|
340
342
|
className: "text-muted-foreground text-xs",
|
|
341
343
|
children: "Labels"
|
|
342
|
-
}), /* @__PURE__ */
|
|
344
|
+
}), /* @__PURE__ */ p("div", {
|
|
343
345
|
className: "flex gap-1 mt-1 flex-wrap",
|
|
344
|
-
children: (c.labels ?? []).map((e) => /* @__PURE__ */
|
|
346
|
+
children: (c.labels ?? []).map((e) => /* @__PURE__ */ p("span", {
|
|
345
347
|
className: "text-xs px-2 py-0.5 rounded bg-muted",
|
|
346
348
|
children: e
|
|
347
349
|
}, e))
|
|
@@ -353,6 +355,6 @@ function A() {
|
|
|
353
355
|
});
|
|
354
356
|
}
|
|
355
357
|
//#endregion
|
|
356
|
-
export {
|
|
358
|
+
export { j as TasksTaskDetailPagePage };
|
|
357
359
|
|
|
358
360
|
//# sourceMappingURL=TasksTaskDetailPagePage.js.map
|