46 lines
1.4 KiB
JavaScript
46 lines
1.4 KiB
JavaScript
import { styleBucketOrdering } from '@griffel/core';
|
|
import * as React from 'react';
|
|
|
|
/**
|
|
* This method returns a list of <style> React elements with the rendered CSS. This is useful for Server-Side rendering.
|
|
*
|
|
* @public
|
|
*/
|
|
function renderToStyleElements(renderer) {
|
|
const stylesheets = Object.values(renderer.stylesheets)
|
|
// first sort: bucket names
|
|
.sort((a, b) => {
|
|
return styleBucketOrdering.indexOf(a.bucketName) - styleBucketOrdering.indexOf(b.bucketName);
|
|
})
|
|
// second sort: media queries
|
|
.sort((a, b) => {
|
|
const mediaA = a.elementAttributes['media'];
|
|
const mediaB = b.elementAttributes['media'];
|
|
if (mediaA && mediaB) {
|
|
return renderer.compareMediaQueries(mediaA, mediaB);
|
|
}
|
|
if (mediaA || mediaB) {
|
|
return mediaA ? 1 : -1;
|
|
}
|
|
return 0;
|
|
});
|
|
return stylesheets.map(stylesheet => {
|
|
const cssRules = stylesheet.cssRules();
|
|
// don't want to create any empty style elements
|
|
if (!cssRules.length) {
|
|
return null;
|
|
}
|
|
return /*#__PURE__*/React.createElement('style', Object.assign({
|
|
key: stylesheet.bucketName
|
|
}, stylesheet.elementAttributes, {
|
|
'data-make-styles-rehydration': 'true',
|
|
dangerouslySetInnerHTML: {
|
|
__html: cssRules.join('')
|
|
}
|
|
}));
|
|
}).filter(Boolean);
|
|
}
|
|
|
|
export { renderToStyleElements };
|
|
//# sourceMappingURL=renderToStyleElements.esm.js.map
|