Skip to content

fix: line-clamp property does not truncate long texts properly in app card description#23695

Closed
Anshumancanrock wants to merge 1 commit intocalcom:mainfrom
Anshumancanrock:truncate-fix
Closed

fix: line-clamp property does not truncate long texts properly in app card description#23695
Anshumancanrock wants to merge 1 commit intocalcom:mainfrom
Anshumancanrock:truncate-fix

Conversation

@Anshumancanrock
Copy link
Contributor

@Anshumancanrock Anshumancanrock commented Sep 9, 2025

What does this PR do?

This PR fixes a critical cross-browser compatibility issue where app card descriptions were not properly truncated due to reliance on webkit-only CSS properties. Long descriptions were overflowing and breaking the layout in many non-webkit browsers.

Key improvements:

Replaces webkit-only -webkit-line-clamp with standard CSS properties that work across all browsers

Implements consistent 3-line truncation with JavaScript fallback for precise character limits

Visual Demo (For contributors especially)

Image Demo (if applicable):

Before Fix:
Screenshot 2025-12-04 015138

After Fix:

Recording.2025-12-04.014106.1.mp4

Mandatory Tasks (DO NOT REMOVE)

  • I have self-reviewed the code (A decent size PR without self-review might be rejected).
  • I have updated the developer docs in /docs if this PR makes changes that would require a documentation change. If N/A, write N/A here and check the checkbox.
  • I confirm automated tests are in place that prove my fix is effective or that my feature works.

How should this be tested?

  • No special environment variables required
  • Standard Cal.com development environment

@Anshumancanrock Anshumancanrock requested review from a team as code owners September 9, 2025 04:17
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Sep 9, 2025

Important

Review skipped

Draft detected.

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.

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

Walkthrough

This change updates two components to sanitize and truncate app descriptions. In packages/features/apps/components/AppCard.tsx and packages/ui/components/app-list-card/AppListCard.tsx, it imports useMemo and stripMarkdown, computes a memoized cleanDescription by stripping Markdown and collapsing whitespace, and renders that value instead of the raw description. Both components add inline CSS to clamp text to three lines using -webkit-box with WebkitLineClamp: 3, WebkitBoxOrient: vertical, plus overflow: hidden, textOverflow: ellipsis, lineHeight: 1.4, maxHeight: 4.2em, and word wrapping. No public APIs or exported declarations are changed.

Possibly related PRs

  • fix: text wrap on /conference #22864: Adjusts AppListCard description wrapping and layout classes, which directly relates to this PR’s description sanitization and 3-line clamp behavior.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

Pre-merge checks (3 passed, 2 warnings)

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The changes partially address the linked issues [23659] and [CAL-6379] by sanitizing descriptions (stripMarkdown) and adding CSS clamping with a max-height/overflow fallback to prevent layout overflow, but the code still relies on WebKit-specific properties and does not implement the promised JavaScript truncation fallback or other measures to ensure consistent multiline ellipses in non‑WebKit browsers, so the primary objective of full cross‑browser truncation with consistent ellipsis is not fully met. Implement a proper JavaScript fallback or use a tested multiline-clamp polyfill to produce consistent ellipses in non‑WebKit browsers (or remove the claim of a JS fallback from the PR), add cross-browser visual tests for /apps, and update the PR description and tests to reflect the final approach.
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.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix: implement cross-browser compatible text truncation in app cards" is concise and accurately summarizes the primary change (improving app card description truncation across browsers), making it clear for reviewers and changelogs. It focuses on the main intent without listing files or extraneous details.
Out of Scope Changes Check ✅ Passed The modifications are limited to the app card components and related imports (useMemo, stripMarkdown) and do not alter exported APIs or unrelated files, so there are no apparent out-of-scope changes introduced by this PR.
Description Check ✅ Passed The PR description is on-topic and describes the problem, affected pages, linked issues (#23659 and CAL-6379), visual evidence, and testing guidance, so it satisfies the lenient description check.

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.

@graphite-app graphite-app bot added the community Created by Linear-GitHub Sync label Sep 9, 2025
@vercel
Copy link

vercel bot commented Sep 9, 2025

@Anshumancanrock is attempting to deploy a commit to the cal Team on Vercel.

A member of the Team first needs to authorize it.

@github-actions
Copy link
Contributor

github-actions bot commented Sep 9, 2025

Hey there and thank you for opening this pull request! 👋🏼

We require pull request titles to follow the Conventional Commits specification and it looks like your proposed title needs to be adjusted.

Details:

No release type found in pull request title "Truncate fix". Add a prefix to indicate what kind of release this pull request corresponds to. For reference, see https://www.conventionalcommits.org/

Available types:
 - feat: A new feature
 - fix: A bug fix
 - docs: Documentation only changes
 - style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
 - refactor: A code change that neither fixes a bug nor adds a feature
 - perf: A code change that improves performance
 - test: Adding missing tests or correcting existing tests
 - build: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)
 - ci: Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)
 - chore: Other changes that don't modify src or test files
 - revert: Reverts a previous commit

