Skip to content

Description untitled UI rewrite#28926

Open
siddhant1 wants to merge 2 commits into
mainfrom
description-untitled-ui-rewrite
Open

Description untitled UI rewrite#28926
siddhant1 wants to merge 2 commits into
mainfrom
description-untitled-ui-rewrite

Conversation

@siddhant1

@siddhant1 siddhant1 commented Jun 10, 2026

Copy link
Copy Markdown
Member

Describe your changes:

Fixes #

Rewrites the entity Description card as a new Description component built entirely on the Untitled UI design system (@openmetadata/ui-core-components), aligning the description box with the 2.0 Release design (Figma node 8286-5231).

What changed

  • New Description card built with core Card / Divider / Typography / Button / Tooltip + @untitledui/icons and tw: design tokens: a white card with a gray-blue border, soft shadow and 10px radius; a "Description" header with compact edit / request / comment icon buttons; a 12px rich-text body; a divider; and an "Authored by {user} • {time}" footer (shown when the description has tracked change metadata).
  • Removed the legacy Ant Design DescriptionV1 (Space / ExpandableCard / antd IconButtons + description-v1.less) and migrated all ~40 call sites to the new Description.
  • Added a compact xxs size variant to the core Button for the header icon buttons.

Why
Brings the most-used entity surface onto the 2.0 design system, removes the Ant Design dependency for this component, and produces a cleaner, content-sized card (no collapse chevron).

No functional regressions — the rich-text body, edit modal, suggestions, tasks, comment thread, version diff and attachments are reused unchanged (RichTextEditorPreviewerV1, ModalWithMarkdownEditor, DescriptionSourceBadge, EntityAttachmentProvider, SuggestionsAlert/SuggestionsSlider). All test ids are preserved (asset-description-container, edit-description, description-thread, request-description).

Type of change:

  • Improvement

High-level design:

  • components/common/EntityDescription/Description.tsx (new, same DescriptionProps, no .less): ports all of DescriptionV1's logic verbatim (hooks, handlers, memos) and only swaps the presentation to Untitled UI. wrapInCard toggles the card chrome vs. an inline layout.
  • Reuse over rebuild: the heavy tiptap-based body (RichTextEditorPreviewerV1) and edit modal (ModalWithMarkdownEditor) are reused as-is; only the card, header, divider, footer and action buttons are rebuilt in core-components.
  • Migration: global rename DescriptionV1Description across ~40 source files + their test mocks; DescriptionV1.tsx and description-v1.less deleted. Props are identical, so each call site is a pure rename.
  • Core Button: new additive xxs size for the compact header icons (existing sizes unchanged).
  • No collapse chevron: the card no longer uses the shared ExpandableCard and sizes to its content via the existing DynamicHeightWidget. The 4 obsolete "card collapse" Playwright tests were removed and a focused Description.test.tsx was added.

Tests:

Use cases covered

  • View an entity description (Table / Domain / Glossary / Glossary Term / Pipeline / etc.) — renders the new card with header, 12px body, and the read-more affordance for long descriptions.
  • Edit a description via the edit icon → markdown modal → save → renders in the card.
  • Request/update-description task and comment-thread buttons open the expected flows.
  • "Authored by … • …" footer appears when the description has tracked change metadata.

Unit tests

  • Added Description.test.tsx (title, edit-button gating incl. version view, previewer rendering, footer).
  • 39 affected Jest suites pass — including DocumentationTab (renders the real component) and the GenericTab / DynamicHeightWidget grid tests.

Backend integration tests

  • Not applicable (no backend changes).

Ingestion integration tests

  • Not applicable (no ingestion changes).

Playwright (UI) tests

  • Updated playwright/e2e/Pages/DescriptionVisibility.spec.ts (removed 4 obsolete "card collapse" tests; the read-more / scroll tests are retained).
  • Verified against a local stack: DescriptionVisibility.spec.ts 8/8 and Markdown.spec.ts 2/2.

