UNPKG

@melt-ui/svelte

Version:
68 lines (67 loc) 3.01 kB
import type { ActionReturn } from 'svelte/action'; import type { Readable } from 'svelte/store'; export type IfEquals<T, U, Y = unknown, N = never> = (<G>() => G extends T ? 1 : 2) extends <G>() => G extends U ? 1 : 2 ? Y : N; export type WrapWithCustomEvent<T> = { [K in keyof T]: CustomEvent<T[K]>; }; export type Nullable<T> = T | null; export type ValueOf<T> = T[keyof T]; export type Arrayable<T> = T | T[]; export type CreatePaginationProps = { count: number; perPage?: number; }; type NullableKeys<T> = { [K in keyof T]: undefined extends T[K] ? K : never; }[keyof T]; export type Defaults<T> = { [K in NullableKeys<T>]?: T[K]; }; export type TextDirection = 'ltr' | 'rtl'; export type Orientation = 'horizontal' | 'vertical'; export type Prettify<T> = { [K in keyof T]: T[K]; } & {}; export type Expand<T> = T extends object ? T extends infer O ? { [K in keyof O]: O[K]; } : never : T; export type ExpandDeep<T> = T extends object ? T extends infer O ? { [K in keyof O]: ExpandDeep<O[K]>; } : never : T; type Without<T, U> = { [P in Exclude<keyof T, keyof U>]?: never; }; export type XOR<T, U> = T | U extends object ? (Without<T, U> & U) | (Without<U, T> & T) : T | U; export type BuilderReturn<T extends (...args: any) => any> = { [P in keyof ReturnType<T>]: ReturnType<T>[P]; }; export type EventHandler<T extends Event = Event> = (event: T) => void; export type MeltEvent<E extends Event> = CustomEvent<{ originalEvent: E; }>; export type MeltEventHandler<E extends Event> = EventHandler<Expand<Omit<MeltEvent<E>, 'initCustomEvent'>>>; export type MeltActionReturn<Events extends keyof HTMLElementEventMap> = ActionReturn<undefined, { [K in Events as `on:m-${string & K}`]?: K extends keyof HTMLElementEventMap ? MeltEventHandler<HTMLElementEventMap[K]> : never; }>; type CustomMeltComponentEvents<Events extends keyof HTMLElementEventMap> = { [K in Events as `m-${string & K}`]?: K extends keyof HTMLElementEventMap ? MeltEventHandler<HTMLElementEventMap[K]> : never; }; export type InternalCustomEvents<Events extends keyof HTMLElementEventMap> = { [K in Events as K]?: K extends keyof HTMLElementEventMap ? EventHandler<HTMLElementEventMap[K]> : never; }; type ElementEvents<T> = T extends ReadonlyArray<infer U> ? U : never; export type GroupedEvents<T> = { [K in keyof T]: ElementEvents<T[K]>; }; export type MeltComponentEvents<T> = { [K in keyof T]: T[K] extends keyof HTMLElementEventMap ? CustomMeltComponentEvents<T[K]> : never; }; export type WhenTrue<TrueOrFalse, IfTrue, IfFalse, IfNeither = IfTrue | IfFalse> = [ TrueOrFalse ] extends [true] ? IfTrue : [TrueOrFalse] extends [false] ? IfFalse : IfNeither; export type RenameProperties<T, NewNames extends Partial<Record<keyof T, string>>> = Expand<{ [K in keyof T as K extends keyof NewNames ? NewNames[K] extends PropertyKey ? NewNames[K] : K : K]: T[K]; }>; export type NonEmptyArray<T> = [T, ...T[]]; export type MaybeReadable<T> = T | Readable<T>; export {};