@dosubot dosubot bot added the 🐛 bug Something isn't working label Sep 9, 2025
@Anshumancanrock Anshumancanrock marked this pull request as draft September 9, 2025 04:21
@Anshumancanrock Anshumancanrock changed the title Truncate fix fix: replace webkit-only line-clamp with cross-browser text truncation for app cards Sep 9, 2025
@Anshumancanrock Anshumancanrock changed the title fix: replace webkit-only line-clamp with cross-browser text truncation for app cards fix: implement cross-browser compatible text truncation in app cards Sep 9, 2025
@github-actions github-actions bot added Low priority Created by Linear-GitHub Sync ui area: UI, frontend, button, form, input labels Sep 9, 2025
@Anshumancanrock Anshumancanrock marked this pull request as ready for review September 9, 2025 06:19
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 (5)
packages/ui/components/app-list-card/AppListCard.tsx (2)

87-98: Replace inline styles; rely on Tailwind utils and drop nonstandard word-break.

Removes style attr, keeps 3-line clamp via utilities, and adds a hover title for full text.

-          <p
-            className={classNames(
-              "text-sm text-subtle whitespace-normal break-words overflow-hidden",
-              classNameObject?.description
-            )}
-            style={{
-              lineHeight: "1.5em",
-              maxHeight: "4.5em", // Shows exactly 3 lines of text
-              wordBreak: "break-word",
-            }}>
-            {description && description.length > 100 ? `${description.substring(0, 100).trim()}...` : description}
-          </p>
+          <p
+            title={description}
+            className={classNames(
+              "text-sm text-subtle whitespace-normal break-words overflow-hidden leading-[1.5] max-h-[4.5em] hyphens-auto",
+              classNameObject?.description
+            )}
+          >
+            {description && description.length > 100
+              ? `${description.slice(0, 100).replace(/\s+\S*$/, "")}\u2026`
+              : description}
+          </p>

87-98: Optional: make length configurable to avoid “100” magic number divergence with AppCard.

Expose maxDescriptionLength?: number here too for consistency with AppCard.

Happy to draft the prop plumbing if you want it in this PR.

packages/features/apps/components/AppCard.tsx (2)

121-129: Unify truncation approach: remove inline styles, avoid mid-word cuts, add tooltip.

Keeps cross-browser 3-line clamp without WebKit props; improves readability and a11y.

-      <p 
-        className="text-default mt-2 flex-grow text-sm overflow-hidden"
-        style={{
-          lineHeight: "1.5em",
-          maxHeight: "4.5em", // Shows exactly 3 lines of text
-          wordBreak: "break-word",
-        }}>
-        {app.description ? (app.description.length > maxDescriptionLength ? `${app.description.substring(0, maxDescriptionLength).trim()}...` : app.description) : ""}
-      </p>
+      <p
+        title={app.description || undefined}
+        className="text-default mt-2 flex-grow text-sm overflow-hidden leading-[1.5] max-h-[4.5em] hyphens-auto"
+      >
+        {app.description
+          ? app.description.length > (maxDescriptionLength ?? 140)
+            ? `${app.description.slice(0, Math.max(1, Math.floor(maxDescriptionLength ?? 140))).replace(/\s+\S*$/, "")}\u2026`
+            : app.description
+          : ""}
+      </p>

28-31: Confirm default maxDescriptionLength usage Only one override was found in AllApps.tsx (line 187) setting it to 100; all other ~20+ <AppCard> usages—especially in the various app-store packages—rely on the 140 default and will truncate descriptions. Add explicit maxDescriptionLength props where needed to prevent unintended UI changes.

packages/features/apps/components/AllApps.tsx (1)

