import { INameValue } from './name-value.mjs' import { IDate, IId, IName, ISlug, IType } from './interfaces.mjs' export interface IIdName extends IId, IName {} export class IdName implements IIdName { id: Tid name: Tname constructor(id: Tid, name: Tname) { this.id = id this.name = name } } export class IdNameNumber extends IdName {} export type IdNameType = { id: Tid name: Tname } export interface IdNameSlug extends IdName, ISlug {} export interface IdNameValue extends IdName, INameValue {} export interface IdNameValueType extends IdName, INameValue, IType {} /** * Used for sending data to a parent handler in a structured way with contextual id and name. */ export interface IValueChange extends IdNameValueType, IDate {} /** * Used to pass structured data back to a caller. Especially for event handlers. */ export type ValueChangeHandler = ( change: IValueChange ) => TReturn export function createValueChange( id: string, name: string, value: T, type?: string, date?: number ) { const vc: IValueChange = { id, name, value, type: type ?? '', date: date ?? +new Date(), } return vc }