Skip to content

[WEB-5762] fix: workitem detail sidebar properties design consistency#8400

Merged
pushya22 merged 3 commits intopreviewfrom
fix/workitem-detail-sidebar-properties-design-consistency
Dec 19, 2025
Merged

[WEB-5762] fix: workitem detail sidebar properties design consistency#8400
pushya22 merged 3 commits intopreviewfrom
fix/workitem-detail-sidebar-properties-design-consistency

Conversation

@JayashTripathy
Copy link
Member

@JayashTripathy JayashTripathy commented Dec 19, 2025

Description

This PR fixes workitem detail sidebar properties design consistency

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • Feature (non-breaking change which adds functionality)
  • Improvement (change that would cause existing functionality to not work as expected)
  • Code refactoring
  • Performance improvements
  • Documentation update

Screenshots and Media (if applicable)

Test Scenarios

References

Summary by CodeRabbit

  • Style

    • Standardized typography and text sizing across dropdowns, buttons, and property panels; adjusted button heights and placeholder styling.
    • Tweaked spacing and alignment (including reduced sidebar property item gap and increased property list vertical spacing).
    • Updated a light-mode background color token.
  • Refactor

    • Replaced native buttons/wrappers with a reusable Button component across multiple controls for consistent behavior and styling.

✏️ Tip: You can customize this high-level summary in your review settings.

Copilot AI review requested due to automatic review settings December 19, 2025 11:54
@makeplane
Copy link

makeplane bot commented Dec 19, 2025

Linked to Plane Work Item(s)

This comment was auto-generated by Plane

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 19, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

This PR applies presentational updates across many frontend components: replaces some native wrappers with a shared Button component, standardizes typography to text-body-xs-medium, tweaks spacing/layout in several lists, and modifies one Tailwind color token (background-color-surface-2).

Changes

Cohort / File(s) Change Summary
Button component replacements
apps/web/core/components/dropdowns/buttons.tsx, apps/web/core/components/issues/issue-detail/label/label-list-item.tsx, apps/web/core/components/issues/issue-detail/label/select/label-select.tsx
Replaced native div/button wrappers with the shared Button from @plane/propel (added variant/size props and prependIcon where applicable); preserved click behavior and tooltip/combobox flows; simplified className usage.
Typography class updates
apps/web/core/components/dropdowns/date.tsx, apps/web/core/components/dropdowns/member/base.tsx, apps/web/core/components/dropdowns/priority.tsx, apps/web/core/components/issues/issue-detail/cycle-select.tsx, apps/web/core/components/issues/issue-detail/module-select.tsx, apps/web/core/components/issues/issue-detail/parent-select.tsx, apps/web/core/components/issues/peek-overview/properties.tsx
Switched many button/span text classes to text-body-xs-medium and introduced conditional text-placeholder/text-secondary/text-danger usage for empty/none/highlight states; adjusted button height/typography in select controls.
Properties component styling
apps/web/core/components/issues/peek-overview/properties.tsx
Increased vertical spacing (space-y-2space-y-3), unified typography across property dropdowns, added childrenClassName="px-2" usage on SidebarPropertyListItem, and applied conditional placeholder/highlight styles for dates/priority/estimate.
Layout & spacing tweaks
apps/web/core/components/common/layout/sidebar/property-list-item.tsx, apps/web/core/components/issues/issue-detail/label/root.tsx
Reduced children container gap (gap-2 → gap-1) in sidebar item and added px-2 horizontal padding to label root; minor alignment adjustments.
Styling logic refactor
apps/web/core/components/rich-filters/filters-toggle.tsx
Extracted inline className into composed class groups (activeFilterBaseClasses, noHoverStateClasses, backgroundClasses) and applied via buttonClassName/iconClassName; behavior unchanged.
Design token change
packages/tailwind-config/variables.css
Changed --background-color-surface-2 from var(--color-neutral-100) to var(--color-neutral-200) (light-mode derived colors).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Review Button integrations to ensure variant/size/prependIcon are correct and tooltips/combobox wrappers keep expected behavior.
  • Verify consistent application of text-body-xs-medium and conditional placeholder classes across dropdowns and property items.
  • Check childrenClassName usage on SidebarPropertyListItem for layout regressions.
  • Confirm the Tailwind token change doesn't cause unintended color regressions in affected components.

Poem

🐇 I hopped through classes, small and neat,
Replaced some buttons and tuned the beat.
Spacing trimmed, the labels hum—so spry,
A flutter of fonts beneath the sky.
Happy hops for every UI try!

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Description check ❓ Inconclusive The description is incomplete; it lacks detailed explanation of changes, screenshots/media, test scenarios, and references as specified in the template. Add specific details about what design consistency changes were made, include before/after screenshots, describe testing procedures performed, and reference the related issue WEB-5762.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately reflects the main objective: improving design consistency for workitem detail sidebar properties through refactoring and improvements.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/workitem-detail-sidebar-properties-design-consistency

📜 Recent review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d9dee80 and f54f7e9.

