import { SvelteComponent } from 'svelte'
import type {
	NumberInputParams as GenericSliderOptions,
	SliderInputBindingApi as GenericSliderRef,
} from 'tweakpane'
import type { IntervalSliderValue } from '../control/IntervalSlider.svelte'
declare class __sveltets_Render<T extends IntervalSliderValue | number> {
	props(): Omit<
		{
			/**
			 * The binding's target object with values to manipulate.
			 *
			 * @bindable
			 */
			object: import('@tweakpane/core').Bindable & Record<string, T>
			/**
			 * The key for the value in the target `object` that the control should
			 * manipulate.
			 */
			key: string
			/**
			 * Prevent interactivity and gray out the control.
			 *
			 * @default `false`
			 */
			disabled?: boolean
			/**
			 * Text displayed next to control.
			 *
			 * @default `undefined`
			 */
			label?: string | undefined
			/**
			 * Tweakpane's internal options object.
			 *
			 * See
			 * [`BindingParams`](https://tweakpane.github.io/docs/api/types/BindingParams.html).
			 *
			 * Valid types are contingent on the type of the value `key` points to in
			 * `object`.
			 *
			 * This is intended internal use, when implementing convenience components
			 * wrapping Binding's functionality. Options of interest are instead exposed
			 * as top-level props in _Svelte Tweakpane UI_.
			 *
			 * @default `undefined`
			 */
			options?: GenericSliderOptions | undefined
			/**
			 * Custom color scheme.
			 *
			 * If undefined, inherits default Tweakpane theme equivalent to
			 * `ThemeUtils.presets.standard`, or the theme set with
			 * `setGlobalDefaultTheme()`.
			 *
			 * @default `undefined`
			 */
			theme?: import('..').Theme | undefined
			/**
			 * Reference to internal Tweakpane
			 * [`BindingApi`](https://tweakpane.github.io/docs/api/classes/_internal_.BindingApi.html)
			 * for this control.
			 *
			 * This property is exposed for advanced use cases only, such as when
			 * implementing convenience components wrapping `<Binding>`'s functionality.
			 *
			 * Direct manipulation of Tweakpane's internals can break _Svelte Tweakpane
			 * UI_ abstractions.
			 *
			 * @bindable
			 * @readonly
			 */
			ref?: GenericSliderRef | undefined
			/**
			 * Imported Tweakpane `TpPluginBundle` (aliased as `Plugin`) module to
			 * automatically register in the `<Binding>`'s containing `<Pane>`.
			 *
			 * This property is exposed for advanced use cases only, such as when
			 * implementing convenience components wrapping `<Binding>`'s functionality in
			 * combination with a Tweakpane plugin.
			 *
			 * Direct manipulation of Tweakpane's internals can break _Svelte Tweakpane
			 * UI_ abstractions.
			 *
			 * @default `undefined`
			 */
			plugin?: import('..').Plugin | undefined
		},
		'object' | 'key'
	> & {
		/**
		 * The value to control.
		 *
		 * @bindable
		 */
		value: T
	} & {
		/**
		 * A function to customize the point value's string representation (e.g.
		 * rounding, etc.).
		 *
		 * If undefined, normal `.toString()` formatting is used.
		 *
		 * @default `undefined`
		 */
		format?: ((value: number) => string) | undefined
		/**
		 * The unit scale for key-based input (e.g. the up and down arrow keys).
		 *
		 * Will be overridden by `stepValue` if defined.
		 *
		 * @default `1`
		 */
		keyScale?: number
		/**
		 * Maximum value.
		 *
		 * Specifying both a `min` and a `max` prop turns the control into a slider.
		 *
		 * @default `undefined`
		 */
		max?: number
		/**
		 * Minimum value.
		 *
		 * Specifying both a `min` and a `max` prop turns the control into a slider.
		 *
		 * @default `undefined`
		 */
		min?: number
		/**
		 * The unit scale for pointer-based input.
		 *
		 * If undefined, default is dynamic [based on magnitude of
		 * `value`](https://github.com/cocopon/tweakpane/blob/66dfbea04bfe9b7f031673c955ceda1f92356e75/packages/core/src/common/number/util.ts#L54).
		 *
		 * @default `undefined``
		 */
		pointerScale?: number
		/**
		 * The minimum step interval.
		 *
		 * If undefined, there is no step constraint.
		 *
		 * @default `undefined`
		 */
		step?: number
		/**
		 * When `true`, expand the width of the control at the expense of the
		 * numeric input field.
		 *
		 * @default `false`
		 */
		wide?: boolean
	}
	events(): {
		change: import('..').BindingChangeEvent
	} & {
		[evt: string]: CustomEvent<any>
	}
	slots(): {}
}
export type GenericSliderProps<T extends IntervalSliderValue | number> = ReturnType<
	__sveltets_Render<T>['props']
>
export type GenericSliderEvents<T extends IntervalSliderValue | number> = ReturnType<
	__sveltets_Render<T>['events']
>
export type GenericSliderSlots<T extends IntervalSliderValue | number> = ReturnType<
	__sveltets_Render<T>['slots']
>
/**
 * This component is for internal use only.
 *
 * Note that we go from a regular slider to a range / interval slider (via the essentials plugin) just
 * by changing the input type For the sake of consistency and discoverability, `<IntervalSlider>` is
 * implement as a separate component leveraging this generic implementation.
 *
 * @sourceLink
 * [GenericSlider.svelte](https://github.com/kitschpatrol/svelte-tweakpane-ui/blob/main/src/lib/internal/GenericSlider.svelte)
 */
export default class GenericSlider<T extends IntervalSliderValue | number> extends SvelteComponent<
	GenericSliderProps<T>,
	GenericSliderEvents<T>,
	GenericSliderSlots<T>
> {}
export {}
