import { IEventEmitter } from '@breadstone/mosaik-elements';
import { type ISpinEventDetail } from '../../../events';
import { UpDownSpinPosition } from '../../../Types/UpDownSpinPosition';
import { CustomElement } from '../../Abstracts/CustomElement';
import type { IUpDownSpinnerElementProps } from './IUpDownSpinnerElementProps';
declare const UpDownSpinnerElement_base: (abstract new (...args: Array<any>) => import("../../../Behaviors/Themeable").IThemeableProps) & (abstract new (...args: Array<any>) => import("../../../Behaviors/Variantable").IVariantableProps) & (abstract new (...args: Array<any>) => import("../../../Behaviors/Sizeable").ISizeableProps) & (abstract new (...args: Array<any>) => import("../../../Behaviors/Appearanceable").IAppearanceableProps) & (abstract new (...args: Array<any>) => import("../../../Behaviors/Orientable").IOrientableProps) & (abstract new (...args: Array<any>) => import("../../../Behaviors/Disableable").IDisableableProps) & typeof CustomElement & import("../../../Behaviors/Themeable").IThemeableCtor;
/**
 * UpDownSpinner - Increment/decrement controls for numeric input fields and value adjustments.
 *
 * @description
 * The UpDownSpinner element provides a pair of increase/decrease buttons typically used alongside
 * numeric inputs, date pickers, or any value that can be adjusted incrementally. Features auto-repeat
 * functionality when buttons are held down, customizable icons, delay/interval settings, and support
 * for disabling individual buttons when limits are reached. Commonly used in number inputs, quantity
 * selectors, and stepper controls.
 *
 * @name UpDownSpinner
 * @element mosaik-updown-spinner
 * @category Primitives
 *
 * @slot - Default content slot displayed between the spinner buttons
 * @slot prefix - Content displayed before the default slot
 * @slot suffix - Content displayed after the default slot
 *
 * @csspart content - Container for slotted content (prefix, default, suffix)
 * @csspart increase - The increase/up button
 * @csspart decrease - The decrease/down button
 *
 * @dependency {RepeatButtonElement} - Auto-repeating button component
 *
 * @fires spinned {SpinEvent} - Fired when increase or decrease is triggered, includes direction
 *
 * @example
 * Basic spinner with numeric input:
 * ```html
 * <div class="number-input">
 *   <input type="number" id="quantity" value="1" min="1" max="10">
 *   <mosaik-updown-spinner id="spinner"></mosaik-updown-spinner>
 * </div>
 *
 * <script>
 *   const input = document.getElementById('quantity');
 *   const spinner = document.getElementById('spinner');
 *
 *   spinner.addEventListener('spinned', (e) => {
 *     const current = parseInt(input.value);
 *     if (e.detail.direction === 'increase') {
 *       input.value = Math.min(current + 1, 10);
 *     } else {
 *       input.value = Math.max(current - 1, 1);
 *     }
 *   });
 * </script>
 * ```
 *
 * @example
 * Custom icons and styling:
 * ```html
 * <mosaik-updown-spinner
 *   increase-icon="custom-plus-icon"
 *   decrease-icon="custom-minus-icon"
 *   variant="primary"
 *   size="small"
 *   appearance="outline">
 * </mosaik-updown-spinner>
 * ```
 *
 * @example
 * With disabled states at limits:
 * ```html
 * <mosaik-updown-spinner
 *   id="limitedSpinner"
 *   increase-disabled="false"
 *   decrease-disabled="true">
 * </mosaik-updown-spinner>
 *
 * <script>
 *   const spinner = document.getElementById('limitedSpinner');
 *   let value = 0;
 *   const min = 0, max = 10;
 *
 *   spinner.addEventListener('spinned', (e) => {
 *     if (e.detail.direction === 'increase' && value < max) {
 *       value++;
 *     } else if (e.detail.direction === 'decrease' && value > min) {
 *       value--;
 *     }
 *
 *     spinner.increaseDisabled = value >= max;
 *     spinner.decreaseDisabled = value <= min;
 *   });
 * </script>
 * ```
 *
 * @example
 * Horizontal orientation with custom timing:
 * ```html
 * <mosaik-updown-spinner
 *   orientation="horizontal"
 *   delay="300"
 *   interval="200"
 *   position="after">
 * </mosaik-updown-spinner>
 * ```
 *
 * @public
 */
export declare class UpDownSpinnerElement extends UpDownSpinnerElement_base implements IUpDownSpinnerElementProps {
    private readonly _spinned;
    private _delay;
    private _interval;
    private _position;
    private _increaseDisabled;
    private _increaseIcon;
    private _decreaseDisabled;
    private _decreaseIcon;
    private _focusable;
    /**
     * @public
     */
    constructor();
    /**
     * Returns the `{@link is}` property.
     * The `{@link is}` property represents natural name of this element.
     *
     * @public
     * @static
     * @readonly
     */
    static get is(): string;
    /**
     * Gets or sets the `delay` property.
     *
     * @public
     * @attr
     */
    get delay(): number;
    set delay(value: number);
    /**
     * Gets or sets the `interval` property.
     *
     * @public
     * @attr
     */
    get interval(): number;
    set interval(value: number);
    /**
     * Gets or sets the `position` property.
     *
     * @public
     * @attr
     */
    get position(): UpDownSpinPosition;
    set position(value: UpDownSpinPosition);
    /**
     * Gets or sets the `increaseDisabled` property.
     *
     * @public
     * @attr
     */
    get increaseDisabled(): boolean;
    set increaseDisabled(value: boolean);
    /**
     * Gets or sets the `increaseIcon` property.
     *
     * @public
     * @attr
     */
    get increaseIcon(): string;
    set increaseIcon(value: string);
    /**
     * Gets or sets the `decreaseDisabled` property.
     *
     * @public
     * @attr
     */
    get decreaseDisabled(): boolean;
    set decreaseDisabled(value: boolean);
    /**
     * Gets or sets the `decreaseIcon` property.
     *
     * @public
     * @attr
     */
    get decreaseIcon(): string;
    set decreaseIcon(value: string);
    /**
     * Gets or sets the `focusable` property.
     *
     * @public
     * @attr
     */
    get focusable(): boolean;
    set focusable(value: boolean);
    /**
     * Called when the element is spinned.
     * Provides reference to `ISpinEventDetail` as event argument.
     *
     * @public
     * @readonly
     * @eventProperty
     */
    get spinned(): IEventEmitter<ISpinEventDetail>;
    /**
     * Emits the {@link spinned} event.
     *
     * @protected
     */
    protected onSpinned(args: ISpinEventDetail): void;
    /**
     * @private
     * @template
     */
    onIncrease(event?: Event): void;
    /**
     * @private
     * @template
     */
    onDecrease(event?: Event): void;
}
/**
 * @public
 */
export declare namespace UpDownSpinnerElement {
    type Props = IUpDownSpinnerElementProps;
}
/**
 * @public
 */
declare global {
    interface HTMLElementTagNameMap {
        'mosaik-updown-spinner': UpDownSpinnerElement;
    }
}
export {};
//# sourceMappingURL=UpDownSpinnerElement.d.ts.map