export type AccessoryCallback = (props: Record) => JSX.Element; export type Accessory = { callback: AccessoryCallback; position?: number; }; export const accessories = new Map(); export function addAccessory( identifier: string, callback: AccessoryCallback, position?: number ) { accessories.set(identifier, { callback, position, }); } export function removeAccessory(identifier: string) { accessories.delete(identifier); } export function _modifyAccessories( elements: JSX.Element[], props: Record ) { for (const accessory of accessories.values()) { elements.splice( accessory.position != null ? accessory.position < 0 ? elements.length + accessory.position : accessory.position : elements.length, 0, accessory.callback(props) ); } return elements; }