// JavaScript IntelliSense Support - Auto-generated
// This file provides type hints for JavaScript without requiring @ts-check

// Global Viji API available in all scenes
/**
 * @fileoverview Viji Artist API - JavaScript IntelliSense Support
 * Auto-generated from TypeScript definitions - DO NOT EDIT MANUALLY
 */

/**
 * Configuration for slider parameters
 * @typedef {Object} SliderConfig
 * @property {number} [min] - min property
 * @property {number} [max] - max property
 * @property {number} [step] - step property
 * @property {string} label - label property
 * @property {string} [description] - description property
 * @property {string} [group] - group property
 * @property {ParameterCategory} [category] - category property
 */

/**
 * Configuration for color parameters
 * @typedef {Object} ColorConfig
 * @property {string} label - label property
 * @property {string} [description] - description property
 * @property {string} [group] - group property
 * @property {ParameterCategory} [category] - category property
 */

/**
 * Configuration for toggle parameters
 * @typedef {Object} ToggleConfig
 * @property {string} label - label property
 * @property {string} [description] - description property
 * @property {string} [group] - group property
 * @property {ParameterCategory} [category] - category property
 */

/**
 * Configuration for select parameters
 * @typedef {Object} SelectConfig
 * @property {string[] | number[]} options - options property
 * @property {string} label - label property
 * @property {string} [description] - description property
 * @property {string} [group] - group property
 * @property {ParameterCategory} [category] - category property
 */

/**
 * Configuration for text parameters
 * @typedef {Object} TextConfig
 * @property {string} label - label property
 * @property {string} [description] - description property
 * @property {string} [group] - group property
 * @property {ParameterCategory} [category] - category property
 * @property {number} [maxLength] - maxLength property
 */

/**
 * Configuration for number parameters
 * @typedef {Object} NumberConfig
 * @property {number} [min] - min property
 * @property {number} [max] - max property
 * @property {number} [step] - step property
 * @property {string} label - label property
 * @property {string} [description] - description property
 * @property {string} [group] - group property
 * @property {ParameterCategory} [category] - category property
 */

/**
 * Configuration for image parameters
 * @typedef {Object} ImageConfig
 * @property {string} label - label property
 * @property {string} [description] - description property
 * @property {string} [group] - group property
 * @property {ParameterCategory} [category] - category property
 */

/**
 * Parameter object for slider parameters
 * @typedef {Object} SliderParameter
 * @property {number} value - value property
 * @property {number} min - min property
 * @property {number} max - max property
 * @property {number} step - step property
 * @property {string} label - label property
 * @property {string} [description] - description property
 * @property {string} group - group property
 * @property {ParameterCategory} category - category property
 */

/**
 * Parameter object for color parameters
 * @typedef {Object} ColorParameter
 * @property {string} value - value property
 * @property {string} label - label property
 * @property {string} [description] - description property
 * @property {string} group - group property
 * @property {ParameterCategory} category - category property
 */

/**
 * Parameter object for toggle parameters
 * @typedef {Object} ToggleParameter
 * @property {boolean} value - value property
 * @property {string} label - label property
 * @property {string} [description] - description property
 * @property {string} group - group property
 * @property {ParameterCategory} category - category property
 */

/**
 * Parameter object for select parameters
 * @typedef {Object} SelectParameter
 * @property {string | number} value - value property
 * @property {string[] | number[]} options - options property
 * @property {string} label - label property
 * @property {string} [description] - description property
 * @property {string} group - group property
 * @property {ParameterCategory} category - category property
 */

/**
 * Parameter object for text parameters
 * @typedef {Object} TextParameter
 * @property {string} value - value property
 * @property {number} [maxLength] - maxLength property
 * @property {string} label - label property
 * @property {string} [description] - description property
 * @property {string} group - group property
 * @property {ParameterCategory} category - category property
 */

/**
 * Parameter object for number parameters
 * @typedef {Object} NumberParameter
 * @property {number} value - value property
 * @property {number} min - min property
 * @property {number} max - max property
 * @property {number} step - step property
 * @property {string} label - label property
 * @property {string} [description] - description property
 * @property {string} group - group property
 * @property {ParameterCategory} category - category property
 */

/**
 * Parameter object for image parameters
 * @typedef {Object} ImageParameter
 * @property {ImageBitmap | OffscreenCanvas |null} value - value property
 * @property {string} label - label property
 * @property {string} [description] - description property
 * @property {string} group - group property
 * @property {ParameterCategory} category - category property
 */

/**
 * Audio analysis API - provides real-time audio data and frequency analysis
 * @typedef {Object} AudioAPI
 * @property {boolean} isConnected - isConnected property
 * @property {{} volume - volume property
 * @property {number} rms - rms property
 * @property {number} peak - peak property
 */