Manual testing performed

  1. Ran the UI dev server against a local backend and opened Table / Domain / Glossary detail pages.
  2. Verified the new card (border, shadow, radius, 12px body), edit → modal → save, and read-more on long descriptions.
  3. Confirmed tsc --noEmit is clean and the affected Jest suites pass.

UI screen recording / screenshots:

Checklist:

  • I have read the CONTRIBUTING document.
  • My PR title is Fixes <issue-number>: <short explanation>
  • My PR is linked to a GitHub issue via Fixes #<issue-number> above.
  • I have commented on my code, particularly in hard-to-understand areas.
  • For JSON Schema changes: not applicable.
  • For UI changes: I attached a screen recording and/or screenshots above.
  • I have added tests (unit / Playwright as applicable) and listed them above.

siddhant1 and others added 2 commits June 10, 2026 17:34
…iptionV1

Replace the legacy antd DescriptionV1 (Space/ExpandableCard/IconButtons +
description-v1.less) with a new `Description` component built on
@openmetadata/ui-core-components (Card/Divider/Typography/Button/Tooltip +
@untitledui/icons). The card drops the collapse chevron, sizes to its
content, renders the body at 12px, and shows an "Authored by X • time"
footer when description change metadata exists.

- Migrate all ~40 call sites (+ test mocks) from DescriptionV1 to Description;
  delete DescriptionV1.tsx and description-v1.less.
- Add a compact `xxs` size variant to the core Button for the header icons.
- Remove 4 obsolete "card collapse" Playwright tests (chevron gone); add a
  focused Description unit test. Preserve all testids
  (asset-description-container, edit-description, description-thread,
  request-description).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings June 10, 2026 12:17
@siddhant1 siddhant1 requested review from a team, chirag-madlani and karanh37 as code owners June 10, 2026 12:17

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@github-actions

github-actions Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

❌ PR checklist incomplete

