export type Immutable = boolean | number | string | undefined | null; export type ObjectWithImmutables = Record; export interface EqualityCheck { (): (current: T) => boolean; } /** * Possible values a facet can have. * Currently functions are not supported */ export type Value = string | number | boolean | undefined | null | [] | Record | bigint; export type ExtractFacetValues>> = { [K in keyof T]: T[K] extends Facet ? V : never; }; export declare const FACET_FACTORY: unique symbol; export interface FacetFactory { (): Facet; factory: typeof FACET_FACTORY; } export type ExcludeFacetFactory = T extends FacetFactory ? never : T; export interface Listener { (value: T): void; } export type Unsubscribe = () => void; export type Observe = (listener: Listener) => Unsubscribe; export interface Facet { get: () => Option; observe: Observe; } export interface WritableFacet extends Facet { set: (value: T) => void; setWithCallback: (callback: (previousValue: Option) => Option) => void; } export interface Update { (value: V): void; } export type Setter = (callbackSetter: V | ((previousValue: Option) => Option)) => void; export type Cleanup = Unsubscribe; export type StartSubscription = (update: Update) => Cleanup; export declare const isFacet: (value: T | Facet) => value is Facet; export type FacetProp = Facet | ExcludeFacetFactory; export interface Effect { (value: T): void | Cleanup; } export declare const NO_VALUE: unique symbol; export type NoValue = typeof NO_VALUE; export type Option = NoValue | T; /** * Unit of work that can be scheduled within a batch. */ export type Task = { (): void; scheduled?: boolean; }; /** * Function that when executed will have its Facet updates scheduled. */ export type Batch = () => void; /** * CSSStyleDeclaration that has FacetDefinition as values and includes Gameface's extended number based properties * Based on Gameface's TypeScript definition: https://github.com/Mojang/Mojang_Cohtml/blob/master/src/Scripting/scripted/typescript/ScriptedCSSStyleDeclaration.d.ts */ export type FacetCSSStyleDeclaration = { alignContent?: FacetProp; alignItems?: FacetProp; alignSelf?: FacetProp; animation?: FacetProp; animationDelay?: FacetProp; animationDirection?: FacetProp; animationDuration?: FacetProp; animationFillMode?: FacetProp; animationIterationCount?: FacetProp; animationName?: FacetProp; animationPlayState?: FacetProp; animationTimingFunction?: FacetProp; background?: FacetProp; backgroundColor?: FacetProp; backgroundImage?: FacetProp; backgroundPosition?: FacetProp; backgroundRepeat?: FacetProp; backgroundSize?: FacetProp; border?: FacetProp; borderBottom?: FacetProp; borderBottomColor?: FacetProp; borderBottomLeftRadius?: FacetProp; borderBottomRightRadius?: FacetProp; borderBottomStyle?: FacetProp; borderBottomWidth?: FacetProp; borderColor?: FacetProp; borderImage?: FacetProp; borderImageOutset?: FacetProp; borderImageRepeat?: FacetProp; borderImageSlice?: FacetProp; borderImageSource?: FacetProp; borderImageWidth?: FacetProp; borderLeft?: FacetProp; borderLeftColor?: FacetProp; borderLeftStyle?: FacetProp; borderLeftWidth?: FacetProp; borderRadius?: FacetProp; borderRight?: FacetProp; borderRightColor?: FacetProp; borderRightStyle?: FacetProp; borderRightWidth?: FacetProp; borderStyle?: FacetProp; borderTop?: FacetProp; borderTopColor?: FacetProp; borderTopLeftRadius?: FacetProp; borderTopRightRadius?: FacetProp; borderTopStyle?: FacetProp; borderTopWidth?: FacetProp; borderWidth?: FacetProp; bottom?: FacetProp; bottomPX?: FacetProp; bottomVH?: FacetProp; bottomVW?: FacetProp; boxShadow?: FacetProp; clipPath?: FacetProp; color?: FacetProp; contain?: FacetProp; cursor?: FacetProp; display?: FacetProp<'flex' | 'none'>; filter?: FacetProp; flex?: FacetProp; flexDirection?: FacetProp; flexWrap?: FacetProp; font?: FacetProp; fontFamily?: FacetProp; fontFitMode?: FacetProp; fontSize?: FacetProp; fontStyle?: FacetProp; fontWeight?: FacetProp; height?: FacetProp; heightPX?: FacetProp; heightVH?: FacetProp; isolation?: FacetProp; justifyContent?: FacetProp; left?: FacetProp; leftPX?: FacetProp; leftVH?: FacetProp; leftVW?: FacetProp; letterSpacing?: FacetProp; lineHeight?: FacetProp; margin?: FacetProp; marginBottom?: FacetProp; marginLeft?: FacetProp; marginRight?: FacetProp; marginTop?: FacetProp; mask?: FacetProp; maskClip?: FacetProp; maskImage?: FacetProp; maskMode?: FacetProp; maskPosition?: FacetProp; maskRepeat?: FacetProp; maskSize?: FacetProp; maxHeight?: FacetProp; maxHeightPX?: FacetProp; maxHeightVH?: FacetProp; maxWidth?: FacetProp; maxWidthPX?: FacetProp; maxWidthVW?: FacetProp; minHeight?: FacetProp; minHeightPX?: FacetProp; minHeightVH?: FacetProp; minWidth?: FacetProp; minWidthPX?: FacetProp; minWidthVW?: FacetProp; mixBlendMode?: FacetProp; opacity?: FacetProp; overflow?: FacetProp; overflowWrap?: FacetProp; overflowX?: FacetProp; overflowY?: FacetProp; padding?: FacetProp; paddingBottom?: FacetProp; paddingLeft?: FacetProp; paddingRight?: FacetProp; paddingTop?: FacetProp; perspective?: FacetProp; perspectiveOrigin?: FacetProp; pointerEvents?: FacetProp; position?: FacetProp; right?: FacetProp; rightPX?: FacetProp; rightVH?: FacetProp; rightVW?: FacetProp; textAlign?: FacetProp; textOverflow?: FacetProp; textShadow?: FacetProp; textTransform?: FacetProp; top?: FacetProp; topPX?: FacetProp; topVH?: FacetProp; topVW?: FacetProp; transform?: FacetProp; transformOrigin?: FacetProp; transition?: FacetProp; transitionDelay?: FacetProp; transitionDuration?: FacetProp; transitionProperty?: FacetProp; transitionTimingFunction?: FacetProp; userSelect?: FacetProp; visibility?: FacetProp; whiteSpace?: FacetProp; width?: FacetProp; widthPX?: FacetProp; widthVW?: FacetProp; zIndex?: FacetProp; };