From 5fe85d2d6d4d31e5696699ed35bcc01f4b2b8224 Mon Sep 17 00:00:00 2001 From: Albert Yu Date: Thu, 6 Feb 2025 23:35:26 +0800 Subject: [PATCH] Add settings to experiments --- .../experiments/toolbar/text-editor.tsx | 80 ++++++++++++++++--- 1 file changed, 68 insertions(+), 12 deletions(-) diff --git a/docs/src/app/(private)/experiments/toolbar/text-editor.tsx b/docs/src/app/(private)/experiments/toolbar/text-editor.tsx index be56587267..750c1bf459 100644 --- a/docs/src/app/(private)/experiments/toolbar/text-editor.tsx +++ b/docs/src/app/(private)/experiments/toolbar/text-editor.tsx @@ -6,6 +6,10 @@ import { Toggle } from '@base-ui-components/react/toggle'; import { ToggleGroup } from '@base-ui-components/react/toggle-group'; import { Select } from '@base-ui-components/react/select'; import { Menu } from '@base-ui-components/react/menu'; +import { + SettingsMetadata, + useExperimentSettings, +} from '../../../../components/Experiments/SettingsPanel'; import toolbarClasses from './toolbar.module.css'; import selectClasses from '../../../(public)/(content)/react/components/select/demos/hero/css-modules/index.module.css'; import tooltipClasses from '../../../(public)/(content)/react/components/tooltip/demos/hero/css-modules/index.module.css'; @@ -25,7 +29,34 @@ import { ChevronRightIcon, } from './_icons'; -const DISABLED = false; +interface Settings extends Record {} + +export const settingsMetadata: SettingsMetadata = { + selectDisabled: { + type: 'boolean', + label: 'Select disabled', + }, + boldDisabled: { + type: 'boolean', + label: 'Bold disabled', + }, + italicsDisabled: { + type: 'boolean', + label: 'Italics disabled', + }, + underlineDisabled: { + type: 'boolean', + label: 'Underline disabled', + }, + menuDisabled: { + type: 'boolean', + label: 'Menu disabled', + }, + toolbarDisabled: { + type: 'boolean', + label: 'Everything disabled', + }, +}; const TEXT = `This demo uses the render prop to render Toolbar parts as other things: - Toolbar.Button renders Toggles, Select.Trigger, Menu.Trigger @@ -48,8 +79,9 @@ function renderToggleWithTooltip(args: { key: string; label: string; icon: (props: React.ComponentProps<'svg'>) => React.JSX.Element; + disabled?: boolean; }) { - const { key, label, icon: Icon } = args; + const { key, label, icon: Icon, disabled = false } = args; return ( @@ -85,6 +117,7 @@ function renderToggleWithTooltip(args: { } export default function App() { + const { settings } = useExperimentSettings(); return ( } className={styles.select.Select} > @@ -166,9 +199,24 @@ export default function App() { className={styles.toolbar.ToggleGroup} > {[ - { key: 'bold', label: 'Bold', icon: BoldIcon }, - { key: 'italics', label: 'Italics', icon: ItalicsIcon }, - { key: 'underline', label: 'Underline', icon: UnderlineIcon }, + { + key: 'bold', + label: 'Bold', + icon: BoldIcon, + disabled: settings.toolbarDisabled || settings.boldDisabled, + }, + { + key: 'italics', + label: 'Italics', + icon: ItalicsIcon, + disabled: settings.toolbarDisabled || settings.italicsDisabled, + }, + { + key: 'underline', + label: 'Underline', + icon: UnderlineIcon, + disabled: settings.toolbarDisabled || settings.underlineDisabled, + }, ].map(renderToggleWithTooltip)} @@ -178,7 +226,7 @@ export default function App() { render={} defaultValue={['left']} className={styles.toolbar.ToggleGroup} - disabled={DISABLED} + disabled={settings.toolbarDisabled} > {[ { key: 'left', label: 'Align left', icon: AlignLeftIcon }, @@ -191,21 +239,29 @@ export default function App() { } className={styles.toolbar.More} > - +