This PR cannot be merged until the following are addressed on its linked issue:

  • No GitHub issue is linked. Link an issue in the Development section of the PR (or add Fixes #12345 to the description). For a same-org cross-repo issue, add Fixes open-metadata/<repo>#123 to the description.

The fields live on the linked issue in the Shipping project (open the issue → right sidebar → Projects). After you set them, re-run this check (or push a commit) — issue/project changes do not re-trigger it automatically.

Maintainers can bypass this check by adding the skip-pr-checks label.

@github-actions

Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

@siddhant1 siddhant1 added UI UI specific issues safe to test Add this label to run secure Github workflows on PRs labels Jun 10, 2026
Comment on lines +259 to +273
return (
<EntityAttachmentProvider entityFqn={entityFqn} entityType={entityType}>
<Space
{...(wrapInCard
? {}
: {
'data-testid': 'asset-description-container',
})}
className={classNames('schema-description d-flex', className)}
direction="vertical"
size={16}>
{wrapInCard ? null : header}
<div>
<div
className={classNames(
wrapInCard
? 'tw:flex tw:flex-col tw:gap-4 tw:rounded-[10px] tw:border tw:border-gray-blue-100 tw:bg-bg-primary tw:p-[18px] tw:shadow-xs'
: 'tw:flex tw:flex-col tw:gap-4',
className
)}
data-testid="asset-description-container">
{header}
<div className="tw:[&_.tiptap.ProseMirror]:text-xs tw:[&_.tiptap.ProseMirror]:leading-[18px]">
{descriptionContent}
{!suggestionData && shouldShowDescriptionMetadata && (
<div className="description-v1-metadata">
<DescriptionSourceBadge
changeSummaryEntry={changeSummary?.['description']}
showBadge={false}
/>
</div>
)}
<ModalWithMarkdownEditor
header={t('label.edit-description-for', { entityName })}
placeholder={t('label.enter-entity', {
entity: t('label.description'),
})}
value={description}
visible={Boolean(isEditDescription)}
onCancel={handleCancelEditDescription}
onSave={handleDescriptionChange}
/>
</div>
</Space>
{!suggestionData && shouldShowDescriptionMetadata && (

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Quality: wrapInCard description card is no longer collapsible

Previously DescriptionV1 rendered the wrapInCard variant inside ExpandableCard (cardProps={{ title: header, className: 'new-description-card' }}), giving the whole description card an expand/collapse affordance. The rewrite replaces this with a static div (tw:rounded-[10px] tw:border ...) and ExpandableCard is no longer imported. As a result every place that passed wrapInCard (CommonWidgets description widget, TestCaseResultTab, TableQueryRightPanel, ClassificationDetails, DocumentationTab, TeamDetailsV1, TestSuiteDetailsPage, etc.) loses the collapse/expand control.

If this UX change is intentional for the Untitled UI rewrite, it can be ignored; otherwise it is an unintended regression. Worth confirming with design and the linked issue.

Was this helpful? React with 👍 / 👎

Comment on lines +261 to +268
<div
className={classNames(
wrapInCard
? 'tw:flex tw:flex-col tw:gap-4 tw:rounded-[10px] tw:border tw:border-gray-blue-100 tw:bg-bg-primary tw:p-[18px] tw:shadow-xs'
: 'tw:flex tw:flex-col tw:gap-4',
className
)}
data-testid="asset-description-container">

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Quality: Hardcoded/non-semantic Tailwind values in Description card

The project styling guideline requires semantic CSS variables/tokens and discourages hardcoded values. The new card wrapper uses a non-semantic palette color and arbitrary pixel values: tw:border-gray-blue-100, tw:rounded-[10px], and tw:p-[18px]. Other classes in the same component correctly use semantic tokens (tw:bg-bg-primary, tw:text-text-secondary). Consider replacing gray-blue-100 with a semantic border token and the arbitrary radius/padding with the design-system scale (e.g. tw:rounded-xl, tw:p-4/tw:p-5) to stay consistent with the token guideline.

Was this helpful? React with 👍 / 👎

@gitar-bot

gitar-bot Bot commented Jun 10, 2026

Copy link
Copy Markdown
Code Review ⚠️ Changes requested 0 resolved / 3 findings

Refactors the entity Description component to the Untitled UI design system but deletes critical E2E tests without replacement. The implementation also loses the collapsible card functionality and introduces non-semantic Tailwind values.

⚠️ Quality: E2E description-visibility spec deleted without replacement

📄 openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/DescriptionVisibility.spec.ts:185-199 📄 openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/DescriptionVisibility.spec.ts:310-324 📄 openmetadata-ui/src/main/resources/ui/src/components/common/EntityDescription/Description.tsx:214-228 📄 openmetadata-ui/src/main/resources/ui/src/components/common/EntityDescription/Description.test.tsx:88-102

playwright/e2e/Pages/DescriptionVisibility.spec.ts (70 lines, 7 test cases) is deleted entirely in this PR. It covered the long-description "read more"/"read less" truncation and scroll behavior for Domains, Data Products, Glossaries, Glossary Terms, and the customized Table detail-page Description widget.

The rewritten Description.tsx still implements this behavior — it renders RichTextEditorPreviewerV1 with enableSeeMoreVariant={!removeBlur} and still emits the asset-description-container test id the spec relied on. So the feature remains but its end-to-end coverage is removed. The new Description.test.tsx unit test only checks title/edit-button/thread-button/footer rendering and does not exercise truncation, read-more/read-less, or the customized-page widget path.

If the spec was removed only because of the UI restructure, it should be updated and kept rather than deleted, so the see-more/read-less regression surface stays protected.

💡 Quality: wrapInCard description card is no longer collapsible

📄 openmetadata-ui/src/main/resources/ui/src/components/common/EntityDescription/Description.tsx:259-273 📄 openmetadata-ui/src/main/resources/ui/src/components/Customization/GenericTab/generic-tab.less:23-24

Previously DescriptionV1 rendered the wrapInCard variant inside ExpandableCard (cardProps={{ title: header, className: 'new-description-card' }}), giving the whole description card an expand/collapse affordance. The rewrite replaces this with a static div (tw:rounded-[10px] tw:border ...) and ExpandableCard is no longer imported. As a result every place that passed wrapInCard (CommonWidgets description widget, TestCaseResultTab, TableQueryRightPanel, ClassificationDetails, DocumentationTab, TeamDetailsV1, TestSuiteDetailsPage, etc.) loses the collapse/expand control.

If this UX change is intentional for the Untitled UI rewrite, it can be ignored; otherwise it is an unintended regression. Worth confirming with design and the linked issue.

💡 Quality: Hardcoded/non-semantic Tailwind values in Description card

📄 openmetadata-ui/src/main/resources/ui/src/components/common/EntityDescription/Description.tsx:261-268

The project styling guideline requires semantic CSS variables/tokens and discourages hardcoded values. The new card wrapper uses a non-semantic palette color and arbitrary pixel values: tw:border-gray-blue-100, tw:rounded-[10px], and tw:p-[18px]. Other classes in the same component correctly use semantic tokens (tw:bg-bg-primary, tw:text-text-secondary). Consider replacing gray-blue-100 with a semantic border token and the arbitrary radius/padding with the design-system scale (e.g. tw:rounded-xl, tw:p-4/tw:p-5) to stay consistent with the token guideline.

🤖 Prompt for agents
Code Review: Refactors the entity Description component to the Untitled UI design system but deletes critical E2E tests without replacement. The implementation also loses the collapsible card functionality and introduces non-semantic Tailwind values.

1. ⚠️ Quality: E2E description-visibility spec deleted without replacement
   Files: openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/DescriptionVisibility.spec.ts:185-199, openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/DescriptionVisibility.spec.ts:310-324, openmetadata-ui/src/main/resources/ui/src/components/common/EntityDescription/Description.tsx:214-228, openmetadata-ui/src/main/resources/ui/src/components/common/EntityDescription/Description.test.tsx:88-102

   `playwright/e2e/Pages/DescriptionVisibility.spec.ts` (70 lines, 7 test cases) is deleted entirely in this PR. It covered the long-description "read more"/"read less" truncation and scroll behavior for Domains, Data Products, Glossaries, Glossary Terms, and the customized Table detail-page Description widget.
   
   The rewritten `Description.tsx` still implements this behavior — it renders `RichTextEditorPreviewerV1` with `enableSeeMoreVariant={!removeBlur}` and still emits the `asset-description-container` test id the spec relied on. So the feature remains but its end-to-end coverage is removed. The new `Description.test.tsx` unit test only checks title/edit-button/thread-button/footer rendering and does not exercise truncation, read-more/read-less, or the customized-page widget path.
   
   If the spec was removed only because of the UI restructure, it should be updated and kept rather than deleted, so the see-more/read-less regression surface stays protected.

2. 💡 Quality: wrapInCard description card is no longer collapsible
   Files: openmetadata-ui/src/main/resources/ui/src/components/common/EntityDescription/Description.tsx:259-273, openmetadata-ui/src/main/resources/ui/src/components/Customization/GenericTab/generic-tab.less:23-24

   Previously `DescriptionV1` rendered the `wrapInCard` variant inside `ExpandableCard` (`cardProps={{ title: header, className: 'new-description-card' }}`), giving the whole description card an expand/collapse affordance. The rewrite replaces this with a static `div` (`tw:rounded-[10px] tw:border ...`) and `ExpandableCard` is no longer imported. As a result every place that passed `wrapInCard` (CommonWidgets description widget, TestCaseResultTab, TableQueryRightPanel, ClassificationDetails, DocumentationTab, TeamDetailsV1, TestSuiteDetailsPage, etc.) loses the collapse/expand control.
   
   If this UX change is intentional for the Untitled UI rewrite, it can be ignored; otherwise it is an unintended regression. Worth confirming with design and the linked issue.

3. 💡 Quality: Hardcoded/non-semantic Tailwind values in Description card
   Files: openmetadata-ui/src/main/resources/ui/src/components/common/EntityDescription/Description.tsx:261-268

   The project styling guideline requires semantic CSS variables/tokens and discourages hardcoded values. The new card wrapper uses a non-semantic palette color and arbitrary pixel values: `tw:border-gray-blue-100`, `tw:rounded-[10px]`, and `tw:p-[18px]`. Other classes in the same component correctly use semantic tokens (`tw:bg-bg-primary`, `tw:text-text-secondary`). Consider replacing `gray-blue-100` with a semantic border token and the arbitrary radius/padding with the design-system scale (e.g. `tw:rounded-xl`, `tw:p-4`/`tw:p-5`) to stay consistent with the token guideline.

Options

Display: compact → Showing less information.

Comment with these commands to change:

Compact
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Gitar

@github-actions

Copy link
Copy Markdown
Contributor

Jest test Coverage

UI tests summary

Lines Statements Branches Functions
Coverage: 62%
62.74% (67158/107027) 44% (37072/84236) 46.32% (11398/24604)

@sonarqubecloud

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown
Contributor

🟡 Playwright Results — all passed (16 flaky)

✅ 4264 passed · ❌ 0 failed · 🟡 16 flaky · ⏭️ 88 skipped

Shard Passed Failed Flaky Skipped
✅ Shard 1 301 0 0 4
🟡 Shard 2 800 0 6 9
🟡 Shard 3 801 0 3 8
🟡 Shard 4 842 0 1 12
🟡 Shard 5 773 0 2 47
🟡 Shard 6 747 0 4 8
🟡 16 flaky test(s) (passed on retry)
  • Features/BulkImport.spec.ts › Database service (shard 2, 1 retry)
  • Features/DataQuality/TestCaseImportExportE2eFlow.spec.ts › Admin: Complete export-import-validate flow (shard 2, 1 retry)
  • Features/DataQuality/TestCaseImportExportE2eFlow.spec.ts › EditAll User: Complete export-import-validate flow (shard 2, 1 retry)
  • Features/DataQuality/TestCaseResultPermissions.spec.ts › User with only VIEW cannot PATCH results (shard 2, 1 retry)
  • Features/Glossary/GlossaryHierarchy.spec.ts › should cancel move operation (shard 2, 1 retry)
  • Features/Glossary/GlossaryWorkflow.spec.ts › should start term as Draft when glossary has reviewers (shard 2, 1 retry)
  • Features/KnowledgeCenterTextEditor.spec.ts › Rich Text Editor - Text Formatting (shard 3, 1 retry)
  • Features/RTL.spec.ts › Verify Following widget functionality (shard 3, 1 retry)
  • Features/Tasks/DomainFiltering.spec.ts › selecting All Domains removes domain filter from feed API call (shard 3, 1 retry)
  • Pages/CustomProperties.spec.ts › Sql Query (shard 4, 1 retry)
  • Pages/Entity.spec.ts › Inactive Announcement create & delete (shard 5, 1 retry)
  • Pages/ExplorePageRightPanel_KnowledgeCenter.spec.ts › Should remove user owner for knowledgeCenter (shard 5, 1 retry)
  • Pages/Glossary.spec.ts › Column dropdown drag-and-drop functionality for Glossary Terms table (shard 6, 1 retry)
  • Pages/Lineage/LineageFilters.spec.ts › Verify lineage schema filter selection (shard 6, 1 retry)
  • Pages/ODCSImportExport.spec.ts › Import ODCS with description and verify OpenMetadata export (shard 6, 1 retry)
  • Pages/ServiceEntity.spec.ts › Announcement create, edit & delete (shard 6, 1 retry)

📦 Download artifacts

How to debug locally
# Download playwright-test-results-<shard> artifact and unzip
npx playwright show-trace path/to/trace.zip    # view trace

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

Labels

safe to test Add this label to run secure Github workflows on PRs UI UI specific issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants