import type { IAddressActions } from '@/core/client/actions/client-address-action.service'; import type { ICartActions } from '@/core/client/actions/client-cart-action.service'; import type { ICheckoutActions } from '@/core/client/actions/client-checkout-action.service'; import type { IProductActions } from '@/core/client/actions/client-product-action.service'; import type { IClientConfigs } from '@/core/client/client-config.service'; import type { IAddressOptions } from '@/modules/address/address.interface'; import type { IInjectedComponent } from './component.interface'; import type { UpdateAddressComponent, UpdateCartComponent, UpdateCheckoutComponent, UpdateComponentGlobalConfigs, UpdateProductComponent, UpdateProductListComponent } from './configs'; import type { IBuilderInjectElementParams, IInjectCheckoutBuilderParams, IInjectCheckoutParams, IInjectProductElement, IInjectProductListFiltersParams, IInjectProductListParams, IInjectProductListSearchParams } from './injection.interface'; export interface ILiquidCommerceElementsUIMethod { cartButton(containerId: string, showItemsCount?: boolean): void; floatingCartButton(showItemsCount?: boolean): void; cartSubtotal(elementId: string): void; cartItemsCount(elementId: string, options?: { hideZero: boolean; }): void; } export interface ILiquidCommerceElementsActions { product: IProductActions; address: IAddressActions; cart: ICartActions; checkout: ICheckoutActions; } export interface IElementsCheckoutActions extends Omit { } export interface IElementsCheckoutClient { injectCheckout: (params: IInjectCheckoutParams) => Promise; actions: { checkout: IElementsCheckoutActions; }; destroy(): void; } export interface ILiquidCommerceElementsBuilderClient { updateComponentGlobalConfigs(configs: UpdateComponentGlobalConfigs): Promise; updateProductComponent(configs: UpdateProductComponent): Promise; updateAddressComponent(configs: UpdateAddressComponent): void; updateCartComponent(configs: UpdateCartComponent): void; updateCheckoutComponent(configs: UpdateCheckoutComponent): void; updateProductListComponent(configs: UpdateProductListComponent): void; injectElement(params: IBuilderInjectElementParams): Promise; injectProductElement(params: IInjectProductElement[]): Promise; injectAddressElement(containerId: string, options?: IAddressOptions): Promise; injectCartElement(containerId: string): Promise; injectCheckoutElement(params: IInjectCheckoutBuilderParams): Promise; injectProductList(params: IInjectProductListParams): Promise; actions: ILiquidCommerceElementsActions; destroy(): void; } export interface ILiquidCommerceElementsClient { injectProductElement(params: IInjectProductElement[]): Promise; injectAddressElement(containerId: string, options?: IAddressOptions): Promise; injectCartElement(containerId: string): Promise; injectCheckoutElement(params: IInjectCheckoutParams): Promise; injectProductList(params: IInjectProductListParams): Promise; injectProductListSearch(params: IInjectProductListSearchParams): Promise; injectProductListFilters(params: IInjectProductListFiltersParams): Promise; ui: ILiquidCommerceElementsUIMethod; actions: ILiquidCommerceElementsActions; getInjectedComponents(): Map; destroy(): void; } export interface ILiquidCommerceElementsCheckoutClient { prepare(): Promise; injectCheckout(params: IInjectCheckoutParams): Promise; actions: { checkout: IElementsCheckoutActions; }; destroy(): void; } export type LiquidCommerceElementsClientConstructor = new (clientConfigs: IClientConfigs) => ILiquidCommerceElementsClient; export type LiquidCommerceElementsBuilderClientConstructor = new (clientConfigs: IClientConfigs) => ILiquidCommerceElementsBuilderClient; export type LiquidCommerceElementsCheckoutClientConstructor = new (clientConfigs: IClientConfigs) => ILiquidCommerceElementsCheckoutClient;