import * as React from 'react'; import { IThemeRules, FabricSlots, IThemeSlotRule } from 'office-ui-fabric-react/lib/ThemeGenerator'; import { IColor } from 'office-ui-fabric-react/lib/Color'; import { Stack, IStackStyles } from 'office-ui-fabric-react/lib/Stack'; import { mergeStyles } from '@uifabric/merge-styles'; import { ColorPicker } from 'office-ui-fabric-react/lib/ColorPicker'; import { Callout, DirectionalHint } from 'office-ui-fabric-react/lib/Callout'; export interface IFabricSlotWidgetProps { slot: FabricSlots; onFabricPaletteColorChange: (newColor: IColor, fabricSlot: FabricSlots) => void; slotRule?: IThemeSlotRule; directionalHint?: DirectionalHint; } export interface IFabricSlotWidgetState { isColorPickerVisible: boolean; colorPickerElement: HTMLElement | null; } const slotClassName = mergeStyles({ display: 'flex', alignItems: 'center', overflow: 'auto', }); const fabricPaletteColorBox = mergeStyles({ width: 15, height: 15, display: 'inline-block', left: 5, top: 5, border: '1px solid black', flexShrink: 0, }); const colorBoxAndHexStringClassName: IStackStyles = { root: { position: 'relative', }, }; export class FabricSlotWidget extends React.Component { constructor(props: IFabricSlotWidgetProps) { super(props); this.state = { isColorPickerVisible: false, colorPickerElement: null, }; } public render() { const { isColorPickerVisible, colorPickerElement } = this.state; const { slotRule, directionalHint } = this.props; return (
{slotRule.name}
{isColorPickerVisible && ( )}
); } private _onColorPickerChange = (ev: React.MouseEvent, newColor: IColor) => { this.props.onFabricPaletteColorChange(newColor, this.props.slot); }; private _onColorBoxClick = (ev: React.MouseEvent) => { this.setState({ isColorPickerVisible: true, colorPickerElement: ev.target as HTMLElement, }); }; private _onCalloutDismiss = () => { this.setState({ isColorPickerVisible: false, }); }; }