UNPKG

@poupe/vue

Version:

Vue component library for Poupe UI framework with theme customization and accessibility support

255 lines (237 loc) 8.21 kB
import { App } from 'vue'; import { ComputedRef } from 'vue'; import { IconifyIcon } from '@iconify/vue'; import { InjectionKey } from 'vue'; import { MaybeRefOrGetter } from 'vue'; import { Ref } from 'vue'; /** * Creates a Poupe instance for the Vue app * Used by `@poupe/nuxt` to inject app-wide defaults */ export declare function createPoupe(options?: PoupeOptions): { install(app: App): void; }; declare type IconValue = IconifyIcon | string; /** * Extendable interface for component defaults * Components can augment this interface to add their own defaults * * @example * ```typescript * declare module '@poupe/vue' { * interface PoupeComponentDefaults { * button?: { * variant?: string * size?: string * ripple?: boolean * } * } * } * ``` */ export declare interface PoupeComponentDefaults { } export declare const poupeInjectionKey: InjectionKey<PoupeOptions>; export declare interface PoupeOptions { defaults?: PoupeComponentDefaults; theme?: { dark?: boolean; colors?: Record<string, string>; }; accessibility?: { reducedMotion?: boolean; highContrast?: boolean; }; ripple?: { disabled?: boolean; color?: string; opacity?: number; duration?: number; }; } /** * Provider for isolated Poupe instances (e.g., in stories) */ export declare function providePoupeOptions(options: PoupeOptions): void; declare interface Ripple { x: number; y: number; size: number; id: number; } export declare interface RippleOptions { /** * Ripple color (CSS color value) * @defaultValue `'currentColor'` */ color?: string; /** * Ripple opacity * @defaultValue `0.12` */ opacity?: number; /** * Duration in milliseconds * @defaultValue `600` */ duration?: number; /** * Whether the ripple is bounded by the container * @defaultValue `true` */ bounded?: boolean; /** * Disable ripple effect * @defaultValue `false` */ disabled?: MaybeRefOrGetter<boolean>; } export declare function usePasswordToggle(origType: MaybeRefOrGetter<string>): { showPassword: Ref<boolean, boolean>; passwordToggleIcon: ComputedRef<string | { readonly body: string; readonly left?: number | undefined; readonly top?: number | undefined; readonly width?: number | undefined; readonly height?: number | undefined; readonly rotate?: number | undefined; readonly hFlip?: boolean | undefined; readonly vFlip?: boolean | undefined; }>; typeAttr: ComputedRef<string>; }; /** * Use Poupe options in components * Provides access to global defaults set via app.config.ts */ export declare function usePoupe(): PoupeOptions | undefined; /** * Helper to get component defaults with fallback */ export declare function usePoupeDefaults<T extends keyof PoupeComponentDefaults>(component: T): PoupeComponentDefaults[T] | undefined; export declare function usePoupeDefaults<T>(component: string): T | undefined; export declare const usePoupeIcons: () => { readonly icons: { readonly [x: string]: { readonly [x: string]: string | { readonly body: string; readonly left?: number | undefined; readonly top?: number | undefined; readonly width?: number | undefined; readonly height?: number | undefined; readonly rotate?: number | undefined; readonly hFlip?: boolean | undefined; readonly vFlip?: boolean | undefined; }; }; readonly poupe: { readonly blankIcon: string | { readonly body: string; readonly left?: number | undefined; readonly top?: number | undefined; readonly width?: number | undefined; readonly height?: number | undefined; readonly rotate?: number | undefined; readonly hFlip?: boolean | undefined; readonly vFlip?: boolean | undefined; }; readonly unknownIcon: string | { readonly body: string; readonly left?: number | undefined; readonly top?: number | undefined; readonly width?: number | undefined; readonly height?: number | undefined; readonly rotate?: number | undefined; readonly hFlip?: boolean | undefined; readonly vFlip?: boolean | undefined; }; readonly spinner: string | { readonly body: string; readonly left?: number | undefined; readonly top?: number | undefined; readonly width?: number | undefined; readonly height?: number | undefined; readonly rotate?: number | undefined; readonly hFlip?: boolean | undefined; readonly vFlip?: boolean | undefined; }; readonly showPassword: string | { readonly body: string; readonly left?: number | undefined; readonly top?: number | undefined; readonly width?: number | undefined; readonly height?: number | undefined; readonly rotate?: number | undefined; readonly hFlip?: boolean | undefined; readonly vFlip?: boolean | undefined; }; readonly hidePassword: string | { readonly body: string; readonly left?: number | undefined; readonly top?: number | undefined; readonly width?: number | undefined; readonly height?: number | undefined; readonly rotate?: number | undefined; readonly hFlip?: boolean | undefined; readonly vFlip?: boolean | undefined; }; }; }; readonly toIcon: (icon: MaybeRefOrGetter<IconifyIcon | string | undefined>) => IconifyIcon | string; readonly registerIcons: (namespace: string, icons: Record<string, IconValue>) => void; }; /** * Helper to create merged props with proper type inference * Ensures component defaults are properly typed * * @example * ```typescript * const mergedProps = usePoupeMergedProps(props, 'surface', { * variant: 'surface', * color: 'base', * shape: 'none', * // ... other defaults * }); * ``` */ export declare function usePoupeMergedProps<TProps extends Record<string, unknown>, TDefaults extends Partial<TProps>>(props: TProps, componentName: keyof PoupeComponentDefaults, componentDefaults: TDefaults): TProps & Required<TDefaults>; /** * Helper to merge component props with global defaults * Uses defu for deep merging with proper type inference * * @example * ```typescript * const finalProps = usePoupeMergeProps(props, 'button', { * variant: 'filled', * size: 'medium', * }); * ``` */ export declare function usePoupeMergeProps<T extends Record<string, unknown>>(props: T, componentName: keyof PoupeComponentDefaults, componentDefaults?: Partial<T>): T; export declare function useRipple(elementReference: Ref<HTMLElement | undefined>, options?: RippleOptions): { ripples: Ref<{ x: number; y: number; size: number; id: number; }[], Ripple[] | { x: number; y: number; size: number; id: number; }[]>; getRippleStyle: (ripple: Ripple) => { position: "absolute"; left: string; top: string; width: string; height: string; transform: string; borderRadius: string; backgroundColor: string; opacity: number; pointerEvents: "none"; animation: string; }; }; export { }