You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
AntdRegistry internally wraps everything in StyleProvider and uses extractStyle. I've noticed that whenever Popover is wrapping a button on any page, extractStyle returns an invalid CSS. Here's an example:
...
.css-var-R2cq.ant-popover {
--ant-popover-title-min-width:177px;
--ant-popover-z-index-popup:1030;
--ant-popover-arrow-shadow-width:8.970562748477143px;
--ant-popover-arrow-path:path('M 0 8 A 4 4 0 0 0 2.82842712474619 6.82842712474619 L 6.585786437626905 3.0710678118654755 A 2 2 0 0 1 9.414213562373096 3.0710678118654755 L 13.17157287525381 6.82842712474619 A 4 4 0 0 0 16 8 Z');
--ant-popover-arrow-polygon:polygon(1.6568542494923806px100%,50%1.6568542494923806px,14.34314575050762px100%,1.6568542494923806px100%);
--ant-popover-arrow-offset-horizontal:12px;
--ant-popover-arrow-offset-vertical:8px;
--ant-popover-inner-padding:12px;
--ant-popover-title-margin-bottom:8px;
--ant-popover-title-padding:0px;
--ant-popover-title-border-bottom: none;
--ant-popover-inner-content-padding:0px;
}
@layer antd@layer antd { /* Here's the problem it includes "@layer antd" twice */
.ant-progress { /* I have Progress component in a different place on that page */font-family:var(--ant-font-family);
font-size:var(--ant-font-size);
box-sizing: border-box;
}
...
So far, the workaround is to copy the AntdRegistry component and modify the extracted styles not to include duplication of @layer antd@layer antd and replace with one @layer antd.
const AntdRegistry: FC<AntdRegistryProps> = (props) => {
const [cache] = useState(() => createCache());
const inserted = useRef(false);
useServerInsertedHTML(() => {
let styleText = extractStyle(cache, { plain: true });
if (inserted.current) {
return null;
}
inserted.current = true;
+ styleText = styleText.replaceAll(/@layer antd@layer antd/g, '@layer antd');
return (
<style
id="antd-cssinjs"
// to make sure this style is inserted before Ant Design's style generated by client
data-rc-order="prepend"
data-rc-priority="-1000"
dangerouslySetInnerHTML={{ __html: styleText }}
/>
);
});
return <StyleProvider {...props} cache={cache} />;
};
The text was updated successfully, but these errors were encountered:
I use Next.js with
antd
and@ant-design/nextjs-registry
:AntdRegistry
internally wraps everything inStyleProvider
and usesextractStyle
. I've noticed that whenever Popover is wrapping a button on any page,extractStyle
returns an invalid CSS. Here's an example:@Kiyumi-v reproduced the problem here ant-design/ant-design#49853 (comment) (you might find more details about the issue there).
Workaround
So far, the workaround is to copy the
AntdRegistry
component and modify the extracted styles not to include duplication of@layer antd@layer antd
and replace with one@layer antd
.const AntdRegistry: FC<AntdRegistryProps> = (props) => { const [cache] = useState(() => createCache()); const inserted = useRef(false); useServerInsertedHTML(() => { let styleText = extractStyle(cache, { plain: true }); if (inserted.current) { return null; } inserted.current = true; + styleText = styleText.replaceAll(/@layer antd@layer antd/g, '@layer antd'); return ( <style id="antd-cssinjs" // to make sure this style is inserted before Ant Design's style generated by client data-rc-order="prepend" data-rc-priority="-1000" dangerouslySetInnerHTML={{ __html: styleText }} /> ); }); return <StyleProvider {...props} cache={cache} />; };
The text was updated successfully, but these errors were encountered: