import { StructureSchema } from '@ephox/boulder'; import type { Optional, Result } from '@ephox/katamari'; import * as ComponentSchema from '../../core/ComponentSchema'; import { type BaseToolbarButton, type BaseToolbarButtonSpec, baseToolbarButtonFields, type BaseToolbarButtonInstanceApi } from './ToolbarButton'; export interface BaseToolbarToggleButtonSpec extends BaseToolbarButtonSpec { active?: boolean; } export interface BaseToolbarToggleButton extends BaseToolbarButton { active: boolean; } export interface BaseToolbarToggleButtonInstanceApi extends BaseToolbarButtonInstanceApi { isActive: () => boolean; setActive: (state: boolean) => void; } export interface ToolbarToggleButtonSpec extends BaseToolbarToggleButtonSpec { type?: 'togglebutton'; onAction: (api: ToolbarToggleButtonInstanceApi) => void; shortcut?: string; } export interface ToolbarToggleButton extends BaseToolbarToggleButton { type: 'togglebutton'; onAction: (api: ToolbarToggleButtonInstanceApi) => void; shortcut: Optional; } // tslint:disable-next-line:no-empty-interface export interface ToolbarToggleButtonInstanceApi extends BaseToolbarToggleButtonInstanceApi { } export const baseToolbarToggleButtonFields = [ ComponentSchema.active ].concat(baseToolbarButtonFields); export const toggleButtonSchema = StructureSchema.objOf( baseToolbarToggleButtonFields.concat([ ComponentSchema.type, ComponentSchema.onAction, ComponentSchema.optionalShortcut ]) ); export const isToggleButton = (spec: any): spec is ToolbarToggleButton => spec.type === 'togglebutton'; export const createToggleButton = (spec: ToolbarToggleButtonSpec): Result> => StructureSchema.asRaw('ToggleButton', toggleButtonSchema, spec);