@agnos-ui/core
Version:
Framework-agnostic headless component library.
113 lines (112 loc) • 4.92 kB
TypeScript
import type { ReadableSignal, WritableSignal } from '@amadeus-it-group/tansu';
import type { ModalProps } from './components/modal/modal';
import type { AlertProps } from './components/alert/alert';
import type { PaginationProps } from './components/pagination/pagination';
import type { RatingProps } from './components/rating/rating';
import type { SelectProps } from './components/select/select';
import type { AccordionProps } from './components/accordion/accordion';
import type { ProgressbarProps } from './components/progressbar/progressbar';
import type { SliderProps } from './components/slider/slider';
import type { ToastProps } from './components/toast/toast';
import type { TreeProps } from './components/tree/tree';
import type { CarouselProps } from './components/carousel';
/**
* A utility type that makes all properties of an object type `T` optional,
* and also makes all properties of the nested objects within `T` optional.
*
* @template T - The object type to be transformed.
*/
export type Partial2Levels<T> = Partial<{
[Level1 in keyof T]: Partial<T[Level1]>;
}>;
/**
* Represents a store for widget configurations with support for partial updates
* at two levels of depth. This store includes signals for its own state, an optional
* parent state, and an optional adapted parent state.
*
* @template T - The type of the widget configuration.
*/
export type WidgetsConfigStore<T> = WritableSignal<Partial2Levels<T>> & {
own$: WritableSignal<Partial2Levels<T>>;
parent$: undefined | WritableSignal<Partial2Levels<T>>;
adaptedParent$: undefined | ReadableSignal<Partial2Levels<T>>;
};
/**
* Merges source object into destination object, up to the provided number of levels.
* @param destination - destination object
* @param source - source object
* @param levels - number of levels to merge
* @returns the destination object in most cases, or the source in some cases (if the source is not undefined and either levels is smaller than 1
* or the source is not an object)
*/
export declare const mergeInto: <T>(destination: T, source: T | undefined, levels?: number) => T;
/**
* Creates a new widgets default configuration store, optionally inheriting from a parent store, and containing
* its own set of widgets configuration properties that override the same properties form the parent configuration.
*
* @remarks
* The resulting store has a value computed from the parent store in two steps:
* - first step: the parent configuration is transformed by the adaptParentConfig function (if specified).
* If adaptParentConfig is not specified, this step is skipped.
* - second step: the configuration from step 1 is merged (2-levels deep) with the own$ store. The own$ store initially contains
* an empty object (i.e. no property from the parent is overridden). It can be changed by calling set on the store returned by this function.
*
* @param parent$ - optional parent widgets default configuration store.
* @param adaptParentConfig - optional function that receives a 2-levels copy of the widgets default configuration
* from parent$ (or an empty object if parent$ is not specified) and returns the widgets default configuration to be used.
* It is called only if the configuration is needed, and was not yet computed for the current value of the parent configuration.
* It is called in a tansu reactive context, so it can use any tansu store and will be called again if those stores change.
* @returns the resulting widgets default configuration store, which contains 3 additional properties that are stores:
* parent$, adaptedParent$ (containing the value computed after the first step), and own$ (that contains only overridding properties).
* The resulting store is writable, its set function is actually the set function of the own$ store.
*/
export declare const createWidgetsConfig: <T>(parent$?: WidgetsConfigStore<T>, adaptParentConfig?: (config: Partial2Levels<T>) => Partial2Levels<T>) => WidgetsConfigStore<T>;
/**
* Configuration for various widgets used in the application.
*/
export type WidgetsConfig = {
/**
* the pagination widget config
*/
pagination: PaginationProps;
/**
* the rating widget config
*/
rating: RatingProps;
/**
* the select widget config
*/
select: SelectProps<any>;
/**
* the modal widget config
*/
modal: ModalProps;
/**
* the alert widget config
*/
alert: AlertProps;
/**
* the accordion widget config
*/
accordion: AccordionProps;
/**
* the progress bar widget config
*/
progressbar: ProgressbarProps;
/**
* slider widget config
*/
slider: SliderProps;
/**
* toast widget config
*/
toast: ToastProps;
/**
* tree widget config
*/
tree: TreeProps;
/**
* carousel widget config
*/
carousel: CarouselProps;
};