import { FieldPresence, FieldSchema, ValueType } from '@ephox/boulder'; import { Id } from '@ephox/katamari'; import { events } from '../../ui/common/ButtonBase'; import type { TabButtonDetail, TabButtonSketcher, TabButtonSpec } from '../../ui/types/TabButtonTypes'; import { Focusing } from '../behaviour/Focusing'; import { Keying } from '../behaviour/Keying'; import { Representing } from '../behaviour/Representing'; import * as SketchBehaviours from '../component/SketchBehaviours'; import * as Sketcher from './Sketcher'; import type { SingleSketchFactory } from './UiSketcher'; const factory: SingleSketchFactory = (detail, _spec) => ({ uid: detail.uid, dom: detail.dom, components: detail.components, events: events(detail.action), behaviours: SketchBehaviours.augment( detail.tabButtonBehaviours, [ Focusing.config({ }), Keying.config({ mode: 'execution', useSpace: true, useEnter: true }), Representing.config({ store: { mode: 'memory', initialValue: detail.value } }) ] ), domModification: detail.domModification }); const TabButton: TabButtonSketcher = Sketcher.single({ name: 'TabButton', configFields: [ FieldSchema.defaulted('uid', undefined), FieldSchema.required('value'), FieldSchema.field('dom', 'dom', FieldPresence.mergeWithThunk(() => ({ attributes: { 'role': 'tab', // NOTE: This is used in TabSection to connect "labelledby" 'id': Id.generate('aria'), 'aria-selected': 'false' } })), ValueType.anyValue()), FieldSchema.option('action'), FieldSchema.defaulted('domModification', { }), SketchBehaviours.field('tabButtonBehaviours', [ Focusing, Keying, Representing ]), FieldSchema.required('view') ], factory }); export { TabButton };