@burdenoff/microfe-planmagnet 2026.928.9 → 2026.928.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
  2. package/dist/planmagnet/PlanMagnetRoot.js +1 -1
  3. package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
  4. package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
  5. package/dist/planmagnet/PlanMagnetRoutes.js +217 -209
  6. package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
  7. package/dist/planmagnet/pages/ProductsCreateProductPagePage.d.ts.map +1 -1
  8. package/dist/planmagnet/pages/ProductsCreateProductPagePage.js +198 -99
  9. package/dist/planmagnet/pages/ProductsCreateProductPagePage.js.map +1 -1
  10. package/dist/planmagnet/pages/ProductsEditProductPagePage.d.ts.map +1 -1
  11. package/dist/planmagnet/pages/ProductsEditProductPagePage.js +260 -170
  12. package/dist/planmagnet/pages/ProductsEditProductPagePage.js.map +1 -1
  13. package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.d.ts +2 -0
  14. package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.d.ts.map +1 -0
  15. package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.js +283 -0
  16. package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.js.map +1 -0
  17. package/dist/planmagnet/pages/ProductsProductDetailPagePage.d.ts.map +1 -1
  18. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js +166 -246
  19. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js.map +1 -1
  20. package/dist/planmagnet/pages/ProductsProductsPagePage.d.ts.map +1 -1
  21. package/dist/planmagnet/pages/ProductsProductsPagePage.js +147 -117
  22. package/dist/planmagnet/pages/ProductsProductsPagePage.js.map +1 -1
  23. package/dist/planmagnet/product/ProductControls.d.ts +52 -0
  24. package/dist/planmagnet/product/ProductControls.d.ts.map +1 -0
  25. package/dist/planmagnet/product/ProductControls.js +780 -0
  26. package/dist/planmagnet/product/ProductControls.js.map +1 -0
  27. package/dist/planmagnet/roadmaps/RoadmapControls.d.ts.map +1 -1
  28. package/dist/planmagnet/roadmaps/RoadmapControls.js +1 -1
  29. package/dist/planmagnet/roadmaps/RoadmapControls.js.map +1 -1
  30. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"PlanMagnetRoot.d.ts","sourceRoot":"","sources":["../../src/planmagnet/PlanMagnetRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAa,MAAM,OAAO,CAAC;AA0B3C,OAAO,KAAK,EAAW,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAU5D,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,mBAAmB,CAuQlD,CAAC"}
1
+ {"version":3,"file":"PlanMagnetRoot.d.ts","sourceRoot":"","sources":["../../src/planmagnet/PlanMagnetRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAa,MAAM,OAAO,CAAC;AA0B3C,OAAO,KAAK,EAAW,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAU5D,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,mBAAmB,CAqQlD,CAAC"}
@@ -36,7 +36,7 @@ var O = (t) => {
36
36
  {
37
37
  id: "planmagnet-products",
38
38
  label: A("planmagnet.nav.products", "Products"),
39
- path: a(k, "products/roadmaps-page"),
39
+ path: a(k, "products/products-page"),
40
40
  icon: /* @__PURE__ */ T(_, { size: 16 }),
41
41
  order: 2,
42
42
  children: [
@@ -1 +1 @@
1
- {"version":3,"file":"PlanMagnetRoot.js","names":[],"sources":["../../src/planmagnet/PlanMagnetRoot.tsx"],"sourcesContent":["import type { FC, ReactNode } from 'react';\nimport { useEffect } from 'react';\nimport {\n LayoutDashboard,\n Package,\n FolderKanban,\n CheckSquare,\n Zap,\n CalendarDays,\n Users,\n TrendingUp,\n Star,\n GitBranch,\n Map,\n Target,\n Flag,\n UserPlus,\n Briefcase,\n Swords,\n Bot,\n LayoutTemplate,\n} from 'lucide-react';\nimport { PlanMagnetProvider, usePlanMagnet } from './providers/PlanMagnetProvider';\nimport { PeopleProvider } from './people/People';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useTr } from '../shared/hooks/useTr';\nimport type { NavItem, PlanMagnetRootProps } from './types';\nimport { PlanMagnetRoutes } from './PlanMagnetRoutes';\nimport { joinPath } from './utils/navigation';\n\n/** Resolves user ids to names for every page, in one batch (see people/People.tsx). */\nfunction PlanMagnetPeople({ children }: { children: ReactNode }) {\n const { workspaceId } = usePlanMagnet();\n return <PeopleProvider workspaceId={workspaceId ?? undefined}>{children}</PeopleProvider>;\n}\n\nexport const PlanMagnetRoot: FC<PlanMagnetRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/' } = props;\n const tr = useTr();\n\n useEffect(() => {\n if (!registerNavItems) return;\n const navItem: NavItem = {\n id: 'planmagnet',\n label: tr('planmagnet.nav.root', 'PlanMagnet'),\n path: basePath,\n icon: <LayoutDashboard size={20} />,\n order: 80,\n group: 'products',\n children: [\n {\n id: 'planmagnet-dashboard',\n label: tr('planmagnet.nav.dashboard', 'Dashboard'),\n path: joinPath(basePath, 'dashboard/dashboard-page'),\n icon: <LayoutDashboard size={16} />,\n order: 1,\n },\n {\n id: 'planmagnet-products',\n label: tr('planmagnet.nav.products', 'Products'),\n // Nav rule (BUILD_PLAN P1.1): an entry needs a CAPABILITY_REGISTER row\n // that is not `not-built`. \"Product (vision, lifecycle, North Star)\" is\n // not-built — `products-page` lists roadmaps relabelled as products —\n // so the group opens on Roadmaps, and \"All Products\" / \"Create Product\"\n // are hidden until a Product entity exists. Routes are kept, so old\n // links still resolve.\n path: joinPath(basePath, 'products/roadmaps-page'),\n icon: <Package size={16} />,\n order: 2,\n children: [\n {\n id: 'planmagnet-features',\n label: tr('planmagnet.nav.products.features', 'Features'),\n path: joinPath(basePath, 'products/features-page'),\n icon: <Star size={16} />,\n },\n {\n id: 'planmagnet-releases',\n label: tr('planmagnet.nav.products.releases', 'Releases'),\n path: joinPath(basePath, 'products/releases-page'),\n icon: <GitBranch size={16} />,\n },\n {\n id: 'planmagnet-roadmaps',\n label: tr('planmagnet.nav.products.roadmaps', 'Roadmaps'),\n path: joinPath(basePath, 'products/roadmaps-page'),\n icon: <Map size={16} />,\n },\n {\n // BOFF-8047: Portfolios and Programs were `api-only` — full CRUD existed in the service with\n // zero routes anywhere in the UI.\n id: 'planmagnet-portfolios',\n label: tr('planmagnet.nav.products.portfolios', 'Portfolios'),\n path: joinPath(basePath, 'products/portfolios-page'),\n icon: <Briefcase size={16} />,\n },\n {\n id: 'planmagnet-programs',\n label: tr('planmagnet.nav.products.programs', 'Programs'),\n path: joinPath(basePath, 'products/programs-page'),\n icon: <FolderKanban size={16} />,\n },\n {\n id: 'planmagnet-competitors',\n label: tr('planmagnet.nav.products.competitors', 'Competitors'),\n path: joinPath(basePath, 'products/competitors-page'),\n icon: <Swords size={16} />,\n },\n ],\n },\n {\n id: 'planmagnet-projects',\n label: tr('planmagnet.nav.projects', 'Projects'),\n path: joinPath(basePath, 'projects/projects-page'),\n icon: <FolderKanban size={16} />,\n order: 3,\n children: [\n {\n id: 'planmagnet-projects-all',\n label: tr('planmagnet.nav.projects.all', 'All Projects'),\n path: joinPath(basePath, 'projects/projects-page'),\n icon: <FolderKanban size={16} />,\n },\n {\n id: 'planmagnet-projects-active',\n label: tr('planmagnet.nav.projects.active', 'Active Projects'),\n path: joinPath(basePath, 'projects/active-projects-page'),\n icon: <TrendingUp size={16} />,\n },\n {\n id: 'planmagnet-projects-create',\n label: tr('planmagnet.nav.projects.create', 'Create Project'),\n path: joinPath(basePath, 'projects/create-project-page'),\n icon: <FolderKanban size={16} />,\n },\n {\n id: 'planmagnet-milestones',\n label: tr('planmagnet.nav.projects.milestones', 'Milestones'),\n path: joinPath(basePath, 'projects/milestones-page'),\n icon: <Target size={16} />,\n },\n {\n id: 'planmagnet-planning',\n label: tr('planmagnet.nav.projects.planning', 'Planning'),\n path: joinPath(basePath, 'projects/planning-page'),\n icon: <CalendarDays size={16} />,\n },\n {\n id: 'planmagnet-templates',\n label: tr('planmagnet.nav.projects.templates', 'Templates'),\n path: joinPath(basePath, 'templates/templates-page'),\n icon: <LayoutTemplate size={16} />,\n },\n ],\n },\n {\n id: 'planmagnet-goals',\n label: tr('planmagnet.nav.goals', 'Goals (OKRs)'),\n path: joinPath(basePath, 'goals/goals-page'),\n icon: <Flag size={16} />,\n order: 3.5,\n children: [\n {\n id: 'planmagnet-goals-all',\n label: tr('planmagnet.nav.goals.all', 'All Objectives'),\n path: joinPath(basePath, 'goals/goals-page'),\n icon: <Flag size={16} />,\n },\n {\n id: 'planmagnet-goals-create',\n label: tr('planmagnet.nav.goals.create', 'Create Objective'),\n path: joinPath(basePath, 'goals/create-objective-page'),\n icon: <Flag size={16} />,\n },\n ],\n },\n {\n id: 'planmagnet-tasks',\n label: tr('planmagnet.nav.tasks', 'Tasks'),\n path: joinPath(basePath, 'tasks/tasks-page'),\n icon: <CheckSquare size={16} />,\n order: 4,\n children: [\n {\n id: 'planmagnet-tasks-board',\n label: tr('planmagnet.nav.tasks.board', 'Task Board'),\n path: joinPath(basePath, 'tasks/tasks-page'),\n icon: <CheckSquare size={16} />,\n },\n {\n id: 'planmagnet-tasks-create',\n label: tr('planmagnet.nav.tasks.create', 'Create Task'),\n path: joinPath(basePath, 'tasks/create-task-page'),\n icon: <CheckSquare size={16} />,\n },\n ],\n },\n {\n id: 'planmagnet-sprints',\n label: tr('planmagnet.nav.sprints', 'Sprints'),\n path: joinPath(basePath, 'sprints/start-sprint-page'),\n icon: <Zap size={16} />,\n order: 5,\n },\n {\n id: 'planmagnet-automation',\n label: tr('planmagnet.nav.automation', 'Automation'),\n path: joinPath(basePath, 'automation/automation-rules-page'),\n icon: <Bot size={16} />,\n order: 5.5,\n children: [\n {\n id: 'planmagnet-automation-rules',\n label: tr('planmagnet.nav.automation.rules', 'Rules'),\n path: joinPath(basePath, 'automation/automation-rules-page'),\n icon: <Bot size={16} />,\n },\n {\n id: 'planmagnet-automation-create',\n label: tr('planmagnet.nav.automation.create', 'New rule'),\n path: joinPath(basePath, 'automation/create-automation-rule-page'),\n icon: <Bot size={16} />,\n },\n ],\n },\n // Reports hidden (register: `not-built` — the page fabricates rows client-side\n // and Save runs no mutation). Routes kept.\n {\n // BOFF-8044: \"Team roster\" (a workspace directory, not a team) is relabelled \"Members\" so\n // it stops colliding with the real Team entity's own \"Teams\" list added alongside it.\n // \"Create Team\" is no longer hidden — the Team model now exists. \"Invite Member\" sends a\n // real invitation through the platform's createInvitation with a PlanMagnet access level (H12).\n id: 'planmagnet-team',\n label: tr('planmagnet.nav.team', 'Team'),\n path: joinPath(basePath, 'team/team-page'),\n icon: <Users size={16} />,\n order: 10,\n children: [\n {\n id: 'planmagnet-teams',\n label: tr('planmagnet.nav.team.teams', 'Teams'),\n path: joinPath(basePath, 'team/teams-page'),\n icon: <Users size={16} />,\n },\n {\n // BOFF-8044: a NEW key, not a relabel of 'planmagnet.nav.team.roster' — a locale that\n // already had that key translated as \"Team roster\" would otherwise keep showing the\n // old wording regardless of this fallback, since useTr only falls back when the\n // provider has no translation for the KEY at all.\n id: 'planmagnet-team-roster',\n label: tr('planmagnet.nav.team.members', 'Members'),\n path: joinPath(basePath, 'team/team-page'),\n icon: <Users size={16} />,\n },\n {\n id: 'planmagnet-team-invite',\n label: tr('planmagnet.nav.team.invite', 'Invite member'),\n path: joinPath(basePath, 'team/invite-member-page'),\n icon: <UserPlus size={16} />,\n },\n ],\n },\n // \"Workspace\" hidden: `create-workspace-page` navigated home on submit and created\n // nothing (a false success). Workspaces are created from the shell's workspace\n // switcher, which is the platform's real flow. Route kept; page now says so.\n {\n id: 'planmagnet-analytics',\n label: tr('planmagnet.nav.analytics', 'Analytics'),\n path: joinPath(basePath, 'analytics/analytics-page'),\n icon: <TrendingUp size={16} />,\n order: 12,\n },\n ],\n };\n return registerNavItems(navItem);\n }, [registerNavItems, basePath, tr]);\n\n useEffect(() => {\n if (!registerFooterItems) return;\n return registerFooterItems([\n {\n id: 'planmagnet-status',\n label: tr('planmagnet.footer.ready', 'PlanMagnet Ready'),\n type: 'status',\n section: 'left',\n order: 10,\n },\n ]);\n }, [registerFooterItems, tr]);\n\n return (\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <PlanMagnetProvider {...props}>\n <PlanMagnetPeople>\n <PlanMagnetRoutes />\n </PlanMagnetPeople>\n </PlanMagnetProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"PlanMagnetRoot.js","names":[],"sources":["../../src/planmagnet/PlanMagnetRoot.tsx"],"sourcesContent":["import type { FC, ReactNode } from 'react';\nimport { useEffect } from 'react';\nimport {\n LayoutDashboard,\n Package,\n FolderKanban,\n CheckSquare,\n Zap,\n CalendarDays,\n Users,\n TrendingUp,\n Star,\n GitBranch,\n Map,\n Target,\n Flag,\n UserPlus,\n Briefcase,\n Swords,\n Bot,\n LayoutTemplate,\n} from 'lucide-react';\nimport { PlanMagnetProvider, usePlanMagnet } from './providers/PlanMagnetProvider';\nimport { PeopleProvider } from './people/People';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useTr } from '../shared/hooks/useTr';\nimport type { NavItem, PlanMagnetRootProps } from './types';\nimport { PlanMagnetRoutes } from './PlanMagnetRoutes';\nimport { joinPath } from './utils/navigation';\n\n/** Resolves user ids to names for every page, in one batch (see people/People.tsx). */\nfunction PlanMagnetPeople({ children }: { children: ReactNode }) {\n const { workspaceId } = usePlanMagnet();\n return <PeopleProvider workspaceId={workspaceId ?? undefined}>{children}</PeopleProvider>;\n}\n\nexport const PlanMagnetRoot: FC<PlanMagnetRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/' } = props;\n const tr = useTr();\n\n useEffect(() => {\n if (!registerNavItems) return;\n const navItem: NavItem = {\n id: 'planmagnet',\n label: tr('planmagnet.nav.root', 'PlanMagnet'),\n path: basePath,\n icon: <LayoutDashboard size={20} />,\n order: 80,\n group: 'products',\n children: [\n {\n id: 'planmagnet-dashboard',\n label: tr('planmagnet.nav.dashboard', 'Dashboard'),\n path: joinPath(basePath, 'dashboard/dashboard-page'),\n icon: <LayoutDashboard size={16} />,\n order: 1,\n },\n {\n id: 'planmagnet-products',\n label: tr('planmagnet.nav.products', 'Products'),\n // BOFF-8045: Product is now a real entity (vision, lifecycle stage, North\n // Star) distinct from Roadmap — `products-page` shows real Products, and\n // the group root points there again. \"Roadmaps\" stays as its own child\n // below, now genuinely about roadmaps rather than products relabelled.\n path: joinPath(basePath, 'products/products-page'),\n icon: <Package size={16} />,\n order: 2,\n children: [\n {\n id: 'planmagnet-features',\n label: tr('planmagnet.nav.products.features', 'Features'),\n path: joinPath(basePath, 'products/features-page'),\n icon: <Star size={16} />,\n },\n {\n id: 'planmagnet-releases',\n label: tr('planmagnet.nav.products.releases', 'Releases'),\n path: joinPath(basePath, 'products/releases-page'),\n icon: <GitBranch size={16} />,\n },\n {\n id: 'planmagnet-roadmaps',\n label: tr('planmagnet.nav.products.roadmaps', 'Roadmaps'),\n path: joinPath(basePath, 'products/roadmaps-page'),\n icon: <Map size={16} />,\n },\n {\n // BOFF-8047: Portfolios and Programs were `api-only` — full CRUD existed in the service with\n // zero routes anywhere in the UI.\n id: 'planmagnet-portfolios',\n label: tr('planmagnet.nav.products.portfolios', 'Portfolios'),\n path: joinPath(basePath, 'products/portfolios-page'),\n icon: <Briefcase size={16} />,\n },\n {\n id: 'planmagnet-programs',\n label: tr('planmagnet.nav.products.programs', 'Programs'),\n path: joinPath(basePath, 'products/programs-page'),\n icon: <FolderKanban size={16} />,\n },\n {\n id: 'planmagnet-competitors',\n label: tr('planmagnet.nav.products.competitors', 'Competitors'),\n path: joinPath(basePath, 'products/competitors-page'),\n icon: <Swords size={16} />,\n },\n ],\n },\n {\n id: 'planmagnet-projects',\n label: tr('planmagnet.nav.projects', 'Projects'),\n path: joinPath(basePath, 'projects/projects-page'),\n icon: <FolderKanban size={16} />,\n order: 3,\n children: [\n {\n id: 'planmagnet-projects-all',\n label: tr('planmagnet.nav.projects.all', 'All Projects'),\n path: joinPath(basePath, 'projects/projects-page'),\n icon: <FolderKanban size={16} />,\n },\n {\n id: 'planmagnet-projects-active',\n label: tr('planmagnet.nav.projects.active', 'Active Projects'),\n path: joinPath(basePath, 'projects/active-projects-page'),\n icon: <TrendingUp size={16} />,\n },\n {\n id: 'planmagnet-projects-create',\n label: tr('planmagnet.nav.projects.create', 'Create Project'),\n path: joinPath(basePath, 'projects/create-project-page'),\n icon: <FolderKanban size={16} />,\n },\n {\n id: 'planmagnet-milestones',\n label: tr('planmagnet.nav.projects.milestones', 'Milestones'),\n path: joinPath(basePath, 'projects/milestones-page'),\n icon: <Target size={16} />,\n },\n {\n id: 'planmagnet-planning',\n label: tr('planmagnet.nav.projects.planning', 'Planning'),\n path: joinPath(basePath, 'projects/planning-page'),\n icon: <CalendarDays size={16} />,\n },\n {\n id: 'planmagnet-templates',\n label: tr('planmagnet.nav.projects.templates', 'Templates'),\n path: joinPath(basePath, 'templates/templates-page'),\n icon: <LayoutTemplate size={16} />,\n },\n ],\n },\n {\n id: 'planmagnet-goals',\n label: tr('planmagnet.nav.goals', 'Goals (OKRs)'),\n path: joinPath(basePath, 'goals/goals-page'),\n icon: <Flag size={16} />,\n order: 3.5,\n children: [\n {\n id: 'planmagnet-goals-all',\n label: tr('planmagnet.nav.goals.all', 'All Objectives'),\n path: joinPath(basePath, 'goals/goals-page'),\n icon: <Flag size={16} />,\n },\n {\n id: 'planmagnet-goals-create',\n label: tr('planmagnet.nav.goals.create', 'Create Objective'),\n path: joinPath(basePath, 'goals/create-objective-page'),\n icon: <Flag size={16} />,\n },\n ],\n },\n {\n id: 'planmagnet-tasks',\n label: tr('planmagnet.nav.tasks', 'Tasks'),\n path: joinPath(basePath, 'tasks/tasks-page'),\n icon: <CheckSquare size={16} />,\n order: 4,\n children: [\n {\n id: 'planmagnet-tasks-board',\n label: tr('planmagnet.nav.tasks.board', 'Task Board'),\n path: joinPath(basePath, 'tasks/tasks-page'),\n icon: <CheckSquare size={16} />,\n },\n {\n id: 'planmagnet-tasks-create',\n label: tr('planmagnet.nav.tasks.create', 'Create Task'),\n path: joinPath(basePath, 'tasks/create-task-page'),\n icon: <CheckSquare size={16} />,\n },\n ],\n },\n {\n id: 'planmagnet-sprints',\n label: tr('planmagnet.nav.sprints', 'Sprints'),\n path: joinPath(basePath, 'sprints/start-sprint-page'),\n icon: <Zap size={16} />,\n order: 5,\n },\n {\n id: 'planmagnet-automation',\n label: tr('planmagnet.nav.automation', 'Automation'),\n path: joinPath(basePath, 'automation/automation-rules-page'),\n icon: <Bot size={16} />,\n order: 5.5,\n children: [\n {\n id: 'planmagnet-automation-rules',\n label: tr('planmagnet.nav.automation.rules', 'Rules'),\n path: joinPath(basePath, 'automation/automation-rules-page'),\n icon: <Bot size={16} />,\n },\n {\n id: 'planmagnet-automation-create',\n label: tr('planmagnet.nav.automation.create', 'New rule'),\n path: joinPath(basePath, 'automation/create-automation-rule-page'),\n icon: <Bot size={16} />,\n },\n ],\n },\n // Reports hidden (register: `not-built` — the page fabricates rows client-side\n // and Save runs no mutation). Routes kept.\n {\n // BOFF-8044: \"Team roster\" (a workspace directory, not a team) is relabelled \"Members\" so\n // it stops colliding with the real Team entity's own \"Teams\" list added alongside it.\n // \"Create Team\" is no longer hidden — the Team model now exists. \"Invite Member\" sends a\n // real invitation through the platform's createInvitation with a PlanMagnet access level (H12).\n id: 'planmagnet-team',\n label: tr('planmagnet.nav.team', 'Team'),\n path: joinPath(basePath, 'team/team-page'),\n icon: <Users size={16} />,\n order: 10,\n children: [\n {\n id: 'planmagnet-teams',\n label: tr('planmagnet.nav.team.teams', 'Teams'),\n path: joinPath(basePath, 'team/teams-page'),\n icon: <Users size={16} />,\n },\n {\n // BOFF-8044: a NEW key, not a relabel of 'planmagnet.nav.team.roster' — a locale that\n // already had that key translated as \"Team roster\" would otherwise keep showing the\n // old wording regardless of this fallback, since useTr only falls back when the\n // provider has no translation for the KEY at all.\n id: 'planmagnet-team-roster',\n label: tr('planmagnet.nav.team.members', 'Members'),\n path: joinPath(basePath, 'team/team-page'),\n icon: <Users size={16} />,\n },\n {\n id: 'planmagnet-team-invite',\n label: tr('planmagnet.nav.team.invite', 'Invite member'),\n path: joinPath(basePath, 'team/invite-member-page'),\n icon: <UserPlus size={16} />,\n },\n ],\n },\n // \"Workspace\" hidden: `create-workspace-page` navigated home on submit and created\n // nothing (a false success). Workspaces are created from the shell's workspace\n // switcher, which is the platform's real flow. Route kept; page now says so.\n {\n id: 'planmagnet-analytics',\n label: tr('planmagnet.nav.analytics', 'Analytics'),\n path: joinPath(basePath, 'analytics/analytics-page'),\n icon: <TrendingUp size={16} />,\n order: 12,\n },\n ],\n };\n return registerNavItems(navItem);\n }, [registerNavItems, basePath, tr]);\n\n useEffect(() => {\n if (!registerFooterItems) return;\n return registerFooterItems([\n {\n id: 'planmagnet-status',\n label: tr('planmagnet.footer.ready', 'PlanMagnet Ready'),\n type: 'status',\n section: 'left',\n order: 10,\n },\n ]);\n }, [registerFooterItems, tr]);\n\n return (\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <PlanMagnetProvider {...props}>\n <PlanMagnetPeople>\n <PlanMagnetRoutes />\n </PlanMagnetPeople>\n </PlanMagnetProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlanMagnetRoutes.d.ts","sourceRoot":"","sources":["../../src/planmagnet/PlanMagnetRoutes.tsx"],"names":[],"mappings":"AAmVA,wBAAgB,gBAAgB,4CAkN/B"}
1
+ {"version":3,"file":"PlanMagnetRoutes.d.ts","sourceRoot":"","sources":["../../src/planmagnet/PlanMagnetRoutes.tsx"],"names":[],"mappings":"AAwVA,wBAAgB,gBAAgB,4CAsN/B"}