@burdenoff/microfe-planmagnet 2026.928.5 → 2026.928.7

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 (66) hide show
  1. package/dist/generated/wspace-operations.d.ts +5 -0
  2. package/dist/generated/wspace-operations.d.ts.map +1 -1
  3. package/dist/generated/wspace-types.d.ts +15 -0
  4. package/dist/generated/wspace-types.d.ts.map +1 -1
  5. package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
  6. package/dist/planmagnet/PlanMagnetRoot.js +20 -11
  7. package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
  8. package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
  9. package/dist/planmagnet/PlanMagnetRoutes.js +216 -196
  10. package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
  11. package/dist/planmagnet/controls/Pickers.d.ts +14 -0
  12. package/dist/planmagnet/controls/Pickers.d.ts.map +1 -1
  13. package/dist/planmagnet/controls/Pickers.js +97 -22
  14. package/dist/planmagnet/controls/Pickers.js.map +1 -1
  15. package/dist/planmagnet/controls/WorkItemControls.d.ts +6 -2
  16. package/dist/planmagnet/controls/WorkItemControls.d.ts.map +1 -1
  17. package/dist/planmagnet/controls/WorkItemControls.js +8 -8
  18. package/dist/planmagnet/controls/WorkItemControls.js.map +1 -1
  19. package/dist/planmagnet/pages/DashboardDashboardPagePage.d.ts.map +1 -1
  20. package/dist/planmagnet/pages/DashboardDashboardPagePage.js +11 -3
  21. package/dist/planmagnet/pages/DashboardDashboardPagePage.js.map +1 -1
  22. package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.d.ts.map +1 -1
  23. package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.js +74 -59
  24. package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.js.map +1 -1
  25. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.d.ts.map +1 -1
  26. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js +138 -112
  27. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js.map +1 -1
  28. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +1 -1
  29. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +16 -6
  30. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +1 -1
  31. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.d.ts.map +1 -1
  32. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js +7 -2
  33. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js.map +1 -1
  34. package/dist/planmagnet/pages/ProjectsPlanningPagePage.d.ts.map +1 -1
  35. package/dist/planmagnet/pages/ProjectsPlanningPagePage.js +76 -56
  36. package/dist/planmagnet/pages/ProjectsPlanningPagePage.js.map +1 -1
  37. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
  38. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +241 -188
  39. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
  40. package/dist/planmagnet/pages/SprintsStartSprintPagePage.d.ts.map +1 -1
  41. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js +168 -122
  42. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js.map +1 -1
  43. package/dist/planmagnet/pages/TeamCreateTeamPagePage.d.ts.map +1 -1
  44. package/dist/planmagnet/pages/TeamCreateTeamPagePage.js +288 -91
  45. package/dist/planmagnet/pages/TeamCreateTeamPagePage.js.map +1 -1
  46. package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts +2 -0
  47. package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts.map +1 -0
  48. package/dist/planmagnet/pages/TeamTeamDetailPagePage.js +217 -0
  49. package/dist/planmagnet/pages/TeamTeamDetailPagePage.js.map +1 -0
  50. package/dist/planmagnet/pages/TeamTeamEditPagePage.d.ts +2 -0
  51. package/dist/planmagnet/pages/TeamTeamEditPagePage.d.ts.map +1 -0
  52. package/dist/planmagnet/pages/TeamTeamEditPagePage.js +211 -0
  53. package/dist/planmagnet/pages/TeamTeamEditPagePage.js.map +1 -0
  54. package/dist/planmagnet/pages/TeamTeamsListPagePage.d.ts +2 -0
  55. package/dist/planmagnet/pages/TeamTeamsListPagePage.d.ts.map +1 -0
  56. package/dist/planmagnet/pages/TeamTeamsListPagePage.js +118 -0
  57. package/dist/planmagnet/pages/TeamTeamsListPagePage.js.map +1 -0
  58. package/dist/planmagnet/sprints/SprintControls.d.ts +15 -3
  59. package/dist/planmagnet/sprints/SprintControls.d.ts.map +1 -1
  60. package/dist/planmagnet/sprints/SprintControls.js +293 -190
  61. package/dist/planmagnet/sprints/SprintControls.js.map +1 -1
  62. package/dist/planmagnet/team/TeamControls.d.ts +31 -0
  63. package/dist/planmagnet/team/TeamControls.d.ts.map +1 -0
  64. package/dist/planmagnet/team/TeamControls.js +407 -0
  65. package/dist/planmagnet/team/TeamControls.js.map +1 -0
  66. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TeamControls.js","names":[],"sources":["../../../src/planmagnet/team/TeamControls.tsx"],"sourcesContent":["import { useDeferredValue, useEffect, useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useMutation, useQuery } from '@apollo/client/react';\nimport {\n Button,\n Checkbox,\n Input,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport { useWorkspaceDirectory } from '@burdenoff/fe-libs/sharing';\nimport { Pencil, Plus, Trash2, X } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { detailPath } from '../utils/rowNavigation';\nimport { throwOnError, LEAVES_PAGE_CONTEXT } from '../utils/mutationResult';\nimport { ConfirmButton, ErrorLine } from '../controls/ConfirmButton';\nimport { PersonAvatar, PersonName } from '../people/People';\n\n/**\n * Team controls (BOFF-8044). A Team is a first-class, cross-project entity: members, a lead, capacity, and the\n * projects it can draw team-sprint work from. Adding a member or a project here writes ONLY `team_members` /\n * `team_projects` rows — it never touches RBAC, never assigns a platform role, and grants no project access\n * (the owner decision this ticket is built to). Access to a project's own data stays governed purely by each\n * actor's own PlanMagnet workspace-role permissions, exactly as before a team existed.\n */\n\nexport interface TeamMemberRef {\n id: string;\n actorId: string;\n}\n\nexport interface TeamProjectRef {\n id: string;\n name: string;\n key: string;\n}\n\n/** Every query that lists teams or shows a team's membership/projects. */\nexport const TEAM_QUERIES = ['GetTeams', 'GetTeamDetail'];\n\n// ─── Header actions (edit / delete) ────────────────────────────────────────\n\nconst DELETE_TEAM = gql`\n mutation TeamControlsDelete($id: ID!) {\n planmagnetDeleteTeam(id: $id)\n }\n`;\n\nexport function TeamHeaderActions({ teamId, name }: { teamId: string; name: string }) {\n const navigate = usePlanMagnetNavigate();\n const [remove, removeState] = useMutation(DELETE_TEAM, {\n refetchQueries: TEAM_QUERIES,\n context: LEAVES_PAGE_CONTEXT,\n });\n const [error, setError] = useState<string | null>(null);\n\n const onDelete = async () => {\n setError(null);\n try {\n await throwOnError(remove({ variables: { id: teamId } }));\n navigate('/team/teams-page');\n } catch (e) {\n setError(e instanceof Error ? e.message : 'The team could not be deleted.');\n }\n };\n\n return (\n <div className=\"flex flex-col items-end gap-2\">\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n data-testid=\"team-edit\"\n onClick={() => navigate(detailPath('/team/team-edit-page', teamId))}\n >\n <Pencil className=\"mr-1 h-4 w-4\" />\n Edit\n </Button>\n <ConfirmButton\n label=\"Delete\"\n variant=\"outline\"\n icon={<Trash2 className=\"mr-1 h-4 w-4\" />}\n title={`Delete ${name}?`}\n description=\"The team is deleted. Its team-scoped sprints disappear from every list — the same way a deleted project's sprints do. Its projects and members are unaffected; nothing about them is deleted. This cannot be undone here.\"\n confirmLabel=\"Delete team\"\n destructive\n disabled={removeState.loading}\n onConfirm={() => void onDelete()}\n />\n </div>\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n\n// ─── Members ────────────────────────────────────────────────────────────────\n\nconst ADD_TEAM_MEMBERS = gql`\n mutation TeamControlsAddMembers($id: ID!, $input: PlanmagnetTeamMembersInput!) {\n planmagnetAddTeamMembers(id: $id, input: $input) {\n id\n }\n }\n`;\nconst REMOVE_TEAM_MEMBERS = gql`\n mutation TeamControlsRemoveMembers($id: ID!, $input: PlanmagnetTeamMembersInput!) {\n planmagnetRemoveTeamMembers(id: $id, input: $input) {\n id\n }\n }\n`;\n\nexport function TeamMembersPanel({\n teamId,\n members,\n}: {\n teamId: string;\n members: TeamMemberRef[];\n}) {\n const [remove, removeState] = useMutation(REMOVE_TEAM_MEMBERS, {\n refetchQueries: TEAM_QUERIES,\n awaitRefetchQueries: true,\n });\n const [error, setError] = useState<string | null>(null);\n const [removingId, setRemovingId] = useState<string | null>(null);\n\n const handleRemove = async (actorId: string) => {\n setError(null);\n setRemovingId(actorId);\n try {\n await throwOnError(remove({ variables: { id: teamId, input: { actorIds: [actorId] } } }));\n } catch (e) {\n setError(e instanceof Error ? e.message : 'The member could not be removed.');\n } finally {\n setRemovingId(null);\n }\n };\n\n return (\n <div className=\"space-y-3\" data-testid=\"team-members\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm text-muted-foreground\">\n {members.length} member{members.length === 1 ? '' : 's'}\n </p>\n <AddTeamMembersDialog teamId={teamId} existingActorIds={members.map((m) => m.actorId)} />\n </div>\n {error && <ErrorLine message={error} />}\n {members.length === 0 ? (\n <p className=\"text-sm text-muted-foreground text-center py-4\">\n No members on this team yet.\n </p>\n ) : (\n <ul className=\"space-y-1\">\n {members.map((member) => (\n <li\n key={member.id}\n className=\"flex items-center justify-between gap-2 border rounded-md p-2 text-sm\"\n >\n <span className=\"flex items-center gap-2 min-w-0\">\n <PersonAvatar\n id={member.actorId}\n className=\"h-7 w-7 shrink-0 rounded-full bg-primary/10 flex items-center justify-center text-[10px] font-medium text-primary\"\n />\n <PersonName id={member.actorId} className=\"truncate\" />\n </span>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n aria-label=\"Remove member\"\n disabled={removeState.loading}\n onClick={() => handleRemove(member.actorId)}\n >\n {removingId === member.actorId ? '…' : <X className=\"h-4 w-4\" />}\n </Button>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\nfunction AddTeamMembersDialog({\n teamId,\n existingActorIds,\n}: {\n teamId: string;\n existingActorIds: string[];\n}) {\n const { workspaceId, authToken, apiGatewayUrl } = usePlanMagnet();\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState('');\n const deferredSearch = useDeferredValue(search.trim());\n const [selected, setSelected] = useState<Set<string>>(new Set());\n const [error, setError] = useState<string | null>(null);\n\n const directory = useWorkspaceDirectory({\n workspaceId: workspaceId ?? '',\n authToken: authToken ?? undefined,\n apiGatewayUrl: apiGatewayUrl ?? undefined,\n });\n const { search: setDirectoryFilter } = directory;\n // The directory's own filter, applied on the loaded page; fetchMore below widens the page.\n useEffect(() => {\n setDirectoryFilter(deferredSearch);\n }, [deferredSearch, setDirectoryFilter]);\n const candidates = directory.members.filter((m) => !existingActorIds.includes(m.id));\n\n const [add, addState] = useMutation(ADD_TEAM_MEMBERS, {\n refetchQueries: TEAM_QUERIES,\n awaitRefetchQueries: true,\n });\n\n const toggle = (id: string, checked: boolean) =>\n setSelected((prev) => {\n const next = new Set(prev);\n if (checked) next.add(id);\n else next.delete(id);\n return next;\n });\n\n const reset = () => {\n setSelected(new Set());\n setSearch('');\n setError(null);\n };\n\n const handleAdd = async () => {\n setError(null);\n try {\n await throwOnError(add({ variables: { id: teamId, input: { actorIds: [...selected] } } }));\n reset();\n setOpen(false);\n } catch (e) {\n setError(e instanceof Error ? e.message : 'The members could not be added.');\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={(next) => {\n setOpen(next);\n if (!next) reset();\n }}\n >\n <ResponsiveDialogTrigger asChild>\n <Button size=\"sm\" variant=\"outline\" data-testid=\"team-add-members\">\n <Plus className=\"mr-1 h-4 w-4\" />\n Add members\n </Button>\n </ResponsiveDialogTrigger>\n <ResponsiveDialogContent className=\"max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Add members</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Adding someone to the team does not grant them access to the team&apos;s projects —\n project access is still controlled by each person&apos;s own workspace role.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n <Input\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search workspace members\"\n aria-label=\"Search workspace members\"\n />\n <div className=\"max-h-80 overflow-y-auto space-y-1\" data-testid=\"team-add-candidates\">\n {directory.loading && candidates.length === 0 && (\n <p className=\"text-sm text-muted-foreground py-4 text-center\">Loading…</p>\n )}\n {!directory.loading && candidates.length === 0 && (\n <p className=\"text-sm text-muted-foreground py-4 text-center\">\n {deferredSearch\n ? 'No matching members.'\n : 'Everyone in the workspace is already on this team.'}\n </p>\n )}\n {candidates.map((member) => {\n const inputId = `team-add-member-${member.id}`;\n return (\n <label\n key={member.id}\n htmlFor={inputId}\n className=\"flex items-center gap-3 border rounded-md p-2 text-sm cursor-pointer hover:bg-muted\"\n >\n <Checkbox\n id={inputId}\n checked={selected.has(member.id)}\n onCheckedChange={(checked) => toggle(member.id, checked === true)}\n />\n <span className=\"min-w-0 flex-1 truncate\">\n {member.name}\n {member.email && (\n <span className=\"text-muted-foreground\"> &middot; {member.email}</span>\n )}\n </span>\n </label>\n );\n })}\n {directory.hasMore && (\n <button\n type=\"button\"\n className=\"w-full py-1 text-xs text-primary hover:underline\"\n onClick={directory.fetchMore}\n >\n Show more members\n </button>\n )}\n </div>\n {error && <ErrorLine message={error} />}\n <ResponsiveDialogFooter>\n <Button\n onClick={handleAdd}\n disabled={selected.size === 0 || addState.loading}\n data-testid=\"team-add-members-confirm\"\n >\n {addState.loading\n ? 'Adding…'\n : `Add ${selected.size} member${selected.size === 1 ? '' : 's'}`}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n\n// ─── Projects ───────────────────────────────────────────────────────────────\n\nconst ADD_TEAM_PROJECTS = gql`\n mutation TeamControlsAddProjects($id: ID!, $input: PlanmagnetTeamProjectsInput!) {\n planmagnetAddTeamProjects(id: $id, input: $input) {\n id\n }\n }\n`;\nconst REMOVE_TEAM_PROJECTS = gql`\n mutation TeamControlsRemoveProjects($id: ID!, $input: PlanmagnetTeamProjectsInput!) {\n planmagnetRemoveTeamProjects(id: $id, input: $input) {\n id\n }\n }\n`;\nconst TEAM_CANDIDATE_PROJECTS = gql`\n query TeamControlsCandidateProjects($workspaceId: ID!) {\n planmagnetProjects(workspaceId: $workspaceId, pagination: { first: 100 }) {\n items {\n id\n name\n key\n }\n totalCount\n }\n }\n`;\n\nexport function TeamProjectsPanel({\n teamId,\n projects,\n}: {\n teamId: string;\n projects: TeamProjectRef[];\n}) {\n const navigate = usePlanMagnetNavigate();\n const [remove, removeState] = useMutation(REMOVE_TEAM_PROJECTS, {\n refetchQueries: TEAM_QUERIES,\n awaitRefetchQueries: true,\n });\n const [error, setError] = useState<string | null>(null);\n const [removingId, setRemovingId] = useState<string | null>(null);\n\n const handleRemove = async (projectId: string) => {\n setError(null);\n setRemovingId(projectId);\n try {\n await throwOnError(remove({ variables: { id: teamId, input: { projectIds: [projectId] } } }));\n } catch (e) {\n setError(e instanceof Error ? e.message : 'The project could not be removed.');\n } finally {\n setRemovingId(null);\n }\n };\n\n return (\n <div className=\"space-y-3\" data-testid=\"team-projects\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm text-muted-foreground\">\n {projects.length} project{projects.length === 1 ? '' : 's'}\n </p>\n <AddTeamProjectsDialog teamId={teamId} existingProjectIds={projects.map((p) => p.id)} />\n </div>\n {/* Removing a project here does not touch work items already in a team sprint from it (no retroactive\n eviction, BOFF-8044 §4.2) — only new adds from that project stop being eligible from this point on. */}\n {error && <ErrorLine message={error} />}\n {projects.length === 0 ? (\n <p className=\"text-sm text-muted-foreground text-center py-4\">\n No projects on this team yet. Team sprints can only draw work items from these.\n </p>\n ) : (\n <ul className=\"space-y-1\">\n {projects.map((project) => (\n <li\n key={project.id}\n className=\"flex items-center justify-between gap-2 border rounded-md p-2 text-sm\"\n >\n <button\n type=\"button\"\n className=\"min-w-0 truncate text-left hover:underline\"\n onClick={() => navigate(detailPath('/projects/project-detail-page', project.id))}\n >\n <span className=\"text-muted-foreground mr-2\">{project.key}</span>\n {project.name}\n </button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n aria-label={`Remove ${project.name} from team`}\n disabled={removeState.loading}\n onClick={() => handleRemove(project.id)}\n >\n {removingId === project.id ? '…' : <X className=\"h-4 w-4\" />}\n </Button>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\nfunction AddTeamProjectsDialog({\n teamId,\n existingProjectIds,\n}: {\n teamId: string;\n existingProjectIds: string[];\n}) {\n const { workspaceId } = usePlanMagnet();\n const [open, setOpen] = useState(false);\n const [selected, setSelected] = useState<Set<string>>(new Set());\n const [error, setError] = useState<string | null>(null);\n\n const { data, loading } = useQuery<{\n planmagnetProjects: { items: TeamProjectRef[]; totalCount: number };\n }>(TEAM_CANDIDATE_PROJECTS, {\n variables: { workspaceId: workspaceId ?? '' },\n skip: !open || !workspaceId,\n });\n const candidates = (data?.planmagnetProjects.items ?? []).filter(\n (p) => !existingProjectIds.includes(p.id)\n );\n\n const [add, addState] = useMutation(ADD_TEAM_PROJECTS, {\n refetchQueries: TEAM_QUERIES,\n awaitRefetchQueries: true,\n });\n\n const toggle = (id: string, checked: boolean) =>\n setSelected((prev) => {\n const next = new Set(prev);\n if (checked) next.add(id);\n else next.delete(id);\n return next;\n });\n\n const reset = () => {\n setSelected(new Set());\n setError(null);\n };\n\n const handleAdd = async () => {\n setError(null);\n try {\n await throwOnError(add({ variables: { id: teamId, input: { projectIds: [...selected] } } }));\n reset();\n setOpen(false);\n } catch (e) {\n setError(e instanceof Error ? e.message : 'The projects could not be added.');\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={(next) => {\n setOpen(next);\n if (!next) reset();\n }}\n >\n <ResponsiveDialogTrigger asChild>\n <Button size=\"sm\" variant=\"outline\" data-testid=\"team-add-projects\">\n <Plus className=\"mr-1 h-4 w-4\" />\n Add projects\n </Button>\n </ResponsiveDialogTrigger>\n <ResponsiveDialogContent className=\"max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Add projects</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n A team sprint can only hold work items from a project on this list.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n <div\n className=\"max-h-80 overflow-y-auto space-y-1\"\n data-testid=\"team-add-project-candidates\"\n >\n {loading && <p className=\"text-sm text-muted-foreground py-4 text-center\">Loading…</p>}\n {!loading && candidates.length === 0 && (\n <p className=\"text-sm text-muted-foreground py-4 text-center\">\n Every project in this workspace is already on this team.\n </p>\n )}\n {candidates.map((project) => {\n const inputId = `team-add-project-${project.id}`;\n return (\n <label\n key={project.id}\n htmlFor={inputId}\n className=\"flex items-center gap-3 border rounded-md p-2 text-sm cursor-pointer hover:bg-muted\"\n >\n <Checkbox\n id={inputId}\n checked={selected.has(project.id)}\n onCheckedChange={(checked) => toggle(project.id, checked === true)}\n />\n <span className=\"min-w-0 flex-1 truncate\">\n <span className=\"text-muted-foreground mr-2\">{project.key}</span>\n {project.name}\n </span>\n </label>\n );\n })}\n </div>\n {error && <ErrorLine message={error} />}\n <ResponsiveDialogFooter>\n <Button\n onClick={handleAdd}\n disabled={selected.size === 0 || addState.loading}\n data-testid=\"team-add-projects-confirm\"\n >\n {addState.loading\n ? 'Adding…'\n : `Add ${selected.size} project${selected.size === 1 ? '' : 's'}`}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/microfe-planmagnet",
3
- "version": "2026.928.5",
3
+ "version": "2026.928.7",
4
4
  "description": "Burdenoff PlanMagnet Microfrontend",
5
5
  "type": "module",
6
6
  "files": [