📒 Files selected for processing (2)
  • apps/web/core/components/common/layout/sidebar/property-list-item.tsx (1 hunks)
  • packages/tailwind-config/variables.css (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • packages/tailwind-config/variables.css
  • apps/web/core/components/common/layout/sidebar/property-list-item.tsx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: check:types
  • GitHub Check: check:lint

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 Biome (2.1.2)
packages/tailwind-config/variables.css

The --json option is unstable/experimental and its output might change between patches/minor releases.
{"summary":{"changed":0,"unchanged":1,"matches":0,"duration":{"secs":0,"nanos":73536023},"scannerDuration":{"secs":0,"nanos":5327054},"errors":1749,"warnings":0,"skipped":0,"suggestedFixesSkipped":0,"diagnosticsNotPrinted":0},"diagnostics":[{"category":"parse","severity":"error","description":"expected , but instead found *","message":[{"elements":[],"content":"expected , but instead found *"}],"advices":{"advices":[{"log":["info",[{"elements":[],"content":"Remove "}]]}]},"verboseAdvices":{"advices":[]},"location":{"path":{"file":"packages/tailwind-config/variables.css"},"span":[317,318],"sourceCode":"@custom-variant dark (&:where([data-theme="dark"], [data-theme*="dark"] *));\n@custom-variant dark-high-contrast (&:where([data-theme="dark-contrast"], [data-theme="dark-contrast"] *));\n@custom-variant light-high-contrast (&:where([data-theme="light-contrast"], [data

... [truncated 99999690 characters] ...

: var(--color-alpha-white-400);\n --text-color-icon-inverse: var(--color-neutral-black);\n\n /* Link colors */\n --text-color-link-primary: var(--color-brand-default)Biome encountered an unexpected error

This is a bug in Biome, not an error in your code, and we would appreciate it if you could report it to https://github.com/biomejs/biome/issues/ along with the following information to help us fixing the issue.

When opening the issue, please provide a minimal reproduction, or identify and share the file/code that triggers it. Without a way to reproduce the error, the error can't be fixed:

Source Location: crates/biome_console/src/lib.rs:151:14
Thread Name: main
Message: called Result::unwrap() on an Err value: Os { code: 32, kind: BrokenPipe, message: "Broken pipe" }


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 and usage tips.

@JayashTripathy JayashTripathy changed the title [WEB-5762] refactor: workitem detail sidebar properties design consistency [WEB-5762] fix: workitem detail sidebar properties design consistency Dec 19, 2025
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR refactors the workitem detail sidebar properties to improve design consistency across the application. The changes focus on typography, spacing, and visual alignment to create a more uniform user experience.

  • Updated font weights from text-body-xs-regular to text-body-xs-medium for better readability and consistency
  • Standardized spacing between property items (from space-y-2 to space-y-3 and gap changes)
  • Replaced custom styled elements with Plane's propel Button components for consistency

Reviewed changes

Copilot reviewed 14 out of 14 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
packages/tailwind-config/variables.css Fixed CSS syntax error in scrollbar utility, updated font family to "Inter Variable", changed surface-2 color, and added material-symbols-rounded utility
apps/web/core/components/rich-filters/filters-toggle.tsx Refactored filter button styling with better organization of active/hover states and added iconClassName prop
apps/web/core/components/issues/peek-overview/properties.tsx Updated typography from regular to medium weight, adjusted spacing, and added childrenClassName for created_by field
apps/web/core/components/issues/issue-detail/parent-select.tsx Changed parent issue identifier variant from success to secondary and updated placeholder font weight
apps/web/core/components/issues/issue-detail/module-select.tsx Standardized button container height and typography to match other dropdowns
apps/web/core/components/issues/issue-detail/label/select/label-select.tsx Converted custom button to propel Button component with Plus icon and simplified label rendering
apps/web/core/components/issues/issue-detail/label/root.tsx Added horizontal padding to label container
apps/web/core/components/issues/issue-detail/label/label-list-item.tsx Replaced custom button with propel Button component and removed cn utility import
apps/web/core/components/issues/issue-detail/cycle-select.tsx Standardized button container height and typography
apps/web/core/components/dropdowns/priority.tsx Updated all priority buttons to use medium font weight with conditional text colors
apps/web/core/components/dropdowns/member/base.tsx Added text-left and typography classes to member display
apps/web/core/components/dropdowns/date.tsx Added text-left and typography classes to date display
apps/web/core/components/dropdowns/buttons.tsx Replaced custom divs with propel Button components for all dropdown button variants
apps/web/core/components/common/layout/sidebar/property-list-item.tsx Updated gap from 2 to 3, changed items-center to items-start, added font-medium, and reduced children gap

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

onClick={handleLabel}
disabled={disabled}
>
<Button key={labelId} type="button" variant="tertiary" onClick={() => void handleLabel()} disabled={disabled}>
Copy link

Copilot AI Dec 19, 2025

Choose a reason for hiding this comment

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

The onClick handler wraps the async function handleLabel with void operator, but handleLabel can be passed directly. The current pattern onClick={() => void handleLabel()} is unnecessarily verbose. Consider using onClick={handleLabel} instead for better readability and consistency.

Suggested change
<Button key={labelId} type="button" variant="tertiary" onClick={() => void handleLabel()} disabled={disabled}>
<Button key={labelId} type="button" variant="tertiary" onClick={handleLabel} disabled={disabled}>

Copilot uses AI. Check for mistakes.
onClick={handleLabel}
disabled={disabled}
>
<Button key={labelId} type="button" variant="tertiary" onClick={() => void handleLabel()} disabled={disabled}>
Copy link

Copilot AI Dec 19, 2025

Choose a reason for hiding this comment

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

The Button component is missing a size prop. For consistency with the label-select.tsx file (line 127), consider adding size="sm" to ensure uniform button sizing across label components.

Suggested change
<Button key={labelId} type="button" variant="tertiary" onClick={() => void handleLabel()} disabled={disabled}>
<Button key={labelId} type="button" size="sm" variant="tertiary" onClick={() => void handleLabel()} disabled={disabled}>

Copilot uses AI. Check for mistakes.
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
apps/web/core/components/dropdowns/date.tsx (1)

141-143: Typography update looks good for design consistency.

The addition of text-body-xs-medium and text-left classes aligns well with the PR's design consistency objective.

For improved semantic clarity, consider adding conditional text colors to make the intent more explicit:

<span className={cn(
  "flex-grow truncate text-left text-body-xs-medium",
  value ? "text-primary" : "text-placeholder"
)}>
  {value ? renderFormattedDate(value, formatToken) : placeholder}
</span>

Based on learnings, using text-primary for main content (the date value) and text-placeholder for placeholder text provides better visual hierarchy and makes the styling intent explicit rather than relying on inheritance.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3876bf0 and d9dee80.

📒 Files selected for processing (14)
  • apps/web/core/components/common/layout/sidebar/property-list-item.tsx (1 hunks)
  • apps/web/core/components/dropdowns/buttons.tsx (4 hunks)
  • apps/web/core/components/dropdowns/date.tsx (1 hunks)
  • apps/web/core/components/dropdowns/member/base.tsx (1 hunks)
  • apps/web/core/components/dropdowns/priority.tsx (4 hunks)
  • apps/web/core/components/issues/issue-detail/cycle-select.tsx (1 hunks)
  • apps/web/core/components/issues/issue-detail/label/label-list-item.tsx (2 hunks)
  • apps/web/core/components/issues/issue-detail/label/root.tsx (1 hunks)
  • apps/web/core/components/issues/issue-detail/label/select/label-select.tsx (3 hunks)
  • apps/web/core/components/issues/issue-detail/module-select.tsx (1 hunks)
  • apps/web/core/components/issues/issue-detail/parent-select.tsx (3 hunks)
  • apps/web/core/components/issues/peek-overview/properties.tsx (7 hunks)
  • apps/web/core/components/rich-filters/filters-toggle.tsx (2 hunks)
  • packages/tailwind-config/variables.css (3 hunks)
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{ts,tsx,mts,cts}

📄 CodeRabbit inference engine (.github/instructions/typescript.instructions.md)

**/*.{ts,tsx,mts,cts}: Use const type parameters for more precise literal inference in TypeScript 5.0+
Use the satisfies operator to validate types without widening them
Leverage inferred type predicates to reduce the need for explicit is return types in filter/check functions
Use NoInfer<T> utility to block inference for specific type arguments when they should be determined by other arguments
Utilize narrowing in switch(true) blocks for control flow analysis (TypeScript 5.3+)
Rely on narrowing from direct boolean comparisons for type guards
Trust preserved narrowing in closures when variables aren't modified after the check (TypeScript 5.4+)
Use constant indices to narrow object/array properties (TypeScript 5.5+)
Use standard ECMAScript decorators (Stage 3) instead of legacy experimentalDecorators
Use using declarations for explicit resource management with Disposable pattern instead of manual cleanup (TypeScript 5.2+)
Use with { type: "json" } for import attributes; avoid deprecated assert syntax (TypeScript 5.3/5.8+)
Use import type explicitly when importing types to ensure they are erased during compilation, respecting verbatimModuleSyntax flag
Use .ts, .mts, .cts extensions in import type statements (TypeScript 5.2+)
Use import type { Type } from "mod" with { "resolution-mode": "import" } for specific module resolution contexts (TypeScript 5.3+)
Use new iterator methods (map, filter, etc.) if targeting modern environments (TypeScript 5.6+)
Utilize new Set methods like union, intersection, etc., when available (TypeScript 5.5+)
Use Object.groupBy / Map.groupBy standard methods for grouping instead of external libraries (TypeScript 5.4+)
Use Promise.withResolvers() for creating promises with exposed resolve/reject functions (TypeScript 5.7+)
Use copying array methods (toSorted, toSpliced, with) for immutable array operations (TypeScript 5.2+)
Avoid accessing instance fields via super in classes (TypeScript 5....

Files:

  • apps/web/core/components/dropdowns/date.tsx
  • apps/web/core/components/issues/issue-detail/label/root.tsx
  • apps/web/core/components/rich-filters/filters-toggle.tsx
  • apps/web/core/components/dropdowns/buttons.tsx
  • apps/web/core/components/dropdowns/priority.tsx
  • apps/web/core/components/issues/issue-detail/cycle-select.tsx
  • apps/web/core/components/issues/issue-detail/label/select/label-select.tsx
  • apps/web/core/components/issues/issue-detail/label/label-list-item.tsx
  • apps/web/core/components/dropdowns/member/base.tsx
  • apps/web/core/components/issues/issue-detail/module-select.tsx
  • apps/web/core/components/issues/peek-overview/properties.tsx
  • apps/web/core/components/common/layout/sidebar/property-list-item.tsx
  • apps/web/core/components/issues/issue-detail/parent-select.tsx
**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

Enable TypeScript strict mode and ensure all files are fully typed

Files:

  • apps/web/core/components/dropdowns/date.tsx
  • apps/web/core/components/issues/issue-detail/label/root.tsx
  • apps/web/core/components/rich-filters/filters-toggle.tsx
  • apps/web/core/components/dropdowns/buttons.tsx
  • apps/web/core/components/dropdowns/priority.tsx
  • apps/web/core/components/issues/issue-detail/cycle-select.tsx
  • apps/web/core/components/issues/issue-detail/label/select/label-select.tsx
  • apps/web/core/components/issues/issue-detail/label/label-list-item.tsx
  • apps/web/core/components/dropdowns/member/base.tsx
  • apps/web/core/components/issues/issue-detail/module-select.tsx
  • apps/web/core/components/issues/peek-overview/properties.tsx
  • apps/web/core/components/common/layout/sidebar/property-list-item.tsx
  • apps/web/core/components/issues/issue-detail/parent-select.tsx
**/*.{js,jsx,ts,tsx,json,css}

📄 CodeRabbit inference engine (AGENTS.md)

Use Prettier with Tailwind plugin for code formatting, run pnpm fix:format

Files:

  • apps/web/core/components/dropdowns/date.tsx
  • apps/web/core/components/issues/issue-detail/label/root.tsx
  • apps/web/core/components/rich-filters/filters-toggle.tsx
  • apps/web/core/components/dropdowns/buttons.tsx
  • apps/web/core/components/dropdowns/priority.tsx
  • apps/web/core/components/issues/issue-detail/cycle-select.tsx
  • apps/web/core/components/issues/issue-detail/label/select/label-select.tsx
  • apps/web/core/components/issues/issue-detail/label/label-list-item.tsx
  • apps/web/core/components/dropdowns/member/base.tsx
  • apps/web/core/components/issues/issue-detail/module-select.tsx
  • packages/tailwind-config/variables.css
  • apps/web/core/components/issues/peek-overview/properties.tsx
  • apps/web/core/components/common/layout/sidebar/property-list-item.tsx
  • apps/web/core/components/issues/issue-detail/parent-select.tsx
**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{js,jsx,ts,tsx}: Use ESLint with shared config across packages, adhering to max warnings limits per package
Use camelCase for variable and function names, PascalCase for components and types
Use try-catch with proper error types and log errors appropriately

Files:

  • apps/web/core/components/dropdowns/date.tsx
  • apps/web/core/components/issues/issue-detail/label/root.tsx
  • apps/web/core/components/rich-filters/filters-toggle.tsx
  • apps/web/core/components/dropdowns/buttons.tsx
  • apps/web/core/components/dropdowns/priority.tsx
  • apps/web/core/components/issues/issue-detail/cycle-select.tsx
  • apps/web/core/components/issues/issue-detail/label/select/label-select.tsx
  • apps/web/core/components/issues/issue-detail/label/label-list-item.tsx
  • apps/web/core/components/dropdowns/member/base.tsx
  • apps/web/core/components/issues/issue-detail/module-select.tsx
  • apps/web/core/components/issues/peek-overview/properties.tsx
  • apps/web/core/components/common/layout/sidebar/property-list-item.tsx
  • apps/web/core/components/issues/issue-detail/parent-select.tsx
🧠 Learnings (20)
📓 Common learnings
Learnt from: CR
Repo: makeplane/plane PR: 0
File: packages/tailwind-config/AGENTS.md:0-0
Timestamp: 2025-12-17T10:58:59.591Z
Learning: Applies to packages/tailwind-config/**/*.{ts,tsx} : Use semantic text colors that match the visual hierarchy: `text-primary` for main text and headings, `text-secondary` for descriptions, `text-tertiary` for labels and metadata, and `text-placeholder` for placeholder text and hints
Learnt from: lifeiscontent
Repo: makeplane/plane PR: 7989
File: apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx:45-46
Timestamp: 2025-10-21T17:22:05.204Z
Learning: In the makeplane/plane repository, the refactor from useParams() to params prop is specifically scoped to page.tsx and layout.tsx files in apps/web/app (Next.js App Router pattern). Other components (hooks, regular client components, utilities) should continue using the useParams() hook as that is the correct pattern for non-route components.
Learnt from: CR
Repo: makeplane/plane PR: 0
File: packages/tailwind-config/AGENTS.md:0-0
Timestamp: 2025-12-17T10:58:59.591Z
Learning: Applies to packages/tailwind-config/**/*.{ts,tsx} : Use `-active` state variants (e.g., `bg-layer-1-active`) when an element is in a pressed or active state
📚 Learning: 2025-01-17T05:17:51.953Z
Learnt from: vineetk13
Repo: makeplane/plane PR: 6391
File: web/styles/react-day-picker.css:249-282
Timestamp: 2025-01-17T05:17:51.953Z
Learning: In the date range picker's CSS, left/right positioning for cell background effects (like in `.rdp-range_start::before`, `.rdp-range_middle::before`, `.rdp-range_end::before`) should use physical properties instead of logical properties, as these create visual effects that should remain consistent regardless of text direction.

Applied to files:

  • apps/web/core/components/dropdowns/date.tsx
📚 Learning: 2025-12-17T10:58:59.591Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: packages/tailwind-config/AGENTS.md:0-0
Timestamp: 2025-12-17T10:58:59.591Z
Learning: Applies to packages/tailwind-config/**/*.{ts,tsx} : Use `-active` state variants (e.g., `bg-layer-1-active`) when an element is in a pressed or active state

Applied to files:

  • apps/web/core/components/rich-filters/filters-toggle.tsx
  • apps/web/core/components/dropdowns/buttons.tsx
  • apps/web/core/components/dropdowns/priority.tsx
  • packages/tailwind-config/variables.css
📚 Learning: 2025-12-17T10:58:59.591Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: packages/tailwind-config/AGENTS.md:0-0
Timestamp: 2025-12-17T10:58:59.591Z
Learning: Applies to packages/tailwind-config/**/*.{ts,tsx} : Do not use hover state classes (e.g., `bg-layer-1-hover`) as base backgrounds - hover states should only be applied with the `hover:` prefix alongside the base background class

Applied to files:

  • apps/web/core/components/rich-filters/filters-toggle.tsx
  • apps/web/core/components/dropdowns/buttons.tsx
  • apps/web/core/components/dropdowns/priority.tsx
📚 Learning: 2025-12-17T10:58:59.591Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: packages/tailwind-config/AGENTS.md:0-0
Timestamp: 2025-12-17T10:58:59.591Z
Learning: Applies to packages/tailwind-config/**/*.{ts,tsx} : Sidebar menu items should use transparent backgrounds with hover states like `hover:bg-layer-1-hover` rather than base layer backgrounds, maintaining visual lightness while providing hover feedback

Applied to files:

  • apps/web/core/components/dropdowns/buttons.tsx
  • apps/web/core/components/dropdowns/priority.tsx
  • packages/tailwind-config/variables.css
  • apps/web/core/components/common/layout/sidebar/property-list-item.tsx
  • apps/web/core/components/issues/issue-detail/parent-select.tsx
📚 Learning: 2025-12-17T10:58:59.591Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: packages/tailwind-config/AGENTS.md:0-0
Timestamp: 2025-12-17T10:58:59.591Z
Learning: Applies to packages/tailwind-config/**/*.{ts,tsx} : Use semantic border colors: `border-subtle` for subtle borders and dividers, `border-subtle-1` for slightly more visible borders, `border-strong` for strong emphasis borders, and `border-strong-1` for very strong borders

Applied to files:

  • apps/web/core/components/dropdowns/buttons.tsx
  • apps/web/core/components/dropdowns/priority.tsx
  • packages/tailwind-config/variables.css
📚 Learning: 2025-12-17T10:58:59.591Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: packages/tailwind-config/AGENTS.md:0-0
Timestamp: 2025-12-17T10:58:59.591Z
Learning: Applies to packages/tailwind-config/**/*.{ts,tsx} : Use `-selected` state variants (e.g., `bg-layer-1-selected`) only when there is actual selection logic implemented, or use data attributes like `data-[selected]:bg-layer-1-selected`

Applied to files:

  • apps/web/core/components/dropdowns/buttons.tsx
  • apps/web/core/components/dropdowns/priority.tsx
  • apps/web/core/components/issues/issue-detail/module-select.tsx
  • packages/tailwind-config/variables.css
  • apps/web/core/components/issues/issue-detail/parent-select.tsx
📚 Learning: 2025-12-17T10:58:59.591Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: packages/tailwind-config/AGENTS.md:0-0
Timestamp: 2025-12-17T10:58:59.591Z
Learning: Applies to packages/tailwind-config/**/*.{ts,tsx} : Never use `bg-layer-2` or higher for content boxes and cards - always use the matching layer number; the exception for going one level above applies only to interactive form elements

Applied to files:

  • apps/web/core/components/dropdowns/buttons.tsx
  • apps/web/core/components/dropdowns/priority.tsx
  • packages/tailwind-config/variables.css
📚 Learning: 2025-12-17T10:58:59.591Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: packages/tailwind-config/AGENTS.md:0-0
Timestamp: 2025-12-17T10:58:59.591Z
Learning: Applies to packages/tailwind-config/**/*.{ts,tsx} : Use the rare exception to go one level above for visual separation only in interactive form elements (inputs, buttons, switches) within modals - for example, a modal with `bg-surface-1` can use `bg-layer-2` for form inputs to achieve visual distinction

Applied to files:

  • apps/web/core/components/dropdowns/buttons.tsx
  • apps/web/core/components/dropdowns/priority.tsx
  • packages/tailwind-config/variables.css
  • apps/web/core/components/issues/issue-detail/parent-select.tsx
📚 Learning: 2025-10-09T20:42:31.843Z
Learnt from: lifeiscontent
Repo: makeplane/plane PR: 7922
File: apps/admin/app/(all)/(dashboard)/ai/form.tsx:19-19
Timestamp: 2025-10-09T20:42:31.843Z
Learning: In the makeplane/plane repository, React types are globally available through TypeScript configuration. Type annotations like React.FC, React.ReactNode, etc. can be used without explicitly importing the React namespace. The codebase uses the modern JSX transform, so React imports are not required for JSX or type references.

Applied to files:

  • apps/web/core/components/dropdowns/buttons.tsx
  • apps/web/core/components/issues/issue-detail/label/select/label-select.tsx
  • apps/web/core/components/issues/issue-detail/label/label-list-item.tsx
📚 Learning: 2025-10-21T17:22:05.204Z
Learnt from: lifeiscontent
Repo: makeplane/plane PR: 7989
File: apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx:45-46
Timestamp: 2025-10-21T17:22:05.204Z
Learning: In the makeplane/plane repository, the refactor from useParams() to params prop is specifically scoped to page.tsx and layout.tsx files in apps/web/app (Next.js App Router pattern). Other components (hooks, regular client components, utilities) should continue using the useParams() hook as that is the correct pattern for non-route components.

Applied to files:

  • apps/web/core/components/dropdowns/buttons.tsx
  • apps/web/core/components/issues/issue-detail/label/select/label-select.tsx
📚 Learning: 2025-10-09T22:12:26.424Z
Learnt from: lifeiscontent
Repo: makeplane/plane PR: 7922
File: apps/admin/app/(all)/(dashboard)/ai/form.tsx:19-19
Timestamp: 2025-10-09T22:12:26.424Z
Learning: When `types/react` is installed in a TypeScript project (which is standard for React + TypeScript codebases), React types (React.FC, React.ReactNode, React.ComponentProps, etc.) are globally available by design. These type annotations can and should be used without explicitly importing the React namespace. This is a TypeScript/DefinitelyTyped feature, not codebase-specific configuration.

Applied to files:

  • apps/web/core/components/dropdowns/buttons.tsx
📚 Learning: 2025-12-17T10:58:59.591Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: packages/tailwind-config/AGENTS.md:0-0
Timestamp: 2025-12-17T10:58:59.591Z
Learning: Applies to packages/tailwind-config/**/*.{ts,tsx} : Use semantic text colors that match the visual hierarchy: `text-primary` for main text and headings, `text-secondary` for descriptions, `text-tertiary` for labels and metadata, and `text-placeholder` for placeholder text and hints

Applied to files:

  • apps/web/core/components/dropdowns/priority.tsx
  • packages/tailwind-config/variables.css
  • apps/web/core/components/issues/issue-detail/parent-select.tsx
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Prioritize using modern features and best practices introduced in TypeScript versions 5.0 through 5.8

Applied to files:

  • apps/web/core/components/dropdowns/priority.tsx
📚 Learning: 2025-12-17T10:58:59.591Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: packages/tailwind-config/AGENTS.md:0-0
Timestamp: 2025-12-17T10:58:59.591Z
Learning: Applies to packages/tailwind-config/**/*.{ts,tsx} : Use `bg-surface-1`, `bg-surface-2`, or `bg-surface-3` for top-level containers that sit directly on the canvas, such as main content areas, page sections, or primary containers

Applied to files:

  • packages/tailwind-config/variables.css
📚 Learning: 2025-12-17T10:58:59.591Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: packages/tailwind-config/AGENTS.md:0-0
Timestamp: 2025-12-17T10:58:59.591Z
Learning: Applies to packages/tailwind-config/**/*.{ts,tsx} : Do not use `bg-canvas` for page-level backgrounds, nested containers, cards, components, modals, dropdowns, sidebars, or panels

Applied to files:

  • packages/tailwind-config/variables.css
📚 Learning: 2025-12-17T10:58:59.591Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: packages/tailwind-config/AGENTS.md:0-0
Timestamp: 2025-12-17T10:58:59.591Z
Learning: Applies to packages/tailwind-config/**/*.{ts,tsx} : Use `bg-layer-1`, `bg-layer-2`, and `bg-layer-3` for nested elements within a surface to create depth, with layer-1 being the closest to the surface, layer-2 on top of layer-1, and layer-3 on top of layer-2

Applied to files:

  • packages/tailwind-config/variables.css
📚 Learning: 2025-12-17T10:58:59.591Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: packages/tailwind-config/AGENTS.md:0-0
Timestamp: 2025-12-17T10:58:59.591Z
Learning: Applies to packages/tailwind-config/**/*.{ts,tsx} : Always pair hover states with matching base backgrounds: use `hover:bg-layer-X-hover` only with `bg-layer-X`, use `hover:bg-surface-X-hover` only with `bg-surface-X`, never use mismatched combinations like `bg-layer-1 hover:bg-layer-2-hover`

Applied to files:

  • packages/tailwind-config/variables.css
📚 Learning: 2025-12-17T10:58:59.591Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: packages/tailwind-config/AGENTS.md:0-0
Timestamp: 2025-12-17T10:58:59.591Z
Learning: Applies to packages/tailwind-config/**/*.{ts,tsx} : Pages and routes should use `bg-surface-1` (or appropriate surface variant) as their root container, not `bg-canvas`

Applied to files:

  • packages/tailwind-config/variables.css
📚 Learning: 2025-10-10T13:25:14.810Z
Learnt from: gakshita
Repo: makeplane/plane PR: 7949
File: apps/web/core/components/issues/issue-modal/form.tsx:183-189
Timestamp: 2025-10-10T13:25:14.810Z
Learning: In `apps/web/core/components/issues/issue-modal/form.tsx`, the form reset effect uses a `dataResetProperties` dependency array prop (default: []) to give parent components explicit control over when the form resets. Do not suggest adding the `data` prop itself to the dependency array, as this would cause unwanted resets on every render when the data object reference changes, disrupting user input. The current pattern is intentional and allows the parent to trigger resets only when specific conditions are met.

Applied to files:

  • apps/web/core/components/issues/peek-overview/properties.tsx
  • apps/web/core/components/issues/issue-detail/parent-select.tsx
🧬 Code graph analysis (6)
apps/web/core/components/dropdowns/date.tsx (1)
packages/utils/src/datetime.ts (1)
  • renderFormattedDate (13-32)
apps/web/core/components/issues/issue-detail/label/select/label-select.tsx (2)
packages/i18n/src/store/index.ts (1)
  • t (222-243)
apps/web/core/store/label.store.ts (1)
  • projectLabels (93-101)
apps/web/core/components/issues/issue-detail/label/label-list-item.tsx (1)
packages/propel/src/icons/actions/close-icon.tsx (1)
  • CloseIcon (6-15)
apps/web/core/components/issues/peek-overview/properties.tsx (2)
apps/web/core/components/common/layout/sidebar/property-list-item.tsx (1)
  • SidebarPropertyListItem (12-25)
packages/propel/src/icons/properties/user-circle-icon.tsx (1)
  • UserCirclePropertyIcon (6-17)
apps/web/core/components/common/layout/sidebar/property-list-item.tsx (1)
packages/propel/src/icons/icon.tsx (1)
  • Icon (11-14)
apps/web/core/components/issues/issue-detail/parent-select.tsx (1)
packages/i18n/src/store/index.ts (1)
  • t (222-243)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: CodeQL analysis (javascript-typescript)
  • GitHub Check: Agent
🔇 Additional comments (27)
apps/web/core/components/issues/issue-detail/label/root.tsx (1)

95-95: Padding change is consistent with existing label component patterns.

The addition of px-2 to the root container at line 95 aligns with the padding already applied across related label subcomponents (label-select.tsx, create-label.tsx). Child components like label-list-item.tsx and label-list.tsx correctly rely on the parent container's padding, confirming proper separation of concerns and no visual regressions.

apps/web/core/components/issues/issue-detail/module-select.tsx (1)

67-68: LGTM! Typography and sizing standardization.

The migration from custom text-13 to the semantic text-body-xs-medium token and explicit height h-7.5 improves design consistency across the sidebar properties. The placeholder text logic is correctly preserved.

apps/web/core/components/issues/issue-detail/cycle-select.tsx (1)

53-54: LGTM! Consistent with module-select refactor.

The same design system improvements applied here: semantic typography (text-body-xs-medium) and standardized height (h-7.5). Placeholder text conditional logic remains intact.

apps/web/core/components/issues/issue-detail/parent-select.tsx (2)

87-87: Verify the visual treatment change aligns with design intent.

The parent issue display has been simplified from a success variant (typically green-tinted, emphasizing positive state) to a secondary variant (neutral styling). This removes the visual distinction that previously highlighted the parent-child relationship.

While this appears intentional for design consistency, please confirm this change aligns with your design system's intent for representing parent issues—users may perceive the parent issue as less prominent with the neutral treatment.

Also applies to: 97-97


118-118: LGTM! Typography standardization complete.

The placeholder text now uses text-body-xs-medium, matching the typography pattern applied across all sidebar property selectors in this PR.

apps/web/core/components/dropdowns/member/base.tsx (1)

147-147: LGTM! Styling consistency improvement.

The addition of text-left and text-body-xs-medium classes aligns with the PR's objective of standardizing typography across workitem detail sidebar properties. The change maintains existing layout behavior while improving design consistency.

packages/tailwind-config/variables.css (3)

1137-1137: LGTM! Good catch on the CSS syntax error.

Correctly removed the extra colon before the opening brace in the webkit-scrollbar selector.


1142-1156: Material Symbols Rounded font is properly loaded. The @Utility correctly references the font already defined via @font-face in packages/propel/src/styles/fonts/index.css with appropriate font-display: swap to prevent FOIT. The utility implementation follows Google's recommended settings for Material Symbols.


833-837: Inter Variable font usage looks good.

The font values are correctly declared. Ensure the font file is loaded via @font-face or equivalent CSS configuration, as with any custom font. Test rendering in your application to confirm the font loads and displays properly.

apps/web/core/components/common/layout/sidebar/property-list-item.tsx (2)

16-21: Verify vertical alignment with multi-line content.

The change from items-center to items-start with increased gap (gap-3) will align labels to the top when children wrap to multiple lines. This appears intentional for better handling of wrapped content like multiple labels or assignees.

The addition of font-medium to the label improves visual hierarchy, which is consistent with the design system's approach for labels and metadata.


22-22: LGTM: Flexible styling pattern.

The reduced gap (gap-1) provides tighter spacing for inline children, and the childrenClassName prop enables callers to add custom padding (e.g., px-2 as seen in properties.tsx). This is a good composition pattern.

apps/web/core/components/issues/issue-detail/label/label-list-item.tsx (1)

34-42: LGTM: Consistent Button migration.

The migration from a native button to the Button component with variant="tertiary" standardizes styling and aligns with the broader refactor across the codebase. The void keyword correctly handles the async handleLabel() return value.

apps/web/core/components/rich-filters/filters-toggle.tsx (1)

37-57: Verify intended hover behavior.

The constructed classes suppress interactive state changes by explicitly setting hover:, active:, and focus: variants to the same values as the base state. This prevents visual feedback on user interaction.

For example:

  • Lines 39, 42, 46-47: All states forced to identical values

This is unusual and goes against typical UX patterns where hover states provide visual feedback. If this is intentional to maintain a consistent appearance when filters are active, consider documenting this design decision. Otherwise, consider allowing hover states to provide feedback as expected.

Based on learnings, hover states should typically be applied with the hover: prefix alongside a base class, not used to suppress feedback.

apps/web/core/components/issues/issue-detail/label/select/label-select.tsx (2)

88-88: LGTM: Consistent typography.

The label now uses text-body-xs-medium and text-placeholder, which aligns with the design consistency improvements across the PR and follows the coding guidelines for semantic text colors.


123-132: LGTM: Proper Button integration with Combobox.

The Button component is correctly integrated with Headless UI's Combobox.Button using the Fragment pattern. The prependIcon={<Plus />} adds clear visual affordance, and the variant="tertiary" with size="sm" is appropriate for this action.

apps/web/core/components/dropdowns/priority.tsx (3)

123-130: LGTM: Consistent semantic colors.

The dynamic className application correctly uses text-body-xs-medium as the base, with text-secondary for actual priority values and text-placeholder for empty states. This follows the learned semantic color guidelines.


214-221: LGTM: Consistent with BorderButton.

The typography and color patterns match the BorderButton implementation, maintaining consistency across priority dropdown variants.


261-261: LGTM: Completed typography consistency.

The px-2 padding addition and typography updates complete the consistency pattern across all three priority button variants (Border, Background, Transparent). All now properly use semantic text colors.

Also applies to: 298-305

apps/web/core/components/dropdowns/buttons.tsx (3)

75-87: LGTM: Proper state variant usage.

The Button component with variant="ghost" and the conditional bg-layer-transparent-active for active states follows the learned guidelines for state variants.


103-112: Verify bg-layer-3 usage context.

The bg-layer-3 background is used here, but based on learned guidelines, layer-3 should typically be reserved for specific contexts. The exception for going one level above applies to interactive form elements within modals.

Verify that this button is rendered in the appropriate context (e.g., within a modal with bg-surface-1 or similar) to justify the layer-3 usage. If this is a standard dropdown button, consider using bg-layer-2 instead.

Based on learnings, layer numbers should match the component's context depth.


128-140: LGTM: Proper transparent button implementation.

The transparent button correctly uses no base background and applies bg-layer-transparent-active only when active, following the learned state variant patterns.

apps/web/core/components/issues/peek-overview/properties.tsx (6)

78-78: LGTM: Consistent spacing increase.

The change from space-y-2 to space-y-3 aligns with the increased gap-3 in property-list-item.tsx and improves visual breathing room between properties.


88-88: LGTM: Consistent typography across dropdowns.

All dropdown button classes now use text-body-xs-medium as the base with appropriate conditional text-placeholder for empty states. The logic correctly identifies when to show placeholder text:

  • State: when no state_id
  • Assignees: when empty array
  • Priority: when undefined or "none"

Also applies to: 105-105, 119-121


125-138: LGTM: Proper use of new childrenClassName prop.

The childrenClassName="px-2" correctly uses the new prop from SidebarPropertyListItem, and the typography (text-body-xs-medium text-secondary) follows semantic color guidelines for descriptive content.


154-154: LGTM: Consistent date field typography.

The start date follows the same typography pattern as other date fields with appropriate placeholder handling.


175-178: LGTM: Proper danger state handling.

The due date correctly uses cn() for conditional class merging and applies text-danger when the date should be highlighted (overdue). This provides clear visual feedback to users.


196-196: LGTM: Proper undefined check for estimate.

The condition correctly uses !== undefined rather than a falsy check, which is important since estimate points can be 0 (a valid value).

--background-color-canvas: var(--color-neutral-black);
--background-color-surface-1: var(--color-neutral-100);
--background-color-surface-2: var(--color-neutral-100);
--background-color-surface-2: var(--color-neutral-200);
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash

# Check the file exists and read around line 622
echo "=== Examining variables.css around line 622 ==="
head -n 630 packages/tailwind-config/variables.css | tail -n 20

echo ""
echo "=== Context of the change (lines 618-626) ==="
sed -n '618,626p' packages/tailwind-config/variables.css

echo ""
echo "=== Searching for bg-surface-2 usage in TypeScript/TSX files ==="
rg -n --type=ts --type=tsx 'bg-surface-2' --max-count=20

echo ""
echo "=== Searching for --background-color-surface-2 usage ==="
rg -n --type=ts --type=tsx 'background-color-surface-2' --max-count=20

echo ""
echo "=== Checking file size ==="
wc -l packages/tailwind-config/variables.css

Repository: makeplane/plane

Length of output: 2098


🏁 Script executed:

#!/bin/bash

# Search for surface-2 and surface-1 to see the pattern
echo "=== Light mode surface tokens ==="
head -n 400 packages/tailwind-config/variables.css | grep -A 5 'Light mode derived colors'

echo ""
echo "=== Dark mode surface tokens ==="
sed -n '618,630p' packages/tailwind-config/variables.css

echo ""
echo "=== Searching for surface-2 in all files (not just tsx) ==="
rg -n 'surface-2|surface-1' packages/ --max-count=30 | head -n 40

echo ""
echo "=== Check the GitHub diff or git log for this file ==="
cd packages/tailwind-config && git log --oneline -n 20 variables.css 2>/dev/null || echo "Git not available"

Repository: makeplane/plane

Length of output: 7253


🏁 Script executed:

#!/bin/bash

# Get more context - check what surface tokens should be
echo "=== Full light and dark mode comparison ==="
echo "--- Light mode section ---"
sed -n '290,310p' packages/tailwind-config/variables.css

echo ""
echo "--- Dark mode section ---"
sed -n '618,635p' packages/tailwind-config/variables.css

echo ""
echo "=== Verify the pattern in neutral colors ==="
echo "Checking if neutral-100 and neutral-200 are distinct:"
grep -n "color-neutral-100\|color-neutral-200" packages/tailwind-config/variables.css | head -n 10

Repository: makeplane/plane

Length of output: 3235


🏁 Script executed:

#!/bin/bash

# Double-check the exact current state and identify the discrepancy
echo "=== Verifying line 622 current content ==="
sed -n '622p' packages/tailwind-config/variables.css

echo ""
echo "=== Review comment claims line 622 shows neutral-200 but file shows: ==="
sed -n '622p' packages/tailwind-config/variables.css | cat -A

echo ""
echo "=== Check if surface-1 and surface-2 should be different ==="
echo "Light mode: surface-1 is neutral-white, surface-2 is neutral-200 (DIFFERENT)"
echo "Dark mode: surface-1 is neutral-100, surface-2 is neutral-100 (SAME) <-- BUG"
echo ""
echo "=== Components currently using bg-surface-2 (samples) ==="
grep -l "bg-surface-2" packages/ui/src/**/*.tsx 2>/dev/null | head -5

echo ""
echo "=== File status ==="
git diff packages/tailwind-config/variables.css 2>/dev/null | head -50 || echo "No git diff available"

Repository: makeplane/plane

Length of output: 809


Change --background-color-surface-2 to var(--color-neutral-200) in dark mode.

In light mode, bg-surface-2 is set to neutral-200, creating visual hierarchy between surface tokens. Dark mode currently has both surface-1 and surface-2 as neutral-100, which breaks the design system pattern. Updating surface-2 to neutral-200 maintains consistent layering across light and dark modes and ensures components using this token have proper visual separation.

🤖 Prompt for AI Agents
In packages/tailwind-config/variables.css around line 622, the dark-mode value
for --background-color-surface-2 is currently matching surface-1 (neutral-100);
change the dark-mode assignment so --background-color-surface-2 is set to
var(--color-neutral-200) instead of var(--color-neutral-100). Update the
dark-mode CSS block where surface tokens are defined, ensure no other references
override it, and run the Tailwind build or visual checks to confirm surface-2
now provides the intended layer separation.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@pushya22 pushya22 merged commit 67c39df into preview Dec 19, 2025
9 checks passed
@pushya22 pushya22 deleted the fix/workitem-detail-sidebar-properties-design-consistency branch December 19, 2025 12:45
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.

4 participants