From 7318ef1ed49f11cb68b859cdd99dfb8643ef54c5 Mon Sep 17 00:00:00 2001 From: Diego Vega Centeno Date: Tue, 21 Jul 2026 01:57:50 -0500 Subject: [PATCH] fix(core): forward svg props to icon renderer (#15278) ## Problem Page reference icon is vertically misaligned because the `pageReferenceIcon` class is not applied. This is because `IconRenderer` does not forward SVG props to the underlying `AffineIconRenderer` component. ## Fix Main fix: - Forward SVG props in `getDocIconComponent`. - Add support for SVG props in `IconRenderer`. Side fixes: - Comment out color in `pageReferenceIcon` style so the icon inherits its parent color now that the class is actually applied - Remove hardcoded SVG margin used for vertical alignment. ## Before / After **Before** before **After** after ## Related issues - Fixes #14978: Makes icon vertically aligned. ## Summary by CodeRabbit - **Bug Fixes** - Improved icon rendering so additional display properties are correctly passed through to Affine icons. - Updated document icon components to support standard SVG properties, enabling more consistent customization. - Refined reference icon styling to allow color inheritance from surrounding UI context. - Removed unnecessary spacing beneath reference icons for cleaner alignment. --- .../inlines/reference/src/reference-node/reference-node.ts | 4 ---- packages/frontend/component/src/ui/icon-picker/renderer.tsx | 5 ++++- .../core/src/components/affine/reference-link/styles.css.ts | 2 +- .../core/src/modules/doc-display-meta/services/icon.tsx | 4 +++- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/blocksuite/affine/inlines/reference/src/reference-node/reference-node.ts b/blocksuite/affine/inlines/reference/src/reference-node/reference-node.ts index b4fe032545..e9c0a957cc 100644 --- a/blocksuite/affine/inlines/reference/src/reference-node/reference-node.ts +++ b/blocksuite/affine/inlines/reference/src/reference-node/reference-node.ts @@ -49,10 +49,6 @@ export class AffineReference extends WithDisposable(ShadowlessElement) { cursor: pointer; user-select: none; padding: 1px 2px 1px 0; - - svg { - margin-bottom: 0.1em; - } } .affine-reference:hover { background: var(--affine-hover-color); diff --git a/packages/frontend/component/src/ui/icon-picker/renderer.tsx b/packages/frontend/component/src/ui/icon-picker/renderer.tsx index 3410798565..d6842d66c2 100644 --- a/packages/frontend/component/src/ui/icon-picker/renderer.tsx +++ b/packages/frontend/component/src/ui/icon-picker/renderer.tsx @@ -6,6 +6,7 @@ import { type IconData, IconType } from './type'; export const IconRenderer = ({ data, fallback, + ...props }: { data?: IconData; fallback?: ReactNode; @@ -18,7 +19,9 @@ export const IconRenderer = ({ return data.unicode; } if (data.type === IconType.AffineIcon && data.name) { - return ; + return ( + + ); } if (data.type === IconType.Blob) { // Not supported yet diff --git a/packages/frontend/core/src/components/affine/reference-link/styles.css.ts b/packages/frontend/core/src/components/affine/reference-link/styles.css.ts index 3bb23f49c4..53c487472b 100644 --- a/packages/frontend/core/src/components/affine/reference-link/styles.css.ts +++ b/packages/frontend/core/src/components/affine/reference-link/styles.css.ts @@ -5,7 +5,7 @@ export const pageReferenceIcon = style({ verticalAlign: 'middle', fontSize: '1.1em', transform: 'translate(2px, -1px)', - color: cssVarV2('icon/primary'), + // color: cssVarV2('icon/primary'), }); export const pageReferenceLink = style({ diff --git a/packages/frontend/core/src/modules/doc-display-meta/services/icon.tsx b/packages/frontend/core/src/modules/doc-display-meta/services/icon.tsx index ec0fc6e7f5..1a1ff2c16c 100644 --- a/packages/frontend/core/src/modules/doc-display-meta/services/icon.tsx +++ b/packages/frontend/core/src/modules/doc-display-meta/services/icon.tsx @@ -3,7 +3,9 @@ import * as litIcons from '@blocksuite/icons/lit'; import { html } from 'lit'; export const getDocIconComponent = (icon: IconData) => { - const Icon = () => ; + const Icon = (props: React.SVGProps) => ( + + ); Icon.displayName = 'DocIcon'; return Icon; };