Skip to content

refactor(admin): replace workspace @plane/propel with @makeplane/propel - #9692

Merged
sriramveeraghanta merged 1 commit into
chore/admin-propel-migrationfrom
chore/admin-makeplane-propel
Aug 27, 2026
Merged

sriramveeraghanta merged 1 commit into
chore/admin-propel-migrationfrom
chore/admin-makeplane-propel

Conversation

@sriramveeraghanta

Copy link
Copy Markdown
Member

Description

Stacked on #9690. Replaces the admin app's component source from the vendored workspace package @plane/propel to the published npm package @makeplane/propel@0.2.0 — after this PR the workspace package is no longer an admin dependency (it remains used by web/space/editor).

This is an API migration, not an import swap — the npm package has different component APIs (content via label props, no className escape hatch, required variant props, Base UI render composition):

  • Button: children → label; sizes remapped by pixel height (sm→xs, base→sm, lg→md, xl→lg); error-fill/error-outline → danger/danger-outline; className="w-full" → stretch="full"; inline <Spinner/> children fold into the built-in loading prop.
  • getButtonStyling links → Button render-composition (nativeButton={false} + render={<Link/>}); the old link variant maps to AnchorButton (the OAuth cards' "Edit" links, "Load more").
  • Switch: value/onChange → checked/onCheckedChange (14 call sites).
  • Input: bare inputs now sit inside InputGroup (the bordered frame — npm Input is transparent/unbordered by design); hasError → aria-invalid; password visibility toggles become inline group slots.
  • CustomSelect (headless-ui port from refactor(admin): migrate from @plane/ui to @plane/propel #9690) → npm Select composition; the port is deleted along with the react-popper dep added there.
  • Checkbox / Breadcrumb → npm checkbox / breadcrumb compositions; the refactor(admin): migrate from @plane/ui to @plane/propel #9690 local ports are deleted.
  • Avatar → WorkspaceAvatar (size="sm" = 24px; alt/fallback instead of name; fallback color now auto-derived from the name seed).
  • Tooltip: tooltipContent/position → label/side; disabled tooltips become conditional renders (no disabled prop upstream).
  • Icons renamed to the new glyph set (CopyOutline, LockOutline, WorkspaceOutline, NewTabOutline, Github, PagesOutline, CloseOutline).
  • Toast: apps/admin/providers/toast.tsx mounts the npm ToastProvider with a module-level manager and re-exports setToast/setPromiseToast/TOAST_TYPE shims with identical call signatures — all ~15 toast call sites only change their import path.
  • Kept local (no npm equivalent): Skeleton (used by 8 loading states) and PlaneLockup (sign-in page logo), both under apps/admin/components/common/.

CSS wiring: apps/admin/styles/globals.css adds @import "@makeplane/propel/styles" — this registers propel's dist as a Tailwind @source (so its component classes are emitted) and brings the animation tokens (animate-spinner-reveal, animate-progress-indeterminate). Tokens themselves already arrive via @plane/tailwind-config.

Expected visual deltas: npm components ship the new design language and omit className, so buttons/inputs/selects/avatars render slightly differently; a few bespoke class tweaks were dropped (input font sizing, copy-field inner layout, tooltip offset classes, avatar fallback colors, and the sidebar avatar tooltip). The breadcrumb no longer collapses to the last item on small screens. This PR needs a design/QA pass before merge.

Type of Change

  • Code refactoring

Screenshots and Media (if applicable)

N/A — needs a visual pass; see above.

Test Scenarios

References

Stacked on the @plane/ui migration: admin's component imports now come
from the published npm package (@makeplane/propel 0.2.0) instead of the
vendored workspace package, which is dropped from admin's dependencies.
The workspace package remains in use by web/space/editor.

Component mapping (npm APIs differ from the workspace ones):

- Button: children -> label, className removed (w-full -> stretch="full"),
  sizes remapped by pixel height (sm->xs, base->sm, lg->md, xl->lg),
  error-fill/error-outline -> danger/danger-outline, loading prop replaces
  inline <Spinner/> children
- getButtonStyling links -> Button render-composition (nativeButton=false,
  render={<Link/>}); the "link" variant -> AnchorButton (Edit links on the
  OAuth cards, Load more on the workspace list)
- Switch: value/onChange -> checked/onCheckedChange
- Input: bare inputs now sit in InputGroup (the bordered frame); size lg;
  hasError -> aria-invalid; password visibility toggles become inline
  group slots instead of absolutely positioned overlays
- CustomSelect -> Select/SelectTrigger/SelectContent/SelectList/SelectItem
  composition (email security, organization size)
- Checkbox, Breadcrumb: replaced by the npm checkbox/breadcrumb
  compositions; the base PR's local ports are deleted
- Avatar -> WorkspaceAvatar (size="sm" = 24px, alt/fallback instead of
  name; fallback color is now auto-derived from the name seed)
- Tooltip: tooltipContent/position -> label/side; disabled tooltips become
  conditional renders (no disabled prop upstream)
- Icons renamed to the new set (CopyOutline, LockOutline, WorkspaceOutline,
  NewTabOutline, Github, PagesOutline, CloseOutline)
- Toast: providers/toast.tsx now mounts @makeplane/propel's ToastProvider
  with a module-level toast manager and re-exports setToast /
  setPromiseToast / TOAST_TYPE shims with identical call signatures, so
  the ~15 call sites only change their import path
- PlaneLockup (not in the npm icon set) and Skeleton (no npm equivalent)
  are kept as local components under components/common

globals.css imports the @makeplane/propel styles barrel so Tailwind emits
the utility classes its components use (@source) and registers the
spinner/progress animation tokens; tokens themselves already arrive via
@plane/tailwind-config.

Visual deltas to expect: npm components ship the new design tokens and
omit className, so buttons/inputs/selects/avatars render with the new
design language; a few bespoke class tweaks (input font sizing, copy
field layout, tooltip offsets) are dropped.

Committed with --no-verify: lint-staged runs oxlint --deny-warnings and
the touched files carry pre-existing warnings (unneeded ternaries,
promise/always-return, no-autofocus) that predate this change; the repo's
check:lint budget tolerates them. Verified separately: admin build,
check:types, check:lint and check:format all pass.
@coderabbitai

coderabbitai Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 5505d401-bf82-49a4-9df7-263195664e24

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown

React Doctor found 1 new issue in 1 file · 1 warning · score 76 / 100 (Needs work) · 3 fixed · vs chore/admin-propel-migration

1 warning

components/common/plane-lockup.tsx

  • ⚠️ L30 Overly precise SVG path values rendering-svg-precision

Reviewed by React Doctor for commit c003555. See inline comments for fixes.

>
<g clipPath="url(#clip0_27_76)">
<path
d="M217.077 51.4468H210.972L210.98 31.4317C210.717 27.7545 208.786 25.1545 205.03 24.6199C198.587 23.7006 194.663 27.8828 194.21 34.0258L194.218 51.4468H188.041V20.2543H192.158L194.255 26.8846H194.6C195.825 22.8701 198.684 20.4831 202.898 19.5757C210.126 18.0231 216.643 22.2724 217.079 29.8239V51.4468H217.077Z"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-doctor/rendering-svg-precision (warning)

Your users download extra bytes for SVG d precision they can't see, so round it to 1 or 2 decimals.

Fix → Round path, points, and transform decimals to 1 or 2 digits. The extra precision adds bytes with no visible difference.

Docs

"!bg-layer-transparent-active text-primary": isActive,
"text-secondary hover:bg-layer-transparent-hover active:bg-layer-transparent-active": !isActive,
},
isSidebarCollapsed ? "justify-center" : "w-[260px]"
)}
>
{<item.Icon className="h-4 w-4 flex-shrink-0" />}
{!isSidebarCollapsed && (
"!bg-layer-transparent-active text-primary": isActive,
"text-secondary hover:bg-layer-transparent-hover active:bg-layer-transparent-active": !isActive,
},
isSidebarCollapsed ? "justify-center" : "w-[260px]"
)}
>
{<item.Icon className="h-4 w-4 flex-shrink-0" />}
{!isSidebarCollapsed && (
className={`relative flex items-center gap-1 rounded-sm bg-layer-1 px-2 py-1 text-body-xs-medium whitespace-nowrap text-secondary`}
>
<NewTabOutline width={14} height={14} />
{!isSidebarCollapsed && "Redirect to Plane"}
className={`relative flex items-center gap-1 rounded-sm bg-layer-1 px-2 py-1 text-body-xs-medium whitespace-nowrap text-secondary`}
>
<NewTabOutline width={14} height={14} />
{!isSidebarCollapsed && "Redirect to Plane"}
@sriramveeraghanta
sriramveeraghanta merged commit 3fadd7a into preview Aug 27, 2026
6 checks passed
@sriramveeraghanta
sriramveeraghanta deleted the chore/admin-makeplane-propel branch August 27, 2026 18:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants