@burdenoff/microfe-planmagnet 2026.1001.8 → 2026.1002.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.
- package/dist/generated/global-types.d.ts +5 -0
- package/dist/generated/global-types.d.ts.map +1 -1
- package/dist/generated/wspace-operations.d.ts +1814 -401
- package/dist/generated/wspace-operations.d.ts.map +1 -1
- package/dist/generated/wspace-types.d.ts +5167 -54
- package/dist/generated/wspace-types.d.ts.map +1 -1
- package/dist/index.js +8 -8
- package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoot.js +172 -160
- package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.js +95 -83
- package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
- package/dist/planmagnet/comments/CommentAttachmentUpload.d.ts +16 -0
- package/dist/planmagnet/comments/CommentAttachmentUpload.d.ts.map +1 -0
- package/dist/planmagnet/comments/CommentAttachmentUpload.js +218 -0
- package/dist/planmagnet/comments/CommentAttachmentUpload.js.map +1 -0
- package/dist/planmagnet/comments/CommentAttachments.d.ts +15 -0
- package/dist/planmagnet/comments/CommentAttachments.d.ts.map +1 -0
- package/dist/planmagnet/comments/CommentAttachments.js +74 -0
- package/dist/planmagnet/comments/CommentAttachments.js.map +1 -0
- package/dist/planmagnet/comments/CommentBody.d.ts +11 -0
- package/dist/planmagnet/comments/CommentBody.d.ts.map +1 -0
- package/dist/planmagnet/comments/CommentBody.js +130 -0
- package/dist/planmagnet/comments/CommentBody.js.map +1 -0
- package/dist/planmagnet/comments/CommentThread.d.ts +7 -2
- package/dist/planmagnet/comments/CommentThread.d.ts.map +1 -1
- package/dist/planmagnet/comments/CommentThread.js +288 -233
- package/dist/planmagnet/comments/CommentThread.js.map +1 -1
- package/dist/planmagnet/comments/MentionComposer.d.ts +0 -7
- package/dist/planmagnet/comments/MentionComposer.d.ts.map +1 -1
- package/dist/planmagnet/comments/MentionComposer.js +225 -86
- package/dist/planmagnet/comments/MentionComposer.js.map +1 -1
- package/dist/planmagnet/comments/TargetComments.d.ts.map +1 -1
- package/dist/planmagnet/comments/TargetComments.js +44 -6
- package/dist/planmagnet/comments/TargetComments.js.map +1 -1
- package/dist/planmagnet/comments/WorkItemComments.d.ts.map +1 -1
- package/dist/planmagnet/comments/WorkItemComments.js +22 -3
- package/dist/planmagnet/comments/WorkItemComments.js.map +1 -1
- package/dist/planmagnet/comments/commentAttachmentUploadClient.d.ts +102 -0
- package/dist/planmagnet/comments/commentAttachmentUploadClient.d.ts.map +1 -0
- package/dist/planmagnet/comments/commentAttachmentUploadClient.js +298 -0
- package/dist/planmagnet/comments/commentAttachmentUploadClient.js.map +1 -0
- package/dist/planmagnet/comments/commentImageTokens.d.ts +5 -0
- package/dist/planmagnet/comments/commentImageTokens.d.ts.map +1 -0
- package/dist/planmagnet/comments/commentImageTokens.js +14 -0
- package/dist/planmagnet/comments/commentImageTokens.js.map +1 -0
- package/dist/planmagnet/comments/commentTokens.d.ts +31 -0
- package/dist/planmagnet/comments/commentTokens.d.ts.map +1 -0
- package/dist/planmagnet/comments/commentTokens.js +142 -0
- package/dist/planmagnet/comments/commentTokens.js.map +1 -0
- package/dist/planmagnet/comments/fileDisplay.d.ts +22 -0
- package/dist/planmagnet/comments/fileDisplay.d.ts.map +1 -0
- package/dist/planmagnet/comments/fileDisplay.js +48 -0
- package/dist/planmagnet/comments/fileDisplay.js.map +1 -0
- package/dist/planmagnet/comments/useCommentFileUrl.d.ts +22 -0
- package/dist/planmagnet/comments/useCommentFileUrl.d.ts.map +1 -0
- package/dist/planmagnet/comments/useCommentFileUrl.js +54 -0
- package/dist/planmagnet/comments/useCommentFileUrl.js.map +1 -0
- package/dist/planmagnet/controls/Pickers.d.ts +7 -2
- package/dist/planmagnet/controls/Pickers.d.ts.map +1 -1
- package/dist/planmagnet/controls/Pickers.js +10 -9
- package/dist/planmagnet/controls/Pickers.js.map +1 -1
- package/dist/planmagnet/index.d.ts +1 -1
- package/dist/planmagnet/index.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.js +4 -4
- package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js +133 -131
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsFeaturesPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsFeaturesPagePage.js +5 -5
- package/dist/planmagnet/pages/ProductsFeaturesPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js +6 -6
- package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.js +105 -82
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsProductFeatureDetailPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProductsProductFeatureDetailPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProductsProductFeatureDetailPagePage.js +174 -0
- package/dist/planmagnet/pages/ProductsProductFeatureDetailPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProductsProductHierarchyPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProductsProductHierarchyPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProductsProductHierarchyPagePage.js +350 -0
- package/dist/planmagnet/pages/ProductsProductHierarchyPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProductsProductLinesPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProductsProductLinesPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProductsProductLinesPagePage.js +168 -0
- package/dist/planmagnet/pages/ProductsProductLinesPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProductsProductsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsProductsPagePage.js +1 -1
- package/dist/planmagnet/pages/ProductsProductsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.js +156 -154
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.js.map +1 -1
- package/dist/planmagnet/product/FeatureLinkPanels.d.ts +29 -0
- package/dist/planmagnet/product/FeatureLinkPanels.d.ts.map +1 -0
- package/dist/planmagnet/product/FeatureLinkPanels.js +373 -0
- package/dist/planmagnet/product/FeatureLinkPanels.js.map +1 -0
- package/dist/planmagnet/product/ProductControls.js +1 -1
- package/dist/planmagnet/product/ProductControls.js.map +1 -1
- package/dist/planmagnet/product/ProductFeatureControls.d.ts +39 -0
- package/dist/planmagnet/product/ProductFeatureControls.d.ts.map +1 -0
- package/dist/planmagnet/product/ProductFeatureControls.js +315 -0
- package/dist/planmagnet/product/ProductFeatureControls.js.map +1 -0
- package/dist/planmagnet/product/ProductFeatureLinkCard.d.ts +4 -0
- package/dist/planmagnet/product/ProductFeatureLinkCard.d.ts.map +1 -0
- package/dist/planmagnet/product/ProductFeatureLinkCard.js +192 -0
- package/dist/planmagnet/product/ProductFeatureLinkCard.js.map +1 -0
- package/dist/planmagnet/product/ProductLineControls.d.ts +52 -0
- package/dist/planmagnet/product/ProductLineControls.d.ts.map +1 -0
- package/dist/planmagnet/product/ProductLineControls.js +417 -0
- package/dist/planmagnet/product/ProductLineControls.js.map +1 -0
- package/dist/planmagnet/product/ProductTeamsPanel.d.ts +4 -0
- package/dist/planmagnet/product/ProductTeamsPanel.d.ts.map +1 -0
- package/dist/planmagnet/product/ProductTeamsPanel.js +129 -0
- package/dist/planmagnet/product/ProductTeamsPanel.js.map +1 -0
- package/dist/planmagnet/product/WorkItemProductFeatureChip.d.ts +4 -0
- package/dist/planmagnet/product/WorkItemProductFeatureChip.d.ts.map +1 -0
- package/dist/planmagnet/product/WorkItemProductFeatureChip.js +41 -0
- package/dist/planmagnet/product/WorkItemProductFeatureChip.js.map +1 -0
- package/dist/planmagnet/product/hierarchy.d.ts +127 -0
- package/dist/planmagnet/product/hierarchy.d.ts.map +1 -0
- package/dist/planmagnet/product/hierarchy.js +173 -0
- package/dist/planmagnet/product/hierarchy.js.map +1 -0
- package/dist/planmagnet/product/hierarchyOperations.d.ts +35 -0
- package/dist/planmagnet/product/hierarchyOperations.d.ts.map +1 -0
- package/dist/planmagnet/product/hierarchyOperations.js +440 -0
- package/dist/planmagnet/product/hierarchyOperations.js.map +1 -0
- package/dist/planmagnet/product/refusal.d.ts +14 -0
- package/dist/planmagnet/product/refusal.d.ts.map +1 -0
- package/dist/planmagnet/product/refusal.js +10 -0
- package/dist/planmagnet/product/refusal.js.map +1 -0
- package/dist/planmagnet/product/routes.d.ts +4 -0
- package/dist/planmagnet/product/routes.d.ts.map +1 -1
- package/dist/planmagnet/product/routes.js +2 -2
- package/dist/planmagnet/product/routes.js.map +1 -1
- package/dist/shared/utils/i18n.d.ts +3 -0
- package/dist/shared/utils/i18n.d.ts.map +1 -1
- package/dist/shared/utils/i18n.js +1 -1
- package/dist/shared/utils/i18n.js.map +1 -1
- package/package.json +5 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanMagnetRoutes.js","names":[],"sources":["../../src/planmagnet/PlanMagnetRoutes.tsx"],"sourcesContent":["import { lazy, Suspense } from 'react';\nimport { Route, Routes } from 'react-router';\nimport { Loader2 } from 'lucide-react';\nimport { AnalyticsAnalyticsPagePage } from './pages/AnalyticsAnalyticsPagePage';\n\nconst PlanMagnetNotFoundPage = lazy(() =>\n import('./pages/NotFoundPage').then((m) => ({ default: m.PlanMagnetNotFoundPage }))\n);\nconst DocsDocsPagePage = lazy(() =>\n import('./pages/DocsDocsPagePage').then((m) => ({ default: m.DocsDocsPagePage }))\n);\nconst DocsDocDetailPagePage = lazy(() =>\n import('./pages/DocsDocDetailPagePage').then((m) => ({ default: m.DocsDocDetailPagePage }))\n);\nconst DashboardDashboardPagePage = lazy(() =>\n import('./pages/DashboardDashboardPagePage').then((m) => ({\n default: m.DashboardDashboardPagePage,\n }))\n);\nconst ProductsCreateProductPagePage = lazy(() =>\n import('./pages/ProductsCreateProductPagePage').then((m) => ({\n default: m.ProductsCreateProductPagePage,\n }))\n);\nconst ProductsCreateRoadmapPagePage = lazy(() =>\n import('./pages/ProductsCreateRoadmapPagePage').then((m) => ({\n default: m.ProductsCreateRoadmapPagePage,\n }))\n);\nconst ProductsEditProductPagePage = lazy(() =>\n import('./pages/ProductsEditProductPagePage').then((m) => ({\n default: m.ProductsEditProductPagePage,\n }))\n);\nconst ProductsEditRoadmapPagePage = lazy(() =>\n import('./pages/ProductsEditRoadmapPagePage').then((m) => ({\n default: m.ProductsEditRoadmapPagePage,\n }))\n);\nconst ProductsEditReleasePagePage = lazy(() =>\n import('./pages/ProductsEditReleasePagePage').then((m) => ({\n default: m.ProductsEditReleasePagePage,\n }))\n);\nconst ProductsFeatureAnalyticsPagePage = lazy(() =>\n import('./pages/ProductsFeatureAnalyticsPagePage').then((m) => ({\n default: m.ProductsFeatureAnalyticsPagePage,\n }))\n);\nconst ProductsFeatureDetailPagePage = lazy(() =>\n import('./pages/ProductsFeatureDetailPagePage').then((m) => ({\n default: m.ProductsFeatureDetailPagePage,\n }))\n);\nconst ProductsFeaturesPagePage = lazy(() =>\n import('./pages/ProductsFeaturesPagePage').then((m) => ({ default: m.ProductsFeaturesPagePage }))\n);\nconst ProductsNewFeaturePagePage = lazy(() =>\n import('./pages/ProductsNewFeaturePagePage').then((m) => ({\n default: m.ProductsNewFeaturePagePage,\n }))\n);\nconst ProductsProductDetailPagePage = lazy(() =>\n import('./pages/ProductsProductDetailPagePage').then((m) => ({\n default: m.ProductsProductDetailPagePage,\n }))\n);\nconst ProductsProductsPagePage = lazy(() =>\n import('./pages/ProductsProductsPagePage').then((m) => ({ default: m.ProductsProductsPagePage }))\n);\nconst ProductsReleaseDetailPagePage = lazy(() =>\n import('./pages/ProductsReleaseDetailPagePage').then((m) => ({\n default: m.ProductsReleaseDetailPagePage,\n }))\n);\nconst ProductsReleasesPagePage = lazy(() =>\n import('./pages/ProductsReleasesPagePage').then((m) => ({ default: m.ProductsReleasesPagePage }))\n);\nconst ProductsRoadmapAnalyticsPagePage = lazy(() =>\n import('./pages/ProductsRoadmapAnalyticsPagePage').then((m) => ({\n default: m.ProductsRoadmapAnalyticsPagePage,\n }))\n);\nconst ProductsRoadmapDetailPagePage = lazy(() =>\n import('./pages/ProductsRoadmapDetailPagePage').then((m) => ({\n default: m.ProductsRoadmapDetailPagePage,\n }))\n);\nconst ProductsRoadmapsPagePage = lazy(() =>\n import('./pages/ProductsRoadmapsPagePage').then((m) => ({ default: m.ProductsRoadmapsPagePage }))\n);\nconst PortfoliosPortfoliosPagePage = lazy(() =>\n import('./pages/PortfoliosPortfoliosPagePage').then((m) => ({\n default: m.PortfoliosPortfoliosPagePage,\n }))\n);\nconst PortfoliosCreatePortfolioPagePage = lazy(() =>\n import('./pages/PortfoliosCreatePortfolioPagePage').then((m) => ({\n default: m.PortfoliosCreatePortfolioPagePage,\n }))\n);\nconst PortfoliosPortfolioDetailPagePage = lazy(() =>\n import('./pages/PortfoliosPortfolioDetailPagePage').then((m) => ({\n default: m.PortfoliosPortfolioDetailPagePage,\n }))\n);\nconst PortfoliosEditPortfolioPagePage = lazy(() =>\n import('./pages/PortfoliosEditPortfolioPagePage').then((m) => ({\n default: m.PortfoliosEditPortfolioPagePage,\n }))\n);\nconst ProgramsProgramsPagePage = lazy(() =>\n import('./pages/ProgramsProgramsPagePage').then((m) => ({ default: m.ProgramsProgramsPagePage }))\n);\nconst ProgramsCreateProgramPagePage = lazy(() =>\n import('./pages/ProgramsCreateProgramPagePage').then((m) => ({\n default: m.ProgramsCreateProgramPagePage,\n }))\n);\nconst ProgramsProgramDetailPagePage = lazy(() =>\n import('./pages/ProgramsProgramDetailPagePage').then((m) => ({\n default: m.ProgramsProgramDetailPagePage,\n }))\n);\nconst ProgramsEditProgramPagePage = lazy(() =>\n import('./pages/ProgramsEditProgramPagePage').then((m) => ({\n default: m.ProgramsEditProgramPagePage,\n }))\n);\nconst CompetitorsCompetitorsPagePage = lazy(() =>\n import('./pages/CompetitorsCompetitorsPagePage').then((m) => ({\n default: m.CompetitorsCompetitorsPagePage,\n }))\n);\nconst CompetitorsCreateCompetitorPagePage = lazy(() =>\n import('./pages/CompetitorsCreateCompetitorPagePage').then((m) => ({\n default: m.CompetitorsCreateCompetitorPagePage,\n }))\n);\nconst CompetitorsCompetitorDetailPagePage = lazy(() =>\n import('./pages/CompetitorsCompetitorDetailPagePage').then((m) => ({\n default: m.CompetitorsCompetitorDetailPagePage,\n }))\n);\nconst CompetitorsEditCompetitorPagePage = lazy(() =>\n import('./pages/CompetitorsEditCompetitorPagePage').then((m) => ({\n default: m.CompetitorsEditCompetitorPagePage,\n }))\n);\n// Prioritization (PRM-27): MoSCoW/Kano/Value-vs-Effort over feature requests or roadmap initiatives.\nconst ProductsPrioritizationPagePage = lazy(() =>\n import('./pages/ProductsPrioritizationPagePage').then((m) => ({\n default: m.ProductsPrioritizationPagePage,\n }))\n);\nconst ProjectsActiveProjectsPagePage = lazy(() =>\n import('./pages/ProjectsActiveProjectsPagePage').then((m) => ({\n default: m.ProjectsActiveProjectsPagePage,\n }))\n);\nconst ProjectsCreateProjectPagePage = lazy(() =>\n import('./pages/ProjectsCreateProjectPagePage').then((m) => ({\n default: m.ProjectsCreateProjectPagePage,\n }))\n);\nconst ProjectsEditProjectPagePage = lazy(() =>\n import('./pages/ProjectsEditProjectPagePage').then((m) => ({\n default: m.ProjectsEditProjectPagePage,\n }))\n);\nconst ProjectsMilestoneDetailPagePage = lazy(() =>\n import('./pages/ProjectsMilestoneDetailPagePage').then((m) => ({\n default: m.ProjectsMilestoneDetailPagePage,\n }))\n);\nconst ProjectsBudgetsPagePage = lazy(() =>\n import('./pages/ProjectsBudgetsPagePage').then((m) => ({ default: m.ProjectsBudgetsPagePage }))\n);\nconst ProjectsBudgetDetailPagePage = lazy(() =>\n import('./pages/ProjectsBudgetDetailPagePage').then((m) => ({\n default: m.ProjectsBudgetDetailPagePage,\n }))\n);\nconst TasksTimeEntriesPagePage = lazy(() =>\n import('./pages/TasksTimeEntriesPagePage').then((m) => ({\n default: m.TasksTimeEntriesPagePage,\n }))\n);\nconst TasksTimesheetsPagePage = lazy(() =>\n import('./pages/TasksTimesheetsPagePage').then((m) => ({\n default: m.TasksTimesheetsPagePage,\n }))\n);\nconst TasksTimesheetDetailPagePage = lazy(() =>\n import('./pages/TasksTimesheetDetailPagePage').then((m) => ({\n default: m.TasksTimesheetDetailPagePage,\n }))\n);\nconst GoalsGoalsPagePage = lazy(() =>\n import('./pages/GoalsGoalsPagePage').then((m) => ({ default: m.GoalsGoalsPagePage }))\n);\nconst GoalsCreateObjectivePagePage = lazy(() =>\n import('./pages/GoalsCreateObjectivePagePage').then((m) => ({\n default: m.GoalsCreateObjectivePagePage,\n }))\n);\nconst GoalsObjectiveDetailPagePage = lazy(() =>\n import('./pages/GoalsObjectiveDetailPagePage').then((m) => ({\n default: m.GoalsObjectiveDetailPagePage,\n }))\n);\nconst ProjectsMilestonesPagePage = lazy(() =>\n import('./pages/ProjectsMilestonesPagePage').then((m) => ({\n default: m.ProjectsMilestonesPagePage,\n }))\n);\nconst ProjectsPlanningDetailPagePage = lazy(() =>\n import('./pages/ProjectsPlanningDetailPagePage').then((m) => ({\n default: m.ProjectsPlanningDetailPagePage,\n }))\n);\nconst ProjectsPlanningEditPagePage = lazy(() =>\n import('./pages/ProjectsPlanningEditPagePage').then((m) => ({\n default: m.ProjectsPlanningEditPagePage,\n }))\n);\nconst ProjectsPlanningPagePage = lazy(() =>\n import('./pages/ProjectsPlanningPagePage').then((m) => ({ default: m.ProjectsPlanningPagePage }))\n);\nconst ProjectsProjectDetailPagePage = lazy(() =>\n import('./pages/ProjectsProjectDetailPagePage').then((m) => ({\n default: m.ProjectsProjectDetailPagePage,\n }))\n);\nconst ProjectsProjectsPagePage = lazy(() =>\n import('./pages/ProjectsProjectsPagePage').then((m) => ({ default: m.ProjectsProjectsPagePage }))\n);\nconst ReportsCreateReportPagePage = lazy(() =>\n import('./pages/ReportsCreateReportPagePage').then((m) => ({\n default: m.ReportsCreateReportPagePage,\n }))\n);\nconst ReportsReportsPagePage = lazy(() =>\n import('./pages/ReportsReportsPagePage').then((m) => ({ default: m.ReportsReportsPagePage }))\n);\nconst ReportsEditReportPagePage = lazy(() =>\n import('./pages/ReportsEditReportPagePage').then((m) => ({\n default: m.ReportsEditReportPagePage,\n }))\n);\nconst ReportsReportPagePage = lazy(() =>\n import('./pages/ReportsReportPagePage').then((m) => ({ default: m.ReportsReportPagePage }))\n);\nconst SprintsStartSprintPagePage = lazy(() =>\n import('./pages/SprintsStartSprintPagePage').then((m) => ({\n default: m.SprintsStartSprintPagePage,\n }))\n);\nconst TasksCreateTaskPagePage = lazy(() =>\n import('./pages/TasksCreateTaskPagePage').then((m) => ({ default: m.TasksCreateTaskPagePage }))\n);\nconst TasksEditTaskPagePage = lazy(() =>\n import('./pages/TasksEditTaskPagePage').then((m) => ({ default: m.TasksEditTaskPagePage }))\n);\nconst ProjectsWorkflowPagePage = lazy(() =>\n import('./pages/ProjectsWorkflowPagePage').then((m) => ({ default: m.ProjectsWorkflowPagePage }))\n);\nconst ProjectsCustomFieldsPagePage = lazy(() =>\n import('./pages/ProjectsCustomFieldsPagePage').then((m) => ({\n default: m.ProjectsCustomFieldsPagePage,\n }))\n);\nconst TasksImportPagePage = lazy(() =>\n import('./pages/TasksImportPagePage').then((m) => ({ default: m.TasksImportPagePage }))\n);\nconst TasksTaskDetailPagePage = lazy(() =>\n import('./pages/TasksTaskDetailPagePage').then((m) => ({ default: m.TasksTaskDetailPagePage }))\n);\nconst TasksTasksPagePage = lazy(() =>\n import('./pages/TasksTasksPagePage').then((m) => ({ default: m.TasksTasksPagePage }))\n);\n// My Work (BOFF-8048)\nconst TasksMyWorkPagePage = lazy(() =>\n import('./pages/TasksMyWorkPagePage').then((m) => ({ default: m.TasksMyWorkPagePage }))\n);\n// My dashboard (ANR-08): my time allocation, my delivery trend, my goals.\nconst TasksMyDashboardPagePage = lazy(() =>\n import('./pages/TasksMyDashboardPagePage').then((m) => ({\n default: m.TasksMyDashboardPagePage,\n }))\n);\nconst TeamCreateTeamPagePage = lazy(() =>\n import('./pages/TeamCreateTeamPagePage').then((m) => ({ default: m.TeamCreateTeamPagePage }))\n);\nconst TeamInviteMemberPagePage = lazy(() =>\n import('./pages/TeamInviteMemberPagePage').then((m) => ({ default: m.TeamInviteMemberPagePage }))\n);\nconst TeamTeamPagePage = lazy(() =>\n import('./pages/TeamTeamPagePage').then((m) => ({ default: m.TeamTeamPagePage }))\n);\nconst TeamTeamsListPagePage = lazy(() =>\n import('./pages/TeamTeamsListPagePage').then((m) => ({ default: m.TeamTeamsListPagePage }))\n);\nconst TeamTeamDetailPagePage = lazy(() =>\n import('./pages/TeamTeamDetailPagePage').then((m) => ({ default: m.TeamTeamDetailPagePage }))\n);\nconst TeamTeamEditPagePage = lazy(() =>\n import('./pages/TeamTeamEditPagePage').then((m) => ({ default: m.TeamTeamEditPagePage }))\n);\nconst WorkspaceCreateWorkspacePagePage = lazy(() =>\n import('./pages/WorkspaceCreateWorkspacePagePage').then((m) => ({\n default: m.WorkspaceCreateWorkspacePagePage,\n }))\n);\n// BOFF-8047: Automation rules and Project templates\nconst AutomationAutomationRulesPagePage = lazy(() =>\n import('./pages/AutomationAutomationRulesPagePage').then((m) => ({\n default: m.AutomationAutomationRulesPagePage,\n }))\n);\nconst AutomationCreateAutomationRulePagePage = lazy(() =>\n import('./pages/AutomationCreateAutomationRulePagePage').then((m) => ({\n default: m.AutomationCreateAutomationRulePagePage,\n }))\n);\nconst AutomationAutomationRuleDetailPagePage = lazy(() =>\n import('./pages/AutomationAutomationRuleDetailPagePage').then((m) => ({\n default: m.AutomationAutomationRuleDetailPagePage,\n }))\n);\nconst TemplatesTemplatesPagePage = lazy(() =>\n import('./pages/TemplatesTemplatesPagePage').then((m) => ({\n default: m.TemplatesTemplatesPagePage,\n }))\n);\nconst TemplatesEditTemplatePagePage = lazy(() =>\n import('./pages/TemplatesEditTemplatePagePage').then((m) => ({\n default: m.TemplatesEditTemplatePagePage,\n }))\n);\nconst RisksRiskRegisterPagePage = lazy(() =>\n import('./pages/RisksRiskRegisterPagePage').then((m) => ({\n default: m.RisksRiskRegisterPagePage,\n }))\n);\nconst RisksRiskDetailPagePage = lazy(() =>\n import('./pages/RisksRiskDetailPagePage').then((m) => ({ default: m.RisksRiskDetailPagePage }))\n);\nconst ProjectsCriticalPathPagePage = lazy(() =>\n import('./pages/ProjectsCriticalPathPagePage').then((m) => ({\n default: m.ProjectsCriticalPathPagePage,\n }))\n);\n// Gantt timeline (ANR-24)\nconst ProjectsGanttPagePage = lazy(() =>\n import('./pages/ProjectsGanttPagePage').then((m) => ({ default: m.ProjectsGanttPagePage }))\n);\n// Quality gates (GAP-02)\nconst ProjectsQualityGatesPagePage = lazy(() =>\n import('./pages/ProjectsQualityGatesPagePage').then((m) => ({\n default: m.ProjectsQualityGatesPagePage,\n }))\n);\n// At-risk work (AI-10)\nconst ProjectsAtRiskPagePage = lazy(() =>\n import('./pages/ProjectsAtRiskPagePage').then((m) => ({ default: m.ProjectsAtRiskPagePage }))\n);\n// AI breakdown + activity (AI-05, AI-24)\nconst AiPlanPagePage = lazy(() =>\n import('./pages/AiPlanPagePage').then((m) => ({ default: m.AiPlanPagePage }))\n);\nconst AiActivityPagePage = lazy(() =>\n import('./pages/AiActivityPagePage').then((m) => ({ default: m.AiActivityPagePage }))\n);\n// Workspace activity feed (CWF-09)\nconst ActivityActivityPagePage = lazy(() =>\n import('./pages/ActivityActivityPagePage').then((m) => ({\n default: m.ActivityActivityPagePage,\n }))\n);\n\n// Role dashboards (ANR-06, ANR-07, ANR-28, CWF-31): composed from existing queries, no new backend.\nconst DashboardsExecutivePagePage = lazy(() =>\n import('./pages/DashboardsExecutivePagePage').then((m) => ({\n default: m.DashboardsExecutivePagePage,\n }))\n);\nconst DashboardsProjectManagerPagePage = lazy(() =>\n import('./pages/DashboardsProjectManagerPagePage').then((m) => ({\n default: m.DashboardsProjectManagerPagePage,\n }))\n);\nconst DashboardsTeamUtilizationPagePage = lazy(() =>\n import('./pages/DashboardsTeamUtilizationPagePage').then((m) => ({\n default: m.DashboardsTeamUtilizationPagePage,\n }))\n);\nconst DashboardsLeadershipPagePage = lazy(() =>\n import('./pages/DashboardsLeadershipPagePage').then((m) => ({\n default: m.DashboardsLeadershipPagePage,\n }))\n);\n\n// Integrations (sync — AUT-06/08/09/10/24/40)\nconst IntegrationsSyncsPagePage = lazy(() =>\n import('./pages/IntegrationsSyncsPagePage').then((m) => ({\n default: m.IntegrationsSyncsPagePage,\n }))\n);\nconst IntegrationsNewSyncPagePage = lazy(() =>\n import('./pages/IntegrationsNewSyncPagePage').then((m) => ({\n default: m.IntegrationsNewSyncPagePage,\n }))\n);\nconst IntegrationsSyncDetailPagePage = lazy(() =>\n import('./pages/IntegrationsSyncDetailPagePage').then((m) => ({\n default: m.IntegrationsSyncDetailPagePage,\n }))\n);\n// Outbound webhook subscriptions (AUT-33) — a sub-route linked from the Integrations syncs page, not a host\n// sidebar entry of its own (see that page's own \"Webhooks\" button and this route's comment below).\nconst IntegrationsWebhooksPagePage = lazy(() =>\n import('./pages/IntegrationsWebhooksPagePage').then((m) => ({\n default: m.IntegrationsWebhooksPagePage,\n }))\n);\n\n// Meetings (GAP-06, CWF-22/23)\nconst MeetingsMeetingsPagePage = lazy(() =>\n import('./pages/MeetingsMeetingsPagePage').then((m) => ({\n default: m.MeetingsMeetingsPagePage,\n }))\n);\nconst MeetingsMeetingDetailPagePage = lazy(() =>\n import('./pages/MeetingsMeetingDetailPagePage').then((m) => ({\n default: m.MeetingsMeetingDetailPagePage,\n }))\n);\n\n// Phase 2 new pages\n\nfunction PageLoader() {\n return (\n <div className=\"flex min-h-[320px] items-center justify-center\">\n <Loader2 className=\"h-8 w-8 animate-spin text-primary\" />\n </div>\n );\n}\n\nexport function PlanMagnetRoutes() {\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n <Route index element={<DashboardDashboardPagePage />} />\n {/* Dashboard */}\n <Route path=\"dashboard/dashboard-page\" element={<DashboardDashboardPagePage />} />\n {/* Products */}\n {/*\n The detail/edit/analytics pages below read their record id with\n useParams<{ id: string }>(). Each therefore needs a \":id\" segment — without one the\n id is permanently undefined and the page can never load a record, however it is\n reached. The bare paths are kept alongside so previously-bookmarked URLs still\n resolve rather than falling through to the catch-all redirect.\n */}\n <Route path=\"products/products-page\" element={<ProductsProductsPagePage />} />\n <Route path=\"products/create-product-page\" element={<ProductsCreateProductPagePage />} />\n <Route path=\"products/edit-product-page\" element={<ProductsEditProductPagePage />} />\n <Route path=\"products/edit-product-page/:id\" element={<ProductsEditProductPagePage />} />\n <Route path=\"products/product-detail-page\" element={<ProductsProductDetailPagePage />} />\n <Route\n path=\"products/product-detail-page/:id\"\n element={<ProductsProductDetailPagePage />}\n />\n <Route path=\"products/features-page\" element={<ProductsFeaturesPagePage />} />\n <Route path=\"products/new-feature-page\" element={<ProductsNewFeaturePagePage />} />\n <Route path=\"products/feature-detail-page\" element={<ProductsFeatureDetailPagePage />} />\n <Route\n path=\"products/feature-detail-page/:id\"\n element={<ProductsFeatureDetailPagePage />}\n />\n <Route\n path=\"products/feature-analytics-page\"\n element={<ProductsFeatureAnalyticsPagePage />}\n />\n <Route\n path=\"products/feature-analytics-page/:id\"\n element={<ProductsFeatureAnalyticsPagePage />}\n />\n <Route path=\"products/releases-page\" element={<ProductsReleasesPagePage />} />\n <Route path=\"products/release-detail-page\" element={<ProductsReleaseDetailPagePage />} />\n <Route\n path=\"products/release-detail-page/:id\"\n element={<ProductsReleaseDetailPagePage />}\n />\n <Route path=\"products/edit-release-page\" element={<ProductsEditReleasePagePage />} />\n <Route path=\"products/edit-release-page/:id\" element={<ProductsEditReleasePagePage />} />\n <Route path=\"products/roadmaps-page\" element={<ProductsRoadmapsPagePage />} />\n <Route path=\"products/roadmap-detail-page\" element={<ProductsRoadmapDetailPagePage />} />\n <Route\n path=\"products/roadmap-detail-page/:id\"\n element={<ProductsRoadmapDetailPagePage />}\n />\n <Route path=\"products/create-roadmap-page\" element={<ProductsCreateRoadmapPagePage />} />\n {/* BOFF-8045: roadmap editing's own home, split out of edit-product-page now that\n edit-product-page edits a real Product. */}\n <Route path=\"products/edit-roadmap-page\" element={<ProductsEditRoadmapPagePage />} />\n <Route path=\"products/edit-roadmap-page/:id\" element={<ProductsEditRoadmapPagePage />} />\n <Route\n path=\"products/roadmap-analytics-page\"\n element={<ProductsRoadmapAnalyticsPagePage />}\n />\n <Route\n path=\"products/roadmap-analytics-page/:id\"\n element={<ProductsRoadmapAnalyticsPagePage />}\n />\n {/* Portfolios (BOFF-8047) */}\n <Route path=\"products/portfolios-page\" element={<PortfoliosPortfoliosPagePage />} />\n <Route\n path=\"products/create-portfolio-page\"\n element={<PortfoliosCreatePortfolioPagePage />}\n />\n <Route\n path=\"products/portfolio-detail-page/:id\"\n element={<PortfoliosPortfolioDetailPagePage />}\n />\n <Route\n path=\"products/edit-portfolio-page/:id\"\n element={<PortfoliosEditPortfolioPagePage />}\n />\n {/* Programs (BOFF-8047) */}\n <Route path=\"products/programs-page\" element={<ProgramsProgramsPagePage />} />\n <Route path=\"products/create-program-page\" element={<ProgramsCreateProgramPagePage />} />\n <Route\n path=\"products/program-detail-page/:id\"\n element={<ProgramsProgramDetailPagePage />}\n />\n <Route path=\"products/edit-program-page/:id\" element={<ProgramsEditProgramPagePage />} />\n {/* Competitors (BOFF-8047) */}\n <Route path=\"products/competitors-page\" element={<CompetitorsCompetitorsPagePage />} />\n <Route\n path=\"products/create-competitor-page\"\n element={<CompetitorsCreateCompetitorPagePage />}\n />\n <Route\n path=\"products/competitor-detail-page/:id\"\n element={<CompetitorsCompetitorDetailPagePage />}\n />\n <Route\n path=\"products/edit-competitor-page/:id\"\n element={<CompetitorsEditCompetitorPagePage />}\n />\n {/* Prioritization (PRM-27) */}\n <Route path=\"products/prioritization-page\" element={<ProductsPrioritizationPagePage />} />\n {/* Projects */}\n <Route path=\"projects/projects-page\" element={<ProjectsProjectsPagePage />} />\n <Route path=\"projects/active-projects-page\" element={<ProjectsActiveProjectsPagePage />} />\n <Route path=\"projects/create-project-page\" element={<ProjectsCreateProjectPagePage />} />\n <Route path=\"projects/edit-project-page\" element={<ProjectsEditProjectPagePage />} />\n <Route path=\"projects/edit-project-page/:id\" element={<ProjectsEditProjectPagePage />} />\n <Route path=\"projects/project-detail-page\" element={<ProjectsProjectDetailPagePage />} />\n <Route\n path=\"projects/project-detail-page/:id\"\n element={<ProjectsProjectDetailPagePage />}\n />\n <Route path=\"projects/project-workflow-page/:id\" element={<ProjectsWorkflowPagePage />} />\n <Route\n path=\"projects/project-custom-fields-page/:id\"\n element={<ProjectsCustomFieldsPagePage />}\n />\n <Route path=\"projects/milestones-page\" element={<ProjectsMilestonesPagePage />} />\n <Route\n path=\"projects/milestone-detail-page\"\n element={<ProjectsMilestoneDetailPagePage />}\n />\n <Route\n path=\"projects/milestone-detail-page/:id\"\n element={<ProjectsMilestoneDetailPagePage />}\n />\n <Route path=\"projects/planning-page\" element={<ProjectsPlanningPagePage />} />\n <Route path=\"projects/planning-detail-page\" element={<ProjectsPlanningDetailPagePage />} />\n <Route\n path=\"projects/planning-detail-page/:id\"\n element={<ProjectsPlanningDetailPagePage />}\n />\n <Route path=\"projects/planning-edit-page\" element={<ProjectsPlanningEditPagePage />} />\n <Route path=\"projects/planning-edit-page/:id\" element={<ProjectsPlanningEditPagePage />} />\n <Route path=\"projects/budgets-page\" element={<ProjectsBudgetsPagePage />} />\n <Route path=\"projects/budget-detail-page\" element={<ProjectsBudgetDetailPagePage />} />\n <Route path=\"projects/budget-detail-page/:id\" element={<ProjectsBudgetDetailPagePage />} />\n {/* Critical path (BOFF-8047): CPM over WorkItemDependency, scoped to a project. */}\n <Route path=\"projects/critical-path-page\" element={<ProjectsCriticalPathPagePage />} />\n <Route path=\"projects/critical-path-page/:id\" element={<ProjectsCriticalPathPagePage />} />\n {/* Gantt (ANR-24): timeline over the same WorkItemDependency graph, scoped to a project. */}\n <Route path=\"projects/gantt-page\" element={<ProjectsGanttPagePage />} />\n <Route path=\"projects/gantt-page/:id\" element={<ProjectsGanttPagePage />} />\n {/* Quality gates (GAP-02): workspace-wide browse/create/edit/review, linked from a project's detail page. */}\n <Route path=\"projects/quality-gates-page\" element={<ProjectsQualityGatesPagePage />} />\n {/* At-risk work (AI-10): flagged open items for a project, optionally narrowed to a sprint. */}\n <Route path=\"projects/at-risk-page\" element={<ProjectsAtRiskPagePage />} />\n {/* Goals (OKRs, BOFF-4441) */}\n <Route path=\"goals/goals-page\" element={<GoalsGoalsPagePage />} />\n <Route path=\"goals/create-objective-page\" element={<GoalsCreateObjectivePagePage />} />\n <Route path=\"goals/objective-detail-page\" element={<GoalsObjectiveDetailPagePage />} />\n {/* Tasks */}\n {/* My Work (BOFF-8048) and My dashboard (ANR-08): before tasks-page so their route targets are easy to\n find here. */}\n <Route path=\"tasks/my-work-page\" element={<TasksMyWorkPagePage />} />\n <Route path=\"tasks/my-dashboard-page\" element={<TasksMyDashboardPagePage />} />\n <Route path=\"tasks/tasks-page\" element={<TasksTasksPagePage />} />\n <Route path=\"tasks/create-task-page\" element={<TasksCreateTaskPagePage />} />\n <Route path=\"tasks/edit-task-page\" element={<TasksEditTaskPagePage />} />\n <Route path=\"tasks/task-detail-page\" element={<TasksTaskDetailPagePage />} />\n <Route path=\"tasks/import-page\" element={<TasksImportPagePage />} />\n <Route path=\"tasks/time-entries-page\" element={<TasksTimeEntriesPagePage />} />\n <Route path=\"tasks/timesheets-page\" element={<TasksTimesheetsPagePage />} />\n <Route path=\"tasks/timesheet-detail-page\" element={<TasksTimesheetDetailPagePage />} />\n <Route path=\"tasks/timesheet-detail-page/:id\" element={<TasksTimesheetDetailPagePage />} />\n {/* Sprints */}\n <Route path=\"sprints/start-sprint-page\" element={<SprintsStartSprintPagePage />} />\n {/* Meetings (GAP-06, CWF-22/23) */}\n <Route path=\"meetings/meetings-page\" element={<MeetingsMeetingsPagePage />} />\n <Route path=\"meetings/meeting-detail-page\" element={<MeetingsMeetingDetailPagePage />} />\n <Route\n path=\"meetings/meeting-detail-page/:id\"\n element={<MeetingsMeetingDetailPagePage />}\n />\n\n <Route path=\"docs/docs-page\" element={<DocsDocsPagePage />} />\n <Route path=\"docs/doc-detail-page\" element={<DocsDocDetailPagePage />} />\n {/* Reports (ANR-13/14/15/16/17) */}\n <Route path=\"reports/reports-page\" element={<ReportsReportsPagePage />} />\n <Route path=\"reports/create-report-page\" element={<ReportsCreateReportPagePage />} />\n <Route path=\"reports/edit-report-page\" element={<ReportsEditReportPagePage />} />\n <Route path=\"reports/edit-report-page/:id\" element={<ReportsEditReportPagePage />} />\n <Route path=\"reports/report-page\" element={<ReportsReportPagePage />} />\n <Route path=\"reports/report-page/:id\" element={<ReportsReportPagePage />} />\n {/* Team */}\n <Route path=\"team/team-page\" element={<TeamTeamPagePage />} />\n <Route path=\"team/teams-page\" element={<TeamTeamsListPagePage />} />\n <Route path=\"team/team-detail-page\" element={<TeamTeamDetailPagePage />} />\n <Route path=\"team/team-detail-page/:id\" element={<TeamTeamDetailPagePage />} />\n <Route path=\"team/team-edit-page\" element={<TeamTeamEditPagePage />} />\n <Route path=\"team/team-edit-page/:id\" element={<TeamTeamEditPagePage />} />\n <Route path=\"team/create-team-page\" element={<TeamCreateTeamPagePage />} />\n <Route path=\"team/invite-member-page\" element={<TeamInviteMemberPagePage />} />\n {/* Workspace */}\n <Route\n path=\"workspace/create-workspace-page\"\n element={<WorkspaceCreateWorkspacePagePage />}\n />\n {/* Automation rules (BOFF-8047) */}\n <Route\n path=\"automation/automation-rules-page\"\n element={<AutomationAutomationRulesPagePage />}\n />\n <Route\n path=\"automation/create-automation-rule-page\"\n element={<AutomationCreateAutomationRulePagePage />}\n />\n <Route\n path=\"automation/automation-rule-detail-page\"\n element={<AutomationAutomationRuleDetailPagePage />}\n />\n <Route\n path=\"automation/automation-rule-detail-page/:id\"\n element={<AutomationAutomationRuleDetailPagePage />}\n />\n {/* Project templates (BOFF-8047) */}\n <Route path=\"templates/templates-page\" element={<TemplatesTemplatesPagePage />} />\n <Route path=\"templates/edit-template-page\" element={<TemplatesEditTemplatePagePage />} />\n <Route\n path=\"templates/edit-template-page/:id\"\n element={<TemplatesEditTemplatePagePage />}\n />\n {/* Risks (BOFF-8047) */}\n <Route path=\"risks/risk-register-page\" element={<RisksRiskRegisterPagePage />} />\n <Route path=\"risks/risk-detail-page\" element={<RisksRiskDetailPagePage />} />\n <Route path=\"risks/risk-detail-page/:id\" element={<RisksRiskDetailPagePage />} />\n {/* Analytics */}\n <Route path=\"analytics/analytics-page\" element={<AnalyticsAnalyticsPagePage />} />\n {/* AI breakdown + activity (AI-05, AI-24) */}\n <Route path=\"ai/plan-page\" element={<AiPlanPagePage />} />\n <Route path=\"ai/activity-page\" element={<AiActivityPagePage />} />\n {/* Workspace activity feed (CWF-09) */}\n <Route path=\"activity/activity-page\" element={<ActivityActivityPagePage />} />\n {/* Role dashboards (ANR-06, ANR-07, ANR-28, CWF-31) */}\n <Route path=\"dashboards/executive-page\" element={<DashboardsExecutivePagePage />} />\n <Route\n path=\"dashboards/project-manager-page\"\n element={<DashboardsProjectManagerPagePage />}\n />\n <Route\n path=\"dashboards/team-utilization-page\"\n element={<DashboardsTeamUtilizationPagePage />}\n />\n <Route path=\"dashboards/leadership-page\" element={<DashboardsLeadershipPagePage />} />\n {/* Integrations (sync — AUT-06/08/09/10/24/40) */}\n <Route path=\"integrations/syncs-page\" element={<IntegrationsSyncsPagePage />} />\n <Route path=\"integrations/new-sync-page\" element={<IntegrationsNewSyncPagePage />} />\n <Route\n path=\"integrations/sync-detail-page/:id\"\n element={<IntegrationsSyncDetailPagePage />}\n />\n {/* Webhook subscriptions (AUT-33): reachable only via the \"Webhooks\" button on the Integrations syncs\n page above — intentionally not a host sidebar NavItem (new top-level pages need one; see\n PlanMagnetRoot.tsx / index.ts for the routes that do export one). */}\n <Route path=\"integrations/webhooks-page\" element={<IntegrationsWebhooksPagePage />} />\n {/* 404 — a real page, not a redirect to the same URL (H5) */}\n <Route path=\"*\" element={<PlanMagnetNotFoundPage />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":";;;;;;AAKA,IAAM,IAAyB,QAC7B,OAAO,2BAAwB,MAAM,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,CACpF,EACK,IAAmB,QACvB,OAAO,+BAA4B,MAAM,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAClF,EACK,IAAwB,QAC5B,OAAO,oCAAiC,MAAM,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAC5F,EACK,IAA6B,QACjC,OAAO,yCAAsC,MAAM,OAAO,EACxD,SAAS,EAAE,4BACZ,EAAE,CACJ,EACK,KAAgC,QACpC,OAAO,4CAAyC,MAAM,OAAO,EAC3D,SAAS,EAAE,+BACZ,EAAE,CACJ,EACK,KAAgC,QACpC,OAAO,4CAAyC,MAAM,OAAO,EAC3D,SAAS,EAAE,+BACZ,EAAE,CACJ,EACK,IAA8B,QAClC,OAAO,0CAAuC,MAAM,OAAO,EACzD,SAAS,EAAE,6BACZ,EAAE,CACJ,EACK,IAA8B,QAClC,OAAO,0CAAuC,MAAM,OAAO,EACzD,SAAS,EAAE,6BACZ,EAAE,CACJ,EACK,IAA8B,QAClC,OAAO,0CAAuC,MAAM,OAAO,EACzD,SAAS,EAAE,6BACZ,EAAE,CACJ,EACK,IAAmC,QACvC,OAAO,+CAA4C,MAAM,OAAO,EAC9D,SAAS,EAAE,kCACZ,EAAE,CACJ,EACK,IAAgC,QACpC,OAAO,4CAAyC,MAAM,OAAO,EAC3D,SAAS,EAAE,+BACZ,EAAE,CACJ,EACK,IAA2B,QAC/B,OAAO,uCAAoC,MAAM,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAClG,EACK,KAA6B,QACjC,OAAO,yCAAsC,MAAM,OAAO,EACxD,SAAS,EAAE,4BACZ,EAAE,CACJ,EACK,IAAgC,QACpC,OAAO,4CAAyC,MAAM,OAAO,EAC3D,SAAS,EAAE,+BACZ,EAAE,CACJ,EACK,KAA2B,QAC/B,OAAO,uCAAoC,MAAM,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAClG,EACK,IAAgC,QACpC,OAAO,4CAAyC,MAAM,OAAO,EAC3D,SAAS,EAAE,+BACZ,EAAE,CACJ,EACK,KAA2B,QAC/B,OAAO,uCAAoC,MAAM,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAClG,EACK,IAAmC,QACvC,OAAO,+CAA4C,MAAM,OAAO,EAC9D,SAAS,EAAE,kCACZ,EAAE,CACJ,EACK,IAAgC,QACpC,OAAO,4CAAyC,MAAM,OAAO,EAC3D,SAAS,EAAE,+BACZ,EAAE,CACJ,EACK,KAA2B,QAC/B,OAAO,uCAAoC,MAAM,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAClG,EACK,KAA+B,QACnC,OAAO,2CAAwC,MAAM,OAAO,EAC1D,SAAS,EAAE,8BACZ,EAAE,CACJ,EACK,KAAoC,QACxC,OAAO,gDAA6C,MAAM,OAAO,EAC/D,SAAS,EAAE,mCACZ,EAAE,CACJ,EACK,KAAoC,QACxC,OAAO,gDAA6C,MAAM,OAAO,EAC/D,SAAS,EAAE,mCACZ,EAAE,CACJ,EACK,KAAkC,QACtC,OAAO,8CAA2C,MAAM,OAAO,EAC7D,SAAS,EAAE,iCACZ,EAAE,CACJ,EACK,KAA2B,QAC/B,OAAO,uCAAoC,MAAM,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAClG,EACK,IAAgC,QACpC,OAAO,4CAAyC,MAAM,OAAO,EAC3D,SAAS,EAAE,+BACZ,EAAE,CACJ,EACK,IAAgC,QACpC,OAAO,4CAAyC,MAAM,OAAO,EAC3D,SAAS,EAAE,+BACZ,EAAE,CACJ,EACK,IAA8B,QAClC,OAAO,0CAAuC,MAAM,OAAO,EACzD,SAAS,EAAE,6BACZ,EAAE,CACJ,EACK,IAAiC,QACrC,OAAO,6CAA0C,MAAM,OAAO,EAC5D,SAAS,EAAE,gCACZ,EAAE,CACJ,EACK,IAAsC,QAC1C,OAAO,kDAA+C,MAAM,OAAO,EACjE,SAAS,EAAE,qCACZ,EAAE,CACJ,EACK,IAAsC,QAC1C,OAAO,kDAA+C,MAAM,OAAO,EACjE,SAAS,EAAE,qCACZ,EAAE,CACJ,EACK,IAAoC,QACxC,OAAO,gDAA6C,MAAM,OAAO,EAC/D,SAAS,EAAE,mCACZ,EAAE,CACJ,EAEK,IAAiC,QACrC,OAAO,6CAA0C,MAAM,OAAO,EAC5D,SAAS,EAAE,gCACZ,EAAE,CACJ,EACK,IAAiC,QACrC,OAAO,6CAA0C,MAAM,OAAO,EAC5D,SAAS,EAAE,gCACZ,EAAE,CACJ,EACK,IAAgC,QACpC,OAAO,4CAAyC,MAAM,OAAO,EAC3D,SAAS,EAAE,+BACZ,EAAE,CACJ,EACK,IAA8B,QAClC,OAAO,0CAAuC,MAAM,OAAO,EACzD,SAAS,EAAE,6BACZ,EAAE,CACJ,EACK,IAAkC,QACtC,OAAO,8CAA2C,MAAM,OAAO,EAC7D,SAAS,EAAE,iCACZ,EAAE,CACJ,EACK,IAA0B,QAC9B,OAAO,sCAAmC,MAAM,OAAO,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAChG,EACK,IAA+B,QACnC,OAAO,2CAAwC,MAAM,OAAO,EAC1D,SAAS,EAAE,8BACZ,EAAE,CACJ,EACK,IAA2B,QAC/B,OAAO,uCAAoC,MAAM,OAAO,EACtD,SAAS,EAAE,0BACZ,EAAE,CACJ,EACK,IAA0B,QAC9B,OAAO,sCAAmC,MAAM,OAAO,EACrD,SAAS,EAAE,yBACZ,EAAE,CACJ,EACK,IAA+B,QACnC,OAAO,2CAAwC,MAAM,OAAO,EAC1D,SAAS,EAAE,8BACZ,EAAE,CACJ,EACK,IAAqB,QACzB,OAAO,iCAA8B,MAAM,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,CACtF,EACK,IAA+B,QACnC,OAAO,2CAAwC,MAAM,OAAO,EAC1D,SAAS,EAAE,8BACZ,EAAE,CACJ,EACK,IAA+B,QACnC,OAAO,2CAAwC,MAAM,OAAO,EAC1D,SAAS,EAAE,8BACZ,EAAE,CACJ,EACK,IAA6B,QACjC,OAAO,yCAAsC,MAAM,OAAO,EACxD,SAAS,EAAE,4BACZ,EAAE,CACJ,EACK,IAAiC,QACrC,OAAO,6CAA0C,MAAM,OAAO,EAC5D,SAAS,EAAE,gCACZ,EAAE,CACJ,EACK,IAA+B,QACnC,OAAO,2CAAwC,MAAM,OAAO,EAC1D,SAAS,EAAE,8BACZ,EAAE,CACJ,EACK,KAA2B,QAC/B,OAAO,uCAAoC,MAAM,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAClG,EACK,IAAgC,QACpC,OAAO,4CAAyC,MAAM,OAAO,EAC3D,SAAS,EAAE,+BACZ,EAAE,CACJ,EACK,KAA2B,QAC/B,OAAO,uCAAoC,MAAM,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAClG,EACK,KAA8B,QAClC,OAAO,0CAAuC,MAAM,OAAO,EACzD,SAAS,EAAE,6BACZ,EAAE,CACJ,EACK,KAAyB,QAC7B,OAAO,qCAAkC,MAAM,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAC9F,EACK,IAA4B,QAChC,OAAO,wCAAqC,MAAM,OAAO,EACvD,SAAS,EAAE,2BACZ,EAAE,CACJ,EACK,IAAwB,QAC5B,OAAO,oCAAiC,MAAM,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAC5F,EACK,KAA6B,QACjC,OAAO,yCAAsC,MAAM,OAAO,EACxD,SAAS,EAAE,4BACZ,EAAE,CACJ,EACK,KAA0B,QAC9B,OAAO,sCAAmC,MAAM,OAAO,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAChG,EACK,KAAwB,QAC5B,OAAO,oCAAiC,MAAM,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAC5F,EACK,KAA2B,QAC/B,OAAO,uCAAoC,MAAM,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAClG,EACK,KAA+B,QACnC,OAAO,2CAAwC,MAAM,OAAO,EAC1D,SAAS,EAAE,8BACZ,EAAE,CACJ,EACK,KAAsB,QAC1B,OAAO,kCAA+B,MAAM,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,CACxF,EACK,KAA0B,QAC9B,OAAO,sCAAmC,MAAM,OAAO,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAChG,EACK,KAAqB,QACzB,OAAO,iCAA8B,MAAM,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,CACtF,EAEK,KAAsB,QAC1B,OAAO,kCAA+B,MAAM,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,CACxF,EAEK,KAA2B,QAC/B,OAAO,uCAAoC,MAAM,OAAO,EACtD,SAAS,EAAE,0BACZ,EAAE,CACJ,EACK,KAAyB,QAC7B,OAAO,qCAAkC,MAAM,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAC9F,EACK,KAA2B,QAC/B,OAAO,uCAAoC,MAAM,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAClG,EACK,KAAmB,QACvB,OAAO,+BAA4B,MAAM,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAClF,EACK,KAAwB,QAC5B,OAAO,oCAAiC,MAAM,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAC5F,EACK,IAAyB,QAC7B,OAAO,qCAAkC,MAAM,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAC9F,EACK,IAAuB,QAC3B,OAAO,mCAAgC,MAAM,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAC1F,EACK,KAAmC,QACvC,OAAO,+CAA4C,MAAM,OAAO,EAC9D,SAAS,EAAE,kCACZ,EAAE,CACJ,EAEK,KAAoC,QACxC,OAAO,gDAA6C,MAAM,OAAO,EAC/D,SAAS,EAAE,mCACZ,EAAE,CACJ,EACK,KAAyC,QAC7C,OAAO,qDAAkD,MAAM,OAAO,EACpE,SAAS,EAAE,wCACZ,EAAE,CACJ,EACK,IAAyC,QAC7C,OAAO,qDAAkD,MAAM,OAAO,EACpE,SAAS,EAAE,wCACZ,EAAE,CACJ,EACK,KAA6B,QACjC,OAAO,yCAAsC,MAAM,OAAO,EACxD,SAAS,EAAE,4BACZ,EAAE,CACJ,EACK,IAAgC,QACpC,OAAO,4CAAyC,MAAM,OAAO,EAC3D,SAAS,EAAE,+BACZ,EAAE,CACJ,EACK,KAA4B,QAChC,OAAO,wCAAqC,MAAM,OAAO,EACvD,SAAS,EAAE,2BACZ,EAAE,CACJ,EACK,IAA0B,QAC9B,OAAO,sCAAmC,MAAM,OAAO,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAChG,EACK,IAA+B,QACnC,OAAO,2CAAwC,MAAM,OAAO,EAC1D,SAAS,EAAE,8BACZ,EAAE,CACJ,EAEK,IAAwB,QAC5B,OAAO,oCAAiC,MAAM,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAC5F,EAEK,KAA+B,QACnC,OAAO,2CAAwC,MAAM,OAAO,EAC1D,SAAS,EAAE,8BACZ,EAAE,CACJ,EAEK,KAAyB,QAC7B,OAAO,qCAAkC,MAAM,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAC9F,EAEK,KAAiB,QACrB,OAAO,6BAA0B,MAAM,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAC9E,EACK,KAAqB,QACzB,OAAO,iCAA8B,MAAM,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,CACtF,EAEK,KAA2B,QAC/B,OAAO,uCAAoC,MAAM,OAAO,EACtD,SAAS,EAAE,0BACZ,EAAE,CACJ,EAGK,KAA8B,QAClC,OAAO,0CAAuC,MAAM,OAAO,EACzD,SAAS,EAAE,6BACZ,EAAE,CACJ,EACK,IAAmC,QACvC,OAAO,+CAA4C,MAAM,OAAO,EAC9D,SAAS,EAAE,kCACZ,EAAE,CACJ,EACK,KAAoC,QACxC,OAAO,gDAA6C,MAAM,OAAO,EAC/D,SAAS,EAAE,mCACZ,EAAE,CACJ,EACK,KAA+B,QACnC,OAAO,2CAAwC,MAAM,OAAO,EAC1D,SAAS,EAAE,8BACZ,EAAE,CACJ,EAGK,KAA4B,QAChC,OAAO,wCAAqC,MAAM,OAAO,EACvD,SAAS,EAAE,2BACZ,EAAE,CACJ,EACK,KAA8B,QAClC,OAAO,0CAAuC,MAAM,OAAO,EACzD,SAAS,EAAE,6BACZ,EAAE,CACJ,EACK,KAAiC,QACrC,OAAO,6CAA0C,MAAM,OAAO,EAC5D,SAAS,EAAE,gCACZ,EAAE,CACJ,EAGK,KAA+B,QACnC,OAAO,2CAAwC,MAAM,OAAO,EAC1D,SAAS,EAAE,8BACZ,EAAE,CACJ,EAGK,KAA2B,QAC/B,OAAO,uCAAoC,MAAM,OAAO,EACtD,SAAS,EAAE,0BACZ,EAAE,CACJ,EACK,IAAgC,QACpC,OAAO,4CAAyC,MAAM,OAAO,EAC3D,SAAS,EAAE,+BACZ,EAAE,CACJ;AAID,SAAS,KAAa;AACpB,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,IAAD,EAAS,WAAU,qCAAsC,CAAA;EACrD,CAAA;;AAIV,SAAgB,KAAmB;AACjC,QACE,kBAAC,IAAD;EAAU,UAAU,kBAAC,IAAD,EAAc,CAAA;YAChC,kBAAC,IAAD,EAAA,UAAA;GACE,kBAAC,GAAD;IAAO,OAAA;IAAM,SAAS,kBAAC,GAAD,EAA8B,CAAA;IAAI,CAAA;GAExD,kBAAC,GAAD;IAAO,MAAK;IAA2B,SAAS,kBAAC,GAAD,EAA8B,CAAA;IAAI,CAAA;GASlF,kBAAC,GAAD;IAAO,MAAK;IAAyB,SAAS,kBAAC,IAAD,EAA4B,CAAA;IAAI,CAAA;GAC9E,kBAAC,GAAD;IAAO,MAAK;IAA+B,SAAS,kBAAC,IAAD,EAAiC,CAAA;IAAI,CAAA;GACzF,kBAAC,GAAD;IAAO,MAAK;IAA6B,SAAS,kBAAC,GAAD,EAA+B,CAAA;IAAI,CAAA;GACrF,kBAAC,GAAD;IAAO,MAAK;IAAiC,SAAS,kBAAC,GAAD,EAA+B,CAAA;IAAI,CAAA;GACzF,kBAAC,GAAD;IAAO,MAAK;IAA+B,SAAS,kBAAC,GAAD,EAAiC,CAAA;IAAI,CAAA;GACzF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAiC,CAAA;IAC1C,CAAA;GACF,kBAAC,GAAD;IAAO,MAAK;IAAyB,SAAS,kBAAC,GAAD,EAA4B,CAAA;IAAI,CAAA;GAC9E,kBAAC,GAAD;IAAO,MAAK;IAA4B,SAAS,kBAAC,IAAD,EAA8B,CAAA;IAAI,CAAA;GACnF,kBAAC,GAAD;IAAO,MAAK;IAA+B,SAAS,kBAAC,GAAD,EAAiC,CAAA;IAAI,CAAA;GACzF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAiC,CAAA;IAC1C,CAAA;GACF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAoC,CAAA;IAC7C,CAAA;GACF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAoC,CAAA;IAC7C,CAAA;GACF,kBAAC,GAAD;IAAO,MAAK;IAAyB,SAAS,kBAAC,IAAD,EAA4B,CAAA;IAAI,CAAA;GAC9E,kBAAC,GAAD;IAAO,MAAK;IAA+B,SAAS,kBAAC,GAAD,EAAiC,CAAA;IAAI,CAAA;GACzF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAiC,CAAA;IAC1C,CAAA;GACF,kBAAC,GAAD;IAAO,MAAK;IAA6B,SAAS,kBAAC,GAAD,EAA+B,CAAA;IAAI,CAAA;GACrF,kBAAC,GAAD;IAAO,MAAK;IAAiC,SAAS,kBAAC,GAAD,EAA+B,CAAA;IAAI,CAAA;GACzF,kBAAC,GAAD;IAAO,MAAK;IAAyB,SAAS,kBAAC,IAAD,EAA4B,CAAA;IAAI,CAAA;GAC9E,kBAAC,GAAD;IAAO,MAAK;IAA+B,SAAS,kBAAC,GAAD,EAAiC,CAAA;IAAI,CAAA;GACzF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAiC,CAAA;IAC1C,CAAA;GACF,kBAAC,GAAD;IAAO,MAAK;IAA+B,SAAS,kBAAC,IAAD,EAAiC,CAAA;IAAI,CAAA;GAGzF,kBAAC,GAAD;IAAO,MAAK;IAA6B,SAAS,kBAAC,GAAD,EAA+B,CAAA;IAAI,CAAA;GACrF,kBAAC,GAAD;IAAO,MAAK;IAAiC,SAAS,kBAAC,GAAD,EAA+B,CAAA;IAAI,CAAA;GACzF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAoC,CAAA;IAC7C,CAAA;GACF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAoC,CAAA;IAC7C,CAAA;GAEF,kBAAC,GAAD;IAAO,MAAK;IAA2B,SAAS,kBAAC,IAAD,EAAgC,CAAA;IAAI,CAAA;GACpF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,IAAD,EAAqC,CAAA;IAC9C,CAAA;GACF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,IAAD,EAAqC,CAAA;IAC9C,CAAA;GACF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,IAAD,EAAmC,CAAA;IAC5C,CAAA;GAEF,kBAAC,GAAD;IAAO,MAAK;IAAyB,SAAS,kBAAC,IAAD,EAA4B,CAAA;IAAI,CAAA;GAC9E,kBAAC,GAAD;IAAO,MAAK;IAA+B,SAAS,kBAAC,GAAD,EAAiC,CAAA;IAAI,CAAA;GACzF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAiC,CAAA;IAC1C,CAAA;GACF,kBAAC,GAAD;IAAO,MAAK;IAAiC,SAAS,kBAAC,GAAD,EAA+B,CAAA;IAAI,CAAA;GAEzF,kBAAC,GAAD;IAAO,MAAK;IAA4B,SAAS,kBAAC,GAAD,EAAkC,CAAA;IAAI,CAAA;GACvF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAuC,CAAA;IAChD,CAAA;GACF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAuC,CAAA;IAChD,CAAA;GACF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAqC,CAAA;IAC9C,CAAA;GAEF,kBAAC,GAAD;IAAO,MAAK;IAA+B,SAAS,kBAAC,GAAD,EAAkC,CAAA;IAAI,CAAA;GAE1F,kBAAC,GAAD;IAAO,MAAK;IAAyB,SAAS,kBAAC,IAAD,EAA4B,CAAA;IAAI,CAAA;GAC9E,kBAAC,GAAD;IAAO,MAAK;IAAgC,SAAS,kBAAC,GAAD,EAAkC,CAAA;IAAI,CAAA;GAC3F,kBAAC,GAAD;IAAO,MAAK;IAA+B,SAAS,kBAAC,GAAD,EAAiC,CAAA;IAAI,CAAA;GACzF,kBAAC,GAAD;IAAO,MAAK;IAA6B,SAAS,kBAAC,GAAD,EAA+B,CAAA;IAAI,CAAA;GACrF,kBAAC,GAAD;IAAO,MAAK;IAAiC,SAAS,kBAAC,GAAD,EAA+B,CAAA;IAAI,CAAA;GACzF,kBAAC,GAAD;IAAO,MAAK;IAA+B,SAAS,kBAAC,GAAD,EAAiC,CAAA;IAAI,CAAA;GACzF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAiC,CAAA;IAC1C,CAAA;GACF,kBAAC,GAAD;IAAO,MAAK;IAAqC,SAAS,kBAAC,IAAD,EAA4B,CAAA;IAAI,CAAA;GAC1F,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,IAAD,EAAgC,CAAA;IACzC,CAAA;GACF,kBAAC,GAAD;IAAO,MAAK;IAA2B,SAAS,kBAAC,GAAD,EAA8B,CAAA;IAAI,CAAA;GAClF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAmC,CAAA;IAC5C,CAAA;GACF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAmC,CAAA;IAC5C,CAAA;GACF,kBAAC,GAAD;IAAO,MAAK;IAAyB,SAAS,kBAAC,IAAD,EAA4B,CAAA;IAAI,CAAA;GAC9E,kBAAC,GAAD;IAAO,MAAK;IAAgC,SAAS,kBAAC,GAAD,EAAkC,CAAA;IAAI,CAAA;GAC3F,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAkC,CAAA;IAC3C,CAAA;GACF,kBAAC,GAAD;IAAO,MAAK;IAA8B,SAAS,kBAAC,GAAD,EAAgC,CAAA;IAAI,CAAA;GACvF,kBAAC,GAAD;IAAO,MAAK;IAAkC,SAAS,kBAAC,GAAD,EAAgC,CAAA;IAAI,CAAA;GAC3F,kBAAC,GAAD;IAAO,MAAK;IAAwB,SAAS,kBAAC,GAAD,EAA2B,CAAA;IAAI,CAAA;GAC5E,kBAAC,GAAD;IAAO,MAAK;IAA8B,SAAS,kBAAC,GAAD,EAAgC,CAAA;IAAI,CAAA;GACvF,kBAAC,GAAD;IAAO,MAAK;IAAkC,SAAS,kBAAC,GAAD,EAAgC,CAAA;IAAI,CAAA;GAE3F,kBAAC,GAAD;IAAO,MAAK;IAA8B,SAAS,kBAAC,GAAD,EAAgC,CAAA;IAAI,CAAA;GACvF,kBAAC,GAAD;IAAO,MAAK;IAAkC,SAAS,kBAAC,GAAD,EAAgC,CAAA;IAAI,CAAA;GAE3F,kBAAC,GAAD;IAAO,MAAK;IAAsB,SAAS,kBAAC,GAAD,EAAyB,CAAA;IAAI,CAAA;GACxE,kBAAC,GAAD;IAAO,MAAK;IAA0B,SAAS,kBAAC,GAAD,EAAyB,CAAA;IAAI,CAAA;GAE5E,kBAAC,GAAD;IAAO,MAAK;IAA8B,SAAS,kBAAC,IAAD,EAAgC,CAAA;IAAI,CAAA;GAEvF,kBAAC,GAAD;IAAO,MAAK;IAAwB,SAAS,kBAAC,IAAD,EAA0B,CAAA;IAAI,CAAA;GAE3E,kBAAC,GAAD;IAAO,MAAK;IAAmB,SAAS,kBAAC,GAAD,EAAsB,CAAA;IAAI,CAAA;GAClE,kBAAC,GAAD;IAAO,MAAK;IAA8B,SAAS,kBAAC,GAAD,EAAgC,CAAA;IAAI,CAAA;GACvF,kBAAC,GAAD;IAAO,MAAK;IAA8B,SAAS,kBAAC,GAAD,EAAgC,CAAA;IAAI,CAAA;GAIvF,kBAAC,GAAD;IAAO,MAAK;IAAqB,SAAS,kBAAC,IAAD,EAAuB,CAAA;IAAI,CAAA;GACrE,kBAAC,GAAD;IAAO,MAAK;IAA0B,SAAS,kBAAC,IAAD,EAA4B,CAAA;IAAI,CAAA;GAC/E,kBAAC,GAAD;IAAO,MAAK;IAAmB,SAAS,kBAAC,IAAD,EAAsB,CAAA;IAAI,CAAA;GAClE,kBAAC,GAAD;IAAO,MAAK;IAAyB,SAAS,kBAAC,IAAD,EAA2B,CAAA;IAAI,CAAA;GAC7E,kBAAC,GAAD;IAAO,MAAK;IAAuB,SAAS,kBAAC,IAAD,EAAyB,CAAA;IAAI,CAAA;GACzE,kBAAC,GAAD;IAAO,MAAK;IAAyB,SAAS,kBAAC,IAAD,EAA2B,CAAA;IAAI,CAAA;GAC7E,kBAAC,GAAD;IAAO,MAAK;IAAoB,SAAS,kBAAC,IAAD,EAAuB,CAAA;IAAI,CAAA;GACpE,kBAAC,GAAD;IAAO,MAAK;IAA0B,SAAS,kBAAC,GAAD,EAA4B,CAAA;IAAI,CAAA;GAC/E,kBAAC,GAAD;IAAO,MAAK;IAAwB,SAAS,kBAAC,GAAD,EAA2B,CAAA;IAAI,CAAA;GAC5E,kBAAC,GAAD;IAAO,MAAK;IAA8B,SAAS,kBAAC,GAAD,EAAgC,CAAA;IAAI,CAAA;GACvF,kBAAC,GAAD;IAAO,MAAK;IAAkC,SAAS,kBAAC,GAAD,EAAgC,CAAA;IAAI,CAAA;GAE3F,kBAAC,GAAD;IAAO,MAAK;IAA4B,SAAS,kBAAC,IAAD,EAA8B,CAAA;IAAI,CAAA;GAEnF,kBAAC,GAAD;IAAO,MAAK;IAAyB,SAAS,kBAAC,IAAD,EAA4B,CAAA;IAAI,CAAA;GAC9E,kBAAC,GAAD;IAAO,MAAK;IAA+B,SAAS,kBAAC,GAAD,EAAiC,CAAA;IAAI,CAAA;GACzF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAiC,CAAA;IAC1C,CAAA;GAEF,kBAAC,GAAD;IAAO,MAAK;IAAiB,SAAS,kBAAC,GAAD,EAAoB,CAAA;IAAI,CAAA;GAC9D,kBAAC,GAAD;IAAO,MAAK;IAAuB,SAAS,kBAAC,GAAD,EAAyB,CAAA;IAAI,CAAA;GAEzE,kBAAC,GAAD;IAAO,MAAK;IAAuB,SAAS,kBAAC,IAAD,EAA0B,CAAA;IAAI,CAAA;GAC1E,kBAAC,GAAD;IAAO,MAAK;IAA6B,SAAS,kBAAC,IAAD,EAA+B,CAAA;IAAI,CAAA;GACrF,kBAAC,GAAD;IAAO,MAAK;IAA2B,SAAS,kBAAC,GAAD,EAA6B,CAAA;IAAI,CAAA;GACjF,kBAAC,GAAD;IAAO,MAAK;IAA+B,SAAS,kBAAC,GAAD,EAA6B,CAAA;IAAI,CAAA;GACrF,kBAAC,GAAD;IAAO,MAAK;IAAsB,SAAS,kBAAC,GAAD,EAAyB,CAAA;IAAI,CAAA;GACxE,kBAAC,GAAD;IAAO,MAAK;IAA0B,SAAS,kBAAC,GAAD,EAAyB,CAAA;IAAI,CAAA;GAE5E,kBAAC,GAAD;IAAO,MAAK;IAAiB,SAAS,kBAAC,IAAD,EAAoB,CAAA;IAAI,CAAA;GAC9D,kBAAC,GAAD;IAAO,MAAK;IAAkB,SAAS,kBAAC,IAAD,EAAyB,CAAA;IAAI,CAAA;GACpE,kBAAC,GAAD;IAAO,MAAK;IAAwB,SAAS,kBAAC,GAAD,EAA0B,CAAA;IAAI,CAAA;GAC3E,kBAAC,GAAD;IAAO,MAAK;IAA4B,SAAS,kBAAC,GAAD,EAA0B,CAAA;IAAI,CAAA;GAC/E,kBAAC,GAAD;IAAO,MAAK;IAAsB,SAAS,kBAAC,GAAD,EAAwB,CAAA;IAAI,CAAA;GACvE,kBAAC,GAAD;IAAO,MAAK;IAA0B,SAAS,kBAAC,GAAD,EAAwB,CAAA;IAAI,CAAA;GAC3E,kBAAC,GAAD;IAAO,MAAK;IAAwB,SAAS,kBAAC,IAAD,EAA0B,CAAA;IAAI,CAAA;GAC3E,kBAAC,GAAD;IAAO,MAAK;IAA0B,SAAS,kBAAC,IAAD,EAA4B,CAAA;IAAI,CAAA;GAE/E,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,IAAD,EAAoC,CAAA;IAC7C,CAAA;GAEF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,IAAD,EAAqC,CAAA;IAC9C,CAAA;GACF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,IAAD,EAA0C,CAAA;IACnD,CAAA;GACF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAA0C,CAAA;IACnD,CAAA;GACF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAA0C,CAAA;IACnD,CAAA;GAEF,kBAAC,GAAD;IAAO,MAAK;IAA2B,SAAS,kBAAC,IAAD,EAA8B,CAAA;IAAI,CAAA;GAClF,kBAAC,GAAD;IAAO,MAAK;IAA+B,SAAS,kBAAC,GAAD,EAAiC,CAAA;IAAI,CAAA;GACzF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAiC,CAAA;IAC1C,CAAA;GAEF,kBAAC,GAAD;IAAO,MAAK;IAA2B,SAAS,kBAAC,IAAD,EAA6B,CAAA;IAAI,CAAA;GACjF,kBAAC,GAAD;IAAO,MAAK;IAAyB,SAAS,kBAAC,GAAD,EAA2B,CAAA;IAAI,CAAA;GAC7E,kBAAC,GAAD;IAAO,MAAK;IAA6B,SAAS,kBAAC,GAAD,EAA2B,CAAA;IAAI,CAAA;GAEjF,kBAAC,GAAD;IAAO,MAAK;IAA2B,SAAS,kBAAC,GAAD,EAA8B,CAAA;IAAI,CAAA;GAElF,kBAAC,GAAD;IAAO,MAAK;IAAe,SAAS,kBAAC,IAAD,EAAkB,CAAA;IAAI,CAAA;GAC1D,kBAAC,GAAD;IAAO,MAAK;IAAmB,SAAS,kBAAC,IAAD,EAAsB,CAAA;IAAI,CAAA;GAElE,kBAAC,GAAD;IAAO,MAAK;IAAyB,SAAS,kBAAC,IAAD,EAA4B,CAAA;IAAI,CAAA;GAE9E,kBAAC,GAAD;IAAO,MAAK;IAA4B,SAAS,kBAAC,IAAD,EAA+B,CAAA;IAAI,CAAA;GACpF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,GAAD,EAAoC,CAAA;IAC7C,CAAA;GACF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,IAAD,EAAqC,CAAA;IAC9C,CAAA;GACF,kBAAC,GAAD;IAAO,MAAK;IAA6B,SAAS,kBAAC,IAAD,EAAgC,CAAA;IAAI,CAAA;GAEtF,kBAAC,GAAD;IAAO,MAAK;IAA0B,SAAS,kBAAC,IAAD,EAA6B,CAAA;IAAI,CAAA;GAChF,kBAAC,GAAD;IAAO,MAAK;IAA6B,SAAS,kBAAC,IAAD,EAA+B,CAAA;IAAI,CAAA;GACrF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,kBAAC,IAAD,EAAkC,CAAA;IAC3C,CAAA;GAIF,kBAAC,GAAD;IAAO,MAAK;IAA6B,SAAS,kBAAC,IAAD,EAAgC,CAAA;IAAI,CAAA;GAEtF,kBAAC,GAAD;IAAO,MAAK;IAAI,SAAS,kBAAC,GAAD,EAA0B,CAAA;IAAI,CAAA;GAChD,EAAA,CAAA;EACA,CAAA"}
|
|
1
|
+
{"version":3,"file":"PlanMagnetRoutes.js","names":[],"sources":["../../src/planmagnet/PlanMagnetRoutes.tsx"],"sourcesContent":["import { lazy, Suspense } from 'react';\nimport { Route, Routes } from 'react-router';\nimport { Loader2 } from 'lucide-react';\nimport { AnalyticsAnalyticsPagePage } from './pages/AnalyticsAnalyticsPagePage';\n\nconst PlanMagnetNotFoundPage = lazy(() =>\n import('./pages/NotFoundPage').then((m) => ({ default: m.PlanMagnetNotFoundPage }))\n);\nconst DocsDocsPagePage = lazy(() =>\n import('./pages/DocsDocsPagePage').then((m) => ({ default: m.DocsDocsPagePage }))\n);\nconst DocsDocDetailPagePage = lazy(() =>\n import('./pages/DocsDocDetailPagePage').then((m) => ({ default: m.DocsDocDetailPagePage }))\n);\nconst DashboardDashboardPagePage = lazy(() =>\n import('./pages/DashboardDashboardPagePage').then((m) => ({\n default: m.DashboardDashboardPagePage,\n }))\n);\nconst ProductsCreateProductPagePage = lazy(() =>\n import('./pages/ProductsCreateProductPagePage').then((m) => ({\n default: m.ProductsCreateProductPagePage,\n }))\n);\nconst ProductsCreateRoadmapPagePage = lazy(() =>\n import('./pages/ProductsCreateRoadmapPagePage').then((m) => ({\n default: m.ProductsCreateRoadmapPagePage,\n }))\n);\nconst ProductsEditProductPagePage = lazy(() =>\n import('./pages/ProductsEditProductPagePage').then((m) => ({\n default: m.ProductsEditProductPagePage,\n }))\n);\nconst ProductsEditRoadmapPagePage = lazy(() =>\n import('./pages/ProductsEditRoadmapPagePage').then((m) => ({\n default: m.ProductsEditRoadmapPagePage,\n }))\n);\nconst ProductsEditReleasePagePage = lazy(() =>\n import('./pages/ProductsEditReleasePagePage').then((m) => ({\n default: m.ProductsEditReleasePagePage,\n }))\n);\nconst ProductsFeatureAnalyticsPagePage = lazy(() =>\n import('./pages/ProductsFeatureAnalyticsPagePage').then((m) => ({\n default: m.ProductsFeatureAnalyticsPagePage,\n }))\n);\nconst ProductsFeatureDetailPagePage = lazy(() =>\n import('./pages/ProductsFeatureDetailPagePage').then((m) => ({\n default: m.ProductsFeatureDetailPagePage,\n }))\n);\nconst ProductsFeaturesPagePage = lazy(() =>\n import('./pages/ProductsFeaturesPagePage').then((m) => ({ default: m.ProductsFeaturesPagePage }))\n);\nconst ProductsNewFeaturePagePage = lazy(() =>\n import('./pages/ProductsNewFeaturePagePage').then((m) => ({\n default: m.ProductsNewFeaturePagePage,\n }))\n);\nconst ProductsProductDetailPagePage = lazy(() =>\n import('./pages/ProductsProductDetailPagePage').then((m) => ({\n default: m.ProductsProductDetailPagePage,\n }))\n);\nconst ProductsProductsPagePage = lazy(() =>\n import('./pages/ProductsProductsPagePage').then((m) => ({ default: m.ProductsProductsPagePage }))\n);\nconst ProductsReleaseDetailPagePage = lazy(() =>\n import('./pages/ProductsReleaseDetailPagePage').then((m) => ({\n default: m.ProductsReleaseDetailPagePage,\n }))\n);\nconst ProductsReleasesPagePage = lazy(() =>\n import('./pages/ProductsReleasesPagePage').then((m) => ({ default: m.ProductsReleasesPagePage }))\n);\nconst ProductsRoadmapAnalyticsPagePage = lazy(() =>\n import('./pages/ProductsRoadmapAnalyticsPagePage').then((m) => ({\n default: m.ProductsRoadmapAnalyticsPagePage,\n }))\n);\nconst ProductsRoadmapDetailPagePage = lazy(() =>\n import('./pages/ProductsRoadmapDetailPagePage').then((m) => ({\n default: m.ProductsRoadmapDetailPagePage,\n }))\n);\nconst ProductsRoadmapsPagePage = lazy(() =>\n import('./pages/ProductsRoadmapsPagePage').then((m) => ({ default: m.ProductsRoadmapsPagePage }))\n);\nconst PortfoliosPortfoliosPagePage = lazy(() =>\n import('./pages/PortfoliosPortfoliosPagePage').then((m) => ({\n default: m.PortfoliosPortfoliosPagePage,\n }))\n);\nconst PortfoliosCreatePortfolioPagePage = lazy(() =>\n import('./pages/PortfoliosCreatePortfolioPagePage').then((m) => ({\n default: m.PortfoliosCreatePortfolioPagePage,\n }))\n);\nconst PortfoliosPortfolioDetailPagePage = lazy(() =>\n import('./pages/PortfoliosPortfolioDetailPagePage').then((m) => ({\n default: m.PortfoliosPortfolioDetailPagePage,\n }))\n);\nconst PortfoliosEditPortfolioPagePage = lazy(() =>\n import('./pages/PortfoliosEditPortfolioPagePage').then((m) => ({\n default: m.PortfoliosEditPortfolioPagePage,\n }))\n);\nconst ProgramsProgramsPagePage = lazy(() =>\n import('./pages/ProgramsProgramsPagePage').then((m) => ({ default: m.ProgramsProgramsPagePage }))\n);\nconst ProgramsCreateProgramPagePage = lazy(() =>\n import('./pages/ProgramsCreateProgramPagePage').then((m) => ({\n default: m.ProgramsCreateProgramPagePage,\n }))\n);\nconst ProgramsProgramDetailPagePage = lazy(() =>\n import('./pages/ProgramsProgramDetailPagePage').then((m) => ({\n default: m.ProgramsProgramDetailPagePage,\n }))\n);\nconst ProgramsEditProgramPagePage = lazy(() =>\n import('./pages/ProgramsEditProgramPagePage').then((m) => ({\n default: m.ProgramsEditProgramPagePage,\n }))\n);\nconst CompetitorsCompetitorsPagePage = lazy(() =>\n import('./pages/CompetitorsCompetitorsPagePage').then((m) => ({\n default: m.CompetitorsCompetitorsPagePage,\n }))\n);\nconst CompetitorsCreateCompetitorPagePage = lazy(() =>\n import('./pages/CompetitorsCreateCompetitorPagePage').then((m) => ({\n default: m.CompetitorsCreateCompetitorPagePage,\n }))\n);\nconst CompetitorsCompetitorDetailPagePage = lazy(() =>\n import('./pages/CompetitorsCompetitorDetailPagePage').then((m) => ({\n default: m.CompetitorsCompetitorDetailPagePage,\n }))\n);\nconst CompetitorsEditCompetitorPagePage = lazy(() =>\n import('./pages/CompetitorsEditCompetitorPagePage').then((m) => ({\n default: m.CompetitorsEditCompetitorPagePage,\n }))\n);\n// Prioritization (PRM-27): MoSCoW/Kano/Value-vs-Effort over feature requests or roadmap initiatives.\nconst ProductsPrioritizationPagePage = lazy(() =>\n import('./pages/ProductsPrioritizationPagePage').then((m) => ({\n default: m.ProductsPrioritizationPagePage,\n }))\n);\n// Product hierarchy (PRM-01): product lines, product features, and the Line > Product > Feature > Epic > Story view.\nconst ProductsProductLinesPagePage = lazy(() =>\n import('./pages/ProductsProductLinesPagePage').then((m) => ({\n default: m.ProductsProductLinesPagePage,\n }))\n);\nconst ProductsProductHierarchyPagePage = lazy(() =>\n import('./pages/ProductsProductHierarchyPagePage').then((m) => ({\n default: m.ProductsProductHierarchyPagePage,\n }))\n);\nconst ProductsProductFeatureDetailPagePage = lazy(() =>\n import('./pages/ProductsProductFeatureDetailPagePage').then((m) => ({\n default: m.ProductsProductFeatureDetailPagePage,\n }))\n);\nconst ProjectsActiveProjectsPagePage = lazy(() =>\n import('./pages/ProjectsActiveProjectsPagePage').then((m) => ({\n default: m.ProjectsActiveProjectsPagePage,\n }))\n);\nconst ProjectsCreateProjectPagePage = lazy(() =>\n import('./pages/ProjectsCreateProjectPagePage').then((m) => ({\n default: m.ProjectsCreateProjectPagePage,\n }))\n);\nconst ProjectsEditProjectPagePage = lazy(() =>\n import('./pages/ProjectsEditProjectPagePage').then((m) => ({\n default: m.ProjectsEditProjectPagePage,\n }))\n);\nconst ProjectsMilestoneDetailPagePage = lazy(() =>\n import('./pages/ProjectsMilestoneDetailPagePage').then((m) => ({\n default: m.ProjectsMilestoneDetailPagePage,\n }))\n);\nconst ProjectsBudgetsPagePage = lazy(() =>\n import('./pages/ProjectsBudgetsPagePage').then((m) => ({ default: m.ProjectsBudgetsPagePage }))\n);\nconst ProjectsBudgetDetailPagePage = lazy(() =>\n import('./pages/ProjectsBudgetDetailPagePage').then((m) => ({\n default: m.ProjectsBudgetDetailPagePage,\n }))\n);\nconst TasksTimeEntriesPagePage = lazy(() =>\n import('./pages/TasksTimeEntriesPagePage').then((m) => ({\n default: m.TasksTimeEntriesPagePage,\n }))\n);\nconst TasksTimesheetsPagePage = lazy(() =>\n import('./pages/TasksTimesheetsPagePage').then((m) => ({\n default: m.TasksTimesheetsPagePage,\n }))\n);\nconst TasksTimesheetDetailPagePage = lazy(() =>\n import('./pages/TasksTimesheetDetailPagePage').then((m) => ({\n default: m.TasksTimesheetDetailPagePage,\n }))\n);\nconst GoalsGoalsPagePage = lazy(() =>\n import('./pages/GoalsGoalsPagePage').then((m) => ({ default: m.GoalsGoalsPagePage }))\n);\nconst GoalsCreateObjectivePagePage = lazy(() =>\n import('./pages/GoalsCreateObjectivePagePage').then((m) => ({\n default: m.GoalsCreateObjectivePagePage,\n }))\n);\nconst GoalsObjectiveDetailPagePage = lazy(() =>\n import('./pages/GoalsObjectiveDetailPagePage').then((m) => ({\n default: m.GoalsObjectiveDetailPagePage,\n }))\n);\nconst ProjectsMilestonesPagePage = lazy(() =>\n import('./pages/ProjectsMilestonesPagePage').then((m) => ({\n default: m.ProjectsMilestonesPagePage,\n }))\n);\nconst ProjectsPlanningDetailPagePage = lazy(() =>\n import('./pages/ProjectsPlanningDetailPagePage').then((m) => ({\n default: m.ProjectsPlanningDetailPagePage,\n }))\n);\nconst ProjectsPlanningEditPagePage = lazy(() =>\n import('./pages/ProjectsPlanningEditPagePage').then((m) => ({\n default: m.ProjectsPlanningEditPagePage,\n }))\n);\nconst ProjectsPlanningPagePage = lazy(() =>\n import('./pages/ProjectsPlanningPagePage').then((m) => ({ default: m.ProjectsPlanningPagePage }))\n);\nconst ProjectsProjectDetailPagePage = lazy(() =>\n import('./pages/ProjectsProjectDetailPagePage').then((m) => ({\n default: m.ProjectsProjectDetailPagePage,\n }))\n);\nconst ProjectsProjectsPagePage = lazy(() =>\n import('./pages/ProjectsProjectsPagePage').then((m) => ({ default: m.ProjectsProjectsPagePage }))\n);\nconst ReportsCreateReportPagePage = lazy(() =>\n import('./pages/ReportsCreateReportPagePage').then((m) => ({\n default: m.ReportsCreateReportPagePage,\n }))\n);\nconst ReportsReportsPagePage = lazy(() =>\n import('./pages/ReportsReportsPagePage').then((m) => ({ default: m.ReportsReportsPagePage }))\n);\nconst ReportsEditReportPagePage = lazy(() =>\n import('./pages/ReportsEditReportPagePage').then((m) => ({\n default: m.ReportsEditReportPagePage,\n }))\n);\nconst ReportsReportPagePage = lazy(() =>\n import('./pages/ReportsReportPagePage').then((m) => ({ default: m.ReportsReportPagePage }))\n);\nconst SprintsStartSprintPagePage = lazy(() =>\n import('./pages/SprintsStartSprintPagePage').then((m) => ({\n default: m.SprintsStartSprintPagePage,\n }))\n);\nconst TasksCreateTaskPagePage = lazy(() =>\n import('./pages/TasksCreateTaskPagePage').then((m) => ({ default: m.TasksCreateTaskPagePage }))\n);\nconst TasksEditTaskPagePage = lazy(() =>\n import('./pages/TasksEditTaskPagePage').then((m) => ({ default: m.TasksEditTaskPagePage }))\n);\nconst ProjectsWorkflowPagePage = lazy(() =>\n import('./pages/ProjectsWorkflowPagePage').then((m) => ({ default: m.ProjectsWorkflowPagePage }))\n);\nconst ProjectsCustomFieldsPagePage = lazy(() =>\n import('./pages/ProjectsCustomFieldsPagePage').then((m) => ({\n default: m.ProjectsCustomFieldsPagePage,\n }))\n);\nconst TasksImportPagePage = lazy(() =>\n import('./pages/TasksImportPagePage').then((m) => ({ default: m.TasksImportPagePage }))\n);\nconst TasksTaskDetailPagePage = lazy(() =>\n import('./pages/TasksTaskDetailPagePage').then((m) => ({ default: m.TasksTaskDetailPagePage }))\n);\nconst TasksTasksPagePage = lazy(() =>\n import('./pages/TasksTasksPagePage').then((m) => ({ default: m.TasksTasksPagePage }))\n);\n// My Work (BOFF-8048)\nconst TasksMyWorkPagePage = lazy(() =>\n import('./pages/TasksMyWorkPagePage').then((m) => ({ default: m.TasksMyWorkPagePage }))\n);\n// My dashboard (ANR-08): my time allocation, my delivery trend, my goals.\nconst TasksMyDashboardPagePage = lazy(() =>\n import('./pages/TasksMyDashboardPagePage').then((m) => ({\n default: m.TasksMyDashboardPagePage,\n }))\n);\nconst TeamCreateTeamPagePage = lazy(() =>\n import('./pages/TeamCreateTeamPagePage').then((m) => ({ default: m.TeamCreateTeamPagePage }))\n);\nconst TeamInviteMemberPagePage = lazy(() =>\n import('./pages/TeamInviteMemberPagePage').then((m) => ({ default: m.TeamInviteMemberPagePage }))\n);\nconst TeamTeamPagePage = lazy(() =>\n import('./pages/TeamTeamPagePage').then((m) => ({ default: m.TeamTeamPagePage }))\n);\nconst TeamTeamsListPagePage = lazy(() =>\n import('./pages/TeamTeamsListPagePage').then((m) => ({ default: m.TeamTeamsListPagePage }))\n);\nconst TeamTeamDetailPagePage = lazy(() =>\n import('./pages/TeamTeamDetailPagePage').then((m) => ({ default: m.TeamTeamDetailPagePage }))\n);\nconst TeamTeamEditPagePage = lazy(() =>\n import('./pages/TeamTeamEditPagePage').then((m) => ({ default: m.TeamTeamEditPagePage }))\n);\nconst WorkspaceCreateWorkspacePagePage = lazy(() =>\n import('./pages/WorkspaceCreateWorkspacePagePage').then((m) => ({\n default: m.WorkspaceCreateWorkspacePagePage,\n }))\n);\n// BOFF-8047: Automation rules and Project templates\nconst AutomationAutomationRulesPagePage = lazy(() =>\n import('./pages/AutomationAutomationRulesPagePage').then((m) => ({\n default: m.AutomationAutomationRulesPagePage,\n }))\n);\nconst AutomationCreateAutomationRulePagePage = lazy(() =>\n import('./pages/AutomationCreateAutomationRulePagePage').then((m) => ({\n default: m.AutomationCreateAutomationRulePagePage,\n }))\n);\nconst AutomationAutomationRuleDetailPagePage = lazy(() =>\n import('./pages/AutomationAutomationRuleDetailPagePage').then((m) => ({\n default: m.AutomationAutomationRuleDetailPagePage,\n }))\n);\nconst TemplatesTemplatesPagePage = lazy(() =>\n import('./pages/TemplatesTemplatesPagePage').then((m) => ({\n default: m.TemplatesTemplatesPagePage,\n }))\n);\nconst TemplatesEditTemplatePagePage = lazy(() =>\n import('./pages/TemplatesEditTemplatePagePage').then((m) => ({\n default: m.TemplatesEditTemplatePagePage,\n }))\n);\nconst RisksRiskRegisterPagePage = lazy(() =>\n import('./pages/RisksRiskRegisterPagePage').then((m) => ({\n default: m.RisksRiskRegisterPagePage,\n }))\n);\nconst RisksRiskDetailPagePage = lazy(() =>\n import('./pages/RisksRiskDetailPagePage').then((m) => ({ default: m.RisksRiskDetailPagePage }))\n);\nconst ProjectsCriticalPathPagePage = lazy(() =>\n import('./pages/ProjectsCriticalPathPagePage').then((m) => ({\n default: m.ProjectsCriticalPathPagePage,\n }))\n);\n// Gantt timeline (ANR-24)\nconst ProjectsGanttPagePage = lazy(() =>\n import('./pages/ProjectsGanttPagePage').then((m) => ({ default: m.ProjectsGanttPagePage }))\n);\n// Quality gates (GAP-02)\nconst ProjectsQualityGatesPagePage = lazy(() =>\n import('./pages/ProjectsQualityGatesPagePage').then((m) => ({\n default: m.ProjectsQualityGatesPagePage,\n }))\n);\n// At-risk work (AI-10)\nconst ProjectsAtRiskPagePage = lazy(() =>\n import('./pages/ProjectsAtRiskPagePage').then((m) => ({ default: m.ProjectsAtRiskPagePage }))\n);\n// AI breakdown + activity (AI-05, AI-24)\nconst AiPlanPagePage = lazy(() =>\n import('./pages/AiPlanPagePage').then((m) => ({ default: m.AiPlanPagePage }))\n);\nconst AiActivityPagePage = lazy(() =>\n import('./pages/AiActivityPagePage').then((m) => ({ default: m.AiActivityPagePage }))\n);\n// Workspace activity feed (CWF-09)\nconst ActivityActivityPagePage = lazy(() =>\n import('./pages/ActivityActivityPagePage').then((m) => ({\n default: m.ActivityActivityPagePage,\n }))\n);\n\n// Role dashboards (ANR-06, ANR-07, ANR-28, CWF-31): composed from existing queries, no new backend.\nconst DashboardsExecutivePagePage = lazy(() =>\n import('./pages/DashboardsExecutivePagePage').then((m) => ({\n default: m.DashboardsExecutivePagePage,\n }))\n);\nconst DashboardsProjectManagerPagePage = lazy(() =>\n import('./pages/DashboardsProjectManagerPagePage').then((m) => ({\n default: m.DashboardsProjectManagerPagePage,\n }))\n);\nconst DashboardsTeamUtilizationPagePage = lazy(() =>\n import('./pages/DashboardsTeamUtilizationPagePage').then((m) => ({\n default: m.DashboardsTeamUtilizationPagePage,\n }))\n);\nconst DashboardsLeadershipPagePage = lazy(() =>\n import('./pages/DashboardsLeadershipPagePage').then((m) => ({\n default: m.DashboardsLeadershipPagePage,\n }))\n);\n\n// Integrations (sync — AUT-06/08/09/10/24/40)\nconst IntegrationsSyncsPagePage = lazy(() =>\n import('./pages/IntegrationsSyncsPagePage').then((m) => ({\n default: m.IntegrationsSyncsPagePage,\n }))\n);\nconst IntegrationsNewSyncPagePage = lazy(() =>\n import('./pages/IntegrationsNewSyncPagePage').then((m) => ({\n default: m.IntegrationsNewSyncPagePage,\n }))\n);\nconst IntegrationsSyncDetailPagePage = lazy(() =>\n import('./pages/IntegrationsSyncDetailPagePage').then((m) => ({\n default: m.IntegrationsSyncDetailPagePage,\n }))\n);\n// Outbound webhook subscriptions (AUT-33) — a sub-route linked from the Integrations syncs page, not a host\n// sidebar entry of its own (see that page's own \"Webhooks\" button and this route's comment below).\nconst IntegrationsWebhooksPagePage = lazy(() =>\n import('./pages/IntegrationsWebhooksPagePage').then((m) => ({\n default: m.IntegrationsWebhooksPagePage,\n }))\n);\n\n// Meetings (GAP-06, CWF-22/23)\nconst MeetingsMeetingsPagePage = lazy(() =>\n import('./pages/MeetingsMeetingsPagePage').then((m) => ({\n default: m.MeetingsMeetingsPagePage,\n }))\n);\nconst MeetingsMeetingDetailPagePage = lazy(() =>\n import('./pages/MeetingsMeetingDetailPagePage').then((m) => ({\n default: m.MeetingsMeetingDetailPagePage,\n }))\n);\n\n// Phase 2 new pages\n\nfunction PageLoader() {\n return (\n <div className=\"flex min-h-[320px] items-center justify-center\">\n <Loader2 className=\"h-8 w-8 animate-spin text-primary\" />\n </div>\n );\n}\n\nexport function PlanMagnetRoutes() {\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n <Route index element={<DashboardDashboardPagePage />} />\n {/* Dashboard */}\n <Route path=\"dashboard/dashboard-page\" element={<DashboardDashboardPagePage />} />\n {/* Products */}\n {/*\n The detail/edit/analytics pages below read their record id with\n useParams<{ id: string }>(). Each therefore needs a \":id\" segment — without one the\n id is permanently undefined and the page can never load a record, however it is\n reached. The bare paths are kept alongside so previously-bookmarked URLs still\n resolve rather than falling through to the catch-all redirect.\n */}\n <Route path=\"products/products-page\" element={<ProductsProductsPagePage />} />\n <Route path=\"products/create-product-page\" element={<ProductsCreateProductPagePage />} />\n <Route path=\"products/edit-product-page\" element={<ProductsEditProductPagePage />} />\n <Route path=\"products/edit-product-page/:id\" element={<ProductsEditProductPagePage />} />\n <Route path=\"products/product-detail-page\" element={<ProductsProductDetailPagePage />} />\n <Route\n path=\"products/product-detail-page/:id\"\n element={<ProductsProductDetailPagePage />}\n />\n <Route path=\"products/features-page\" element={<ProductsFeaturesPagePage />} />\n <Route path=\"products/new-feature-page\" element={<ProductsNewFeaturePagePage />} />\n <Route path=\"products/feature-detail-page\" element={<ProductsFeatureDetailPagePage />} />\n <Route\n path=\"products/feature-detail-page/:id\"\n element={<ProductsFeatureDetailPagePage />}\n />\n <Route\n path=\"products/feature-analytics-page\"\n element={<ProductsFeatureAnalyticsPagePage />}\n />\n <Route\n path=\"products/feature-analytics-page/:id\"\n element={<ProductsFeatureAnalyticsPagePage />}\n />\n <Route path=\"products/releases-page\" element={<ProductsReleasesPagePage />} />\n <Route path=\"products/release-detail-page\" element={<ProductsReleaseDetailPagePage />} />\n <Route\n path=\"products/release-detail-page/:id\"\n element={<ProductsReleaseDetailPagePage />}\n />\n <Route path=\"products/edit-release-page\" element={<ProductsEditReleasePagePage />} />\n <Route path=\"products/edit-release-page/:id\" element={<ProductsEditReleasePagePage />} />\n <Route path=\"products/roadmaps-page\" element={<ProductsRoadmapsPagePage />} />\n <Route path=\"products/roadmap-detail-page\" element={<ProductsRoadmapDetailPagePage />} />\n <Route\n path=\"products/roadmap-detail-page/:id\"\n element={<ProductsRoadmapDetailPagePage />}\n />\n <Route path=\"products/create-roadmap-page\" element={<ProductsCreateRoadmapPagePage />} />\n {/* BOFF-8045: roadmap editing's own home, split out of edit-product-page now that\n edit-product-page edits a real Product. */}\n <Route path=\"products/edit-roadmap-page\" element={<ProductsEditRoadmapPagePage />} />\n <Route path=\"products/edit-roadmap-page/:id\" element={<ProductsEditRoadmapPagePage />} />\n <Route\n path=\"products/roadmap-analytics-page\"\n element={<ProductsRoadmapAnalyticsPagePage />}\n />\n <Route\n path=\"products/roadmap-analytics-page/:id\"\n element={<ProductsRoadmapAnalyticsPagePage />}\n />\n {/* Portfolios (BOFF-8047) */}\n <Route path=\"products/portfolios-page\" element={<PortfoliosPortfoliosPagePage />} />\n <Route\n path=\"products/create-portfolio-page\"\n element={<PortfoliosCreatePortfolioPagePage />}\n />\n <Route\n path=\"products/portfolio-detail-page/:id\"\n element={<PortfoliosPortfolioDetailPagePage />}\n />\n <Route\n path=\"products/edit-portfolio-page/:id\"\n element={<PortfoliosEditPortfolioPagePage />}\n />\n {/* Programs (BOFF-8047) */}\n <Route path=\"products/programs-page\" element={<ProgramsProgramsPagePage />} />\n <Route path=\"products/create-program-page\" element={<ProgramsCreateProgramPagePage />} />\n <Route\n path=\"products/program-detail-page/:id\"\n element={<ProgramsProgramDetailPagePage />}\n />\n <Route path=\"products/edit-program-page/:id\" element={<ProgramsEditProgramPagePage />} />\n {/* Competitors (BOFF-8047) */}\n <Route path=\"products/competitors-page\" element={<CompetitorsCompetitorsPagePage />} />\n <Route\n path=\"products/create-competitor-page\"\n element={<CompetitorsCreateCompetitorPagePage />}\n />\n <Route\n path=\"products/competitor-detail-page/:id\"\n element={<CompetitorsCompetitorDetailPagePage />}\n />\n <Route\n path=\"products/edit-competitor-page/:id\"\n element={<CompetitorsEditCompetitorPagePage />}\n />\n {/* Prioritization (PRM-27) */}\n <Route path=\"products/prioritization-page\" element={<ProductsPrioritizationPagePage />} />\n {/* Product hierarchy (PRM-01). \"Feature\" here is a product feature (a capability the team builds) — the\n feature REQUEST pages above keep their historical feature-* paths so existing links still resolve. */}\n <Route path=\"products/product-lines-page\" element={<ProductsProductLinesPagePage />} />\n <Route\n path=\"products/product-hierarchy-page\"\n element={<ProductsProductHierarchyPagePage />}\n />\n <Route\n path=\"products/product-feature-detail-page/:id\"\n element={<ProductsProductFeatureDetailPagePage />}\n />\n {/* Projects */}\n <Route path=\"projects/projects-page\" element={<ProjectsProjectsPagePage />} />\n <Route path=\"projects/active-projects-page\" element={<ProjectsActiveProjectsPagePage />} />\n <Route path=\"projects/create-project-page\" element={<ProjectsCreateProjectPagePage />} />\n <Route path=\"projects/edit-project-page\" element={<ProjectsEditProjectPagePage />} />\n <Route path=\"projects/edit-project-page/:id\" element={<ProjectsEditProjectPagePage />} />\n <Route path=\"projects/project-detail-page\" element={<ProjectsProjectDetailPagePage />} />\n <Route\n path=\"projects/project-detail-page/:id\"\n element={<ProjectsProjectDetailPagePage />}\n />\n <Route path=\"projects/project-workflow-page/:id\" element={<ProjectsWorkflowPagePage />} />\n <Route\n path=\"projects/project-custom-fields-page/:id\"\n element={<ProjectsCustomFieldsPagePage />}\n />\n <Route path=\"projects/milestones-page\" element={<ProjectsMilestonesPagePage />} />\n <Route\n path=\"projects/milestone-detail-page\"\n element={<ProjectsMilestoneDetailPagePage />}\n />\n <Route\n path=\"projects/milestone-detail-page/:id\"\n element={<ProjectsMilestoneDetailPagePage />}\n />\n <Route path=\"projects/planning-page\" element={<ProjectsPlanningPagePage />} />\n <Route path=\"projects/planning-detail-page\" element={<ProjectsPlanningDetailPagePage />} />\n <Route\n path=\"projects/planning-detail-page/:id\"\n element={<ProjectsPlanningDetailPagePage />}\n />\n <Route path=\"projects/planning-edit-page\" element={<ProjectsPlanningEditPagePage />} />\n <Route path=\"projects/planning-edit-page/:id\" element={<ProjectsPlanningEditPagePage />} />\n <Route path=\"projects/budgets-page\" element={<ProjectsBudgetsPagePage />} />\n <Route path=\"projects/budget-detail-page\" element={<ProjectsBudgetDetailPagePage />} />\n <Route path=\"projects/budget-detail-page/:id\" element={<ProjectsBudgetDetailPagePage />} />\n {/* Critical path (BOFF-8047): CPM over WorkItemDependency, scoped to a project. */}\n <Route path=\"projects/critical-path-page\" element={<ProjectsCriticalPathPagePage />} />\n <Route path=\"projects/critical-path-page/:id\" element={<ProjectsCriticalPathPagePage />} />\n {/* Gantt (ANR-24): timeline over the same WorkItemDependency graph, scoped to a project. */}\n <Route path=\"projects/gantt-page\" element={<ProjectsGanttPagePage />} />\n <Route path=\"projects/gantt-page/:id\" element={<ProjectsGanttPagePage />} />\n {/* Quality gates (GAP-02): workspace-wide browse/create/edit/review, linked from a project's detail page. */}\n <Route path=\"projects/quality-gates-page\" element={<ProjectsQualityGatesPagePage />} />\n {/* At-risk work (AI-10): flagged open items for a project, optionally narrowed to a sprint. */}\n <Route path=\"projects/at-risk-page\" element={<ProjectsAtRiskPagePage />} />\n {/* Goals (OKRs, BOFF-4441) */}\n <Route path=\"goals/goals-page\" element={<GoalsGoalsPagePage />} />\n <Route path=\"goals/create-objective-page\" element={<GoalsCreateObjectivePagePage />} />\n <Route path=\"goals/objective-detail-page\" element={<GoalsObjectiveDetailPagePage />} />\n {/* Tasks */}\n {/* My Work (BOFF-8048) and My dashboard (ANR-08): before tasks-page so their route targets are easy to\n find here. */}\n <Route path=\"tasks/my-work-page\" element={<TasksMyWorkPagePage />} />\n <Route path=\"tasks/my-dashboard-page\" element={<TasksMyDashboardPagePage />} />\n <Route path=\"tasks/tasks-page\" element={<TasksTasksPagePage />} />\n <Route path=\"tasks/create-task-page\" element={<TasksCreateTaskPagePage />} />\n <Route path=\"tasks/edit-task-page\" element={<TasksEditTaskPagePage />} />\n <Route path=\"tasks/task-detail-page\" element={<TasksTaskDetailPagePage />} />\n <Route path=\"tasks/import-page\" element={<TasksImportPagePage />} />\n <Route path=\"tasks/time-entries-page\" element={<TasksTimeEntriesPagePage />} />\n <Route path=\"tasks/timesheets-page\" element={<TasksTimesheetsPagePage />} />\n <Route path=\"tasks/timesheet-detail-page\" element={<TasksTimesheetDetailPagePage />} />\n <Route path=\"tasks/timesheet-detail-page/:id\" element={<TasksTimesheetDetailPagePage />} />\n {/* Sprints */}\n <Route path=\"sprints/start-sprint-page\" element={<SprintsStartSprintPagePage />} />\n {/* Meetings (GAP-06, CWF-22/23) */}\n <Route path=\"meetings/meetings-page\" element={<MeetingsMeetingsPagePage />} />\n <Route path=\"meetings/meeting-detail-page\" element={<MeetingsMeetingDetailPagePage />} />\n <Route\n path=\"meetings/meeting-detail-page/:id\"\n element={<MeetingsMeetingDetailPagePage />}\n />\n\n <Route path=\"docs/docs-page\" element={<DocsDocsPagePage />} />\n <Route path=\"docs/doc-detail-page\" element={<DocsDocDetailPagePage />} />\n {/* Reports (ANR-13/14/15/16/17) */}\n <Route path=\"reports/reports-page\" element={<ReportsReportsPagePage />} />\n <Route path=\"reports/create-report-page\" element={<ReportsCreateReportPagePage />} />\n <Route path=\"reports/edit-report-page\" element={<ReportsEditReportPagePage />} />\n <Route path=\"reports/edit-report-page/:id\" element={<ReportsEditReportPagePage />} />\n <Route path=\"reports/report-page\" element={<ReportsReportPagePage />} />\n <Route path=\"reports/report-page/:id\" element={<ReportsReportPagePage />} />\n {/* Team */}\n <Route path=\"team/team-page\" element={<TeamTeamPagePage />} />\n <Route path=\"team/teams-page\" element={<TeamTeamsListPagePage />} />\n <Route path=\"team/team-detail-page\" element={<TeamTeamDetailPagePage />} />\n <Route path=\"team/team-detail-page/:id\" element={<TeamTeamDetailPagePage />} />\n <Route path=\"team/team-edit-page\" element={<TeamTeamEditPagePage />} />\n <Route path=\"team/team-edit-page/:id\" element={<TeamTeamEditPagePage />} />\n <Route path=\"team/create-team-page\" element={<TeamCreateTeamPagePage />} />\n <Route path=\"team/invite-member-page\" element={<TeamInviteMemberPagePage />} />\n {/* Workspace */}\n <Route\n path=\"workspace/create-workspace-page\"\n element={<WorkspaceCreateWorkspacePagePage />}\n />\n {/* Automation rules (BOFF-8047) */}\n <Route\n path=\"automation/automation-rules-page\"\n element={<AutomationAutomationRulesPagePage />}\n />\n <Route\n path=\"automation/create-automation-rule-page\"\n element={<AutomationCreateAutomationRulePagePage />}\n />\n <Route\n path=\"automation/automation-rule-detail-page\"\n element={<AutomationAutomationRuleDetailPagePage />}\n />\n <Route\n path=\"automation/automation-rule-detail-page/:id\"\n element={<AutomationAutomationRuleDetailPagePage />}\n />\n {/* Project templates (BOFF-8047) */}\n <Route path=\"templates/templates-page\" element={<TemplatesTemplatesPagePage />} />\n <Route path=\"templates/edit-template-page\" element={<TemplatesEditTemplatePagePage />} />\n <Route\n path=\"templates/edit-template-page/:id\"\n element={<TemplatesEditTemplatePagePage />}\n />\n {/* Risks (BOFF-8047) */}\n <Route path=\"risks/risk-register-page\" element={<RisksRiskRegisterPagePage />} />\n <Route path=\"risks/risk-detail-page\" element={<RisksRiskDetailPagePage />} />\n <Route path=\"risks/risk-detail-page/:id\" element={<RisksRiskDetailPagePage />} />\n {/* Analytics */}\n <Route path=\"analytics/analytics-page\" element={<AnalyticsAnalyticsPagePage />} />\n {/* AI breakdown + activity (AI-05, AI-24) */}\n <Route path=\"ai/plan-page\" element={<AiPlanPagePage />} />\n <Route path=\"ai/activity-page\" element={<AiActivityPagePage />} />\n {/* Workspace activity feed (CWF-09) */}\n <Route path=\"activity/activity-page\" element={<ActivityActivityPagePage />} />\n {/* Role dashboards (ANR-06, ANR-07, ANR-28, CWF-31) */}\n <Route path=\"dashboards/executive-page\" element={<DashboardsExecutivePagePage />} />\n <Route\n path=\"dashboards/project-manager-page\"\n element={<DashboardsProjectManagerPagePage />}\n />\n <Route\n path=\"dashboards/team-utilization-page\"\n element={<DashboardsTeamUtilizationPagePage />}\n />\n <Route path=\"dashboards/leadership-page\" element={<DashboardsLeadershipPagePage />} />\n {/* Integrations (sync — AUT-06/08/09/10/24/40) */}\n <Route path=\"integrations/syncs-page\" element={<IntegrationsSyncsPagePage />} />\n <Route path=\"integrations/new-sync-page\" element={<IntegrationsNewSyncPagePage />} />\n <Route\n path=\"integrations/sync-detail-page/:id\"\n element={<IntegrationsSyncDetailPagePage />}\n />\n {/* Webhook subscriptions (AUT-33): reachable only via the \"Webhooks\" button on the Integrations syncs\n page above — intentionally not a host sidebar NavItem (new top-level pages need one; see\n PlanMagnetRoot.tsx / index.ts for the routes that do export one). */}\n <Route path=\"integrations/webhooks-page\" element={<IntegrationsWebhooksPagePage />} />\n {/* 404 — a real page, not a redirect to the same URL (H5) */}\n <Route path=\"*\" element={<PlanMagnetNotFoundPage />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface CommentAttachmentUploadState {
|
|
2
|
+
/** Successfully-uploaded file ids, in attach order — pass straight through as `attachmentFileIds`. */
|
|
3
|
+
fileIds: string[];
|
|
4
|
+
/** True while an attachment is queued, uploading, finalizing, failed, or a selection was rejected.
|
|
5
|
+
* The composer must not post until the author retries/removes failures or dismisses a rejected selection. */
|
|
6
|
+
pending: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface CommentAttachmentUploadProps {
|
|
9
|
+
onChange: (state: CommentAttachmentUploadState) => void;
|
|
10
|
+
onInsertImage?: (fileId: string, filename: string) => void;
|
|
11
|
+
onRemoveImage?: (fileId: string) => void;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
idPrefix: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function CommentAttachmentUpload({ onChange, onInsertImage, onRemoveImage, disabled, idPrefix, }: CommentAttachmentUploadProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=CommentAttachmentUpload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentAttachmentUpload.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/comments/CommentAttachmentUpload.tsx"],"names":[],"mappings":"AA0CA,MAAM,WAAW,4BAA4B;IAC3C,sGAAsG;IACtG,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;iHAC6G;IAC7G,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,CAAC,KAAK,EAAE,4BAA4B,KAAK,IAAI,CAAC;IACxD,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,uBAAuB,CAAC,EACtC,QAAQ,EACR,aAAa,EACb,aAAa,EACb,QAAQ,EACR,QAAQ,GACT,EAAE,4BAA4B,2CA2P9B"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { formatBytes as e, mimeTypeIcon as t } from "./fileDisplay.js";
|
|
2
|
+
import { MAX_COMMENT_ATTACHMENT_BYTES as n, UploadCompletionUncertainError as r, commentUploadErrorMessage as i, createCommentAttachmentUploadTransport as a, retryCommentAttachmentCompletion as o, uploadCommentAttachment as s } from "./commentAttachmentUploadClient.js";
|
|
3
|
+
import { useEffect as c, useMemo as l, useRef as u, useState as d } from "react";
|
|
4
|
+
import { Loader2 as f, Paperclip as p, X as m } from "lucide-react";
|
|
5
|
+
import { useApolloClient as h } from "@apollo/client/react";
|
|
6
|
+
import { jsx as g, jsxs as _ } from "react/jsx-runtime";
|
|
7
|
+
import { Button as v } from "@burdenoff/fe-libs/ui";
|
|
8
|
+
//#region src/planmagnet/comments/CommentAttachmentUpload.tsx
|
|
9
|
+
var y = 10, b = 0;
|
|
10
|
+
function x() {
|
|
11
|
+
return b += 1, `pending-attachment-${Date.now()}-${b}`;
|
|
12
|
+
}
|
|
13
|
+
function S({ onChange: t, onInsertImage: f, onRemoveImage: m, disabled: b, idPrefix: S }) {
|
|
14
|
+
let w = h(), T = l(() => a(w), [w]), E = u(null), [D, O] = d([]), [k, A] = d(null), j = u(null), M = u([]), N = u(!1), P = u(!1), F = u(/* @__PURE__ */ new Map());
|
|
15
|
+
c(() => {
|
|
16
|
+
P.current = !0;
|
|
17
|
+
let e = F.current;
|
|
18
|
+
return () => {
|
|
19
|
+
P.current = !1, e.forEach((e) => e.abort()), e.clear();
|
|
20
|
+
};
|
|
21
|
+
}, []);
|
|
22
|
+
let I = (e) => {
|
|
23
|
+
P.current && (M.current = e, O(e), t({
|
|
24
|
+
fileIds: e.flatMap((e) => e.status === "ready" && e.fileId ? [e.fileId] : []),
|
|
25
|
+
pending: j.current !== null || e.some((e) => e.status !== "ready")
|
|
26
|
+
}));
|
|
27
|
+
}, L = async () => {
|
|
28
|
+
if (!N.current) {
|
|
29
|
+
N.current = !0;
|
|
30
|
+
try {
|
|
31
|
+
for (; P.current;) {
|
|
32
|
+
let e = M.current.find((e) => e.status === "queued");
|
|
33
|
+
if (!e) break;
|
|
34
|
+
let t = new AbortController();
|
|
35
|
+
F.current.set(e.tempId, t), I(M.current.map((t) => t.tempId === e.tempId ? {
|
|
36
|
+
...t,
|
|
37
|
+
status: e.completionSession ? "finalizing" : "uploading"
|
|
38
|
+
} : t));
|
|
39
|
+
try {
|
|
40
|
+
let n = e.completionSession ? await o(e.completionSession, T, t.signal) : await s(e.file, T, t.signal, () => {
|
|
41
|
+
I(M.current.map((t) => t.tempId === e.tempId ? {
|
|
42
|
+
...t,
|
|
43
|
+
status: "finalizing"
|
|
44
|
+
} : t));
|
|
45
|
+
});
|
|
46
|
+
I(M.current.map((t) => t.tempId === e.tempId ? {
|
|
47
|
+
...t,
|
|
48
|
+
status: "ready",
|
|
49
|
+
fileId: n,
|
|
50
|
+
error: null,
|
|
51
|
+
completionSession: null
|
|
52
|
+
} : t));
|
|
53
|
+
} catch (n) {
|
|
54
|
+
(!t.signal.aborted || n instanceof r) && I(M.current.map((t) => t.tempId === e.tempId ? {
|
|
55
|
+
...t,
|
|
56
|
+
status: "error",
|
|
57
|
+
error: i(n),
|
|
58
|
+
completionSession: n instanceof r ? n.session : t.completionSession
|
|
59
|
+
} : t));
|
|
60
|
+
} finally {
|
|
61
|
+
F.current.delete(e.tempId);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
} finally {
|
|
65
|
+
N.current = !1;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}, R = D.filter((e) => e.status !== "error").length, z = R >= y, B = (t) => {
|
|
69
|
+
if (!t || t.length === 0) return;
|
|
70
|
+
let r = y - M.current.filter((e) => e.status !== "error").length, i = Array.from(t), a = i.filter((e) => e.size <= n), o = a.slice(0, Math.max(0, r)).map((e) => ({
|
|
71
|
+
tempId: x(),
|
|
72
|
+
file: e,
|
|
73
|
+
status: "queued",
|
|
74
|
+
error: null,
|
|
75
|
+
fileId: null,
|
|
76
|
+
completionSession: null
|
|
77
|
+
})), s = i.length !== a.length, c = a.length > o.length, l = [s ? `Each attachment must be at most ${e(104857600)}. The larger files were not attached.` : null, c ? `Only ${y} attachments can be added to one comment. The extra files were not attached.` : null].filter(Boolean).join(" ") || null;
|
|
78
|
+
if (l) {
|
|
79
|
+
let e = j.current;
|
|
80
|
+
j.current = e && !e.includes(l) ? `${e} ${l}` : e ?? l, A(j.current);
|
|
81
|
+
}
|
|
82
|
+
I([...M.current, ...o]), o.length > 0 && L(), E.current && (E.current.value = "");
|
|
83
|
+
}, V = (e) => {
|
|
84
|
+
M.current.filter((e) => e.status !== "error").length >= y || (I(M.current.map((t) => t.tempId === e && t.status === "error" ? {
|
|
85
|
+
...t,
|
|
86
|
+
status: "queued",
|
|
87
|
+
error: null
|
|
88
|
+
} : t)), L());
|
|
89
|
+
}, H = (e) => {
|
|
90
|
+
let t = M.current.find((t) => t.tempId === e);
|
|
91
|
+
t?.status !== "finalizing" && (F.current.get(e)?.abort(), t?.fileId && t.file.type.startsWith("image/") && m?.(t.fileId), I(M.current.filter((t) => t.tempId !== e)));
|
|
92
|
+
};
|
|
93
|
+
return /* @__PURE__ */ _("div", {
|
|
94
|
+
className: "space-y-1.5",
|
|
95
|
+
children: [
|
|
96
|
+
/* @__PURE__ */ _("div", {
|
|
97
|
+
className: "flex items-center gap-2",
|
|
98
|
+
children: [
|
|
99
|
+
/* @__PURE__ */ g("input", {
|
|
100
|
+
ref: E,
|
|
101
|
+
id: `${S}-attach-input`,
|
|
102
|
+
type: "file",
|
|
103
|
+
multiple: !0,
|
|
104
|
+
className: "sr-only",
|
|
105
|
+
disabled: b || z,
|
|
106
|
+
onChange: (e) => B(e.target.files)
|
|
107
|
+
}),
|
|
108
|
+
/* @__PURE__ */ _(v, {
|
|
109
|
+
type: "button",
|
|
110
|
+
size: "sm",
|
|
111
|
+
variant: "outline",
|
|
112
|
+
className: "h-7 px-2 text-xs",
|
|
113
|
+
disabled: b || z,
|
|
114
|
+
onClick: () => E.current?.click(),
|
|
115
|
+
"data-testid": `${S}-attach-files`,
|
|
116
|
+
children: [/* @__PURE__ */ g(p, {
|
|
117
|
+
className: "mr-1 h-3.5 w-3.5",
|
|
118
|
+
"aria-hidden": "true"
|
|
119
|
+
}), "Attach files"]
|
|
120
|
+
}),
|
|
121
|
+
/* @__PURE__ */ g("span", {
|
|
122
|
+
className: "text-xs text-muted-foreground",
|
|
123
|
+
children: D.length > 0 ? `${R}/${y} attached` : `Up to ${y} files`
|
|
124
|
+
})
|
|
125
|
+
]
|
|
126
|
+
}),
|
|
127
|
+
k && /* @__PURE__ */ _("p", {
|
|
128
|
+
role: "alert",
|
|
129
|
+
className: "text-xs text-destructive",
|
|
130
|
+
children: [
|
|
131
|
+
k,
|
|
132
|
+
" ",
|
|
133
|
+
/* @__PURE__ */ g("button", {
|
|
134
|
+
type: "button",
|
|
135
|
+
className: "underline",
|
|
136
|
+
onClick: () => {
|
|
137
|
+
j.current = null, A(null), I(M.current);
|
|
138
|
+
},
|
|
139
|
+
children: "Dismiss"
|
|
140
|
+
})
|
|
141
|
+
]
|
|
142
|
+
}),
|
|
143
|
+
D.length > 0 && /* @__PURE__ */ g("ul", {
|
|
144
|
+
className: "flex flex-wrap gap-1.5",
|
|
145
|
+
"data-testid": `${S}-pending-attachments`,
|
|
146
|
+
"aria-label": "Files attached to this comment",
|
|
147
|
+
children: D.map((e) => /* @__PURE__ */ g("li", { children: /* @__PURE__ */ g(C, {
|
|
148
|
+
item: e,
|
|
149
|
+
disabled: b,
|
|
150
|
+
onInsertImage: f,
|
|
151
|
+
onRetry: () => V(e.tempId),
|
|
152
|
+
retryDisabled: z,
|
|
153
|
+
onRemove: () => H(e.tempId)
|
|
154
|
+
}) }, e.tempId))
|
|
155
|
+
})
|
|
156
|
+
]
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
function C({ item: n, disabled: r, onInsertImage: i, onRetry: a, retryDisabled: o, onRemove: s }) {
|
|
160
|
+
let c = n.status === "error", l = n.status === "ready" && n.file.type.startsWith("image/") ? n.fileId : null;
|
|
161
|
+
return /* @__PURE__ */ _("span", {
|
|
162
|
+
className: `inline-flex max-w-[16rem] items-center gap-1.5 rounded-md border px-2 py-1 text-xs ${c ? "border-destructive/50 text-destructive" : "border-border-default"}`,
|
|
163
|
+
"data-testid": "pending-attachment",
|
|
164
|
+
children: [
|
|
165
|
+
n.status === "uploading" || n.status === "finalizing" ? /* @__PURE__ */ g(f, {
|
|
166
|
+
className: "h-3.5 w-3.5 shrink-0 animate-spin",
|
|
167
|
+
"aria-hidden": "true"
|
|
168
|
+
}) : t(n.file.type || "application/octet-stream"),
|
|
169
|
+
/* @__PURE__ */ g("span", {
|
|
170
|
+
className: "truncate",
|
|
171
|
+
children: n.file.name
|
|
172
|
+
}),
|
|
173
|
+
/* @__PURE__ */ g("span", {
|
|
174
|
+
className: "shrink-0 text-muted-foreground",
|
|
175
|
+
children: e(n.file.size)
|
|
176
|
+
}),
|
|
177
|
+
n.status === "finalizing" && /* @__PURE__ */ g("span", {
|
|
178
|
+
className: "shrink-0",
|
|
179
|
+
children: "Finalizing…"
|
|
180
|
+
}),
|
|
181
|
+
c && /* @__PURE__ */ _("span", {
|
|
182
|
+
className: "shrink-0 truncate",
|
|
183
|
+
role: "alert",
|
|
184
|
+
children: ["· ", n.error ?? "Upload failed"]
|
|
185
|
+
}),
|
|
186
|
+
c && /* @__PURE__ */ g("button", {
|
|
187
|
+
type: "button",
|
|
188
|
+
className: "shrink-0 text-primary hover:underline disabled:opacity-50",
|
|
189
|
+
disabled: r || o,
|
|
190
|
+
onClick: a,
|
|
191
|
+
title: o ? "Remove another attachment to retry" : void 0,
|
|
192
|
+
children: n.completionSession ? "Retry finalizing" : "Retry upload"
|
|
193
|
+
}),
|
|
194
|
+
l && i && /* @__PURE__ */ g("button", {
|
|
195
|
+
type: "button",
|
|
196
|
+
className: "shrink-0 text-primary hover:underline",
|
|
197
|
+
disabled: r,
|
|
198
|
+
onClick: () => i(l, n.file.name),
|
|
199
|
+
children: "Insert image"
|
|
200
|
+
}),
|
|
201
|
+
/* @__PURE__ */ g("button", {
|
|
202
|
+
type: "button",
|
|
203
|
+
"aria-label": `Remove ${n.file.name}`,
|
|
204
|
+
className: "shrink-0 rounded-sm text-muted-foreground hover:text-foreground",
|
|
205
|
+
disabled: r || n.status === "finalizing",
|
|
206
|
+
onClick: s,
|
|
207
|
+
children: /* @__PURE__ */ g(m, {
|
|
208
|
+
className: "h-3 w-3",
|
|
209
|
+
"aria-hidden": "true"
|
|
210
|
+
})
|
|
211
|
+
})
|
|
212
|
+
]
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
//#endregion
|
|
216
|
+
export { S as CommentAttachmentUpload };
|
|
217
|
+
|
|
218
|
+
//# sourceMappingURL=CommentAttachmentUpload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentAttachmentUpload.js","names":[],"sources":["../../../src/planmagnet/comments/CommentAttachmentUpload.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\nimport { useApolloClient } from '@apollo/client/react';\nimport { Loader2, Paperclip, X } from 'lucide-react';\nimport { Button } from '@burdenoff/fe-libs/ui';\nimport { formatBytes, mimeTypeIcon } from './fileDisplay';\nimport {\n MAX_COMMENT_ATTACHMENT_BYTES,\n UploadCompletionUncertainError,\n commentUploadErrorMessage,\n createCommentAttachmentUploadTransport,\n retryCommentAttachmentCompletion,\n uploadCommentAttachment,\n type CompletionSession,\n} from './commentAttachmentUploadClient';\n\n/**\n * CWF-12: Upload add/reply attachments into the creator's PRIVATE Files root, not a shared\n * path-based folder. Files chooses direct or multipart at 5 MiB; completion retries only\n * against the original session. Errors remain visible and block posting until resolved.\n */\n\n/** Mirrors `PlanmagnetAdd*CommentInput`'s server-side ten-file cap. */\nconst MAX_ATTACHMENTS = 10;\n\ntype AttachmentStatus = 'queued' | 'uploading' | 'finalizing' | 'ready' | 'error';\n\ninterface PendingAttachment {\n tempId: string;\n file: File;\n status: AttachmentStatus;\n error: string | null;\n fileId: string | null;\n /** Only retained after an ambiguous completion; retry must never re-upload the bytes. */\n completionSession: CompletionSession | null;\n}\n\nlet tempSeq = 0;\nfunction nextTempId(): string {\n tempSeq += 1;\n return `pending-attachment-${Date.now()}-${tempSeq}`;\n}\n\nexport interface CommentAttachmentUploadState {\n /** Successfully-uploaded file ids, in attach order — pass straight through as `attachmentFileIds`. */\n fileIds: string[];\n /** True while an attachment is queued, uploading, finalizing, failed, or a selection was rejected.\n * The composer must not post until the author retries/removes failures or dismisses a rejected selection. */\n pending: boolean;\n}\n\nexport interface CommentAttachmentUploadProps {\n onChange: (state: CommentAttachmentUploadState) => void;\n onInsertImage?: (fileId: string, filename: string) => void;\n onRemoveImage?: (fileId: string) => void;\n disabled?: boolean;\n idPrefix: string;\n}\n\nexport function CommentAttachmentUpload({\n onChange,\n onInsertImage,\n onRemoveImage,\n disabled,\n idPrefix,\n}: CommentAttachmentUploadProps) {\n const client = useApolloClient();\n const transport = useMemo(() => createCommentAttachmentUploadTransport(client), [client]);\n const inputRef = useRef<HTMLInputElement>(null);\n // `items` is what renders. `itemsRef` mirrors it in lockstep (every `commit` below writes both) purely so the\n // sequential upload loop — running across `await` boundaries, outside any render — always reads what is\n // actually attached right now (including files attached mid-upload, or removed while their own upload is\n // still in flight) instead of a stale closure over the array from when the loop began. `itemsRef` is never\n // read from the render body: `react-hooks/refs` (this repo's full React Compiler lint set) rejects that, and\n // correctly — a ref read during render isn't reactive, so React would have no reason to re-render on it.\n const [items, setItems] = useState<PendingAttachment[]>([]);\n const [selectionError, setSelectionError] = useState<string | null>(null);\n const selectionErrorRef = useRef<string | null>(null);\n const itemsRef = useRef<PendingAttachment[]>([]);\n const uploadingRef = useRef(false);\n const mountedRef = useRef(false);\n const controllersRef = useRef(new Map<string, AbortController>());\n\n useEffect(() => {\n mountedRef.current = true;\n const controllers = controllersRef.current;\n return () => {\n mountedRef.current = false;\n controllers.forEach((controller) => controller.abort());\n controllers.clear();\n };\n }, []);\n\n const commit = (next: PendingAttachment[]) => {\n if (!mountedRef.current) return;\n itemsRef.current = next;\n setItems(next);\n onChange({\n fileIds: next.flatMap((item) =>\n item.status === 'ready' && item.fileId ? [item.fileId] : []\n ),\n pending: selectionErrorRef.current !== null || next.some((item) => item.status !== 'ready'),\n });\n };\n\n const runQueue = async () => {\n if (uploadingRef.current) return; // Already draining — that loop will pick up anything just added.\n uploadingRef.current = true;\n try {\n for (;;) {\n if (!mountedRef.current) break;\n const next = itemsRef.current.find((item) => item.status === 'queued');\n if (!next) break;\n const controller = new AbortController();\n controllersRef.current.set(next.tempId, controller);\n commit(\n itemsRef.current.map(\n (item): PendingAttachment =>\n item.tempId === next.tempId\n ? { ...item, status: next.completionSession ? 'finalizing' : 'uploading' }\n : item\n )\n );\n try {\n const fileId = next.completionSession\n ? await retryCommentAttachmentCompletion(\n next.completionSession,\n transport,\n controller.signal\n )\n : await uploadCommentAttachment(next.file, transport, controller.signal, () => {\n commit(\n itemsRef.current.map(\n (item): PendingAttachment =>\n item.tempId === next.tempId ? { ...item, status: 'finalizing' } : item\n )\n );\n });\n // No-op if the attachment was removed during its upload. Finalization cannot be safely\n // canceled after the mutation has been sent, so Remove is disabled while finalizing.\n commit(\n itemsRef.current.map(\n (item): PendingAttachment =>\n item.tempId === next.tempId\n ? { ...item, status: 'ready', fileId, error: null, completionSession: null }\n : item\n )\n );\n } catch (error) {\n if (!controller.signal.aborted || error instanceof UploadCompletionUncertainError) {\n commit(\n itemsRef.current.map(\n (item): PendingAttachment =>\n item.tempId === next.tempId\n ? {\n ...item,\n status: 'error',\n error: commentUploadErrorMessage(error),\n completionSession:\n error instanceof UploadCompletionUncertainError\n ? error.session\n : item.completionSession,\n }\n : item\n )\n );\n }\n } finally {\n controllersRef.current.delete(next.tempId);\n }\n }\n } finally {\n uploadingRef.current = false;\n }\n };\n\n // Render-time derivation from `items` (state), never from `itemsRef` — see the comment on `itemsRef` above.\n const countedTowardCap = items.filter((i) => i.status !== 'error').length;\n const atCap = countedTowardCap >= MAX_ATTACHMENTS;\n\n const handleFiles = (files: FileList | null) => {\n if (!files || files.length === 0) return;\n // Reads itemsRef (not `items`/`countedTowardCap`) deliberately: this handler can fire again before a\n // previous commit's re-render has landed, and itemsRef is always the latest value, synchronously.\n const roomLeft =\n MAX_ATTACHMENTS - itemsRef.current.filter((item) => item.status !== 'error').length;\n const selected = Array.from(files);\n const allowed = selected.filter((file) => file.size <= MAX_COMMENT_ATTACHMENT_BYTES);\n const queued: PendingAttachment[] = allowed.slice(0, Math.max(0, roomLeft)).map((file) => ({\n tempId: nextTempId(),\n file,\n status: 'queued',\n error: null,\n fileId: null,\n completionSession: null,\n }));\n const rejectedForSize = selected.length !== allowed.length;\n const rejectedForCount = allowed.length > queued.length;\n const rejection =\n [\n rejectedForSize\n ? `Each attachment must be at most ${formatBytes(MAX_COMMENT_ATTACHMENT_BYTES)}. The larger files were not attached.`\n : null,\n rejectedForCount\n ? `Only ${MAX_ATTACHMENTS} attachments can be added to one comment. The extra files were not attached.`\n : null,\n ]\n .filter(Boolean)\n .join(' ') || null;\n // A rejected selection remains visible (and blocks posting) even if a later\n // selection succeeds. The author must explicitly dismiss the omitted files.\n if (rejection) {\n const previous = selectionErrorRef.current;\n selectionErrorRef.current =\n previous && !previous.includes(rejection)\n ? `${previous} ${rejection}`\n : (previous ?? rejection);\n setSelectionError(selectionErrorRef.current);\n }\n commit([...itemsRef.current, ...queued]);\n if (queued.length > 0) void runQueue();\n if (inputRef.current) inputRef.current.value = '';\n };\n\n const retryItem = (tempId: string) => {\n // Errors do not count towards the selection cap, but retrying one must not exceed it.\n if (itemsRef.current.filter((item) => item.status !== 'error').length >= MAX_ATTACHMENTS)\n return;\n commit(\n itemsRef.current.map(\n (item): PendingAttachment =>\n item.tempId === tempId && item.status === 'error'\n ? { ...item, status: 'queued', error: null }\n : item\n )\n );\n void runQueue();\n };\n\n const removeItem = (tempId: string) => {\n const item = itemsRef.current.find((entry) => entry.tempId === tempId);\n if (item?.status === 'finalizing') return; // Finalization may already have committed: never abort it.\n controllersRef.current.get(tempId)?.abort();\n if (item?.fileId && item.file.type.startsWith('image/')) onRemoveImage?.(item.fileId);\n commit(itemsRef.current.filter((entry) => entry.tempId !== tempId));\n };\n\n return (\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center gap-2\">\n <input\n ref={inputRef}\n id={`${idPrefix}-attach-input`}\n type=\"file\"\n multiple\n className=\"sr-only\"\n disabled={disabled || atCap}\n onChange={(e) => handleFiles(e.target.files)}\n />\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n className=\"h-7 px-2 text-xs\"\n disabled={disabled || atCap}\n onClick={() => inputRef.current?.click()}\n data-testid={`${idPrefix}-attach-files`}\n >\n <Paperclip className=\"mr-1 h-3.5 w-3.5\" aria-hidden=\"true\" />\n Attach files\n </Button>\n <span className=\"text-xs text-muted-foreground\">\n {items.length > 0\n ? `${countedTowardCap}/${MAX_ATTACHMENTS} attached`\n : `Up to ${MAX_ATTACHMENTS} files`}\n </span>\n </div>\n\n {selectionError && (\n <p role=\"alert\" className=\"text-xs text-destructive\">\n {selectionError}{' '}\n <button\n type=\"button\"\n className=\"underline\"\n onClick={() => {\n selectionErrorRef.current = null;\n setSelectionError(null);\n commit(itemsRef.current);\n }}\n >\n Dismiss\n </button>\n </p>\n )}\n {items.length > 0 && (\n <ul\n className=\"flex flex-wrap gap-1.5\"\n data-testid={`${idPrefix}-pending-attachments`}\n aria-label=\"Files attached to this comment\"\n >\n {items.map((item) => (\n <li key={item.tempId}>\n <PendingAttachmentChip\n item={item}\n disabled={disabled}\n onInsertImage={onInsertImage}\n onRetry={() => retryItem(item.tempId)}\n retryDisabled={atCap}\n onRemove={() => removeItem(item.tempId)}\n />\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\nfunction PendingAttachmentChip({\n item,\n disabled,\n onInsertImage,\n onRetry,\n retryDisabled,\n onRemove,\n}: {\n item: PendingAttachment;\n disabled?: boolean;\n onInsertImage?: (fileId: string, filename: string) => void;\n onRetry: () => void;\n retryDisabled: boolean;\n onRemove: () => void;\n}) {\n const errored = item.status === 'error';\n const imageFileId =\n item.status === 'ready' && item.file.type.startsWith('image/') ? item.fileId : null;\n return (\n <span\n className={`inline-flex max-w-[16rem] items-center gap-1.5 rounded-md border px-2 py-1 text-xs ${\n errored ? 'border-destructive/50 text-destructive' : 'border-border-default'\n }`}\n data-testid=\"pending-attachment\"\n >\n {item.status === 'uploading' || item.status === 'finalizing' ? (\n <Loader2 className=\"h-3.5 w-3.5 shrink-0 animate-spin\" aria-hidden=\"true\" />\n ) : (\n mimeTypeIcon(item.file.type || 'application/octet-stream')\n )}\n <span className=\"truncate\">{item.file.name}</span>\n <span className=\"shrink-0 text-muted-foreground\">{formatBytes(item.file.size)}</span>\n {item.status === 'finalizing' && <span className=\"shrink-0\">Finalizing…</span>}\n {errored && (\n <span className=\"shrink-0 truncate\" role=\"alert\">\n · {item.error ?? 'Upload failed'}\n </span>\n )}\n {errored && (\n <button\n type=\"button\"\n className=\"shrink-0 text-primary hover:underline disabled:opacity-50\"\n disabled={disabled || retryDisabled}\n onClick={onRetry}\n title={retryDisabled ? 'Remove another attachment to retry' : undefined}\n >\n {item.completionSession ? 'Retry finalizing' : 'Retry upload'}\n </button>\n )}\n {imageFileId && onInsertImage && (\n <button\n type=\"button\"\n className=\"shrink-0 text-primary hover:underline\"\n disabled={disabled}\n onClick={() => onInsertImage(imageFileId, item.file.name)}\n >\n Insert image\n </button>\n )}\n <button\n type=\"button\"\n aria-label={`Remove ${item.file.name}`}\n className=\"shrink-0 rounded-sm text-muted-foreground hover:text-foreground\"\n disabled={disabled || item.status === 'finalizing'}\n onClick={onRemove}\n >\n <X className=\"h-3 w-3\" aria-hidden=\"true\" />\n </button>\n </span>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CommentFileTarget } from './useCommentFileUrl';
|
|
2
|
+
|
|
3
|
+
/** Server-snapshotted metadata; the attachment ID, not its raw Files ID, authorizes each download. */
|
|
4
|
+
export interface CommentAttachmentSummary {
|
|
5
|
+
id: string;
|
|
6
|
+
fileId: string;
|
|
7
|
+
name: string;
|
|
8
|
+
mimeType: string;
|
|
9
|
+
size: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function CommentAttachments({ attachments, target, }: {
|
|
12
|
+
attachments: CommentAttachmentSummary[];
|
|
13
|
+
target: CommentFileTarget;
|
|
14
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
15
|
+
//# sourceMappingURL=CommentAttachments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentAttachments.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/comments/CommentAttachments.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEhF,sGAAsG;AACtG,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,kBAAkB,CAAC,EACjC,WAAW,EACX,MAAM,GACP,EAAE;IACD,WAAW,EAAE,wBAAwB,EAAE,CAAC;IACxC,MAAM,EAAE,iBAAiB,CAAC;CAC3B,kDAWA"}
|