import { ControlsPanelEditableSlider } from "./controls-panel-editable-slider"; import * as React from "react"; import { AnchorGrid, Checkbox, CodeTextarea, RangeInput, RangeSlider, Segmented, Select, Slider, Switch, TabsControl, TextInput, Vector, type ControlChangeMeta, } from "@repo/ui"; import { CanvasAspectRatioControl } from "./controls-panel-aspect-ratio"; import type { ToolcraftControlSchema } from "../../../schema/types"; import { isToolcraftBuiltInControlSchema } from "../../../schema/control-schema"; import { getControlMarkerCount, shouldCommitTextControlOnBlur, } from "../layout/controls-panel-layout"; import { asBoolean, asNumber, asNumberArray, asRangeInputValue, asString, asVectorPadCoordinateMode, asVectorPadVariant, asVectorValue, } from "../values/controls-panel-values"; export type BasicControlCommit = ( nextValue: unknown, meta?: ControlChangeMeta, ) => void; export type BasicControlKeyframeWrap = (args: { children: React.ReactNode; control: ToolcraftControlSchema; disableAction: boolean; name: string; providerKey: string; value: unknown; }) => React.ReactNode; export type BasicControlRenderArgs = { commit: BasicControlCommit; control: ToolcraftControlSchema; id: string; name: string; usesHeaderKeyframeAction: boolean; value: unknown; vectorPadShape: "compact" | "square"; withKeyframeLabelAction: BasicControlKeyframeWrap; }; export function renderBasicControl({ commit, control, id, name, usesHeaderKeyframeAction, value, vectorPadShape, withKeyframeLabelAction, }: BasicControlRenderArgs): React.ReactNode | null { if (!isToolcraftBuiltInControlSchema(control)) return null; switch (control.type) { case "aspectRatio": return ( ); case "anchorGrid": return withKeyframeLabelAction({ children: ( ["value"] } /> ), control, disableAction: usesHeaderKeyframeAction, name, providerKey: id, value, }); case "checkbox": return ( ); case "code": return withKeyframeLabelAction({ children: ( ), control, disableAction: usesHeaderKeyframeAction, name, providerKey: id, value, }); case "rangeInput": { const rangeValue = asRangeInputValue(value); return withKeyframeLabelAction({ children: ( ), control, disableAction: usesHeaderKeyframeAction, name, providerKey: id, value, }); } case "rangeSlider": return withKeyframeLabelAction({ children: ( control.editableRange ? : ( ) ), control, disableAction: usesHeaderKeyframeAction, name, providerKey: id, value, }); case "segmented": return withKeyframeLabelAction({ children: ( ), control, disableAction: usesHeaderKeyframeAction, name, providerKey: id, value, }); case "select": return (