From b0ee6f5323400897dde29b9a715f16f59b91d731 Mon Sep 17 00:00:00 2001 From: rbondesson Date: Thu, 30 Apr 2026 13:54:49 +0200 Subject: [PATCH] Add CSS cascade layers for Compound, shared components, and app/web styles (#33302) * Layer Compound and shared component CSS * Layer app theme CSS * Remove !important flags from ActionBarView * Remove unnecessary !important statements from shared components * Avoid dead code errors for *.pcss just because layer is specified after @import url * Remove unnecessary !important styling * Override Banner defaults in RoomStatusBarView * Updated snaps * Updated snaps * Fix styling of media body in app/web * Fix styling for Compound anchors * Fix styling issues in app/web * More styling fixes * Fix a problem extracting css for HTMLExport * Revert changes * Fix for theme styling * Add test to improve coverage * Prettier * Fix styling issues * Add data-kind attribute to avoid global styling override * Update screenshot that now is correct * Revert data-kind attribute * Handle LinkPreview styling in .pcss * Fix flaky test: Avoid racing the lazy-loaded ManageEventIndexDialog * Take care of review comments * Updated snaps * Updated snaps again after merge * Remove !important from RoomStatusBar --- .../window-custom-theme-linux.png | Bin 57186 -> 57394 bytes apps/web/res/css/_common.pcss | 7 +- apps/web/res/css/_compound.pcss | 7 +- .../audio_messages/_PlaybackContainer.pcss | 5 +- .../css/views/auth/_CompleteSecurityBody.pcss | 2 +- .../res/css/views/messages/_MFileBody.pcss | 1 - .../res/css/views/messages/_MediaBody.pcss | 6 +- .../res/css/views/messages/_TextualEvent.pcss | 9 ++ .../css/views/settings/_ThemeChoicePanel.pcss | 12 ++- .../views/settings/tabs/_SettingsSection.pcss | 3 +- .../css/views/settings/tabs/_SettingsTab.pcss | 3 +- .../themes/dark-custom/css/dark-custom.pcss | 18 ++-- apps/web/res/themes/dark/css/dark.pcss | 18 ++-- .../themes/legacy-dark/css/legacy-dark.pcss | 16 ++-- .../themes/legacy-light/css/legacy-light.pcss | 14 +-- .../res/themes/light-custom/css/_custom.pcss | 13 +-- .../themes/light-custom/css/light-custom.pcss | 16 ++-- .../css/light-high-contrast.pcss | 18 ++-- apps/web/res/themes/light/css/light.pcss | 16 ++-- .../views/messages/TextualBodyFactory.tsx | 2 +- apps/web/src/theme.ts | 7 +- apps/web/src/utils/exportUtils/exportCSS.ts | 28 ++++-- .../src/utils/exportUtils/exportCustomCSS.css | 5 - .../__snapshots__/theme-test.ts.snap | 2 +- .../__snapshots__/RoomView-test.tsx.snap | 4 +- .../MessageEditHistoryDialog-test.tsx.snap | 16 ++-- .../__snapshots__/MBodyFactory-test.tsx.snap | 6 +- .../__snapshots__/MImageBody-test.tsx.snap | 4 +- .../RoomListSearch-test.tsx.snap | 8 +- .../__snapshots__/HTMLExport-test.ts.snap | 2 +- .../utils/exportUtils/exportCSS-test.ts | 90 ++++++++++++++++++ knip.ts | 9 +- .../shared-components/.storybook/compound.css | 7 +- packages/shared-components/.storybook/main.ts | 23 ++++- .../PlayPauseButton.module.css | 4 +- .../menu/OptionMenuView.module.css | 2 +- .../RoomListSearchView.module.css | 5 +- .../RoomStatusBarView.module.css | 16 ++-- .../DateSeparatorContextMenuView.module.css | 10 +- .../DateSeparatorDatePickerView.module.css | 12 +-- .../UrlPreviewGroupView.tsx | 11 ++- .../ActionBarView/ActionBarView.module.css | 22 ++--- .../AudioPlayerView.module.css | 4 +- .../MFileBodyView/FileBodyView.module.css | 5 +- .../MessageTimestampView.module.css | 2 +- packages/shared-components/vite.config.ts | 27 +++++- 46 files changed, 351 insertions(+), 166 deletions(-) diff --git a/apps/web/playwright/snapshots/settings/appearance-user-settings-tab/theme-choice-panel.spec.ts/window-custom-theme-linux.png b/apps/web/playwright/snapshots/settings/appearance-user-settings-tab/theme-choice-panel.spec.ts/window-custom-theme-linux.png index ad8bd39b6d30174411defdef0d9a7fcf312ab596..dc175017bb40c3e5a09199d02b925458f730e3be 100644 GIT binary patch literal 57394 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 literal 57186 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 `6f{)z4T)T)ZYrjq_Zvw)LF-OnJD;JXlB8Fs-(6 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 TB .mx_MediaBody { + border-radius: var(--MBody-border-radius); } diff --git a/apps/web/res/css/views/messages/_TextualEvent.pcss b/apps/web/res/css/views/messages/_TextualEvent.pcss index bf7061f2ba..3dbde24791 100644 --- a/apps/web/res/css/views/messages/_TextualEvent.pcss +++ b/apps/web/res/css/views/messages/_TextualEvent.pcss @@ -19,3 +19,12 @@ Please see LICENSE files in the repository root for full details. opacity: unset; /* Unset the opacity value specified above on the search results panel */ } } + +.mx_TextualBody_urlPreviews { + /* Let shared-components own preview link colours instead of the app-wide anchor colour. */ + a:where(:not([data-kind])):hover, + a:where(:not([data-kind])):link, + a:where(:not([data-kind])):visited { + color: revert-layer; + } +} diff --git a/apps/web/res/css/views/settings/_ThemeChoicePanel.pcss b/apps/web/res/css/views/settings/_ThemeChoicePanel.pcss index e61671f4f5..d5e9f5c619 100644 --- a/apps/web/res/css/views/settings/_ThemeChoicePanel.pcss +++ b/apps/web/res/css/views/settings/_ThemeChoicePanel.pcss @@ -26,12 +26,22 @@ Please see LICENSE files in the repository root for full details. &.mx_ThemeChoicePanel_themeSelector_disabled { border-color: var(--cpd-color-border-disabled); + + .mx_ThemeChoicePanel_themeSelector_Label { + color: var(--cpd-color-text-disabled); + cursor: not-allowed; + } } .mx_ThemeChoicePanel_themeSelector_Label { - color: var(--cpd-color-text-primary); font: var(--cpd-font-body-md-semibold); } + + &:not(.mx_ThemeChoicePanel_themeSelector_disabled) { + .mx_ThemeChoicePanel_themeSelector_Label { + color: var(--cpd-color-text-primary); + } + } } } diff --git a/apps/web/res/css/views/settings/tabs/_SettingsSection.pcss b/apps/web/res/css/views/settings/tabs/_SettingsSection.pcss index c98732e884..0a70169248 100644 --- a/apps/web/res/css/views/settings/tabs/_SettingsSection.pcss +++ b/apps/web/res/css/views/settings/tabs/_SettingsSection.pcss @@ -12,7 +12,8 @@ Please see LICENSE files in the repository root for full details. color: $primary-content; - a { + /* Compound links carry data-kind and provide their own colour. */ + a:not([data-kind]) { color: $links; } diff --git a/apps/web/res/css/views/settings/tabs/_SettingsTab.pcss b/apps/web/res/css/views/settings/tabs/_SettingsTab.pcss index c92e454e05..9e43079364 100644 --- a/apps/web/res/css/views/settings/tabs/_SettingsTab.pcss +++ b/apps/web/res/css/views/settings/tabs/_SettingsTab.pcss @@ -10,7 +10,8 @@ Please see LICENSE files in the repository root for full details. color: $primary-content; - a { + /* Compound links carry data-kind and provide their own colour. */ + a:not([data-kind]) { color: $links; } diff --git a/apps/web/res/themes/dark-custom/css/dark-custom.pcss b/apps/web/res/themes/dark-custom/css/dark-custom.pcss index 7eaffcee0c..1b1b30f33d 100644 --- a/apps/web/res/themes/dark-custom/css/dark-custom.pcss +++ b/apps/web/res/themes/dark-custom/css/dark-custom.pcss @@ -1,9 +1,11 @@ -@import "../../../../res/css/_font-sizes.pcss"; -@import "../../legacy-light/css/_fonts.pcss"; -@import "../../legacy-light/css/_legacy-light.pcss"; -@import "../../legacy-dark/css/_legacy-dark.pcss"; -@import "../../light-custom/css/_custom.pcss"; -@import "../../../../res/css/_components.pcss"; +@layer compound-tokens, compound-web, shared-components, app-web; + +@import "../../../../res/css/_font-sizes.pcss" layer(app-web); +@import "../../legacy-light/css/_fonts.pcss" layer(app-web); +@import "../../legacy-light/css/_legacy-light.pcss" layer(app-web); +@import "../../legacy-dark/css/_legacy-dark.pcss" layer(app-web); +@import "../../light-custom/css/_custom.pcss" layer(app-web); +@import "../../../../res/css/_components.pcss" layer(app-web); @import "../../../../res/css/_compound.pcss"; -@import url("highlight.js/styles/atom-one-light.min.css"); -@import url("github-markdown-css/github-markdown-dark.css"); +@import url("highlight.js/styles/atom-one-light.min.css") layer(app-web); +@import url("github-markdown-css/github-markdown-dark.css") layer(app-web); diff --git a/apps/web/res/themes/dark/css/dark.pcss b/apps/web/res/themes/dark/css/dark.pcss index 05cc9dfb6a..abb4fc04ee 100644 --- a/apps/web/res/themes/dark/css/dark.pcss +++ b/apps/web/res/themes/dark/css/dark.pcss @@ -1,9 +1,11 @@ -@import "../../../../res/css/_font-sizes.pcss"; -@import "../../light/css/_fonts.pcss"; -@import "../../light/css/_light.pcss"; -@import "_dark.pcss"; -@import "../../light/css/_mods.pcss"; -@import "../../../../res/css/_components.pcss"; +@layer compound-tokens, compound-web, shared-components, app-web; + +@import "../../../../res/css/_font-sizes.pcss" layer(app-web); +@import "../../light/css/_fonts.pcss" layer(app-web); +@import "../../light/css/_light.pcss" layer(app-web); +@import "_dark.pcss" layer(app-web); +@import "../../light/css/_mods.pcss" layer(app-web); +@import "../../../../res/css/_components.pcss" layer(app-web); @import "../../../../res/css/_compound.pcss"; -@import url("highlight.js/styles/atom-one-dark.min.css"); -@import url("github-markdown-css/github-markdown-dark.css"); +@import url("highlight.js/styles/atom-one-dark.min.css") layer(app-web); +@import url("github-markdown-css/github-markdown-dark.css") layer(app-web); diff --git a/apps/web/res/themes/legacy-dark/css/legacy-dark.pcss b/apps/web/res/themes/legacy-dark/css/legacy-dark.pcss index d816c8c24d..99dadd6eab 100644 --- a/apps/web/res/themes/legacy-dark/css/legacy-dark.pcss +++ b/apps/web/res/themes/legacy-dark/css/legacy-dark.pcss @@ -1,8 +1,10 @@ -@import "../../../../res/css/_font-sizes.pcss"; -@import "../../legacy-light/css/_fonts.pcss"; -@import "../../legacy-light/css/_legacy-light.pcss"; -@import "_legacy-dark.pcss"; -@import "../../../../res/css/_components.pcss"; +@layer compound-tokens, compound-web, shared-components, app-web; + +@import "../../../../res/css/_font-sizes.pcss" layer(app-web); +@import "../../legacy-light/css/_fonts.pcss" layer(app-web); +@import "../../legacy-light/css/_legacy-light.pcss" layer(app-web); +@import "_legacy-dark.pcss" layer(app-web); +@import "../../../../res/css/_components.pcss" layer(app-web); @import "../../../../res/css/_compound.pcss"; -@import url("highlight.js/styles/atom-one-dark.min.css"); -@import url("github-markdown-css/github-markdown-dark.css"); +@import url("highlight.js/styles/atom-one-dark.min.css") layer(app-web); +@import url("github-markdown-css/github-markdown-dark.css") layer(app-web); diff --git a/apps/web/res/themes/legacy-light/css/legacy-light.pcss b/apps/web/res/themes/legacy-light/css/legacy-light.pcss index d196b2850c..dcc7b1a82a 100644 --- a/apps/web/res/themes/legacy-light/css/legacy-light.pcss +++ b/apps/web/res/themes/legacy-light/css/legacy-light.pcss @@ -1,7 +1,9 @@ -@import "../../../../res/css/_font-sizes.pcss"; -@import "_fonts.pcss"; -@import "_legacy-light.pcss"; -@import "../../../../res/css/_components.pcss"; +@layer compound-tokens, compound-web, shared-components, app-web; + +@import "../../../../res/css/_font-sizes.pcss" layer(app-web); +@import "_fonts.pcss" layer(app-web); +@import "_legacy-light.pcss" layer(app-web); +@import "../../../../res/css/_components.pcss" layer(app-web); @import "../../../../res/css/_compound.pcss"; -@import url("highlight.js/styles/atom-one-light.min.css"); -@import url("github-markdown-css/github-markdown-light.css"); +@import url("highlight.js/styles/atom-one-light.min.css") layer(app-web); +@import url("github-markdown-css/github-markdown-light.css") layer(app-web); diff --git a/apps/web/res/themes/light-custom/css/_custom.pcss b/apps/web/res/themes/light-custom/css/_custom.pcss index 5f0210ed10..1bf761a7e7 100644 --- a/apps/web/res/themes/light-custom/css/_custom.pcss +++ b/apps/web/res/themes/light-custom/css/_custom.pcss @@ -25,16 +25,17 @@ $panels: var(--panels, var(--cpd-color-gray-600)); $panel-actions: var(--panels-actions, var(--cpd-color-gray-300)); /* --timeline-background-color */ -$button-secondary-bg-color: var(--timeline-background-color); -$lightbox-border-color: var(--timeline-background-color); -$menu-bg-color: var(--timeline-background-color); -$message-action-bar-bg-color: var(--timeline-background-color); -$background: var(--timeline-background-color); +$custom-theme-background: var(--timeline-background-color, var(--cpd-color-bg-canvas-default)); +$button-secondary-bg-color: $custom-theme-background; +$lightbox-border-color: $custom-theme-background; +$menu-bg-color: $custom-theme-background; +$message-action-bar-bg-color: $custom-theme-background; +$background: $custom-theme-background; $togglesw-ball-color: var(--cpd-color-bg-action-primary-rest); $togglesw-off-color: var(--togglesw-off-color); $droptarget-bg-color: var(--timeline-background-color-50pct); /* still needs alpha at .5 */ $authpage-modal-bg-color: var(--timeline-background-color-50pct); /* still needs alpha at .59 */ -$roomheader-bg-color: var(--timeline-background-color); +$roomheader-bg-color: $custom-theme-background; /* --roomlist-highlights-color */ $panel-actions: var(--roomlist-highlights-color); diff --git a/apps/web/res/themes/light-custom/css/light-custom.pcss b/apps/web/res/themes/light-custom/css/light-custom.pcss index d02c0eeef4..ce575e0518 100644 --- a/apps/web/res/themes/light-custom/css/light-custom.pcss +++ b/apps/web/res/themes/light-custom/css/light-custom.pcss @@ -1,8 +1,10 @@ -@import "../../../../res/css/_font-sizes.pcss"; -@import "../../legacy-light/css/_fonts.pcss"; -@import "../../legacy-light/css/_legacy-light.pcss"; -@import "_custom.pcss"; -@import "../../../../res/css/_components.pcss"; +@layer compound-tokens, compound-web, shared-components, app-web; + +@import "../../../../res/css/_font-sizes.pcss" layer(app-web); +@import "../../legacy-light/css/_fonts.pcss" layer(app-web); +@import "../../legacy-light/css/_legacy-light.pcss" layer(app-web); +@import "_custom.pcss" layer(app-web); +@import "../../../../res/css/_components.pcss" layer(app-web); @import "../../../../res/css/_compound.pcss"; -@import url("highlight.js/styles/atom-one-light.min.css"); -@import url("github-markdown-css/github-markdown-light.css"); +@import url("highlight.js/styles/atom-one-light.min.css") layer(app-web); +@import url("github-markdown-css/github-markdown-light.css") layer(app-web); diff --git a/apps/web/res/themes/light-high-contrast/css/light-high-contrast.pcss b/apps/web/res/themes/light-high-contrast/css/light-high-contrast.pcss index c794d07499..b1c35e414e 100644 --- a/apps/web/res/themes/light-high-contrast/css/light-high-contrast.pcss +++ b/apps/web/res/themes/light-high-contrast/css/light-high-contrast.pcss @@ -1,9 +1,11 @@ -@import "../../../../res/css/_font-sizes.pcss"; -@import "../../light/css/_fonts.pcss"; -@import "../../light/css/_light.pcss"; -@import "_light-high-contrast.pcss"; -@import "../../light/css/_mods.pcss"; -@import "../../../../res/css/_components.pcss"; +@layer compound-tokens, compound-web, shared-components, app-web; + +@import "../../../../res/css/_font-sizes.pcss" layer(app-web); +@import "../../light/css/_fonts.pcss" layer(app-web); +@import "../../light/css/_light.pcss" layer(app-web); +@import "_light-high-contrast.pcss" layer(app-web); +@import "../../light/css/_mods.pcss" layer(app-web); +@import "../../../../res/css/_components.pcss" layer(app-web); @import "../../../../res/css/_compound.pcss"; -@import url("highlight.js/styles/atom-one-light.min.css"); -@import url("github-markdown-css/github-markdown-light.css"); +@import url("highlight.js/styles/atom-one-light.min.css") layer(app-web); +@import url("github-markdown-css/github-markdown-light.css") layer(app-web); diff --git a/apps/web/res/themes/light/css/light.pcss b/apps/web/res/themes/light/css/light.pcss index d3abfe669c..10e5e05d78 100644 --- a/apps/web/res/themes/light/css/light.pcss +++ b/apps/web/res/themes/light/css/light.pcss @@ -1,8 +1,10 @@ -@import "../../../../res/css/_font-sizes.pcss"; -@import "_fonts.pcss"; -@import "_light.pcss"; -@import "_mods.pcss"; -@import "../../../../res/css/_components.pcss"; +@layer compound-tokens, compound-web, shared-components, app-web; + +@import "../../../../res/css/_font-sizes.pcss" layer(app-web); +@import "_fonts.pcss" layer(app-web); +@import "_light.pcss" layer(app-web); +@import "_mods.pcss" layer(app-web); +@import "../../../../res/css/_components.pcss" layer(app-web); @import "../../../../res/css/_compound.pcss"; -@import url("highlight.js/styles/atom-one-light.min.css"); -@import url("github-markdown-css/github-markdown-light.css"); +@import url("highlight.js/styles/atom-one-light.min.css") layer(app-web); +@import url("github-markdown-css/github-markdown-light.css") layer(app-web); diff --git a/apps/web/src/components/views/messages/TextualBodyFactory.tsx b/apps/web/src/components/views/messages/TextualBodyFactory.tsx index d947bb982e..b51eebe78b 100644 --- a/apps/web/src/components/views/messages/TextualBodyFactory.tsx +++ b/apps/web/src/components/views/messages/TextualBodyFactory.tsx @@ -210,7 +210,7 @@ export function TextualBodyFactory(props: Readonly): JSX.Element { vm={textualBodyVm} body={} bodyRef={contentRef} - urlPreviews={} + urlPreviews={} className={getTextualBodyClassName(content.msgtype as MsgType | undefined)} /> ); diff --git a/apps/web/src/theme.ts b/apps/web/src/theme.ts index a0a527c28a..4bd3ea322d 100644 --- a/apps/web/src/theme.ts +++ b/apps/web/src/theme.ts @@ -207,9 +207,10 @@ function generateCustomCompoundCSS(theme: CompoundTheme): string { for (const [token, value] of Object.entries(theme)) if (COMPOUND_TOKEN.test(token)) properties.push(`${token}: ${value};`); else logger.warn(`'${token}' is not a valid Compound token`); - // Insert the design token overrides into the 'custom' cascade layer as - // documented at https://compound.element.io/?path=/docs/develop-theming--docs - return `@layer compound.custom { :root, [class*="cpd-theme-"] { ${properties.join(" ")} } }`; + // Insert the design token overrides into the existing Compound tokens + // layer so custom themes win over the imported default tokens by source + // order without creating a lower-priority nested layer. + return `@layer compound-tokens { :root, [class*="cpd-theme-"] { ${properties.join(" ")} } }`; } /** diff --git a/apps/web/src/utils/exportUtils/exportCSS.ts b/apps/web/src/utils/exportUtils/exportCSS.ts index 8c470aaa0d..7e55b0cebe 100644 --- a/apps/web/src/utils/exportUtils/exportCSS.ts +++ b/apps/web/src/utils/exportUtils/exportCSS.ts @@ -6,11 +6,12 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com Please see LICENSE files in the repository root for full details. */ -import type { Rule, StyleSheet } from "css-tree"; +import type { CssNode, Rule, StyleSheet } from "css-tree"; import customCSS from "!!raw-loader!./exportCustomCSS.css"; const cssSelectorTextClassesRegex = /\.[\w-]+/g; +const appLayerName = "app-web"; function mutateCssText(css: string): string { // replace used fonts so that we don't have to bundle Inter & Fira Code @@ -41,6 +42,21 @@ function includeRule(rule: Rule, usedClasses: Set): boolean { return true; } +function includeNode(node: CssNode, usedClasses: Set): boolean { + if (node.type === "Atrule") { + if (node.name === "font-face") { + return false; + } + + if (node.block) { + node.block.children = node.block.children.filter((child) => includeNode(child, usedClasses)); + return !node.block.children.isEmpty; + } + } + + return node.type !== "Rule" || includeRule(node, usedClasses); +} + // naively culls unused css rules based on which classes are present in the html, // doesn't cull rules which won't apply due to the full selector not matching but gets rid of a LOT of cruft anyway. // We cannot use document.styleSheets as it does not handle variables in shorthand properties sanely, @@ -69,13 +85,7 @@ const getExportCSS = async (usedClasses: Set): Promise => { }) as StyleSheet; for (const rule of ast.children) { - if (rule.type === "Atrule") { - if (rule.name === "font-face") { - continue; - } - } - - if (rule.type === "Rule" && !includeRule(rule, usedClasses)) { + if (!includeNode(rule, usedClasses)) { continue; } @@ -83,7 +93,7 @@ const getExportCSS = async (usedClasses: Set): Promise => { } } - return css + customCSS; + return `${css}@layer ${appLayerName} {${customCSS}}`; }; export default getExportCSS; diff --git a/apps/web/src/utils/exportUtils/exportCustomCSS.css b/apps/web/src/utils/exportUtils/exportCustomCSS.css index 117eff6b23..fe8f7c7269 100644 --- a/apps/web/src/utils/exportUtils/exportCustomCSS.css +++ b/apps/web/src/utils/exportUtils/exportCustomCSS.css @@ -60,11 +60,6 @@ body { a.mx_reply_anchor { cursor: pointer; - color: #238cf5; -} - -a.mx_reply_anchor:hover { - text-decoration: underline; } @-webkit-keyframes mx_snackbar_fadein { diff --git a/apps/web/test/unit-tests/__snapshots__/theme-test.ts.snap b/apps/web/test/unit-tests/__snapshots__/theme-test.ts.snap index af61bc7151..83b0c90a7c 100644 --- a/apps/web/test/unit-tests/__snapshots__/theme-test.ts.snap +++ b/apps/web/test/unit-tests/__snapshots__/theme-test.ts.snap @@ -1,3 +1,3 @@ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing -exports[`theme setTheme applies a custom Compound theme 1`] = `"@layer compound.custom { :root, [class*="cpd-theme-"] { --cpd-color-icon-accent-tertiary: var(--cpd-color-blue-800); --cpd-color-text-action-accent: var(--cpd-color-blue-900); } }"`; +exports[`theme setTheme applies a custom Compound theme 1`] = `"@layer compound-tokens { :root, [class*="cpd-theme-"] { --cpd-color-icon-accent-tertiary: var(--cpd-color-blue-800); --cpd-color-text-action-accent: var(--cpd-color-blue-900); } }"`; diff --git a/apps/web/test/unit-tests/components/structures/__snapshots__/RoomView-test.tsx.snap b/apps/web/test/unit-tests/components/structures/__snapshots__/RoomView-test.tsx.snap index 745d84f52b..0a6b8d1acc 100644 --- a/apps/web/test/unit-tests/components/structures/__snapshots__/RoomView-test.tsx.snap +++ b/apps/web/test/unit-tests/components/structures/__snapshots__/RoomView-test.tsx.snap @@ -237,7 +237,7 @@ exports[`RoomView for a local room in state ERROR should match the snapshot 1`] class="_content_n7ud0_38" >

Could not start a chat with this user @@ -247,7 +247,7 @@ exports[`RoomView for a local room in state ERROR should match the snapshot 1`] class="_actions_n7ud0_61" >

00:00
Message #49
  • @user48:example.com
    00:00
    Message #48
  • @user47:example.com
    00:00
    Message #47
  • @user46:example.com
    00:00
    Message #46
  • @user45:example.com
    00:00
    Message #45
  • @user44:example.com
    00:00
    Message #44
  • @user43:example.com
    00:00
    Message #43
  • @user42:example.com
    00:00
    Message #42
  • @user41:example.com
    00:00
    Message #41
  • @user40:example.com
    00:00
    Message #40
  • @user39:example.com
    00:00
    Message #39
  • @user38:example.com
    00:00
    Message #38
  • @user37:example.com
    00:00
    Message #37
  • @user36:example.com
    00:00
    Message #36
  • @user35:example.com
    00:00
    Message #35
  • @user34:example.com
    00:00
    Message #34
  • @user33:example.com
    00:00
    Message #33
  • @user32:example.com
    00:00
    Message #32
  • @user31:example.com
    00:00
    Message #31
  • @user30:example.com
    00:00
    Message #30
  • @user29:example.com
    00:00
    Message #29
  • @user28:example.com
    00:00
    Message #28
  • @user27:example.com
    00:00
    Message #27
  • @user26:example.com
    00:00
    Message #26
  • @user25:example.com
    00:00
    Message #25
  • @user24:example.com
    00:00
    Message #24
  • @user23:example.com
    00:00
    Message #23
  • @user22:example.com
    00:00
    Message #22
  • @user21:example.com
    00:00
    Message #21
  • @user20:example.com
    00:00
    Message #20
  • @user19:example.com
    00:00
    Message #19
  • @user18:example.com
    00:00
    Message #18
  • @user17:example.com
    00:00
    Message #17
  • @user16:example.com
    00:00
    Message #16
  • @user15:example.com
    00:00
    Message #15
  • @user14:example.com
    00:00
    Message #14
  • @user13:example.com
    00:00
    Message #13
  • @user12:example.com
    00:00
    Message #12
  • @user11:example.com
    00:00
    Message #11
  • @user10:example.com
    00:00
    Message #10
  • @user9:example.com
    00:00
    Message #9
  • @user8:example.com
    00:00
    Message #8
  • @user7:example.com
    00:00
    Message #7
  • @user6:example.com
    00:00
    Message #6
  • @user5:example.com
    00:00
    Message #5
  • @user4:example.com
    00:00
    Message #4
  • @user3:example.com
    00:00
    Message #3
  • @user2:example.com
    00:00
    Message #2
  • @user1:example.com
    00:00
    Message #1
  • @user0:example.com
    00:00
    Message #0
  • +
  • @user49:example.com
    00:00
    Message #49
  • @user48:example.com
    00:00
    Message #48
  • @user47:example.com
    00:00
    Message #47
  • @user46:example.com
    00:00
    Message #46
  • @user45:example.com
    00:00
    Message #45
  • @user44:example.com
    00:00
    Message #44
  • @user43:example.com
    00:00
    Message #43
  • @user42:example.com
    00:00
    Message #42
  • @user41:example.com
    00:00
    Message #41
  • @user40:example.com
    00:00
    Message #40
  • @user39:example.com
    00:00
    Message #39
  • @user38:example.com
    00:00
    Message #38
  • @user37:example.com
    00:00
    Message #37
  • @user36:example.com
    00:00
    Message #36
  • @user35:example.com
    00:00
    Message #35
  • @user34:example.com
    00:00
    Message #34
  • @user33:example.com
    00:00
    Message #33
  • @user32:example.com
    00:00
    Message #32
  • @user31:example.com
    00:00
    Message #31
  • @user30:example.com
    00:00
    Message #30
  • @user29:example.com
    00:00
    Message #29
  • @user28:example.com
    00:00
    Message #28
  • @user27:example.com
    00:00
    Message #27
  • @user26:example.com
    00:00
    Message #26
  • @user25:example.com
    00:00
    Message #25
  • @user24:example.com
    00:00
    Message #24
  • @user23:example.com
    00:00
    Message #23
  • @user22:example.com
    00:00
    Message #22
  • @user21:example.com
    00:00
    Message #21
  • @user20:example.com
    00:00
    Message #20
  • @user19:example.com
    00:00
    Message #19
  • @user18:example.com
    00:00
    Message #18
  • @user17:example.com
    00:00
    Message #17
  • @user16:example.com
    00:00
    Message #16
  • @user15:example.com
    00:00
    Message #15
  • @user14:example.com
    00:00
    Message #14
  • @user13:example.com
    00:00
    Message #13
  • @user12:example.com
    00:00
    Message #12
  • @user11:example.com
    00:00
    Message #11
  • @user10:example.com
    00:00
    Message #10
  • @user9:example.com
    00:00
    Message #9
  • @user8:example.com
    00:00
    Message #8
  • @user7:example.com
    00:00
    Message #7
  • @user6:example.com
    00:00
    Message #6
  • @user5:example.com
    00:00
    Message #5
  • @user4:example.com
    00:00
    Message #4
  • @user3:example.com
    00:00
    Message #3
  • @user2:example.com
    00:00
    Message #2
  • @user1:example.com
    00:00
    Message #1
  • @user0:example.com
    00:00
    Message #0
  • diff --git a/apps/web/test/unit-tests/utils/exportUtils/exportCSS-test.ts b/apps/web/test/unit-tests/utils/exportUtils/exportCSS-test.ts index 0cf154e9be..dc37a022e8 100644 --- a/apps/web/test/unit-tests/utils/exportUtils/exportCSS-test.ts +++ b/apps/web/test/unit-tests/utils/exportUtils/exportCSS-test.ts @@ -6,13 +6,103 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com Please see LICENSE files in the repository root for full details. */ +import fetchMock from "@fetch-mock/jest"; + import getExportCSS from "../../../../src/utils/exportUtils/exportCSS"; describe("exportCSS", () => { describe("getExportCSS", () => { + beforeEach(() => { + document.head.replaceChildren(); + }); + it("supports documents missing stylesheets", async () => { const css = await getExportCSS(new Set()); expect(css).not.toContain("color-scheme: light"); }); + + it("fetches export stylesheets and filters unused css", async () => { + document.head.innerHTML = ` + + + + `; + + fetchMock.get( + "end:/bundle.css", + ` + @font-face { font-family: Inter; src: url(inter.woff2); } + body { margin: 0; } + .mx_Used { font-family: Inter; color: #111111; } + .mx_Code { font-family: Fira Code; } + .mx_Unused { color: #123456; } + .mx_Empty {} + .mx_Used, .mx_UnusedComma { color: #abcdef; } + @media screen { + .mx_Used { --cpd-font-family-sans: "Inter"; } + .mx_UnusedNested { color: #654321; } + } + @supports (display: grid) { + .mx_UnusedSupported { color: #fedcba; } + } + `, + ); + fetchMock.get("end:/theme-light.css", ".mx_Theme { color: #222222; }"); + + const css = await getExportCSS(new Set(["mx_Used", "mx_Code", "mx_Theme"])); + + expect(fetchMock).toHaveFetchedTimes(1, "end:/bundle.css"); + expect(fetchMock).toHaveFetchedTimes(1, "end:/theme-light.css"); + expect(fetchMock).not.toHaveFetched("end:/theme-dark.css"); + + expect(css).toContain("margin:0"); + expect(css).toContain("#111"); + expect(css).toContain("#222"); + expect(css).toContain("#abcdef"); + + expect(css).not.toContain("@font-face"); + expect(css).not.toContain("#123456"); + expect(css).not.toContain("#654321"); + expect(css).not.toContain("#fedcba"); + + expect(css).not.toContain("font-family:Inter"); + expect(css).not.toContain("font-family:Fira Code"); + expect(css).toContain("BlinkMacSystemFont"); + expect(css).toContain("Menlo, Consolas"); + }); + + it("keeps export-only css in the app cascade layer after layered font rules", async () => { + document.head.innerHTML = ` + + `; + + fetchMock.get( + "end:/bundle.css", + ` + @layer compound-tokens, compound-web, shared-components, app-web; + @layer compound-web { + .mx_Typography { + font: var(--cpd-font-heading-lg-regular); + } + } + @layer app-web { + body { + font: var(--cpd-font-body-md-regular) !important; + } + } + `, + ); + + const css = await getExportCSS(new Set(["mx_Typography"])); + + expect(css).toContain("@layer compound-web{.mx_Typography{font:var(--cpd-font-heading-lg-regular)}}"); + expect(css).toContain("@layer app-web{body{font:var(--cpd-font-body-md-regular)!important}}"); + + const exportCssLayerIndex = css.indexOf("@layer app-web {"); + expect(exportCssLayerIndex).toBeGreaterThan( + css.indexOf("@layer app-web{body{font:var(--cpd-font-body-md-regular)!important}}"), + ); + expect(css.slice(exportCssLayerIndex)).toBe("@layer app-web {css-file-stub}"); + }); }); }); diff --git a/knip.ts b/knip.ts index 53718f2e15..9d4fab1d49 100644 --- a/knip.ts +++ b/knip.ts @@ -65,13 +65,8 @@ export default { ignoreExportsUsedInFile: true, compilers: { pcss: (text: string) => - [...text.matchAll(/(?<=@)import[^;]+/g)] - .map(([line]) => { - if (line.startsWith("import url(")) { - return line.replace("url(", "").slice(0, -1); - } - return line; - }) + [...text.matchAll(/@import\s+(?:url\()?["']([^"']+)["']\)?[^;]*;/g)] + .map(([, specifier]) => `import "${specifier}";`) .join("\n"), }, nx: { diff --git a/packages/shared-components/.storybook/compound.css b/packages/shared-components/.storybook/compound.css index 42f8393666..dda8ccf13e 100644 --- a/packages/shared-components/.storybook/compound.css +++ b/packages/shared-components/.storybook/compound.css @@ -5,5 +5,8 @@ * Please see LICENSE files in the repository root for full details. */ -@import url("@vector-im/compound-design-tokens/assets/web/css/compound-design-tokens.css") layer(compound); -@import url("@vector-im/compound-web/dist/style.css"); +/* Shared cascade order: Compound tokens, Compound Web, shared components, then app overrides. */ +@layer compound-tokens, compound-web, shared-components, app-web; + +@import url("@vector-im/compound-design-tokens/assets/web/css/compound-design-tokens.css") layer(compound-tokens); +@import url("@vector-im/compound-web/dist/style.css") layer(compound-web); diff --git a/packages/shared-components/.storybook/main.ts b/packages/shared-components/.storybook/main.ts index 72cb55aea5..60fb388507 100644 --- a/packages/shared-components/.storybook/main.ts +++ b/packages/shared-components/.storybook/main.ts @@ -8,11 +8,13 @@ Please see LICENSE files in the repository root for full details. import type { StorybookConfig } from "@storybook/react-vite"; import fs from "node:fs"; import { nodePolyfills } from "vite-plugin-node-polyfills"; -import { mergeConfig } from "vite"; +import { mergeConfig, normalizePath, type Plugin } from "vite"; import { dirname, join } from "node:path"; import { fileURLToPath } from "node:url"; const __dirname = dirname(fileURLToPath(import.meta.url)); +const srcRoot = normalizePath(join(__dirname, "..", "src")); +const sharedComponentsLayer = "shared-components"; // Get a list of available languages so the language selector can display them at runtime const languageFiles = fs.readdirSync(join(__dirname, "..", "src", "i18n", "strings")).map((f) => f.slice(0, -5)); @@ -36,6 +38,24 @@ function getAbsolutePath(value: string): any { return dirname(fileURLToPath(import.meta.resolve(`${value}/package.json`))); } +function layerSharedComponentCssModules(): Plugin { + return { + name: "element-web-shared-components-storybook-css-layer", + enforce: "pre", + transform(code, id) { + const cssPath = normalizePath(id.split("?")[0]); + if (!cssPath.startsWith(srcRoot) || !cssPath.endsWith(".module.css")) { + return; + } + + return { + code: `@layer ${sharedComponentsLayer} {\n${code}\n}\n`, + map: null, + }; + }, + }; +} + const config: StorybookConfig = { stories: ["../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"], addons: [ @@ -61,6 +81,7 @@ const config: StorybookConfig = { async viteFinal(config) { return mergeConfig(config, { plugins: [ + layerSharedComponentCssModules(), // Needed for counterpart to work nodePolyfills({ include: ["util"], globals: { global: false } }), { diff --git a/packages/shared-components/src/audio/PlayPauseButton/PlayPauseButton.module.css b/packages/shared-components/src/audio/PlayPauseButton/PlayPauseButton.module.css index 859f84bba9..74315673f1 100644 --- a/packages/shared-components/src/audio/PlayPauseButton/PlayPauseButton.module.css +++ b/packages/shared-components/src/audio/PlayPauseButton/PlayPauseButton.module.css @@ -6,6 +6,6 @@ */ .button { - border-radius: 32px !important; - background-color: var(--cpd-color-bg-subtle-primary) !important; + border-radius: 32px; + background-color: var(--cpd-color-bg-subtle-primary); } diff --git a/packages/shared-components/src/room-list/RoomListHeaderView/menu/OptionMenuView.module.css b/packages/shared-components/src/room-list/RoomListHeaderView/menu/OptionMenuView.module.css index 11a81da947..255babced3 100644 --- a/packages/shared-components/src/room-list/RoomListHeaderView/menu/OptionMenuView.module.css +++ b/packages/shared-components/src/room-list/RoomListHeaderView/menu/OptionMenuView.module.css @@ -7,5 +7,5 @@ .title { /* For first title, there is already enough space at the top */ - margin-top: 0 !important; + margin-top: 0; } diff --git a/packages/shared-components/src/room-list/RoomListSearchView/RoomListSearchView.module.css b/packages/shared-components/src/room-list/RoomListSearchView/RoomListSearchView.module.css index 9b7097373c..20b71a90bf 100644 --- a/packages/shared-components/src/room-list/RoomListSearchView/RoomListSearchView.module.css +++ b/packages/shared-components/src/room-list/RoomListSearchView/RoomListSearchView.module.css @@ -16,9 +16,8 @@ .search { /* The search button should take all the remaining space */ flex: 1; - /* !important is needed to override compound button in EW */ - font: var(--cpd-font-body-md-regular) !important; - color: var(--cpd-color-text-secondary) !important; + font: var(--cpd-font-body-md-regular); + color: var(--cpd-color-text-secondary); min-width: 0; svg { diff --git a/packages/shared-components/src/room/RoomStatusBar/RoomStatusBarView.module.css b/packages/shared-components/src/room/RoomStatusBar/RoomStatusBarView.module.css index c3832e2e9f..78300df3f9 100644 --- a/packages/shared-components/src/room/RoomStatusBar/RoomStatusBarView.module.css +++ b/packages/shared-components/src/room/RoomStatusBar/RoomStatusBarView.module.css @@ -7,18 +7,18 @@ .container { color: var(--cpd-color-text-primary); - svg { - /* Ensure button icons are primary too */ - color: var(--cpd-color-text-primary) !important; - } } -.secondaryAction svg { - color: var(--cpd-color-text-secondary) !important; +.container svg { + color: var(--cpd-color-text-primary); } -.primaryAction svg { - color: var(--cpd-color-text-on-solid-primary) !important; +.secondaryAction.secondaryAction[data-kind="secondary"] > svg { + color: var(--cpd-color-text-secondary); +} + +.primaryAction.primaryAction[data-kind="primary"] > svg { + color: var(--cpd-color-text-on-solid-primary); } .title { diff --git a/packages/shared-components/src/room/timeline/DateSeparatorView/DateSeparatorContextMenuView.module.css b/packages/shared-components/src/room/timeline/DateSeparatorView/DateSeparatorContextMenuView.module.css index fff772c4bd..75aa130936 100644 --- a/packages/shared-components/src/room/timeline/DateSeparatorView/DateSeparatorContextMenuView.module.css +++ b/packages/shared-components/src/room/timeline/DateSeparatorView/DateSeparatorContextMenuView.module.css @@ -6,15 +6,15 @@ */ .picker_menu { - max-inline-size: none !important; - padding: 0 !important; - gap: 0 !important; + max-inline-size: none; + padding: 0; + gap: 0; } .picker_menu_item { - padding: var(--cpd-space-3x) var(--cpd-space-5x) !important; + padding: var(--cpd-space-3x) var(--cpd-space-5x); } .picker_separator { - margin-inline: 0 !important; + margin-inline: 0; } diff --git a/packages/shared-components/src/room/timeline/DateSeparatorView/DateSeparatorDatePickerView.module.css b/packages/shared-components/src/room/timeline/DateSeparatorView/DateSeparatorDatePickerView.module.css index e664b1f5eb..f8e9894c38 100644 --- a/packages/shared-components/src/room/timeline/DateSeparatorView/DateSeparatorDatePickerView.module.css +++ b/packages/shared-components/src/room/timeline/DateSeparatorView/DateSeparatorDatePickerView.module.css @@ -6,15 +6,15 @@ */ .picker_menu_item { - padding: var(--cpd-space-3x) var(--cpd-space-5x) !important; + padding: var(--cpd-space-3x) var(--cpd-space-5x); } .picker_form { display: flex; - flex-direction: row !important; - flex-wrap: wrap !important; - padding: 0 !important; - gap: var(--cpd-space-2x) !important; + flex-direction: row; + flex-wrap: wrap; + padding: 0; + gap: var(--cpd-space-2x); color: var(--cpd-color-text-primary); font: var(--cpd-font-body-md-medium); } @@ -28,7 +28,7 @@ .picker_input_date { font: inherit; color-scheme: light; - padding: var(--cpd-space-2x) !important; + padding: var(--cpd-space-2x); :global(.cpd-theme-dark) &, :global(.cpd-theme-dark-hc) & { diff --git a/packages/shared-components/src/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.tsx b/packages/shared-components/src/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.tsx index 79f0a96f93..01c7a07441 100644 --- a/packages/shared-components/src/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.tsx +++ b/packages/shared-components/src/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.tsx @@ -25,7 +25,14 @@ export interface UrlPreviewGroupViewSnapshot { } export interface UrlPreviewGroupViewProps { + /** + * The view model for the component. + */ vm: ViewModel & UrlPreviewGroupViewActions; + /** + * Extra CSS classes to apply to the component. + */ + className?: string; } export interface UrlPreviewGroupViewActions { @@ -42,7 +49,7 @@ export type UrlPreviewGroupViewModel = ViewModel +
    {previews.map((preview) => ( vm.onImageClick(preview)} {...preview} /> diff --git a/packages/shared-components/src/room/timeline/event-tile/actions/ActionBarView/ActionBarView.module.css b/packages/shared-components/src/room/timeline/event-tile/actions/ActionBarView/ActionBarView.module.css index 50cbb3f0d6..6b08fa635e 100644 --- a/packages/shared-components/src/room/timeline/event-tile/actions/ActionBarView/ActionBarView.module.css +++ b/packages/shared-components/src/room/timeline/event-tile/actions/ActionBarView/ActionBarView.module.css @@ -14,31 +14,31 @@ .toolbar_item { align-items: center; justify-content: center; - padding: 0 !important; - min-block-size: 0 !important; + padding: 0; + min-block-size: 0; - margin: 3px !important; - border-radius: 6px !important; + margin: 3px; + border-radius: 6px; &:hover { - background-color: var(--cpd-color-bg-subtle-secondary) !important; + background-color: var(--cpd-color-bg-subtle-secondary); z-index: 1; } } .toolbar_item[data-presentation="icon"] { - block-size: 28px !important; - inline-size: 28px !important; + block-size: 28px; + inline-size: 28px; - color: var(--cpd-color-icon-secondary) !important; + color: var(--cpd-color-icon-secondary); } .toolbar_item[data-presentation="label"] { - padding-inline-start: var(--cpd-space-2x) !important; - padding-inline-end: var(--cpd-space-2x) !important; + padding-inline-start: var(--cpd-space-2x); + padding-inline-end: var(--cpd-space-2x); font: var(--cpd-font-body-md-regular); - text-decoration: none !important; + text-decoration: none; white-space: nowrap; } } diff --git a/packages/shared-components/src/room/timeline/event-tile/body/AudioPlayerView/AudioPlayerView.module.css b/packages/shared-components/src/room/timeline/event-tile/body/AudioPlayerView/AudioPlayerView.module.css index f6bfec3969..1842cc90a1 100644 --- a/packages/shared-components/src/room/timeline/event-tile/body/AudioPlayerView/AudioPlayerView.module.css +++ b/packages/shared-components/src/room/timeline/event-tile/body/AudioPlayerView/AudioPlayerView.module.css @@ -6,8 +6,8 @@ */ .audioPlayer { - padding: var(--cpd-space-4x) var(--cpd-space-3x) var(--cpd-space-3x) var(--cpd-space-3x) !important; - border-radius: 8px !important; + padding: var(--cpd-space-4x) var(--cpd-space-3x) var(--cpd-space-3x) var(--cpd-space-3x); + border-radius: 8px; } .mediaInfo { diff --git a/packages/shared-components/src/room/timeline/event-tile/body/MFileBodyView/FileBodyView.module.css b/packages/shared-components/src/room/timeline/event-tile/body/MFileBodyView/FileBodyView.module.css index bf71413b93..52434c133d 100644 --- a/packages/shared-components/src/room/timeline/event-tile/body/MFileBodyView/FileBodyView.module.css +++ b/packages/shared-components/src/room/timeline/event-tile/body/MFileBodyView/FileBodyView.module.css @@ -26,8 +26,8 @@ & button { display: flex; - margin: 0 !important; - padding: 0 !important; + margin: 0; + padding: 0; border: none; width: 100%; min-block-size: unset; @@ -57,7 +57,6 @@ .content [data-type="download"] { align-items: center; - color: var(--cpd-color-text-action-accent); & iframe { margin: 0; diff --git a/packages/shared-components/src/room/timeline/event-tile/timestamp/MessageTimestampView/MessageTimestampView.module.css b/packages/shared-components/src/room/timeline/event-tile/timestamp/MessageTimestampView/MessageTimestampView.module.css index 6ee9d62aa1..e00b9f0678 100644 --- a/packages/shared-components/src/room/timeline/event-tile/timestamp/MessageTimestampView/MessageTimestampView.module.css +++ b/packages/shared-components/src/room/timeline/event-tile/timestamp/MessageTimestampView/MessageTimestampView.module.css @@ -6,7 +6,7 @@ */ .content { - color: var(--cpd-color-text-secondary) !important; /* override anchor color */ + color: var(--cpd-color-text-secondary); /* override anchor color */ font-size: var(--cpd-font-size-body-xs); font-variant-numeric: tabular-nums; display: inline-block; diff --git a/packages/shared-components/vite.config.ts b/packages/shared-components/vite.config.ts index 0a27742816..116689e645 100644 --- a/packages/shared-components/vite.config.ts +++ b/packages/shared-components/vite.config.ts @@ -6,12 +6,36 @@ * */ +import { readFileSync, writeFileSync } from "node:fs"; import { dirname, resolve } from "node:path"; import { fileURLToPath } from "node:url"; -import { defineConfig, esmExternalRequirePlugin } from "vite"; +import { defineConfig, esmExternalRequirePlugin, type Plugin } from "vite"; import dts from "unplugin-dts/vite"; const __dirname = dirname(fileURLToPath(import.meta.url)); +const cssLayerOrder = "@layer compound-tokens, compound-web, shared-components, app-web;"; +const sharedComponentsLayer = "shared-components"; + +function layerCssAssets(): Plugin { + return { + name: "element-web-shared-components-css-layer", + writeBundle(_options, bundle): void { + for (const asset of Object.values(bundle)) { + if (asset.type !== "asset" || asset.fileName !== "element-web-shared-components.css") { + continue; + } + + const cssPath = resolve(__dirname, "dist", asset.fileName); + const source = readFileSync(cssPath, "utf-8"); + if (source.startsWith(cssLayerOrder)) { + continue; + } + + writeFileSync(cssPath, `${cssLayerOrder}\n@layer ${sharedComponentsLayer} {\n${source}\n}\n`); + } + }, + }; +} export default defineConfig({ build: { @@ -50,6 +74,7 @@ export default defineConfig({ }, }, plugins: [ + layerCssAssets(), dts({ bundleTypes: true, include: ["src/**/*.{ts,tsx}"],