dev@360: ///
dev@360: declare const AmbientInstance: WavesUserInterface;
dev@360:
dev@360: declare module 'waves-ui-piper' {
dev@360: export default AmbientInstance;
dev@360: }
dev@360:
dev@360: interface WavesUserInterface {
dev@360: core: Core;
dev@360: helpers: any;
dev@360: states: any;
dev@360: utils: Utilities;
dev@360: shapes: any;
dev@360: }
dev@360:
dev@360: interface MatrixEntity {
dev@360: getColumnCount(): number;
dev@360: getColumnHeight(): number;
dev@360: getColumn(n: number): Float32Array | number[];
dev@360: getStepDuration(): number;
dev@360: getStartTime(): number;
dev@360: dispose(): void;
dev@360: }
dev@360:
dev@360: interface Area {
dev@360: top: number;
dev@360: left: number;
dev@360: width: number;
dev@360: height: number;
dev@360: }
dev@360:
dev@360: interface Layer extends NodeJS.EventEmitter {
dev@360: start: number;
dev@360: offset: number;
dev@360: duration: number;
dev@360: stretchRatio: number;
dev@360: yDomain: number[];
dev@360: opacity: number;
dev@374: timeContext: LayerTimeContext;
dev@360: readonly timeToPixel: () => (time: number) => number;
dev@360: readonly valueToPixel: () => (value: number) => number;
dev@360: readonly items: Element[];
dev@360: readonly selectedItems: Element[];
dev@360: data: ArrayLike | Object;
dev@360: destroy(): void;
dev@360: configureTimeContextBehaviour(ctor: ObjectConstructor): void;
dev@374: setTimeContext(context: LayerTimeContext): void;
dev@360: configureShape(ctor: ObjectConstructor /* TODO BaseShape*/,
dev@360: accessors: Object,
dev@360: options: Object): void;
dev@360: configureCommonShape(ctor: ObjectConstructor /* TODO BaseShape*/,
dev@360: accessors: Object,
dev@360: options: Object): void;
dev@360: setBehaviour(behaviour: Object /* TODO BaseBehavior */): void;
dev@360: select(...$items: Element[]);
dev@360: unselect(...$items: Element[]);
dev@360: toggleSelection(...$items: Element[]);
dev@360: edit($items: Element[], dx: number, dy: number, $target: Element): void;
dev@360: setContextEditable(bool: boolean): void;
dev@360: editContext(dx: number, dy: number, $target: Element): void;
dev@360: stretchContext(dx: number, dy: number, $target: Element): void;
dev@360: getItemFromDOMElement($el: Element): Element | null;
dev@360: getDatumFromItem($item: Element): Object | any[] | null;
dev@360: getDatumFromDOMElement($item: Element): Object | any[] | null;
dev@360: hasItem($item: Element): boolean;
dev@360: hasElement($el: Element): boolean;
dev@360: getItemsInArea(area: Area): Element[];
dev@360: render(): void;
dev@360: update(): void;
dev@360: updateContainer(): void;
dev@360: updateShapes(): void;
dev@360: }
dev@360:
dev@391: interface HighlightLayer extends Layer {
dev@391: currentPosition: number;
dev@391: }
dev@391:
dev@360: interface LayerConstructor {
dev@360: new(dataType: 'entity' | 'collection',
dev@360: data: ArrayLike | Object,
dev@360: options: Object): Layer;
dev@360: }
dev@360:
dev@360: interface MatrixEntityConstructor {
dev@360: new(): MatrixEntity;
dev@360: }
dev@360:
dev@360: interface PrefilledMatrixEntityConstructor {
dev@360: new(data: Float32Array[] | number[][],
dev@360: startTime: number,
dev@360: stepDuration: number): MatrixEntity;
dev@360: }
dev@360:
dev@360: interface Utilities {
dev@360: MatrixEntity: MatrixEntityConstructor;
dev@360: PrefilledMatrixEntity: PrefilledMatrixEntityConstructor;
dev@374: scales: {
dev@375: linear: () => Scale;
dev@374: };
dev@360: }
dev@360:
dev@360: type Timeline = any;
dev@360: type Track = any; // TODO
dev@360:
dev@374: interface Scale {
dev@374: (value: number): number;
dev@374: invert(): (value: number) => number;
dev@374: domain(arr?: [number, number]): Scale;
dev@374: range(arr?: [number, number]): Scale;
dev@374: }
dev@374:
dev@374: interface LayerTimeContext {
dev@374: start: number;
dev@374: duration: number;
dev@374: offset: number;
dev@374: stretchRatio: number;
dev@374: parent: TimelineTimeContext;
dev@374: timeToPixel(): Scale;
dev@374: pixelToTime(px: number): number;
dev@374: clone(): LayerTimeContext;
dev@374: }
dev@374:
dev@374: interface LayerTimeContextConstructor {
dev@374: new(parent: TimelineTimeContext): LayerTimeContext;
dev@374: }
dev@374:
dev@360: interface Core {
dev@360: Layer: LayerConstructor;
dev@374: LayerTimeContext: LayerTimeContextConstructor;
dev@360: Timeline: Timeline; // TODO
dev@360: TimelineTimeContext: TimelineTimeContextConstructor;
dev@360: }
dev@360:
dev@360: interface TimelineTimeContext {
dev@360: pixelsPerSecond: number;
dev@360: readonly computedPixelsPerSecond: number;
dev@360: offset: number;
dev@360: zoom: number;
dev@360: visibleWidth: number;
dev@360: readonly visibleDuration: number;
dev@360: maintainVisibleDuration: boolean;
dev@374: timeToPixel: Scale;
dev@360: }
dev@360:
dev@360: interface TimelineTimeContextConstructor {
dev@360: new(pixelsPerSecond: number, visibleWidth: number): TimelineTimeContext;
dev@360: }