@tachui/primitives
Version:
Basic UI components for tachUI framework
153 lines • 4.72 kB
TypeScript
/**
* Enhanced Picker Component (Phase 6.4.3)
*
* SwiftUI-inspired Picker component with dropdown, wheel, and segmented
* variants for selecting from a list of options.
*/
import type { ModifiableComponent, ModifierBuilder } from '@tachui/core';
import type { Signal } from '@tachui/core';
import type { ComponentInstance, ComponentProps } from '@tachui/core';
/**
* Picker option structure
*/
export interface PickerOption<T = any> {
value: T;
label: string;
disabled?: boolean;
icon?: string;
description?: string;
}
/**
* Picker component properties
*/
export interface PickerProps<T = any> extends ComponentProps {
selection: T | Signal<T>;
options: PickerOption<T>[] | Signal<PickerOption<T>[]>;
onSelectionChange?: (value: T) => void;
variant?: 'dropdown' | 'wheel' | 'segmented' | 'menu';
title?: string | (() => string) | Signal<string>;
placeholder?: string;
multiple?: boolean;
searchable?: boolean;
clearable?: boolean;
disabled?: boolean | Signal<boolean>;
size?: 'small' | 'medium' | 'large';
tint?: string;
accessibilityLabel?: string;
accessibilityHint?: string;
}
/**
* Enhanced Picker component class
*/
export declare class EnhancedPicker<T = any> implements ComponentInstance<PickerProps<T>> {
props: PickerProps<T>;
readonly type: "component";
readonly id: string;
mounted: boolean;
cleanup: (() => void)[];
private isOpen;
private setIsOpen;
private searchTerm;
private setSearchTerm;
constructor(props: PickerProps<T>);
/**
* Get current selection value
*/
private getSelection;
/**
* Get current options
*/
private getOptions;
/**
* Filter options based on search term
*/
private getFilteredOptions;
/**
* Check if picker is disabled
*/
private isDisabled;
/**
* Get selected option
*/
private getSelectedOption;
/**
* Handle option selection
*/
private handleSelection;
/**
* Toggle picker open state
*/
private toggleOpen;
/**
* Get picker size styles
*/
private getSizeStyles;
/**
* Render dropdown variant
*/
private renderDropdown;
/**
* Render segmented variant
*/
private renderSegmented;
/**
* Render wheel variant (simplified)
*/
private renderWheel;
render(): import("@tachui/core").DOMNode;
}
/**
* Picker component function
*/
export declare function Picker<T = any>(selection: T | Signal<T>, options: PickerOption<T>[] | Signal<PickerOption<T>[]>, props?: Omit<PickerProps<T>, 'selection' | 'options'>): ModifiableComponent<PickerProps<T>> & {
modifier: ModifierBuilder<ModifiableComponent<PickerProps<T>>>;
};
/**
* Picker style variants
*/
export declare const PickerStyles: {
/**
* Dropdown picker (default)
*/
Dropdown<T = any>(selection: T | Signal<T>, options: PickerOption<T>[] | Signal<PickerOption<T>[]>, props?: Omit<PickerProps<T>, "selection" | "options" | "variant">): ModifiableComponent<PickerProps<T>> & {
modifier: ModifierBuilder<ModifiableComponent<PickerProps<T>>>;
};
/**
* Segmented picker
*/
Segmented<T = any>(selection: T | Signal<T>, options: PickerOption<T>[] | Signal<PickerOption<T>[]>, props?: Omit<PickerProps<T>, "selection" | "options" | "variant">): ModifiableComponent<PickerProps<T>> & {
modifier: ModifierBuilder<ModifiableComponent<PickerProps<T>>>;
};
/**
* Wheel picker (native select)
*/
Wheel<T = any>(selection: T | Signal<T>, options: PickerOption<T>[] | Signal<PickerOption<T>[]>, props?: Omit<PickerProps<T>, "selection" | "options" | "variant">): ModifiableComponent<PickerProps<T>> & {
modifier: ModifierBuilder<ModifiableComponent<PickerProps<T>>>;
};
/**
* Menu picker
*/
Menu<T = any>(selection: T | Signal<T>, options: PickerOption<T>[] | Signal<PickerOption<T>[]>, props?: Omit<PickerProps<T>, "selection" | "options" | "variant">): ModifiableComponent<PickerProps<T>> & {
modifier: ModifierBuilder<ModifiableComponent<PickerProps<T>>>;
};
};
/**
* Picker utilities
*/
export declare const PickerUtils: {
/**
* Create options from simple array
*/
fromArray<T>(items: T[], labelKey?: keyof T): PickerOption<T>[];
/**
* Create options from enum
*/
fromEnum(enumObject: Record<string, string | number>): PickerOption<string | number>[];
/**
* Group options by category
*/
grouped<T>(options: (PickerOption<T> & {
category?: string;
})[]): Record<string, PickerOption<T>[]>;
};
//# sourceMappingURL=Picker.d.ts.map