time-calculator-web-component
Version:
A web component for time calculation with expression evaluation
91 lines • 2.46 kB
TypeScript
export type FormatMode = "H:mm" | "minutes";
export type RoundingMode = "floor" | "ceil" | "halfUp";
export type Locale = "pt-BR" | "en-US";
export type DecimalSeparator = "," | ".";
export type WindowMode = "popover" | "fixed" | "modal";
export interface TimeAmount {
minutes: number;
}
export interface EvaluateOptions {
rounding?: RoundingMode;
allowNegative?: boolean;
maxAbsMinutes?: number | null;
}
export interface ParseOptions {
locale?: Locale;
decimalSeparator?: DecimalSeparator;
}
export interface Result {
value: TimeAmount;
formatted: string;
mode: FormatMode;
}
export interface WindowModeConfig {
mode?: WindowMode;
closeOnOutsideClick?: boolean;
persistPosition?: boolean;
}
export interface TimeCalcConfig extends EvaluateOptions, ParseOptions, WindowModeConfig {
defaultMode?: FormatMode;
debugError?: boolean;
}
export interface TimeCalcController {
open(): void;
close(): void;
toggle(): void;
isOpen(): boolean;
setPosition(x: number, y: number): void;
center(): void;
setInput(input: string): void;
getInput(): string;
evaluate(): Result;
format(minutes: number, mode?: FormatMode): string;
on(event: "open" | "close" | "change" | "result" | "error", cb: (payload?: any) => void): () => void;
config(cfg: Partial<TimeCalcConfig>): void;
}
export interface Token {
type: TokenType;
value: string;
position: number;
}
export declare enum TokenType {
TIME_HMM = "TIME_HMM",
NUMBER = "NUMBER",
UNIT_H = "UNIT_H",
UNIT_M = "UNIT_M",
PLUS = "PLUS",
MINUS = "MINUS",
MULTIPLY = "MULTIPLY",
DIVIDE = "DIVIDE",
LPAREN = "LPAREN",
RPAREN = "RPAREN",
EOF = "EOF"
}
export interface ASTNode {
type: 'BinaryOp' | 'UnaryOp' | 'Duration' | 'Number';
}
export interface BinaryOpNode extends ASTNode {
type: 'BinaryOp';
operator: '+' | '-' | '*' | '/';
left: ASTNode;
right: ASTNode;
}
export interface UnaryOpNode extends ASTNode {
type: 'UnaryOp';
operator: '+' | '-';
operand: ASTNode;
}
export interface DurationNode extends ASTNode {
type: 'Duration';
minutes: number;
}
export interface NumberNode extends ASTNode {
type: 'Number';
value: number;
}
export type ASTNodeTypes = BinaryOpNode | UnaryOpNode | DurationNode | NumberNode;
export interface ParseError {
message: string;
position: number;
}
//# sourceMappingURL=types.d.ts.map