import { toolTips } from '../../useStore' import { Selections } from 'lib/selections' import { Program, ProgramMemory, Value } from '../../lang/wasm' import { getNodePathFromSourceRange, getNodeFromPath, } from '../../lang/queryAst' import { PathToNodeMap, getTransformInfos, transformAstSketchLines, } from '../../lang/std/sketchcombos' import { kclManager } from 'lang/KclSinglton' export function horzVertInfo( selectionRanges: Selections, horOrVert: 'vertical' | 'horizontal' ) { const paths = selectionRanges.codeBasedSelections.map(({ range }) => getNodePathFromSourceRange(kclManager.ast, range) ) const nodes = paths.map( (pathToNode) => getNodeFromPath(kclManager.ast, pathToNode).node ) const isAllTooltips = nodes.every( (node) => node?.type === 'CallExpression' && toolTips.includes(node.callee.name as any) ) const theTransforms = getTransformInfos( selectionRanges, kclManager.ast, horOrVert ) const _enableHorz = isAllTooltips && theTransforms.every(Boolean) return { enabled: _enableHorz, transforms: theTransforms } } export function applyConstraintHorzVert( selectionRanges: Selections, horOrVert: 'vertical' | 'horizontal', ast: Program, programMemory: ProgramMemory ): { modifiedAst: Program pathToNodeMap: PathToNodeMap } { const transformInfos = horzVertInfo(selectionRanges, horOrVert).transforms return transformAstSketchLines({ ast, selectionRanges, transformInfos, programMemory, referenceSegName: '', }) }