/**
 * Video frame API - provides access to video stream and computer vision data
 * @typedef {Object} VideoAPI
 * @property {boolean} isConnected - isConnected property
 * @property {OffscreenCanvas |null} currentFrame - currentFrame property
 * @property {number} frameWidth - frameWidth property
 * @property {number} frameHeight - frameHeight property
 * @property {number} frameRate - frameRate property
 * @property {() => ImageData |null} getFrameData - getFrameData property
 * @property {FaceData[]} faces - faces property
 * @property {HandData[]} hands - hands property
 * @property {PoseData |null} pose - pose property
 * @property {SegmentationData |null} segmentation - segmentation property
 * @property {{} cv - cv property
 */

/**
 * Mouse interaction API
 * @typedef {Object} MouseAPI
 * @property {number} x - x property
 * @property {number} y - y property
 * @property {boolean} isInCanvas - isInCanvas property
 * @property {boolean} isPressed - isPressed property
 * @property {boolean} leftButton - leftButton property
 * @property {boolean} rightButton - rightButton property
 * @property {boolean} middleButton - middleButton property
 * @property {{} velocity - velocity property
 * @property {number} x - x property
 * @property {number} y - y property
 */

/**
 * Keyboard interaction API
 * @typedef {Object} KeyboardAPI
 * @property {Set<string>} activeKeys - activeKeys property
 * @property {Set<string>} pressedThisFrame - pressedThisFrame property
 * @property {Set<string>} releasedThisFrame - releasedThisFrame property
 * @property {string} lastKeyPressed - lastKeyPressed property
 * @property {string} lastKeyReleased - lastKeyReleased property
 * @property {boolean} shift - shift property
 * @property {boolean} ctrl - ctrl property
 * @property {boolean} alt - alt property
 * @property {boolean} meta - meta property
 */

/**
 * Touch interaction API
 * @typedef {Object} TouchAPI
 * @property {TouchPoint[]} points - points property
 * @property {number} count - count property
 * @property {TouchPoint[]} started - started property
 * @property {TouchPoint[]} moved - moved property
 * @property {TouchPoint[]} ended - ended property
 * @property {TouchPoint |null} primary - primary property
 * @property {TouchGestureAPI} gestures - gestures property
 */

/**
 * Main Viji Artist API - provides access to canvas, timing, audio, video, and interactions
 * @typedef {Object} VijiAPI
 * @property {OffscreenCanvas} canvas - canvas property
 * @property {OffscreenCanvasRenderingContext2D} [ctx] - ctx property
 * @property {WebGL2RenderingContext} [gl] - gl property
 * @property {number} width - width property
 * @property {number} height - height property
 * @property {number} pixelRatio - pixelRatio property
 * @property {number} time - time property
 * @property {number} deltaTime - deltaTime property
 * @property {number} frameCount - frameCount property
 * @property {number} fps - fps property
 * @property {AudioAPI} audio - audio property
 * @property {VideoAPI} video - video property
 * @property {MouseAPI} mouse - mouse property
 * @property {KeyboardAPI} keyboard - keyboard property
 * @property {TouchAPI} touches - touches property
 * @property {(defaultValue: number, config: SliderConfig) => SliderParameter} slider - slider property
 * @property {(defaultValue: string, config: ColorConfig) => ColorParameter} color - color property
 * @property {(defaultValue: boolean, config: ToggleConfig) => ToggleParameter} toggle - toggle property
 * @property {(defaultValue: string | number, config: SelectConfig) => SelectParameter} select - select property
 * @property {(defaultValue: string, config: TextConfig) => TextParameter} text - text property
 * @property {(defaultValue: number, config: NumberConfig) => NumberParameter} number - number property
 * @property {(defaultValue: null, config: ImageConfig) => ImageParameter} image - image property
 */

/**
 * FaceData interface
 * @typedef {Object} FaceData
 * @property {number} id - id property
 * @property {{} bounds - bounds property
 * @property {number} x - x property
 * @property {number} y - y property
 * @property {number} width - width property
 * @property {number} height - height property
 */

/**
 * HandData interface
 * @typedef {Object} HandData
 * @property {number} id - id property
 * @property {'left' | 'right'} handedness - handedness property
 * @property {number} confidence - confidence property
 * @property {{} bounds - bounds property
 * @property {number} x - x property
 * @property {number} y - y property
 * @property {number} width - width property
 * @property {number} height - height property
 */

/**
 * PoseData interface
 * @typedef {Object} PoseData
 * @property {number} confidence - confidence property
 * @property {{} landmarks - landmarks property
 * @property {number} x - x property
 * @property {number} y - y property
 * @property {number} z - z property
 * @property {number} visibility - visibility property
 */

/**
 * SegmentationData interface
 * @typedef {Object} SegmentationData
 * @property {Uint8Array} mask - mask property
 * @property {number} width - width property
 * @property {number} height - height property
 */

/**
 * Global viji object available in artist code
 * @type {VijiAPI}
 */
declare const viji;

/**
 * Artist render function - called every frame
 * @param {VijiAPI} viji - The viji API object with all capabilities
 */
declare function render(viji): void;