187-187: LGTM; explicit limit aligns with the new API.

Minor: consider a shared constant to keep /apps and UI cards in sync.

Example (outside this hunk):

// packages/features/apps/components/constants.ts
export const APP_DESCRIPTION_LIMIT = 100;

Then here:

<AppCard ... maxDescriptionLength={APP_DESCRIPTION_LIMIT} />
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 3c72d7a and ffd4bb7.

📒 Files selected for processing (3)
  • packages/features/apps/components/AllApps.tsx (1 hunks)
  • packages/features/apps/components/AppCard.tsx (4 hunks)
  • packages/ui/components/app-list-card/AppListCard.tsx (1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
**/*.tsx

📄 CodeRabbit inference engine (.cursor/rules/review.mdc)

Always use t() for text localization in frontend code; direct text embedding should trigger a warning

Files:

  • packages/ui/components/app-list-card/AppListCard.tsx
  • packages/features/apps/components/AllApps.tsx
  • packages/features/apps/components/AppCard.tsx
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.cursor/rules/review.mdc)

Flag excessive Day.js use in performance-critical code; prefer native Date or Day.js .utc() in hot paths like loops

Files:

  • packages/ui/components/app-list-card/AppListCard.tsx
  • packages/features/apps/components/AllApps.tsx
  • packages/features/apps/components/AppCard.tsx
**/*.{ts,tsx,js,jsx}

⚙️ CodeRabbit configuration file

Flag default exports and encourage named exports. Named exports provide better tree-shaking, easier refactoring, and clearer imports. Exempt main components like pages, layouts, and components that serve as the primary export of a module.

Files:

  • packages/ui/components/app-list-card/AppListCard.tsx
  • packages/features/apps/components/AllApps.tsx
  • packages/features/apps/components/AppCard.tsx
🧠 Learnings (2)
📓 Common learnings
Learnt from: supalarry
PR: calcom/cal.com#22976
File: packages/ui/components/app-list-card/AppListCard.tsx:63-67
Timestamp: 2025-08-12T08:53:11.848Z
Learning: In AppListCard.tsx, the className || classNameObject?.container fallback pattern is intentional to encourage users to migrate from the legacy className prop to the new granular classNameObject styling system, rather than merging both approaches.
📚 Learning: 2025-08-12T08:53:11.848Z
Learnt from: supalarry
PR: calcom/cal.com#22976
File: packages/ui/components/app-list-card/AppListCard.tsx:63-67
Timestamp: 2025-08-12T08:53:11.848Z
Learning: In AppListCard.tsx, the className || classNameObject?.container fallback pattern is intentional to encourage users to migrate from the legacy className prop to the new granular classNameObject styling system, rather than merging both approaches.

Applied to files:

  • packages/ui/components/app-list-card/AppListCard.tsx

Comment on lines 121 to 129
<p
className="text-default mt-2 flex-grow text-sm overflow-hidden"
style={{
overflow: "hidden",
display: "-webkit-box",
WebkitBoxOrient: "vertical",
WebkitLineClamp: "3",
lineHeight: "1.5em",
maxHeight: "4.5em", // Shows exactly 3 lines of text
wordBreak: "break-word",
}}>
{app.description}
{app.description ? (app.description.length > maxDescriptionLength ? `${app.description.substring(0, maxDescriptionLength).trim()}...` : app.description) : ""}
</p>
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Repo-wide check: ensure no lingering WebKit-only clamping remains.

Catches any leftover -webkit-line-clamp/display:-webkit-box.


🏁 Script executed:

#!/bin/bash
# Find legacy clamping usage
rg -nP -C2 --glob '!**/dist/**' --glob '!**/build/**' -S '(-webkit-line-clamp|-webkit-box-orient|display:\s*-webkit-box|line-clamp-\d+)'

Length of output: 148


🏁 Script executed:

#!/bin/bash
# Re-run search disabling default ignores and restricting to code files
rg -nP -C2 -uuu -g '*.{js,jsx,ts,tsx}' '(-webkit-line-clamp|-webkit-box-orient|display\s*:\s*-webkit-box|line-clamp-\d+)' .

Length of output: 7665


Remove all Tailwind line-clamp utilities across the repo
The search still surfaces dozens of className="… line-clamp-1/2/3/4" usages (e.g. in packages/ui/components, packages/features/**, apps/web/components, etc.), which rely on WebKit-only CSS under the hood. Replace each with the same style-based truncation you added in AppCard.tsx (using line-height, max-height, overflow-hidden, and text substring logic).

🤖 Prompt for AI Agents
In packages/features/apps/components/AppCard.tsx around lines 121 to 129, the
current approach uses inline style-based truncation for the description; the
reviewer asks to remove all Tailwind line-clamp utilities across the repo and
replace them with the same style+substring approach. Search the codebase for any
className containing "line-clamp-" and replace each occurrence by removing that
utility and adding equivalent inline styles (set lineHeight, maxHeight =
lineHeight * desiredLines, overflow: hidden, wordBreak: "break-word") on the
text container and, where applicable, implement the substring fallback (trim to
a maxDescriptionLength and append "..." when truncated) in the component render
logic so behavior matches the AppCard implementation.

@Anshumancanrock
Copy link
Contributor Author

@anikdhabal Hi, Coderabbit has suggested removing line-clamp across the whole repo and replacing it with my approach. Would you recommend that I go ahead with this change?

Copy link
Contributor

@kart1ka kart1ka left a comment

Choose a reason for hiding this comment

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

This does not work properly. There are cases where the text content is simply cutt off without showing "..."
See the video attached: https://cap.link/js0bvmqd57qqm4j

wordBreak: "break-word",
}}>
{app.description}
{app.description ? (app.description.length > maxDescriptionLength ? `${app.description.substring(0, maxDescriptionLength).trim()}...` : app.description) : ""}
Copy link
Contributor

Choose a reason for hiding this comment

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

can we simplify this code here?

searchText={searchText}
credentials={app.credentials}
userAdminTeams={userAdminTeams}
maxDescriptionLength={100}
Copy link
Contributor

Choose a reason for hiding this comment

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

there is no need to pass this as a prop. you can simply use the value inside the component

@kart1ka kart1ka marked this pull request as draft September 10, 2025 04:38
@Anshumancanrock Anshumancanrock force-pushed the truncate-fix branch 3 times, most recently from be32f7a to dce462f Compare September 11, 2025 16:19
@Anshumancanrock Anshumancanrock marked this pull request as ready for review September 11, 2025 20:27
@dosubot dosubot bot added the 🧹 Improvements Improvements to existing features. Mostly UX/UI label Sep 11, 2025
@Anshumancanrock
Copy link
Contributor Author

@kart1ka I’ve fixed the overflow issues now all apps truncate their descriptions properly, except for the Microsoft Teams app. That one is tricky because the title is so long, and its description only takes up two lines. Would it be okay if we also truncate the Microsoft Teams app title, so the description has enough space (like with the other apps)?

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: 0

🧹 Nitpick comments (1)
packages/ui/components/app-list-card/AppListCard.tsx (1)

97-100: Minor: avoid redundant breaking styles

You already apply Tailwind’s break-words; pairing it with inline wordBreak later is redundant. Consider relying on the class only.

-            className={classNames(
-              "whitespace-normal break-words",
-              classNameObject?.description
-            )}
+            className={classNames("break-words", classNameObject?.description)}
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between ffd4bb7 and 1e09a74.

📒 Files selected for processing (2)
  • packages/features/apps/components/AppCard.tsx (4 hunks)
  • packages/ui/components/app-list-card/AppListCard.tsx (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/features/apps/components/AppCard.tsx
🧰 Additional context used
📓 Path-based instructions (3)
**/*.tsx

📄 CodeRabbit inference engine (.cursor/rules/review.mdc)

Always use t() for text localization in frontend code; direct text embedding should trigger a warning

Files:

  • packages/ui/components/app-list-card/AppListCard.tsx
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.cursor/rules/review.mdc)

Flag excessive Day.js use in performance-critical code; prefer native Date or Day.js .utc() in hot paths like loops

Files:

  • packages/ui/components/app-list-card/AppListCard.tsx
**/*.{ts,tsx,js,jsx}

⚙️ CodeRabbit configuration file

Flag default exports and encourage named exports. Named exports provide better tree-shaking, easier refactoring, and clearer imports. Exempt main components like pages, layouts, and components that serve as the primary export of a module.

Files:

  • packages/ui/components/app-list-card/AppListCard.tsx
🧠 Learnings (1)
📚 Learning: 2025-08-12T08:53:11.848Z
Learnt from: supalarry
PR: calcom/cal.com#22976
File: packages/ui/components/app-list-card/AppListCard.tsx:63-67
Timestamp: 2025-08-12T08:53:11.848Z
Learning: In AppListCard.tsx, the className || classNameObject?.container fallback pattern is intentional to encourage users to migrate from the legacy className prop to the new granular classNameObject styling system, rather than merging both approaches.

Applied to files:

  • packages/ui/components/app-list-card/AppListCard.tsx
🔇 Additional comments (4)
packages/ui/components/app-list-card/AppListCard.tsx (4)

4-4: LGTM: memoization + sanitization imports are appropriate

Pulling in useMemo and stripMarkdown is the right call for perf and safety before truncation.

Also applies to: 8-8


64-69: Clean description pipeline looks good

Memoized strip + whitespace collapse is solid. No issues spotted.


111-111: Rendering sanitized text: good choice

Using cleanDescription prevents Markdown artifacts from breaking truncation. Nice.


101-110: Use standard line-clamp with WebKit fallback; move truncation to a CSS utility & expose full text on hover

Unprefixed line-clamp is supported in modern browsers — keep the -webkit- props for older engines and provide a non‑WebKit fallback (gradient/“…” pseudo‑element or JS). Move truncation out of inline styles so you can use @supports(line-clamp: 3) and reuse across the repo.

  • packages/ui/components/app-list-card/AppListCard.tsx (lines 101–110): remove textOverflow and wordBreak from the inline style; keep WebKit props + overflow/lineHeight/maxHeight; extract to a reusable CSS class that uses @supports(line-clamp: 3) { line-clamp: 3; } with a gradient or JS fallback.
  • Expose full text on hover: add title={cleanDescription} to ListItemText.

Suggested minimal diff (still relevant):

             style={{
-              display: "-webkit-box",
-              WebkitLineClamp: 3,
-              WebkitBoxOrient: "vertical",
-              overflow: "hidden",
-              textOverflow: "ellipsis",
-              lineHeight: "1.4",
-              maxHeight: "4.2em",
-              wordBreak: "break-word",
+              display: "-webkit-box",
+              WebkitBoxOrient: "vertical",
+              WebkitLineClamp: 3,
+              overflow: "hidden",
+              lineHeight: "1.4",
+              maxHeight: "4.2em"
             }}>
-          <ListItemText
+          <ListItemText
             component="p"
+            title={cleanDescription}

Repo-wide grep in the sandbox returned no results (rg reported "No files were searched"), so I could not verify other occurrences — re-run locally and paste output or run this:
rg -n --hidden --no-ignore -S '(WebkitLineClamp|webkit-line-clamp|line-clamp:\s*\d|display:\s*-webkit-box)' .

@kart1ka kart1ka marked this pull request as draft September 19, 2025 04:11
@github-actions github-actions bot added ❗️ migrations contains migration files ❗️ .env changes contains changes to env variables labels Sep 24, 2025
@Anshumancanrock
Copy link
Contributor Author

@dhairyashiil could you please review this one :)

@Anshumancanrock
Copy link
Contributor Author

@dhairyashiil could you please review it ser? The video after fix is already there.

@dhairyashiil dhairyashiil removed ❗️ migrations contains migration files ❗️ .env changes contains changes to env variables Stale labels Dec 11, 2025
@dhairyashiil dhairyashiil removed the request for review from kart1ka December 11, 2025 07:36
Copy link
Member

@dhairyashiil dhairyashiil left a comment

Choose a reason for hiding this comment

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

Hello @Anshumancanrock,
Could you please refer to #23660 and attach videos showing the different types of behaviors the maintainer and contributor discussed there? This would help me a lot in reviewing and approving the PR.

Also, please make sure to check and record the behavior across all sizes like mobile, iPad, laptop, etc.

Thanks a ton!

@dhairyashiil dhairyashiil marked this pull request as draft December 11, 2025 07:36
@Anshumancanrock Anshumancanrock marked this pull request as ready for review December 11, 2025 15:01
@Anshumancanrock
Copy link
Contributor Author

@dhairyashiil yeah ! Attached the video there and here too, showing fix in both web and mobile view.

Recording.2025-12-11.195333.1.1.1.mp4

Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

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

No issues found across 1 file

@Anshumancanrock
Copy link
Contributor Author

Anshumancanrock commented Dec 12, 2025

I fixed two issues:

  1. The truncate ( … ) was not showing even where it was supposed to appear.

  2. The text was getting cut off at the bottom of the app card.

I also added one extra improvement: truncating the title when it exceeds one line. Without this, some app discription could never truncate properly since we are using a line clamp-3 for the description.

Hope this helps @dhairyashiil

@Anshumancanrock
Copy link
Contributor Author

hii @dhairyashiil did you test this :) ?

@github-actions
Copy link
Contributor

github-actions bot commented Jan 9, 2026

Devin AI is resolving merge conflicts

This PR has merge conflicts with the main branch. A Devin session has been created to automatically resolve them.

View Devin Session

Devin will:

  1. Merge the latest main into this branch
  2. Resolve any conflicts intelligently
  3. Run lint/type checks to ensure validity
  4. Push the resolved changes

If you prefer to resolve conflicts manually, you can close the Devin session and handle it yourself.

@github-actions
Copy link
Contributor

Devin AI is resolving merge conflicts

This PR has merge conflicts with the main branch. A Devin session has been created to automatically resolve them.

View Devin Session

Devin will:

  1. Merge the latest main into this branch
  2. Resolve any conflicts intelligently
  3. Run lint/type checks to ensure validity
  4. Push the resolved changes

If you prefer to resolve conflicts manually, you can close the Devin session and handle it yourself.

@Anshumancanrock Anshumancanrock marked this pull request as draft January 12, 2026 17:01
@github-actions github-actions bot added ❗️ migrations contains migration files ❗️ .env changes contains changes to env variables labels Jan 12, 2026
@Anshumancanrock Anshumancanrock marked this pull request as ready for review January 12, 2026 17:12
Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

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

No issues found across 2308 files

Note: This PR contains a large number of files. cubic only reviews up to 75 files per PR, so some files may not have been reviewed.

Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

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

1 issue found across 1 file

Prompt for AI agents (all issues)

Check if these issues are valid — if so, understand the root cause of each and fix them.


<file name="apps/web/modules/apps/components/AppCard.tsx">

<violation number="1" location="apps/web/modules/apps/components/AppCard.tsx:114">
P2: App name truncate won’t take effect in flex row (missing min-w-0/width), so long titles will still overflow.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

</div>
<div className="flex items-center">
<h3 className="text-emphasis font-medium">
<h3 className="text-emphasis truncate font-medium" title={app.name}>
Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot Jan 12, 2026

Choose a reason for hiding this comment

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

P2: App name truncate won’t take effect in flex row (missing min-w-0/width), so long titles will still overflow.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/web/modules/apps/components/AppCard.tsx, line 114:

<comment>App name truncate won’t take effect in flex row (missing min-w-0/width), so long titles will still overflow.</comment>

<file context>
@@ -109,7 +111,7 @@ export function AppCard({ app, credentials, searchText, userAdminTeams }: AppCar
       </div>
       <div className="flex items-center">
-        <h3 className="text-emphasis font-medium">
+        <h3 className="text-emphasis truncate font-medium" title={app.name}>
           {searchTextIndex != undefined && searchText ? (
             <>
</file context>

Fix confidence (alpha): 8.5/10

Suggested change
<h3 className="text-emphasis truncate font-medium" title={app.name}>
<h3 className="text-emphasis truncate font-medium min-w-0" title={app.name}>
Fix with Cubic

@anikdhabal
Copy link
Contributor

Thanks for your work, fixed by this:- #26722

@anikdhabal anikdhabal closed this Jan 15, 2026
@Anshumancanrock
Copy link
Contributor Author

@anikdhabal the microsoft teams app card's description is still not truncating
image

Since the description is set to truncate after 3 lines and this particular card’s description only has 2 lines so truncation doesn’t take effect. If we truncate the long title to a single line, the description would extend to 3 lines and truncate properly.

Should I raise a PR to fix this specific case?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🐛 bug Something isn't working community Created by Linear-GitHub Sync devin-conflict-resolution ❗️ .env changes contains changes to env variables 🧹 Improvements Improvements to existing features. Mostly UX/UI Low priority Created by Linear-GitHub Sync ❗️ migrations contains migration files size/S ui area: UI, frontend, button, form, input

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[bug]: line-clamp property does not truncate long texts properly in app card description

5 participants