UNPKG

@studiometa/js-toolkit

Version:

A set of useful little bits of JavaScript to boost your project! 🚀

81 lines (80 loc) • 2.23 kB
import type { Options as DeepmergeOptions } from 'deepmerge'; import { AbstractManager } from './AbstractManager.js'; import type { Base } from '../index.js'; export type OptionType = StringConstructor | NumberConstructor | BooleanConstructor | ArrayConstructor | ObjectConstructor; type ArrayOption = { type: ArrayConstructor; default?: (instance: Base) => unknown[]; merge?: boolean | DeepmergeOptions; }; type ObjectOption = { type: ObjectConstructor; default?: (instance: Base) => unknown; merge?: boolean | DeepmergeOptions; }; type StringOption = { type: StringConstructor; default?: string | ((instance: Base) => string); }; type NumberOption = { type: NumberConstructor; default?: number | ((instance: Base) => number); }; type BooleanOption = { type: BooleanConstructor; default?: boolean | ((instance: Base) => boolean); }; export type OptionObject = ArrayOption | ObjectOption | StringOption | NumberOption | BooleanOption; export type OptionsSchema = { [name: string]: OptionType | OptionObject; }; export type OptionsInterface = { [optionName: string]: unknown; }; /** * Get a property name. */ export declare const __getPropertyName: (name: string, prefix?: unknown, optionAttribute?: unknown) => string; /** * Class options to manage options as data attributes on an HTML element. * * @todo Use `MutationObserver` to update values? Might be more performant. */ export declare class OptionsManager<T> extends AbstractManager<T & { name: string; debug: boolean; log: boolean; }> { /** * An object to store Array and Object values for reference. * * @private */ __values: {}; /** * Default props. */ __props: T & { name: string; debug: boolean; log: boolean; }; /** * Class constructor. */ constructor(base: Base); /** * Get an option value. */ get(name: string, config: OptionObject): any; /** * Set an option value. */ set(name: string, value: unknown, config: OptionObject): void; /** * Register an option. * @private */ __register(name: string, config: OptionObject): void; } export {};