* Add hook to get the theme * Adapt subsection settings to new ui * WIP new theme subsection * Add theme selection * Fix test types * Disabled theme selector when system theme is used * Update compound to `4.4.1` * Add custom theme support * Remove old ThemChoicePanel * Fix QuickThemeSwitcher-test.tsx * Fix AppearanceUserSettingsTab-test.tsx * Update i18n * Fix ThemeChoicePanel-test.tsx * Update `@vector-im/compound-web` * Small tweaks * Fix CSS comments and use compound variable * Remove custom theme title * i18n: update * test: add tests to theme selection * test: update AppearanceUserSettingsTab-test snapshot * test: rework custom theme * playwright: fix audio-player.spec.ts * playwright: appearance tab * test: update snapshot * playright: add custom theme * i18n: use correct char for ellipsis * a11y: add missing aria-label to delete button * dialog: update close button tooltip * theme: remove local state and handle custom delete * theme: don't add twice the same custom theme * test: update snapshot * playwright: update snapshot * custom theme: add background to custom theme list * update compound web * Use new destructive property on `IconButton` of theme panel * test: update snapshots * rename new ui into legacy * remove wrong constructor doc * fix theme selector padding * theme selector: fix key * test: fix e2e
78 lines
2.6 KiB
TypeScript
78 lines
2.6 KiB
TypeScript
/*
|
|
Copyright 2022 The Matrix.org Foundation C.I.C.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
import classNames from "classnames";
|
|
import React, { HTMLAttributes } from "react";
|
|
import { Separator } from "@vector-im/compound-web";
|
|
|
|
import { SettingsSubsectionHeading } from "./SettingsSubsectionHeading";
|
|
|
|
export interface SettingsSubsectionProps extends HTMLAttributes<HTMLDivElement> {
|
|
heading?: string | React.ReactNode;
|
|
description?: string | React.ReactNode;
|
|
children?: React.ReactNode;
|
|
// when true content will be justify-items: stretch, which will make items within the section stretch to full width.
|
|
stretchContent?: boolean;
|
|
/*
|
|
* When true, the legacy UI style will be applied to the subsection.
|
|
* @default true
|
|
*/
|
|
legacy?: boolean;
|
|
}
|
|
|
|
export const SettingsSubsectionText: React.FC<HTMLAttributes<HTMLDivElement>> = ({ children, ...rest }) => (
|
|
<div {...rest} className="mx_SettingsSubsection_text">
|
|
{children}
|
|
</div>
|
|
);
|
|
|
|
export const SettingsSubsection: React.FC<SettingsSubsectionProps> = ({
|
|
heading,
|
|
description,
|
|
children,
|
|
stretchContent,
|
|
legacy = true,
|
|
...rest
|
|
}) => (
|
|
<div
|
|
{...rest}
|
|
className={classNames("mx_SettingsSubsection", {
|
|
mx_SettingsSubsection_newUi: !legacy,
|
|
})}
|
|
>
|
|
{typeof heading === "string" ? <SettingsSubsectionHeading heading={heading} legacy={legacy} /> : <>{heading}</>}
|
|
{!!description && (
|
|
<div className="mx_SettingsSubsection_description">
|
|
<SettingsSubsectionText>{description}</SettingsSubsectionText>
|
|
</div>
|
|
)}
|
|
{!!children && (
|
|
<div
|
|
className={classNames("mx_SettingsSubsection_content", {
|
|
mx_SettingsSubsection_contentStretch: !!stretchContent,
|
|
mx_SettingsSubsection_noHeading: !heading && !description,
|
|
mx_SettingsSubsection_content_newUi: !legacy,
|
|
})}
|
|
>
|
|
{children}
|
|
</div>
|
|
)}
|
|
{!legacy && <Separator />}
|
|
</div>
|
|
);
|
|
|
|
export default SettingsSubsection;
|