import { type SupportedLocale } from './locales/index.js';
import { type RoundingMode, round } from './services/rounding.service.js';
import { formatNumber } from './services/formatting.service.js';
import { formatCurrency } from './services/currency.service.js';
import { formatBytes } from './services/bytes.service.js';
import { formatPercentage } from './services/percentage.service.js';
import { applyMask, getMask } from './services/mask.service.js';
import { abbreviateNumber } from './services/abbreviation.service.js';
import { toAccessibleString } from './services/accessibility.service.js';
import { unbeautify } from './services/parsing.service.js';
import { beautifyToParts, type NumberPart } from './services/parts.service.js';
declare const pluginServices: {
    readonly round: typeof round;
    readonly formatNumber: typeof formatNumber;
    readonly formatCurrency: typeof formatCurrency;
    readonly formatBytes: typeof formatBytes;
    readonly formatPercentage: typeof formatPercentage;
    readonly applyMask: typeof applyMask;
    readonly getMask: typeof getMask;
    readonly abbreviateNumber: typeof abbreviateNumber;
    readonly toAccessibleString: typeof toAccessibleString;
    readonly unbeautify: typeof unbeautify;
    readonly beautifyToParts: typeof beautifyToParts;
};
export declare class Num {
    private static appliedPlugins;
    private value;
    private _locale;
    private _decimals;
    private _abbreviated;
    private _stripZeros;
    private _roundingMode;
    private _mask?;
    private _currency?;
    private _showSymbol;
    private _showCode;
    private _bytes;
    private _bytesBinary;
    private _bytesLongFormat;
    private _percentage;
    private _percentageMultiply;
    private _percentageAddSpace?;
    static extend<TOptions = void>(plugin: NumPlugin<TOptions>, options?: TOptions): typeof Num;
    private static createStateSnapshot;
    private static applyStatePatch;
    constructor(value: number);
    static parse(input: string, locale?: SupportedLocale): number;
    locale(locale: SupportedLocale): this;
    decimals(decimals: number): this;
    abbreviated(): this;
    stripZeros(): this;
    rounding(mode: RoundingMode): this;
    mask(mask: string): this;
    currency(code: string): this;
    hideSymbol(): this;
    showCode(): this;
    bytes(binary?: boolean): this;
    bytesLongFormat(): this;
    percentage(multiply?: boolean): this;
    percentageSpace(addSpace?: boolean): this;
    format(): string;
    toString(): string;
    valueOf(): number;
    toAccessible(): string;
    toParts(): NumberPart[];
}
export declare function num(value: number): Num;
export interface NumState {
    value: number;
    locale: SupportedLocale;
    decimals: number;
    abbreviated: boolean;
    stripZeros: boolean;
    roundingMode: RoundingMode;
    mask?: string;
    currency?: string;
    showSymbol: boolean;
    showCode: boolean;
    bytes: boolean;
    bytesBinary: boolean;
    bytesLongFormat: boolean;
    percentage: boolean;
    percentageMultiply: boolean;
    percentageAddSpace?: boolean;
}
export type NumPluginServices = typeof pluginServices;
export interface NumPluginContext {
    Num: typeof Num;
    createInstance: (value: number) => Num;
    services: NumPluginServices;
    getState(instance: Num): Readonly<NumState>;
    patchState(instance: Num, patch: Partial<NumState>): void;
}
export type NumPlugin<TOptions = void> = (context: NumPluginContext, options?: TOptions) => void;
export {};
