import * as i0 from '@angular/core'; import { EventEmitter, OnInit, QueryList, ElementRef, OnChanges, SimpleChanges, AfterViewInit, OnDestroy } from '@angular/core'; type ButtonVariant = 'primary' | 'ghost' | 'subtle' | 'outline' | 'danger'; declare class VspButton { variant: ButtonVariant; size: 'sm' | 'md' | 'lg'; loading: boolean; loadingText?: string; fullWidth: boolean; disabled: boolean; get cls(): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } type BadgeTone = 'pos' | 'neg' | 'warn' | 'info' | 'muted'; declare class VspBadge { tone: BadgeTone; dot: boolean; get cls(): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspTag { remove: EventEmitter; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspKbd { static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspDivider { vertical: boolean; get cls(): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } type AvatarStatus = 'online' | 'offline' | 'away' | 'busy'; declare class VspAvatar { name: string; hue: number; size: number; src?: string; alt?: string; status?: AvatarStatus; shape: 'circle' | 'square'; get initials(): string; get radius(): string; get dot(): number; get statusColor(): string; get bg(): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } interface Person { name: string; hue?: number; src?: string; } declare class VspAvatarGroup { people: Person[]; max: number; size: number; get shown(): Person[]; get extra(): number; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspSegmented { value?: string; valueChange: EventEmitter; options: string[]; pick(o: string): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspSpinner { size: 'sm' | 'md' | 'lg'; label?: string; get cls(): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } type IconButtonVariant = 'ghost' | 'subtle' | 'danger'; declare class VspIconButton { label?: string; size: 'sm' | 'md' | 'lg'; variant?: IconButtonVariant; loading: boolean; disabled: boolean; get cls(): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspProgress { value: number; tone?: string; height: number; max: number; indeterminate: boolean; label?: string; get pct(): number; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspSkeleton { w: string | number; h: string | number; r: number; px(v: string | number): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspCard { pad: boolean; get cls(): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspCardHead { title?: string; desc?: string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } type AlertTone = 'info' | 'pos' | 'warn' | 'neg'; declare class VspAlert { tone: AlertTone; title?: string; get cls(): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspField { label?: string; required: boolean; hint?: string; error?: string; htmlFor?: string; get hintCls(): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspInput { value: string; valueChange: EventEmitter; invalid: boolean; get cls(): string; onInput(e: Event): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspTextarea { value: string; valueChange: EventEmitter; onInput(e: Event): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspSwitch { checked: boolean; checkedChange: EventEmitter; size?: 'sm'; disabled: boolean; get cls(): string; toggle(): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspCheckbox { checked: boolean; checkedChange: EventEmitter; label?: string; sub?: string; disabled: boolean; indeterminate: boolean; invalid: boolean; id?: string; get checkCls(): string; toggle(): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } type NativeSelectOption = string | { value: string; label: string; sub?: string; disabled?: boolean; }; declare class VspRadio { checked: boolean; label?: string; sub?: string; name?: string; value?: string; disabled: boolean; select: EventEmitter; get dotCls(): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspRadioGroup { value?: string; valueChange: EventEmitter; options: NativeSelectOption[]; name: string; disabled: boolean; orientation: 'vertical' | 'horizontal'; val: (o: NativeSelectOption) => string; lbl: (o: NativeSelectOption) => string; subOf: (o: NativeSelectOption) => string | undefined; disOf(o: NativeSelectOption): boolean; pick(v: string): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspSlider { value: number; valueChange: EventEmitter; min: number; max: number; step: number; disabled: boolean; id?: string; ariaLabel?: string; onInput(e: Event): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspNativeSelect { value?: string; valueChange: EventEmitter; options: NativeSelectOption[]; val: (o: NativeSelectOption) => string; lbl: (o: NativeSelectOption) => string; onChange(e: Event): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } type TabItem = string | { value: string; label: string; count?: number; disabled?: boolean; }; type BreadcrumbItem = string | { label: string; href?: string; icon?: string; }; declare class VspTabs { tabs: TabItem[]; value?: string; valueChange: EventEmitter; id(t: TabItem): string; lbl(t: TabItem): string; cnt(t: TabItem): number | undefined; dis(t: TabItem): boolean | undefined; cls(t: TabItem): string; pick(v: string): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspBreadcrumb { items: BreadcrumbItem[]; maxItems?: number; readonly ELL: { ellipsis: boolean; }; get display(): unknown[]; isEll(it: unknown): boolean; private obj; lbl(it: unknown): string; hrefOf(it: unknown): string | undefined; iconOf(it: unknown): string | undefined; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } interface PageItem { gap: boolean; n: number; } declare class VspPagination { page: number; pageChange: EventEmitter; pages: number; get nums(): PageItem[]; numCls(n: number): string; go(p: number): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } type StepStatus = 'done' | 'active' | 'pending' | 'error'; type StepperItem = string | { label: string; status?: StepStatus; }; declare class VspStepper { steps: StepperItem[]; current: number; onStepClick?: (i: number) => void; orientation: 'horizontal' | 'vertical'; lbl(s: StepperItem): string; statusOf(i: number, s: StepperItem): StepStatus; barCls(i: number): string; stepCls(i: number, s: StepperItem): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspCircularProgress { value: number; size: number; thickness: number; color: string; label?: string; get r(): number; get circ(): number; get offset(): number; get display(): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspStat { label?: string; value?: string; delta?: string; deltaDir: 'up' | 'down'; tone: string; get deltaCls(): string; get arrow(): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } type TimelineTone = 'pos' | 'neg' | 'warn' | 'info'; interface TimelineItem { title: string; time?: string; body?: string; tone?: TimelineTone; active?: boolean; } declare class VspTimeline { items: TimelineItem[]; orientation: 'vertical' | 'horizontal'; dotStyle(tone?: TimelineTone): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspDescriptionList { items: [string, string][]; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } type BannerTone = 'info' | 'warn' | 'accent' | 'pos' | 'neg'; declare class VspBanner { tone: BannerTone; dismissible: boolean; dismiss: EventEmitter; get cls(): string; get iconPath(): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspEmptyState { title?: string; desc?: string; compact: boolean; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } interface AccordionItem { title: string; body: string; } declare class VspAccordion implements OnInit { items: AccordionItem[]; multiple: boolean; defaultOpen: number[]; /** Controlled open indices. Omit for uncontrolled. */ open?: number[]; openChange: EventEmitter; private internal; ngOnInit(): void; private get openSet(); toggle(i: number): void; itemCls(i: number): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } type Pt = [number, number]; declare class VspSparkline { data: number[]; color: string; w: number; h: number; fill: boolean; gid: string; get pts(): Pt[]; get d(): string; get areaD(): string; get last(): Pt; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } interface DonutDatum { label: string; value: number; color: string; } declare class VspDonut { data: DonutDatum[]; size: number; thickness: number; centerLabel?: string; valueFormat?: (n: number) => string; hover: number | null; fmt(n: number): string; get total(): number; get r(): number; get c(): number; get circ(): number; get segs(): { color: string; dash: string; offset: number; }[]; pct(v: number): number; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspStatCard { label?: string; value?: string; delta?: string; deltaDir: 'up' | 'down'; spark?: number[]; sparkColor: string; get deltaCls(): string; get arrow(): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspNumberStepper { value: number; valueChange: EventEmitter; min?: number; max?: number; step: number; unit?: string; disabled: boolean; id?: string; set(v: number): void; onInput(e: Event): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspCopyButton { text: string; label: string; size: string; done: boolean; get cls(): string; copy(): Promise; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspInlineEdit { value: string; placeholder: string; save: EventEmitter; editing: boolean; draft: string; start(): void; commit(): void; cancel(): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } interface TreeNodeData { id?: string; label: string; badge?: string; children?: TreeNodeData[]; } declare class VspTree implements OnInit { data: TreeNodeData[]; defaultExpanded: string[]; /** Controlled expanded node ids. Omit for uncontrolled. */ expandedInput?: string[]; expandedChange: EventEmitter; /** Controlled selected node id. Omit for uncontrolled. */ selectedInput?: string | null; select: EventEmitter; private internalExpanded; private internalSelected; ngOnInit(): void; get expandedSet(): Set; get selectedId(): string | null; id(n: TreeNodeData): string; hasKids(n: TreeNodeData): boolean; rowCls(n: TreeNodeData): string; activate(n: TreeNodeData): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspOTPInput { length: number; value: string; disabled: boolean; invalid: boolean; valueChange: EventEmitter; complete: EventEmitter; inputs: QueryList>; get indices(): number[]; private chars; private emit; set(i: number, raw: string): void; onPaste(i: number, e: ClipboardEvent): void; onKey(i: number, e: KeyboardEvent): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspAreaChart { series: number[][]; labels?: string[]; width: number; height: number; color: string; color2: string; dual: boolean; gid: string; padL: number; padB: number; padT: number; padR: number; get innerW(): number; get innerH(): number; get s0(): number[]; get s1(): number[] | undefined; get max(): number; get rng(): number; sx(i: number, len: number): number; sy(v: number): number; showLabel(i: number): boolean; get ticks(): { y: number; label: string; }[]; get lineEls(): { d: string; area: string | null; stroke: string; dash: string | null; opacity: number; }[]; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspBarChart { data: number[] | number[][]; labels?: string[]; width: number; height: number; color?: string; colors?: string[]; seriesLabels?: string[]; horizontal: boolean; stacked: boolean; valueFormat?: (n: number) => string; showValues: boolean; hover: number | null; padB: number; padT: number; padR: number; get series(): number[][]; get nSeries(): number; get nCats(): number; get padL(): number; colorAt(s: number): string; fmt(n: number): string; dim(c: string): string; get max(): number; get valAxis(): number; get catAxis(): number; get band(): number; private rect; get bars(): { x: number; y: number; w: number; h: number; fill: string; i: number; }[]; get gridEls(): { x1: number; x2: number; y1: number; y2: number; tx: number; ty: number; anchor: string; label: string; }[]; get cats(): { i: number; hx: number; hy: number; hw: number; hh: number; label: string | undefined; lx: number; ly: number; anchor: string; }[]; get tipLeft(): number; get tipTop(): number; get tipRows(): { color: string; label?: string; value: string; }[]; get showLegend(): boolean; get legendItems(): { color: string; label: string; }[]; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } type DialogTone = 'pos' | 'neg' | 'warn' | 'info'; /** * A modal dialog. Renders in place — `.ui-overlay` is `position: fixed`, so as * long as the component lives inside `.vsp-root` the overlay covers the viewport * and inherits the theme tokens (no portal needed). Project content into the * default slot for the body, `slot="icon"` for the header icon, and * `slot="footer"` for the footer. */ declare class VspDialog { open: boolean; title?: string; desc?: string; maxWidth: number; tone?: DialogTone; closeOnOverlayClick: boolean; closeOnEsc: boolean; close: EventEmitter; private cleanup; set panelRef(el: ElementRef | undefined); get color(): string; onEsc(): void; onBackdrop(e: MouseEvent): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } /** A side drawer. Like `vsp-dialog`, renders in place inside `.vsp-root`. */ declare class VspSheet { open: boolean; title?: string; desc?: string; side: 'right' | 'left' | 'top' | 'bottom'; closeOnOverlayClick: boolean; closeOnEsc: boolean; close: EventEmitter; private cleanup; set panelRef(el: ElementRef | undefined); onEsc(): void; onBackdrop(e: MouseEvent): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } type AnchoredAlign = 'start' | 'end'; /** Roving arrow-key focus between sibling menu items (one level). */ declare function menuNav(e: KeyboardEvent): void; /** * Positioning base for menus and popovers: anchors a layer to a trigger. The * layer is `position: fixed`, so it renders in place (inside `.vsp-root`) and is * positioned against the trigger's viewport rect. Click-outside and Escape close * it. Project the trigger with `slot="trigger"`; the default slot is the layer. */ declare class VspAnchored { align: AnchoredAlign; width?: number; layerClass: string; /** Controlled open state. Leave unset for uncontrolled. */ openInput?: boolean; openChange: EventEmitter; trig: ElementRef; layer?: ElementRef; internalOpen: boolean; rect: DOMRect | null; layerSize: { w: number; h: number; } | null; get isOpen(): boolean; private setOpen; toggle(): void; close(): void; place(): void; private measure; get layerStyle(): string; onDoc(e: MouseEvent): void; onEsc(): void; onResize(): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } interface MenuItem { label?: string; kbd?: string; /** Optional leading icon name (see `vsp-icon`). */ icon?: string; danger?: boolean; heading?: boolean; sep?: boolean; disabled?: boolean; /** Render as a checkable item — shows a tick and keeps the menu open on select. */ type?: 'checkbox' | 'radio'; checked?: boolean; /** Nested items — renders a submenu that flies out to the side. */ items?: MenuItem[]; onClick?: () => void; } declare class VspMenuItems { items: MenuItem[]; close: () => void; nav: typeof menuNav; role(it: MenuItem): string; pick(it: MenuItem): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspSubMenuItem { item: MenuItem; close: () => void; btn?: ElementRef; open: boolean; rect: DOMRect | null; private timer; private cancel; openNow(): void; closeSoon(): void; onKey(e: KeyboardEvent): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspDropdownMenu { items: MenuItem[]; align: AnchoredAlign; width?: number; open?: boolean; openChange: EventEmitter; anchored?: VspAnchored; closeFn: () => void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspPopover { align: AnchoredAlign; width: number; open?: boolean; openChange: EventEmitter; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspTooltip { label?: string; side: 'top' | 'bottom' | 'left' | 'right'; delay: number; disabled: boolean; el: ElementRef; show: boolean; pos: { x: number; y: number; }; private timer; private static readonly TRANSFORM; get transform(): string; private place; enter(): void; leave(): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } type ToastTone = 'info' | 'pos' | 'neg' | 'warn'; interface ToastAction { label: string; onClick: () => void; } type ToastPosition = 'top-left' | 'top' | 'top-right' | 'bottom-left' | 'bottom' | 'bottom-right'; interface ToastOptions { title?: string; body?: string; tone?: ToastTone; /** Auto-dismiss after this many ms (default 3600). Pass `Infinity` to persist. */ duration?: number; action?: ToastAction; } interface ToastItem extends ToastOptions { id: string; } /** Show a toast. Requires a `` mounted inside your `.vsp-root`. */ declare function toast(opts: ToastOptions | string): void; declare class VspToastHost { position: ToastPosition; toasts: i0.Signal; icon(tone?: ToastTone): string; dismiss(id: string): void; runAction(t: ToastItem): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } interface CommandItem { label: string; meta?: string; keywords?: string; /** Optional leading icon as an SVG path `d` string. */ icon?: string; onRun?: () => void; } interface CommandGroup { label: string; items: CommandItem[]; } type FlatCmd = CommandItem & { group: string; idx: number; }; /** * A ⌘K-style command palette. Renders in place — `.ui-overlay` is * `position: fixed`, so as long as the component lives inside `.vsp-root` it * covers the viewport and inherits the theme tokens (no portal needed). */ declare class VspCommandPalette implements OnChanges { open: boolean; groups: CommandGroup[]; close: EventEmitter; input?: ElementRef; q: string; active: number; ngOnChanges(changes: SimpleChanges): void; get flat(): FlatCmd[]; get groupOrder(): string[]; itemsOf(g: string): FlatCmd[]; onInput(e: Event): void; run(it: FlatCmd | undefined): void; onEsc(): void; onBackdrop(e: MouseEvent): void; onKey(e: KeyboardEvent): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } type SelectValue = string | number; interface SelectOption { value: SelectValue; label: string; /** Optional color swatch shown before the label. */ swatch?: string; } type SelectOptionInput = SelectValue | SelectOption; /** * Floating panel that tracks its trigger. Renders in place — `.ui-menu` is * positioned `fixed` from the anchor's rect, so it escapes overflow as long as * the component lives inside `.vsp-root`. Project the panel body as content. */ declare class VspSelPanel implements OnChanges, OnDestroy { open: boolean; anchor: HTMLElement | null; width?: number; menuClass: string; /** Hug the content (auto width, no padding/max-height) — used by the date pickers. */ auto: boolean; close: EventEmitter; panel?: ElementRef; rect: DOMRect | null; private cleanup; get maxH(): number; private place; ngOnChanges(c: SimpleChanges): void; private activate; private deactivate; ngOnDestroy(): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspComboList implements AfterViewInit { q: string; items: SelectOption[]; activeIdx: number; isSel: (o: SelectOption) => boolean; searchPlaceholder?: string; loading: boolean; emptyText?: string; qChange: EventEmitter; activeIdxChange: EventEmitter; pick: EventEmitter; search?: ElementRef; ngAfterViewInit(): void; onInput(e: Event): void; onKey(e: KeyboardEvent): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspSelect { options: SelectOptionInput[]; value?: SelectValue; valueChange: EventEmitter; placeholder: string; disabled: boolean; invalid: boolean; emptyText?: string; id?: string; name?: string; searchable?: boolean; open: boolean; q: string; active: number; get opts(): SelectOption[]; get cur(): SelectValue | undefined; get sel(): SelectOption | undefined; get useSearch(): boolean; get items(): SelectOption[]; isSelFn: (o: SelectOption) => boolean; sameVal(o: SelectOption): boolean; choose(o: SelectOption): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspCombobox { options: SelectOptionInput[]; value: SelectValue | null; valueChange: EventEmitter; placeholder: string; searchPlaceholder?: string; clearable: boolean; disabled: boolean; invalid: boolean; loading: boolean; emptyText?: string; id?: string; name?: string; creatable: boolean; created: EventEmitter; open: boolean; q: string; active: number; get canCreate(): boolean; create(): void; get opts(): SelectOption[]; get sel(): SelectOption | undefined; get items(): SelectOption[]; isSelFn: (o: SelectOption) => boolean; set(v: SelectValue | null): void; clear(e: Event): void; pick(o: SelectOption): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspMultiSelect { options: SelectOptionInput[]; value: SelectValue[]; valueChange: EventEmitter; placeholder: string; searchPlaceholder?: string; max?: number; disabled: boolean; invalid: boolean; loading: boolean; emptyText?: string; id?: string; name?: string; open: boolean; q: string; active: number; get opts(): SelectOption[]; get items(): SelectOption[]; get selOpts(): SelectOption[]; has(v: SelectValue): boolean; isSelFn: (o: SelectOption) => boolean; set(next: SelectValue[]): void; toggle(o: SelectOption): void; remove(o: SelectOption): void; toggleOpen(e: Event): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspTokenInput { value: string[]; valueChange: EventEmitter; placeholder: string; disabled: boolean; invalid: boolean; max?: number; id?: string; root?: ElementRef; draft: string; get full(): boolean; set(next: string[]): void; add(): void; remove(t: string): void; focusInput(): void; onKey(e: KeyboardEvent): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspFileDropzone { hint: string; accept?: string; multiple: boolean; maxSize?: number; maxFiles?: number; disabled: boolean; files: EventEmitter; reject: EventEmitter; input?: ElementRef; drag: boolean; private take; onDragOver(e: DragEvent): void; onDrop(e: DragEvent): void; onChange(e: Event): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } /** Format a date like "Jan 5, 2026". */ declare const fmtDate: (d: Date | null | undefined) => string; /** * Flexible date matcher used by the pickers' `disabled` input. Accepts a `Date`, * `Date[]`, `{ from, to }`, `{ before }`, `{ after }`, `{ dayOfWeek: [0,6] }`, a * `(date) => boolean` predicate, or an array of any of these (any match wins). */ type DateMatcher = Date | Date[] | { from: Date; to: Date; } | { before: Date; } | { after: Date; } | { dayOfWeek: number[]; } | ((date: Date) => boolean); /** True when `d` satisfies the matcher (or any matcher in the array). */ declare function matchesDate(d: Date, matcher?: DateMatcher | DateMatcher[]): boolean; interface GridDay { dt: Date; muted?: boolean; } interface MonthView { m: number; y: number; } type RangeEdge = 'start' | 'end' | false; interface DateRange { start: Date | null; end: Date | null; } /** A named shortcut shown in the range picker's preset rail. */ interface RangePreset { label: string; range: DateRange; } declare class VspCalendar { private readonly cdr; view: MonthView; viewChange: EventEmitter; isSelected: (d: Date) => boolean; isInRange?: (d: Date) => boolean; isRangeEnd?: (d: Date) => RangeEdge; isDisabled?: (d: Date) => boolean; min?: Date; max?: Date; pick: EventEmitter; dow: string[]; months: string[]; today: Date; strip: (d: Date) => Date; get days(): GridDay[]; private get minD(); private get maxD(); get prevDisabled(): boolean; get nextDisabled(): boolean; dayDisabled: (dt: Date) => boolean; nav(delta: number): void; dayClass(dt: Date, muted?: boolean): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspDatePicker implements OnChanges { value: Date | null; valueChange: EventEmitter; placeholder: string; min?: Date; max?: Date; disabled?: DateMatcher | DateMatcher[]; multiple: boolean; values: Date[]; valuesChange: EventEmitter; open: boolean; view: MonthView; fmt: (d: Date | null | undefined) => string; private syncedTime?; constructor(); ngOnChanges(): void; get label(): string; get empty(): boolean; isDisabledFn: (d: Date) => boolean; isSelectedFn: (d: Date) => boolean; choose(d: Date): void; clearAll(): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class VspDateRangePicker { value: DateRange; valueChange: EventEmitter; placeholder: string; min?: Date; max?: Date; disabled?: DateMatcher | DateMatcher[]; minNights?: number; maxNights?: number; presets?: RangePreset[]; open: boolean; view: MonthView; constructor(); set(r: DateRange): void; pick(d: Date): void; isDisabledFn: (d: Date) => boolean; isSelectedFn: (d: Date) => boolean; isInRangeFn: (d: Date) => boolean; isRangeEndFn: (d: Date) => RangeEdge; isPresetActive(p: RangePreset): boolean; get label(): string; get footLabel(): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } type EventTone = 'info' | 'success' | 'warning' | 'danger' | 'violet'; interface CalendarEvent { id?: string; /** Day of the month (1–31). */ d: number; title: string; tone: EventTone; /** Display time, e.g. `"10:00"` or `"All day"`. */ time: string; /** Hour (8–18) used to place the event in the week grid. */ hour?: number; } interface InternalEvent extends CalendarEvent { id: string; hour: number; } interface Draft { days: number[]; hour: number; title: string; tone: EventTone; time: string; } type View = 'month' | 'week' | 'agenda'; interface Cell { day: number; muted?: boolean; } /** * A month / week / agenda calendar with click-and-drag day selection and an * inline "new event" dialog. Events are kept in local state; `change` reports * every change so a host can persist them. */ declare class VspEventCalendar { initialEvents: CalendarEvent[]; change: EventEmitter; today: Date; view: View; vm: { m: number; y: number; }; events: InternalEvent[]; sel: { a: number; b: number; } | null; dragging: boolean; add: Draft | null; months: string[]; dowFull: string[]; toneOptions: { value: string; label: string; }[]; hours: number[]; constructor(); tone(t: EventTone): string; bg(t: EventTone, pct: number): string; pad(h: number): string; cap(v: View): string; setView(v: string): void; goToday(): void; private commit; nav(delta: number): void; openAdd(days: number[], hour?: number): void; saveAdd(): void; slotClick(d: Date, h: number): void; get evByDay(): Record; get cells(): Cell[]; get weekDays(): Date[]; get agendaDays(): number[]; get dialogDesc(): string; evsFor(c: Cell): InternalEvent[]; apptAt(d: Date, h: number): InternalEvent | undefined; sortedDay(day: number): InternalEvent[]; dowOf(day: number): number; isToday(d: number, muted?: boolean): boolean; inSel(d: number): boolean; cellClass(c: Cell): string; onLeave(): void; cellDown(c: Cell): void; cellEnter(c: Cell): void; cellUp(c: Cell): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } /** Inline icon by name — keeps the Angular wrapper free of the icons package. */ declare class VspIcon { name: string; size: number; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } /** A labelled row (title + optional description) with a trailing control slot. */ declare class VspSettingRow { title?: string; desc?: string; last: boolean; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } type VerticalTabItem = string | { value: string; label: string; icon?: string; badge?: string | number; }; /** Vertical tab strip — a settings-style left rail. */ declare class VspVerticalTabs { tabs: VerticalTabItem[]; value?: string; valueChange: EventEmitter; id(t: VerticalTabItem): string; lbl(t: VerticalTabItem): string; ico(t: VerticalTabItem): string | undefined; bdg(t: VerticalTabItem): string | number | undefined; cls(t: VerticalTabItem): string; pick(v: string): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } /** A sidebar nav row — renders as an `` when `href` is set, else a `