sort imports (#6094)

Signed-off-by: Jess Frazelle <github@jessfraz.com>
This commit is contained in:
Jess Frazelle
2025-04-01 14:20:42 -07:00
committed by GitHub
parent ee20a09e7e
commit 2fc8cb5376
342 changed files with 3008 additions and 2699 deletions

View File

@ -1,5 +1,6 @@
import { render, screen } from '@testing-library/react'
import { describe, expect, it } from 'vitest'
import { ActionButton } from './ActionButton'
describe('ActionButton tests', () => {

View File

@ -1,10 +1,11 @@
import { ActionIcon, ActionIconProps } from './ActionIcon'
import { openExternalBrowserIfDesktop } from 'lib/openWindow'
import React, { ForwardedRef, forwardRef } from 'react'
import { PATHS } from 'lib/paths'
import React, { ForwardedRef, forwardRef } from 'react'
import { Link } from 'react-router-dom'
import type { LinkProps } from 'react-router-dom'
import { ActionIcon, ActionIconProps } from './ActionIcon'
interface BaseActionButtonProps {
iconStart?: ActionIconProps
iconEnd?: ActionIconProps
@ -47,8 +48,8 @@ export const ActionButton = forwardRef((props: ActionButtonProps, ref) => {
? 'px-0' // No padding if both icons are present
: 'pr-2' // Padding on the right if only the start icon is present
: props.iconEnd
? 'pl-2' // Padding on the left if only the end icon is present
: 'px-2' // Padding on both sides if no icons are present
? 'pl-2' // Padding on the left if only the end icon is present
: 'px-2' // Padding on both sides if no icons are present
} ${props.className ? props.className : ''}`
switch (props.Element) {

View File

@ -1,4 +1,5 @@
import { Popover } from '@headlessui/react'
import { ActionButtonProps } from './ActionButton'
import { CustomIcon } from './CustomIcon'
import Tooltip from './Tooltip'

View File

@ -3,6 +3,7 @@ import {
faCircleExclamation,
} from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { CustomIcon, CustomIconName } from './CustomIcon'
const iconSizes = {

View File

@ -1,13 +1,14 @@
import { Toolbar } from '../Toolbar'
import UserSidebarMenu from 'components/UserSidebarMenu'
import { type IndexLoaderData } from 'lib/types'
import ProjectSidebarMenu from './ProjectSidebarMenu'
import styles from './AppHeader.module.css'
import { RefreshButton } from 'components/RefreshButton'
import { CommandBarOpenButton } from './CommandBarOpenButton'
import UserSidebarMenu from 'components/UserSidebarMenu'
import { isDesktop } from 'lib/isDesktop'
import { type IndexLoaderData } from 'lib/types'
import { useUser } from 'machines/appMachine'
import { Toolbar } from '../Toolbar'
import styles from './AppHeader.module.css'
import { CommandBarOpenButton } from './CommandBarOpenButton'
import ProjectSidebarMenu from './ProjectSidebarMenu'
interface AppHeaderProps extends React.PropsWithChildren {
showToolbar?: boolean
project?: Omit<IndexLoaderData, 'code'>

View File

@ -1,13 +1,13 @@
import { useModelingContext } from 'hooks/useModelingContext'
import { editorManager, kclManager } from 'lib/singletons'
import { getNodeFromPath } from 'lang/queryAst'
import { getNodePathFromSourceRange } from 'lang/queryAstNodePathUtils'
import { useEffect, useRef, useState } from 'react'
import { trap } from 'lib/trap'
import { codeToIdSelections } from 'lib/selections'
import { codeRefFromRange } from 'lang/std/artifactGraph'
import { defaultSourceRange, topLevelRange } from 'lang/wasm'
import { codeToIdSelections } from 'lib/selections'
import { editorManager, kclManager } from 'lib/singletons'
import { trap } from 'lib/trap'
import { isArray } from 'lib/utils'
import { useEffect, useRef, useState } from 'react'
export function AstExplorer() {
const { context } = useModelingContext()

View File

@ -1,10 +1,10 @@
import { BinaryPart } from '../lang/wasm'
import {
createLocalName,
createLiteral,
createLocalName,
createUnaryExpression,
} from '../lang/modifyAst'
import { PrevVariable } from '../lang/queryAst'
import { BinaryPart } from '../lang/wasm'
export const AvailableVars = ({
onVarClick,

View File

@ -1,8 +1,8 @@
import { useState, useEffect } from 'react'
import { EngineCommandManagerEvents } from 'lang/std/engineConnection'
import { engineCommandManager, sceneInfra } from 'lib/singletons'
import { throttle, isReducedMotion } from 'lib/utils'
import { reportRejection } from 'lib/trap'
import { isReducedMotion, throttle } from 'lib/utils'
import { useEffect, useState } from 'react'
const updateDollyZoom = throttle(
(newFov: number) => sceneInfra.camControls.dollyZoom(newFov),

View File

@ -1,13 +1,14 @@
import { Dialog, Popover, Transition } from '@headlessui/react'
import { Fragment, useEffect } from 'react'
import CommandBarArgument from './CommandBarArgument'
import CommandComboBox from '../CommandComboBox'
import CommandBarReview from './CommandBarReview'
import { useLocation } from 'react-router-dom'
import useHotkeyWrapper from 'lib/hotkeyWrapper'
import { CustomIcon } from 'components/CustomIcon'
import Tooltip from 'components/Tooltip'
import useHotkeyWrapper from 'lib/hotkeyWrapper'
import { commandBarActor, useCommandBarState } from 'machines/commandBarMachine'
import { Fragment, useEffect } from 'react'
import { useLocation } from 'react-router-dom'
import CommandComboBox from '../CommandComboBox'
import CommandBarArgument from './CommandBarArgument'
import CommandBarReview from './CommandBarReview'
export const COMMAND_PALETTE_HOTKEY = 'mod+k'

View File

@ -1,12 +1,13 @@
import { CommandArgument } from 'lib/commandTypes'
import { commandBarActor, useCommandBarState } from 'machines/commandBarMachine'
import CommandArgOptionInput from './CommandArgOptionInput'
import CommandBarBasicInput from './CommandBarBasicInput'
import CommandBarSelectionInput from './CommandBarSelectionInput'
import CommandBarSelectionMixedInput from './CommandBarSelectionMixedInput'
import { CommandArgument } from 'lib/commandTypes'
import CommandBarHeader from './CommandBarHeader'
import CommandBarKclInput from './CommandBarKclInput'
import CommandBarSelectionInput from './CommandBarSelectionInput'
import CommandBarSelectionMixedInput from './CommandBarSelectionMixedInput'
import CommandBarTextareaInput from './CommandBarTextareaInput'
import { commandBarActor, useCommandBarState } from 'machines/commandBarMachine'
function CommandBarArgument({ stepBack }: { stepBack: () => void }) {
const commandBarState = useCommandBarState()

View File

@ -1,12 +1,13 @@
import { CustomIcon } from '../CustomIcon'
import React, { useMemo, useState } from 'react'
import { ActionButton } from '../ActionButton'
import { Selections, getSelectionTypeDisplayText } from 'lib/selections'
import { useHotkeys } from 'react-hotkeys-hook'
import { KclCommandValue, KclExpressionWithVariable } from 'lib/commandTypes'
import Tooltip from 'components/Tooltip'
import { KclCommandValue, KclExpressionWithVariable } from 'lib/commandTypes'
import { Selections, getSelectionTypeDisplayText } from 'lib/selections'
import { roundOff } from 'lib/utils'
import { commandBarActor, useCommandBarState } from 'machines/commandBarMachine'
import React, { useMemo, useState } from 'react'
import { useHotkeys } from 'react-hotkeys-hook'
import { ActionButton } from '../ActionButton'
import { CustomIcon } from '../CustomIcon'
function CommandBarHeader({ children }: React.PropsWithChildren<object>) {
const commandBarState = useCommandBarState()

View File

@ -1,33 +1,35 @@
import {
Completion,
closeBrackets,
closeBracketsKeymap,
Completion,
completionKeymap,
completionStatus,
} from '@codemirror/autocomplete'
import { EditorView, keymap, ViewUpdate } from '@codemirror/view'
import { EditorView, ViewUpdate, keymap } from '@codemirror/view'
import { useSelector } from '@xstate/react'
import { CustomIcon } from 'components/CustomIcon'
import { useCodeMirror } from 'components/ModelingSidebar/ModelingPanes/CodeEditor'
import { Spinner } from 'components/Spinner'
import { createLocalName, createVariableDeclaration } from 'lang/modifyAst'
import { getNodeFromPath } from 'lang/queryAst'
import { SourceRange, VariableDeclarator, isPathToNode } from 'lang/wasm'
import { CommandArgument, KclCommandValue } from 'lib/commandTypes'
import { kclManager } from 'lib/singletons'
import { getSystemTheme } from 'lib/theme'
import { err } from 'lib/trap'
import { useCalculateKclExpression } from 'lib/useCalculateKclExpression'
import { roundOff } from 'lib/utils'
import { varMentions } from 'lib/varCompletionExtension'
import { useEffect, useMemo, useRef, useState } from 'react'
import { useHotkeys } from 'react-hotkeys-hook'
import styles from './CommandBarKclInput.module.css'
import { createLocalName, createVariableDeclaration } from 'lang/modifyAst'
import { useCodeMirror } from 'components/ModelingSidebar/ModelingPanes/CodeEditor'
import { useSelector } from '@xstate/react'
import { commandBarActor, useCommandBarState } from 'machines/commandBarMachine'
import { useSettings } from 'machines/appMachine'
import { commandBarActor, useCommandBarState } from 'machines/commandBarMachine'
import { useEffect, useMemo, useRef, useState } from 'react'
import toast from 'react-hot-toast'
import { useHotkeys } from 'react-hotkeys-hook'
import { AnyStateMachine, SnapshotFrom } from 'xstate'
import { kclManager } from 'lib/singletons'
import { getNodeFromPath } from 'lang/queryAst'
import { isPathToNode, SourceRange, VariableDeclarator } from 'lang/wasm'
import { Node } from '@rust/kcl-lib/bindings/Node'
import { err } from 'lib/trap'
import { Spinner } from 'components/Spinner'
import styles from './CommandBarKclInput.module.css'
// TODO: remove the need for this selector once we decouple all actors from React
const machineContextSelector = (snapshot?: SnapshotFrom<AnyStateMachine>) =>

View File

@ -1,7 +1,8 @@
import { commandBarActor, useCommandBarState } from 'machines/commandBarMachine'
import CommandBarHeader from './CommandBarHeader'
import { useHotkeys } from 'react-hotkeys-hook'
import CommandBarHeader from './CommandBarHeader'
function CommandBarReview({ stepBack }: { stepBack: () => void }) {
const commandBarState = useCommandBarState()
const {

View File

@ -1,13 +1,13 @@
import { useEffect, useMemo, useRef, useState } from 'react'
import { useSelector } from '@xstate/react'
import { CommandArgument } from 'lib/commandTypes'
import {
Selections,
canSubmitSelectionArg,
getSelectionCountByType,
} from 'lib/selections'
import { useSelector } from '@xstate/react'
import { commandBarActor, useCommandBarState } from 'machines/commandBarMachine'
import { kclManager } from 'lib/singletons'
import { commandBarActor, useCommandBarState } from 'machines/commandBarMachine'
import { useEffect, useMemo, useRef, useState } from 'react'
const selectionSelector = (snapshot: any) => snapshot?.context.selectionRanges

View File

@ -1,8 +1,9 @@
import usePlatform from 'hooks/usePlatform'
import { hotkeyDisplay } from 'lib/hotkeyWrapper'
import { COMMAND_PALETTE_HOTKEY } from './CommandBar/CommandBar'
import { commandBarActor } from 'machines/commandBarMachine'
import { COMMAND_PALETTE_HOTKEY } from './CommandBar/CommandBar'
export function CommandBarOpenButton() {
const platform = usePlatform()

View File

@ -1,11 +1,12 @@
import { Combobox } from '@headlessui/react'
import Fuse from 'fuse.js'
import { Command } from 'lib/commandTypes'
import { useEffect, useState } from 'react'
import { CustomIcon } from './CustomIcon'
import { getActorNextEvents } from 'lib/utils'
import { sortCommands } from 'lib/commandUtils'
import { getActorNextEvents } from 'lib/utils'
import { commandBarActor } from 'machines/commandBarMachine'
import { useEffect, useState } from 'react'
import { CustomIcon } from './CustomIcon'
function CommandComboBox({
options,

View File

@ -1,5 +1,4 @@
import toast from 'react-hot-toast'
import { ActionIcon, ActionIconProps } from './ActionIcon'
import { Dialog } from '@headlessui/react'
import {
RefObject,
useCallback,
@ -8,8 +7,10 @@ import {
useRef,
useState,
} from 'react'
import toast from 'react-hot-toast'
import { useHotkeys } from 'react-hotkeys-hook'
import { Dialog } from '@headlessui/react'
import { ActionIcon, ActionIconProps } from './ActionIcon'
export interface ContextMenuProps
extends Omit<React.HTMLAttributes<HTMLUListElement>, 'children'> {

View File

@ -1,7 +1,8 @@
import { useMemo } from 'react'
import { kclManager } from 'lib/singletons'
import { expandPlane, PlaneArtifactRich } from 'lang/std/artifactGraph'
import { PlaneArtifactRich, expandPlane } from 'lang/std/artifactGraph'
import { ArtifactGraph } from 'lang/wasm'
import { kclManager } from 'lib/singletons'
import { useMemo } from 'react'
import { DebugDisplayArray, GenericObj } from './DebugDisplayObj'
export function DebugArtifactGraph() {

View File

@ -1,7 +1,8 @@
import { Dialog } from '@headlessui/react'
import { ActionButton } from './ActionButton'
import { useState } from 'react'
import { useSettings } from 'machines/appMachine'
import { useState } from 'react'
import { ActionButton } from './ActionButton'
const DownloadAppBanner = () => {
const settings = useSettings()

View File

@ -1,7 +1,7 @@
import { CommandLog } from 'lang/std/engineConnection'
import { engineCommandManager } from 'lib/singletons'
import { reportRejection } from 'lib/trap'
import { useState, useEffect } from 'react'
import { useEffect, useState } from 'react'
export function useEngineCommands(): [CommandLog[], () => void] {
const [engineCommands, setEngineCommands] = useState<CommandLog[]>(

View File

@ -1,12 +1,13 @@
import { isDesktop } from 'lib/isDesktop'
import { useRouteError, isRouteErrorResponse } from 'react-router-dom'
import { ActionButton } from './ActionButton'
import {
faBug,
faHome,
faRefresh,
faTrash,
} from '@fortawesome/free-solid-svg-icons'
import { isDesktop } from 'lib/isDesktop'
import { isRouteErrorResponse, useRouteError } from 'react-router-dom'
import { ActionButton } from './ActionButton'
/** Type narrowing function of unknown error to a string */
function errorMessage(error: unknown): string {

View File

@ -1,19 +1,7 @@
import { useMachine } from '@xstate/react'
import { useLocation, useNavigate, useRouteLoaderData } from 'react-router-dom'
import { type IndexLoaderData } from 'lib/types'
import { BROWSER_PATH, PATHS } from 'lib/paths'
import React, { createContext, useEffect, useMemo } from 'react'
import { toast } from 'react-hot-toast'
import {
Actor,
AnyStateMachine,
ContextFrom,
Prop,
StateFrom,
fromPromise,
} from 'xstate'
import { fileMachine } from 'machines/fileMachine'
import { isDesktop } from 'lib/isDesktop'
import { newKclFile } from 'lang/project'
import { createNamedViewsCommand } from 'lib/commandBarConfigs/namedViewsConfig'
import { createRouteCommands } from 'lib/commandBarConfigs/routeCommandConfig'
import {
DEFAULT_DEFAULT_LENGTH_UNIT,
DEFAULT_FILE_NAME,
@ -22,20 +10,32 @@ import {
} from 'lib/constants'
import { getProjectInfo } from 'lib/desktop'
import { getNextDirName, getNextFileName } from 'lib/desktopFS'
import { kclCommands } from 'lib/kclCommands'
import { codeManager, kclManager } from 'lib/singletons'
import {
getKclSamplesManifest,
KclSamplesManifestItem,
getKclSamplesManifest,
} from 'lib/getKclSamplesManifest'
import { isDesktop } from 'lib/isDesktop'
import { kclCommands } from 'lib/kclCommands'
import { BROWSER_PATH, PATHS } from 'lib/paths'
import { markOnce } from 'lib/performance'
import { commandBarActor } from 'machines/commandBarMachine'
import { useSettings } from 'machines/appMachine'
import { createRouteCommands } from 'lib/commandBarConfigs/routeCommandConfig'
import { useToken } from 'machines/appMachine'
import { createNamedViewsCommand } from 'lib/commandBarConfigs/namedViewsConfig'
import { codeManager, kclManager } from 'lib/singletons'
import { err, reportRejection } from 'lib/trap'
import { newKclFile } from 'lang/project'
import { type IndexLoaderData } from 'lib/types'
import { useSettings } from 'machines/appMachine'
import { useToken } from 'machines/appMachine'
import { commandBarActor } from 'machines/commandBarMachine'
import { fileMachine } from 'machines/fileMachine'
import React, { createContext, useEffect, useMemo } from 'react'
import { toast } from 'react-hot-toast'
import { useLocation, useNavigate, useRouteLoaderData } from 'react-router-dom'
import {
Actor,
AnyStateMachine,
ContextFrom,
Prop,
StateFrom,
fromPromise,
} from 'xstate'
type MachineContext<T extends AnyStateMachine> = {
state: StateFrom<T>

View File

@ -1,30 +1,31 @@
import type { IndexLoaderData } from 'lib/types'
import { faChevronRight, faPencil } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { Disclosure } from '@headlessui/react'
import { useFileContext } from 'hooks/useFileContext'
import { useFileSystemWatcher } from 'hooks/useFileSystemWatcher'
import { useModelingContext } from 'hooks/useModelingContext'
import usePlatform from 'hooks/usePlatform'
import { useKclContext } from 'lang/KclProvider'
import { KCLError, kclErrorsByFilename } from 'lang/errors'
import { normalizeLineEndings } from 'lib/codeEditor'
import { FILE_EXT } from 'lib/constants'
import { sortFilesAndDirectories } from 'lib/desktopFS'
import useHotkeyWrapper from 'lib/hotkeyWrapper'
import { PATHS } from 'lib/paths'
import { ActionButton } from './ActionButton'
import Tooltip from './Tooltip'
import { FileEntry } from 'lib/project'
import { codeManager, kclManager } from 'lib/singletons'
import { reportRejection } from 'lib/trap'
import type { IndexLoaderData } from 'lib/types'
import { Dispatch, useCallback, useRef, useState } from 'react'
import { useNavigate, useRouteLoaderData } from 'react-router-dom'
import { Disclosure } from '@headlessui/react'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faChevronRight, faPencil } from '@fortawesome/free-solid-svg-icons'
import { useFileContext } from 'hooks/useFileContext'
import styles from './FileTree.module.css'
import { sortFilesAndDirectories } from 'lib/desktopFS'
import { FILE_EXT } from 'lib/constants'
import { CustomIcon } from './CustomIcon'
import { codeManager, kclManager } from 'lib/singletons'
import { useLspContext } from './LspProvider'
import useHotkeyWrapper from 'lib/hotkeyWrapper'
import { useModelingContext } from 'hooks/useModelingContext'
import { DeleteConfirmationDialog } from './ProjectCard/DeleteProjectDialog'
import { ActionButton } from './ActionButton'
import { ContextMenu, ContextMenuItem } from './ContextMenu'
import usePlatform from 'hooks/usePlatform'
import { FileEntry } from 'lib/project'
import { useFileSystemWatcher } from 'hooks/useFileSystemWatcher'
import { normalizeLineEndings } from 'lib/codeEditor'
import { reportRejection } from 'lib/trap'
import { useKclContext } from 'lang/KclProvider'
import { kclErrorsByFilename, KCLError } from 'lang/errors'
import { CustomIcon } from './CustomIcon'
import styles from './FileTree.module.css'
import { useLspContext } from './LspProvider'
import { DeleteConfirmationDialog } from './ProjectCard/DeleteProjectDialog'
import Tooltip from './Tooltip'
function getIndentationCSS(level: number) {
return `calc(1rem * ${level + 1})`

View File

@ -1,34 +1,35 @@
import { Popover } from '@headlessui/react'
import { SceneInfra } from 'clientSideScene/sceneInfra'
import { useModelingContext } from 'hooks/useModelingContext'
import { AxisNames } from 'lib/constants'
import { sceneInfra } from 'lib/singletons'
import { reportRejection } from 'lib/trap'
import { useSettings } from 'machines/appMachine'
import { MutableRefObject, useEffect, useRef } from 'react'
import {
WebGLRenderer,
Scene,
OrthographicCamera,
BoxGeometry,
SphereGeometry,
MeshBasicMaterial,
Color,
Mesh,
Clock,
Quaternion,
ColorRepresentation,
Vector2,
Raycaster,
Camera,
Clock,
Color,
ColorRepresentation,
Intersection,
Mesh,
MeshBasicMaterial,
Object3D,
OrthographicCamera,
Quaternion,
Raycaster,
Scene,
SphereGeometry,
Vector2,
WebGLRenderer,
} from 'three'
import { Popover } from '@headlessui/react'
import { CustomIcon } from './CustomIcon'
import { reportRejection } from 'lib/trap'
import {
useViewControlMenuItems,
ViewControlContextMenu,
useViewControlMenuItems,
} from './ViewControlMenu'
import { AxisNames } from 'lib/constants'
import { useModelingContext } from 'hooks/useModelingContext'
import { useSettings } from 'machines/appMachine'
const CANVAS_SIZE = 80
const FRUSTUM_SIZE = 0.5

View File

@ -1,16 +1,17 @@
import { Popover } from '@headlessui/react'
import Tooltip from './Tooltip'
import { CustomIcon } from './CustomIcon'
import { useLocation, useNavigate } from 'react-router-dom'
import { PATHS } from 'lib/paths'
import { createAndOpenNewTutorialProject } from 'lib/desktopFS'
import { useAbsoluteFilePath } from 'hooks/useAbsoluteFilePath'
import { useLspContext } from './LspProvider'
import { useMenuListener } from 'hooks/useMenu'
import { createAndOpenNewTutorialProject } from 'lib/desktopFS'
import { openExternalBrowserIfDesktop } from 'lib/openWindow'
import { PATHS } from 'lib/paths'
import { reportRejection } from 'lib/trap'
import { settingsActor } from 'machines/appMachine'
import { useLocation, useNavigate } from 'react-router-dom'
import type { WebContentSendPayload } from '../menu/channels'
import { useMenuListener } from 'hooks/useMenu'
import { CustomIcon } from './CustomIcon'
import { useLspContext } from './LspProvider'
import Tooltip from './Tooltip'
const HelpMenuDivider = () => (
<div className="h-[1px] bg-chalkboard-110 dark:bg-chalkboard-80" />

View File

@ -1,16 +1,14 @@
import { useEffect, useState } from 'react'
import {
EngineConnectionStateType,
CONNECTION_ERROR_TEXT,
ConnectionError,
DisconnectingType,
EngineCommandManagerEvents,
EngineConnectionEvents,
ConnectionError,
CONNECTION_ERROR_TEXT,
EngineConnectionStateType,
} from '../lang/std/engineConnection'
import { engineCommandManager } from '../lib/singletons'
import { Spinner } from './Spinner'
interface LoadingProps extends React.PropsWithChildren {

View File

@ -1,18 +1,19 @@
import { APP_VERSION, getReleaseUrl } from 'routes/Settings'
import { CustomIcon } from 'components/CustomIcon'
import Tooltip from 'components/Tooltip'
import { PATHS } from 'lib/paths'
import { NetworkHealthIndicator } from 'components/NetworkHealthIndicator'
import { HelpMenu } from './HelpMenu'
import { Link, useLocation } from 'react-router-dom'
import Tooltip from 'components/Tooltip'
import { useAbsoluteFilePath } from 'hooks/useAbsoluteFilePath'
import { coreDump } from 'lang/wasm'
import toast from 'react-hot-toast'
import { CoreDumpManager } from 'lib/coredump'
import openWindow, { openExternalBrowserIfDesktop } from 'lib/openWindow'
import { NetworkMachineIndicator } from './NetworkMachineIndicator'
import { ModelStateIndicator } from './ModelStateIndicator'
import { PATHS } from 'lib/paths'
import { reportRejection } from 'lib/trap'
import toast from 'react-hot-toast'
import { Link, useLocation } from 'react-router-dom'
import { APP_VERSION, getReleaseUrl } from 'routes/Settings'
import { HelpMenu } from './HelpMenu'
import { ModelStateIndicator } from './ModelStateIndicator'
import { NetworkMachineIndicator } from './NetworkMachineIndicator'
export function LowerRightControls({
children,

View File

@ -1,32 +1,32 @@
import type * as LSP from 'vscode-languageserver-protocol'
import React, { createContext, useMemo, useContext, useState } from 'react'
import { LanguageSupport } from '@codemirror/language'
import { Extension } from '@codemirror/state'
import {
LanguageServerClient,
FromServer,
IntoServer,
LspWorkerEventType,
LanguageServerClient,
LanguageServerPlugin,
LspWorkerEventType,
} from '@kittycad/codemirror-lsp-client'
import { TEST, VITE_KC_API_BASE_URL } from 'env'
import { kcl } from 'editor/plugins/lsp/kcl/language'
import { copilotPlugin } from 'editor/plugins/lsp/copilot'
import { Extension } from '@codemirror/state'
import { LanguageSupport } from '@codemirror/language'
import { useNavigate } from 'react-router-dom'
import { PATHS } from 'lib/paths'
import { FileEntry } from 'lib/project'
import Worker from 'editor/plugins/lsp/worker.ts?worker'
import { kcl } from 'editor/plugins/lsp/kcl/language'
import {
KclWorkerOptions,
CopilotWorkerOptions,
KclWorkerOptions,
LspWorker,
} from 'editor/plugins/lsp/types'
import Worker from 'editor/plugins/lsp/worker.ts?worker'
import { TEST, VITE_KC_API_BASE_URL } from 'env'
import { wasmUrl } from 'lang/wasm'
import { PROJECT_ENTRYPOINT } from 'lib/constants'
import { err } from 'lib/trap'
import { isDesktop } from 'lib/isDesktop'
import { PATHS } from 'lib/paths'
import { FileEntry } from 'lib/project'
import { codeManager } from 'lib/singletons'
import { err } from 'lib/trap'
import { useToken } from 'machines/appMachine'
import React, { createContext, useContext, useMemo, useState } from 'react'
import { useNavigate } from 'react-router-dom'
import type * as LSP from 'vscode-languageserver-protocol'
function getWorkspaceFolders(): LSP.WorkspaceFolder[] {
return []

View File

@ -1,11 +1,10 @@
import { createContext, useEffect, useState } from 'react'
import { engineCommandManager } from 'lib/singletons'
import { isDesktop } from 'lib/isDesktop'
import { components } from 'lib/machine-api'
import { engineCommandManager } from 'lib/singletons'
import { reportRejection } from 'lib/trap'
import { toSync } from 'lib/utils'
import { commandBarActor } from 'machines/commandBarMachine'
import { createContext, useEffect, useState } from 'react'
export type MachinesListing = Array<
components['schemas']['MachineInfoResponse']

View File

@ -1,6 +1,7 @@
import { CustomIcon } from './CustomIcon'
import { useEngineCommands } from './EngineCommands'
import { Spinner } from './Spinner'
import { CustomIcon } from './CustomIcon'
export const ModelStateIndicator = () => {
const [commands] = useEngineCommands()
const lastCommandType = commands[commands.length - 1]?.type

View File

@ -1,70 +1,18 @@
import { useMachine, useSelector } from '@xstate/react'
import React, {
createContext,
useEffect,
useMemo,
useRef,
useContext,
} from 'react'
import {
Actor,
ContextFrom,
Prop,
SnapshotFrom,
StateFrom,
assign,
fromPromise,
} from 'xstate'
import {
getPersistedContext,
modelingMachine,
modelingMachineDefaultContext,
} from 'machines/modelingMachine'
import { useSetupEngineManager } from 'hooks/useSetupEngineManager'
import {
isCursorInSketchCommandRange,
updateSketchDetailsNodePaths,
} from 'lang/util'
import {
kclManager,
sceneInfra,
engineCommandManager,
codeManager,
editorManager,
sceneEntitiesManager,
rustContext,
} from 'lib/singletons'
import {
MachineManager,
MachineManagerContext,
} from 'components/MachineManagerProvider'
import { useHotkeys } from 'react-hotkeys-hook'
import { applyConstraintHorzVertDistance } from './Toolbar/SetHorzVertDistance'
import {
angleBetweenInfo,
applyConstraintAngleBetween,
} from './Toolbar/SetAngleBetween'
import {
applyConstraintAngleLength,
applyConstraintLength,
} from './Toolbar/setAngleLength'
import {
handleSelectionBatch,
Selections,
updateSelections,
} from 'lib/selections'
import { applyConstraintIntersect } from './Toolbar/Intersect'
import { applyConstraintAbsDistance } from './Toolbar/SetAbsDistance'
import useStateMachineCommands from 'hooks/useStateMachineCommands'
import {
ModelingCommandSchema,
modelingMachineCommandConfig,
} from 'lib/commandBarConfigs/modelingCommandConfig'
import { letEngineAnimateAndSyncCamAfter } from 'clientSideScene/CameraControls'
import {
SEGMENT_BODIES,
getParentGroup,
getSketchOrientationDetails,
} from 'clientSideScene/sceneEntities'
import {
MachineManager,
MachineManagerContext,
} from 'components/MachineManagerProvider'
import { useFileContext } from 'hooks/useFileContext'
import { useSetupEngineManager } from 'hooks/useSetupEngineManager'
import useStateMachineCommands from 'hooks/useStateMachineCommands'
import { updateModelingState } from 'lang/modelingWorkflows'
import {
insertNamedConstant,
replaceValueAtNodePath,
@ -73,6 +21,27 @@ import {
splitPipedProfile,
startSketchOnDefault,
} from 'lang/modifyAst'
import {
artifactIsPlaneWithPaths,
doesSketchPipeNeedSplitting,
getNodeFromPath,
isCursorInFunctionDefinition,
traverse,
} from 'lang/queryAst'
import { getNodePathFromSourceRange } from 'lang/queryAstNodePathUtils'
import {
getFaceCodeRef,
getPathsFromArtifact,
getPlaneFromArtifact,
} from 'lang/std/artifactGraph'
import {
EngineConnectionEvents,
EngineConnectionStateType,
} from 'lang/std/engineConnection'
import {
isCursorInSketchCommandRange,
updateSketchDetailsNodePaths,
} from 'lang/util'
import {
KclValue,
PathToNode,
@ -84,43 +53,76 @@ import {
resultIsOk,
} from 'lang/wasm'
import {
artifactIsPlaneWithPaths,
doesSketchPipeNeedSplitting,
getNodeFromPath,
isCursorInFunctionDefinition,
traverse,
} from 'lang/queryAst'
import toast from 'react-hot-toast'
import { useLoaderData, useNavigate, useSearchParams } from 'react-router-dom'
import { letEngineAnimateAndSyncCamAfter } from 'clientSideScene/CameraControls'
import { err, reportRejection, trap, reject } from 'lib/trap'
import {
EngineConnectionStateType,
EngineConnectionEvents,
} from 'lang/std/engineConnection'
import { submitAndAwaitTextToKcl } from 'lib/textToCad'
import { useFileContext } from 'hooks/useFileContext'
import { platform, uuidv4 } from 'lib/utils'
import { Node } from '@rust/kcl-lib/bindings/Node'
import {
getFaceCodeRef,
getPathsFromArtifact,
getPlaneFromArtifact,
} from 'lang/std/artifactGraph'
import { promptToEditFlow } from 'lib/promptToEdit'
import { kclEditorActor } from 'machines/kclEditorMachine'
import { commandBarActor } from 'machines/commandBarMachine'
import { useToken } from 'machines/appMachine'
import { getNodePathFromSourceRange } from 'lang/queryAstNodePathUtils'
import { useSettings } from 'machines/appMachine'
import { IndexLoaderData } from 'lib/types'
import { OutputFormat3d, Point3d } from '@rust/kcl-lib/bindings/ModelingCmd'
ModelingCommandSchema,
modelingMachineCommandConfig,
} from 'lib/commandBarConfigs/modelingCommandConfig'
import { EXPORT_TOAST_MESSAGES, MAKE_TOAST_MESSAGES } from 'lib/constants'
import { EXECUTION_TYPE_MOCK } from 'lib/constants'
import { exportMake } from 'lib/exportMake'
import { exportSave } from 'lib/exportSave'
import { promptToEditFlow } from 'lib/promptToEdit'
import {
Selections,
handleSelectionBatch,
updateSelections,
} from 'lib/selections'
import {
codeManager,
editorManager,
engineCommandManager,
kclManager,
rustContext,
sceneEntitiesManager,
sceneInfra,
} from 'lib/singletons'
import { submitAndAwaitTextToKcl } from 'lib/textToCad'
import { err, reject, reportRejection, trap } from 'lib/trap'
import { IndexLoaderData } from 'lib/types'
import { platform, uuidv4 } from 'lib/utils'
import { useToken } from 'machines/appMachine'
import { useSettings } from 'machines/appMachine'
import { commandBarActor } from 'machines/commandBarMachine'
import { kclEditorActor } from 'machines/kclEditorMachine'
import {
getPersistedContext,
modelingMachine,
modelingMachineDefaultContext,
} from 'machines/modelingMachine'
import React, {
createContext,
useContext,
useEffect,
useMemo,
useRef,
} from 'react'
import toast from 'react-hot-toast'
import { useHotkeys } from 'react-hotkeys-hook'
import { useLoaderData, useNavigate, useSearchParams } from 'react-router-dom'
import {
Actor,
ContextFrom,
Prop,
SnapshotFrom,
StateFrom,
assign,
fromPromise,
} from 'xstate'
import { OutputFormat3d, Point3d } from '@rust/kcl-lib/bindings/ModelingCmd'
import { Node } from '@rust/kcl-lib/bindings/Node'
import { Plane } from '@rust/kcl-lib/bindings/Plane'
import { updateModelingState } from 'lang/modelingWorkflows'
import { EXECUTION_TYPE_MOCK } from 'lib/constants'
import { applyConstraintIntersect } from './Toolbar/Intersect'
import { applyConstraintAbsDistance } from './Toolbar/SetAbsDistance'
import {
angleBetweenInfo,
applyConstraintAngleBetween,
} from './Toolbar/SetAngleBetween'
import { applyConstraintHorzVertDistance } from './Toolbar/SetHorzVertDistance'
import {
applyConstraintAngleLength,
applyConstraintLength,
} from './Toolbar/setAngleLength'
export const ModelingMachineContext = createContext(
{} as {

View File

@ -1,12 +1,13 @@
import { ReactNode } from 'react'
import styles from './ModelingPane.module.css'
import { ActionButton } from 'components/ActionButton'
import Tooltip from 'components/Tooltip'
import { CustomIconName } from 'components/CustomIcon'
import { IconDefinition } from '@fortawesome/free-solid-svg-icons'
import { ActionButton } from 'components/ActionButton'
import { ActionIcon } from 'components/ActionIcon'
import { onboardingPaths } from 'routes/Onboarding/paths'
import { CustomIconName } from 'components/CustomIcon'
import Tooltip from 'components/Tooltip'
import { useSettings } from 'machines/appMachine'
import { ReactNode } from 'react'
import { onboardingPaths } from 'routes/Onboarding/paths'
import styles from './ModelingPane.module.css'
export interface ModelingPaneProps {
id: string

View File

@ -1,20 +1,20 @@
import React, {
useEffect,
useMemo,
useRef,
useState,
forwardRef,
useImperativeHandle,
} from 'react'
import {
EditorState,
EditorStateConfig,
Extension,
StateEffect,
} from '@codemirror/state'
import { EditorView } from '@codemirror/view'
import { oneDark } from '@codemirror/theme-one-dark'
import { EditorView } from '@codemirror/view'
import { isArray } from 'lib/utils'
import React, {
forwardRef,
useEffect,
useImperativeHandle,
useMemo,
useRef,
useState,
} from 'react'
//reference: https://github.com/sachinraja/rodemirror/blob/main/src/use-first-render.ts
const useFirstRender = () => {

View File

@ -1,7 +1,8 @@
import { CamDebugSettings } from 'clientSideScene/ClientSideSceneComp'
import { DebugArtifactGraph } from 'components/DebugArtifactGraph'
import { AstExplorer } from '../../AstExplorer'
import { EngineCommands } from '../../EngineCommands'
import { CamDebugSettings } from 'clientSideScene/ClientSideSceneComp'
export const DebugPane = () => {
return (

View File

@ -1,8 +1,9 @@
import { Menu } from '@headlessui/react'
import { PropsWithChildren } from 'react'
import { ActionIcon } from 'components/ActionIcon'
import styles from './KclEditorMenu.module.css'
import { commandBarActor } from 'machines/commandBarMachine'
import { PropsWithChildren } from 'react'
import styles from './KclEditorMenu.module.css'
export const FeatureTreeMenu = ({ children }: PropsWithChildren) => {
return (

View File

@ -14,15 +14,16 @@ import {
stdLibMap,
} from 'lib/operations'
import { editorManager, kclManager } from 'lib/singletons'
import { ComponentProps, useEffect, useMemo, useRef, useState } from 'react'
import { Operation } from '@rust/kcl-lib/bindings/Operation'
import { Actor, Prop } from 'xstate'
import { featureTreeMachine } from 'machines/featureTreeMachine'
import {
editorIsMountedSelector,
kclEditorActor,
selectionEventSelector,
} from 'machines/kclEditorMachine'
import { ComponentProps, useEffect, useMemo, useRef, useState } from 'react'
import { Actor, Prop } from 'xstate'
import { Operation } from '@rust/kcl-lib/bindings/Operation'
export const FeatureTreePane = () => {
const isEditorMounted = useSelector(kclEditorActor, editorIsMountedSelector)

View File

@ -1,15 +1,16 @@
import { Menu } from '@headlessui/react'
import { PropsWithChildren } from 'react'
import { faArrowUpRightFromSquare } from '@fortawesome/free-solid-svg-icons'
import { ActionIcon } from 'components/ActionIcon'
import styles from './KclEditorMenu.module.css'
import { useConvertToVariable } from 'hooks/useToolbarGuards'
import { editorShortcutMeta } from './KclEditorPane'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { kclManager } from 'lib/singletons'
import { Menu } from '@headlessui/react'
import { ActionIcon } from 'components/ActionIcon'
import { useConvertToVariable } from 'hooks/useToolbarGuards'
import { openExternalBrowserIfDesktop } from 'lib/openWindow'
import { kclManager } from 'lib/singletons'
import { reportRejection } from 'lib/trap'
import { commandBarActor } from 'machines/commandBarMachine'
import { PropsWithChildren } from 'react'
import styles from './KclEditorMenu.module.css'
import { editorShortcutMeta } from './KclEditorPane'
export const KclEditorMenu = ({ children }: PropsWithChildren) => {
const { enable: convertToVarEnabled, handleClick: handleConvertToVarClick } =

View File

@ -1,56 +1,57 @@
import { TEST } from 'env'
import { Themes, getSystemTheme } from 'lib/theme'
import { useEffect, useMemo, useRef } from 'react'
import { highlightSelectionMatches, searchKeymap } from '@codemirror/search'
import { lineHighlightField } from 'editor/highlightextension'
import { onMouseDragMakeANewNumber, onMouseDragRegex } from 'lib/utils'
import {
lineNumbers,
rectangularSelection,
highlightActiveLineGutter,
highlightSpecialChars,
highlightActiveLine,
keymap,
EditorView,
dropCursor,
drawSelection,
} from '@codemirror/view'
import {
indentWithTab,
defaultKeymap,
historyKeymap,
history,
} from '@codemirror/commands'
import { diagnosticCount, lintGutter, lintKeymap } from '@codemirror/lint'
import {
foldGutter,
foldKeymap,
bracketMatching,
indentOnInput,
codeFolding,
syntaxHighlighting,
defaultHighlightStyle,
} from '@codemirror/language'
import interact from '@replit/codemirror-interact'
import { kclManager, editorManager, codeManager } from 'lib/singletons'
import { useHotkeys } from 'react-hotkeys-hook'
import { useLspContext } from 'components/LspProvider'
import { Prec, EditorState, Extension, Transaction } from '@codemirror/state'
import {
closeBrackets,
closeBracketsKeymap,
completionKeymap,
} from '@codemirror/autocomplete'
import CodeEditor from './CodeEditor'
import {
defaultKeymap,
history,
historyKeymap,
indentWithTab,
} from '@codemirror/commands'
import {
bracketMatching,
codeFolding,
defaultHighlightStyle,
foldGutter,
foldKeymap,
indentOnInput,
syntaxHighlighting,
} from '@codemirror/language'
import { diagnosticCount, lintGutter, lintKeymap } from '@codemirror/lint'
import { highlightSelectionMatches, searchKeymap } from '@codemirror/search'
import { EditorState, Extension, Prec, Transaction } from '@codemirror/state'
import {
EditorView,
drawSelection,
dropCursor,
highlightActiveLine,
highlightActiveLineGutter,
highlightSpecialChars,
keymap,
lineNumbers,
rectangularSelection,
} from '@codemirror/view'
import interact from '@replit/codemirror-interact'
import { useSelector } from '@xstate/react'
import { useLspContext } from 'components/LspProvider'
import { lineHighlightField } from 'editor/highlightextension'
import { modelingMachineEvent } from 'editor/manager'
import { TEST } from 'env'
import { codeManagerHistoryCompartment } from 'lang/codeManager'
import { codeManager, editorManager, kclManager } from 'lib/singletons'
import { Themes, getSystemTheme } from 'lib/theme'
import { onMouseDragMakeANewNumber, onMouseDragRegex } from 'lib/utils'
import { useSettings } from 'machines/appMachine'
import {
editorIsMountedSelector,
kclEditorActor,
selectionEventSelector,
} from 'machines/kclEditorMachine'
import { useSelector } from '@xstate/react'
import { modelingMachineEvent } from 'editor/manager'
import { useSettings } from 'machines/appMachine'
import { useEffect, useMemo, useRef } from 'react'
import { useHotkeys } from 'react-hotkeys-hook'
import CodeEditor from './CodeEditor'
export const editorShortcutMeta = {
formatCode: {

View File

@ -1,6 +1,6 @@
import ReactJson from 'react-json-view'
import { useKclContext } from 'lang/KclProvider'
import { useResolvedTheme } from 'hooks/useResolvedTheme'
import { useKclContext } from 'lang/KclProvider'
import ReactJson from 'react-json-view'
const ReactJsonTypeHack = ReactJson as any

View File

@ -1,6 +1,6 @@
import { processMemory } from './MemoryPane'
import { enginelessExecutor } from '../../../lib/testHelpers'
import { assertParse, initPromise } from '../../../lang/wasm'
import { enginelessExecutor } from '../../../lib/testHelpers'
import { processMemory } from './MemoryPane'
beforeAll(async () => {
await initPromise

View File

@ -1,18 +1,18 @@
import toast from 'react-hot-toast'
import ReactJson from 'react-json-view'
import { useMemo } from 'react'
import {
Path,
ExtrudeSurface,
sketchFromKclValueOptional,
VariableMap,
} from 'lang/wasm'
import { useKclContext } from 'lang/KclProvider'
import { useResolvedTheme } from 'hooks/useResolvedTheme'
import { ActionButton } from 'components/ActionButton'
import { Reason, trap } from 'lib/trap'
import Tooltip from 'components/Tooltip'
import { useModelingContext } from 'hooks/useModelingContext'
import { useResolvedTheme } from 'hooks/useResolvedTheme'
import { useKclContext } from 'lang/KclProvider'
import {
ExtrudeSurface,
Path,
VariableMap,
sketchFromKclValueOptional,
} from 'lang/wasm'
import { Reason, trap } from 'lib/trap'
import { useMemo } from 'react'
import toast from 'react-hot-toast'
import ReactJson from 'react-json-view'
export const MemoryPaneMenu = () => {
const { variables } = useKclContext()

View File

@ -1,25 +1,26 @@
import { IconDefinition, faBugSlash } from '@fortawesome/free-solid-svg-icons'
import { KclEditorMenu } from 'components/ModelingSidebar/ModelingPanes/KclEditorMenu'
import { CustomIconName } from 'components/CustomIcon'
import { KclEditorPane } from 'components/ModelingSidebar/ModelingPanes/KclEditorPane'
import { ModelingPaneHeader } from 'components/ModelingSidebar/ModelingPane'
import { MouseEventHandler, ReactNode } from 'react'
import { MemoryPane, MemoryPaneMenu } from './MemoryPane'
import { LogsPane } from './LoggingPanes'
import { DebugPane } from './DebugPane'
import {
FileTreeInner,
FileTreeMenu,
FileTreeRoot,
useFileTreeOperations,
} from 'components/FileTree'
import { ModelingPaneHeader } from 'components/ModelingSidebar/ModelingPane'
import { KclEditorMenu } from 'components/ModelingSidebar/ModelingPanes/KclEditorMenu'
import { KclEditorPane } from 'components/ModelingSidebar/ModelingPanes/KclEditorPane'
import { useKclContext } from 'lang/KclProvider'
import { editorManager } from 'lib/singletons'
import { ContextFrom } from 'xstate'
import { settingsMachine } from 'machines/settingsMachine'
import { FeatureTreePane } from './FeatureTreePane'
import { kclErrorsByFilename } from 'lang/errors'
import { editorManager } from 'lib/singletons'
import { settingsMachine } from 'machines/settingsMachine'
import { MouseEventHandler, ReactNode } from 'react'
import { ContextFrom } from 'xstate'
import { DebugPane } from './DebugPane'
import { FeatureTreeMenu } from './FeatureTreeMenu'
import { FeatureTreePane } from './FeatureTreePane'
import { LogsPane } from './LoggingPanes'
import { MemoryPane, MemoryPaneMenu } from './MemoryPane'
export type SidebarType =
| 'code'

View File

@ -1,26 +1,27 @@
import { IconDefinition } from '@fortawesome/free-solid-svg-icons'
import { ActionIcon } from 'components/ActionIcon'
import { CustomIconName } from 'components/CustomIcon'
import { MachineManagerContext } from 'components/MachineManagerProvider'
import Tooltip from 'components/Tooltip'
import { useModelingContext } from 'hooks/useModelingContext'
import { useKclContext } from 'lang/KclProvider'
import { SIDEBAR_BUTTON_SUFFIX } from 'lib/constants'
import { isDesktop } from 'lib/isDesktop'
import { useSettings } from 'machines/appMachine'
import { commandBarActor } from 'machines/commandBarMachine'
import { Resizable } from 're-resizable'
import {
MouseEventHandler,
useCallback,
useContext,
useEffect,
useMemo,
useContext,
} from 'react'
import { useHotkeys } from 'react-hotkeys-hook'
import { SidebarAction, SidebarType, sidebarPanes } from './ModelingPanes'
import Tooltip from 'components/Tooltip'
import { ActionIcon } from 'components/ActionIcon'
import { ModelingPane } from './ModelingPane'
import { isDesktop } from 'lib/isDesktop'
import { useModelingContext } from 'hooks/useModelingContext'
import { CustomIconName } from 'components/CustomIcon'
import { IconDefinition } from '@fortawesome/free-solid-svg-icons'
import { useKclContext } from 'lang/KclProvider'
import { MachineManagerContext } from 'components/MachineManagerProvider'
import { onboardingPaths } from 'routes/Onboarding/paths'
import { SIDEBAR_BUTTON_SUFFIX } from 'lib/constants'
import { commandBarActor } from 'machines/commandBarMachine'
import { useSettings } from 'machines/appMachine'
import { ModelingPane } from './ModelingPane'
import { SidebarAction, SidebarType, sidebarPanes } from './ModelingPanes'
interface ModelingSidebarProps {
paneOpacity: '' | 'opacity-20' | 'opacity-40'
@ -113,17 +114,20 @@ export function ModelingSidebar({ paneOpacity }: ModelingSidebarProps) {
)
const paneBadgeMap: Record<SidebarType, BadgeInfoComputed> = useMemo(() => {
return filteredPanes.reduce((acc, pane) => {
if (pane.showBadge) {
acc[pane.id] = {
value: pane.showBadge.value(paneCallbackProps),
onClick: pane.showBadge.onClick,
className: pane.showBadge.className,
title: pane.showBadge.title,
return filteredPanes.reduce(
(acc, pane) => {
if (pane.showBadge) {
acc[pane.id] = {
value: pane.showBadge.value(paneCallbackProps),
onClick: pane.showBadge.onClick,
className: pane.showBadge.className,
title: pane.showBadge.title,
}
}
}
return acc
}, {} as Record<SidebarType, BadgeInfoComputed>)
return acc
},
{} as Record<SidebarType, BadgeInfoComputed>
)
}, [paneCallbackProps])
// Clear any hidden panes from the `openPanes` array

View File

@ -1,10 +1,11 @@
import { fireEvent, render, screen } from '@testing-library/react'
import { NetworkHealthState } from 'hooks/useNetworkStatus'
import { BrowserRouter } from 'react-router-dom'
import {
NETWORK_HEALTH_TEXT,
NetworkHealthIndicator,
} from './NetworkHealthIndicator'
import { NetworkHealthState } from 'hooks/useNetworkStatus'
function TestWrap({ children }: { children: React.ReactNode }) {
// wrap in router and xState context

View File

@ -1,11 +1,12 @@
import { Popover } from '@headlessui/react'
import { ActionIcon, ActionIconProps } from './ActionIcon'
import Tooltip from './Tooltip'
import { ConnectingTypeGroup } from '../lang/std/engineConnection'
import { reportRejection } from 'lib/trap'
import { toSync } from 'lib/utils'
import { useNetworkContext } from '../hooks/useNetworkContext'
import { NetworkHealthState } from '../hooks/useNetworkStatus'
import { toSync } from 'lib/utils'
import { reportRejection } from 'lib/trap'
import { ConnectingTypeGroup } from '../lang/std/engineConnection'
import { ActionIcon, ActionIconProps } from './ActionIcon'
import Tooltip from './Tooltip'
export const NETWORK_HEALTH_TEXT: Record<NetworkHealthState, string> = {
[NetworkHealthState.Ok]: 'Connected',

View File

@ -1,10 +1,11 @@
import { Popover } from '@headlessui/react'
import { useContext } from 'react'
import Tooltip from './Tooltip'
import { MachineManagerContext } from 'components/MachineManagerProvider'
import { isDesktop } from 'lib/isDesktop'
import { components } from 'lib/machine-api'
import { MachineManagerContext } from 'components/MachineManagerProvider'
import { useContext } from 'react'
import { CustomIcon } from './CustomIcon'
import Tooltip from './Tooltip'
export const NetworkMachineIndicator = ({
className,

View File

@ -1,5 +1,6 @@
import { fireEvent, render, screen } from '@testing-library/react'
import { BrowserRouter, Route, Routes } from 'react-router-dom'
import { OpenInDesktopAppHandler } from './OpenInDesktopAppHandler'
/**

View File

@ -1,11 +1,12 @@
import { getSystemTheme, Themes } from 'lib/theme'
import { ZOO_STUDIO_PROTOCOL } from 'lib/constants'
import { isDesktop } from 'lib/isDesktop'
import { useSearchParams } from 'react-router-dom'
import { ASK_TO_OPEN_QUERY_PARAM } from 'lib/constants'
import { VITE_KC_SITE_BASE_URL } from 'env'
import { ActionButton } from './ActionButton'
import { Transition } from '@headlessui/react'
import { VITE_KC_SITE_BASE_URL } from 'env'
import { ZOO_STUDIO_PROTOCOL } from 'lib/constants'
import { ASK_TO_OPEN_QUERY_PARAM } from 'lib/constants'
import { isDesktop } from 'lib/isDesktop'
import { Themes, getSystemTheme } from 'lib/theme'
import { useSearchParams } from 'react-router-dom'
import { ActionButton } from './ActionButton'
/**
* This component is a handler that checks if a certain query parameter

View File

@ -1,15 +1,16 @@
import { FormEvent, useEffect, useRef, useState } from 'react'
import { PATHS } from 'lib/paths'
import { Link } from 'react-router-dom'
import { ActionButton } from '../ActionButton'
import { FILE_EXT, PROJECT_IMAGE_NAME } from 'lib/constants'
import { PATHS } from 'lib/paths'
import { Project } from 'lib/project'
import { reportRejection } from 'lib/trap'
import { toSync } from 'lib/utils'
import { FormEvent, useEffect, useRef, useState } from 'react'
import { useHotkeys } from 'react-hotkeys-hook'
import { Link } from 'react-router-dom'
import { ActionButton } from '../ActionButton'
import Tooltip from '../Tooltip'
import { DeleteConfirmationDialog } from './DeleteProjectDialog'
import { ProjectCardRenameForm } from './ProjectCardRenameForm'
import { Project } from 'lib/project'
import { toSync } from 'lib/utils'
import { reportRejection } from 'lib/trap'
function ProjectCard({
project,

View File

@ -1,7 +1,7 @@
import { ActionButton } from 'components/ActionButton'
import Tooltip from 'components/Tooltip'
import { HTMLProps, forwardRef } from 'react'
import { Project } from 'lib/project'
import { HTMLProps, forwardRef } from 'react'
interface ProjectCardRenameFormProps extends HTMLProps<HTMLFormElement> {
project: Project

View File

@ -1,8 +1,9 @@
import Fuse from 'fuse.js'
import { Project } from 'lib/project'
import { CustomIcon } from './CustomIcon'
import { useEffect, useRef, useState } from 'react'
import { useHotkeys } from 'react-hotkeys-hook'
import Fuse from 'fuse.js'
import { CustomIcon } from './CustomIcon'
export function useProjectSearch(projects: Project[]) {
const [query, setQuery] = useState('')

View File

@ -1,7 +1,8 @@
import { render, screen } from '@testing-library/react'
import { BrowserRouter } from 'react-router-dom'
import ProjectSidebarMenu from './ProjectSidebarMenu'
import { Project } from 'lib/project'
import { BrowserRouter } from 'react-router-dom'
import ProjectSidebarMenu from './ProjectSidebarMenu'
const now = new Date()
const projectWellFormed = {

View File

@ -1,24 +1,25 @@
import { Popover, Transition } from '@headlessui/react'
import { ActionButton, ActionButtonProps } from './ActionButton'
import { type IndexLoaderData } from 'lib/types'
import { PATHS } from 'lib/paths'
import { isDesktop } from '../lib/isDesktop'
import { Link, useLocation, useNavigate } from 'react-router-dom'
import { Fragment, useMemo, useContext } from 'react'
import { Logo } from './Logo'
import { APP_NAME } from 'lib/constants'
import { CustomIcon } from './CustomIcon'
import { useLspContext } from './LspProvider'
import { codeManager, engineCommandManager, kclManager } from 'lib/singletons'
import { MachineManagerContext } from 'components/MachineManagerProvider'
import usePlatform from 'hooks/usePlatform'
import { useAbsoluteFilePath } from 'hooks/useAbsoluteFilePath'
import Tooltip from './Tooltip'
import { SnapshotFrom } from 'xstate'
import { commandBarActor } from 'machines/commandBarMachine'
import { useSelector } from '@xstate/react'
import { MachineManagerContext } from 'components/MachineManagerProvider'
import { useAbsoluteFilePath } from 'hooks/useAbsoluteFilePath'
import usePlatform from 'hooks/usePlatform'
import { APP_NAME } from 'lib/constants'
import { copyFileShareLink } from 'lib/links'
import { PATHS } from 'lib/paths'
import { codeManager, engineCommandManager, kclManager } from 'lib/singletons'
import { type IndexLoaderData } from 'lib/types'
import { useToken } from 'machines/appMachine'
import { commandBarActor } from 'machines/commandBarMachine'
import { Fragment, useContext, useMemo } from 'react'
import { Link, useLocation, useNavigate } from 'react-router-dom'
import { SnapshotFrom } from 'xstate'
import { isDesktop } from '../lib/isDesktop'
import { ActionButton, ActionButtonProps } from './ActionButton'
import { CustomIcon } from './CustomIcon'
import { Logo } from './Logo'
import { useLspContext } from './LspProvider'
import Tooltip from './Tooltip'
const ProjectSidebarMenu = ({
project,

View File

@ -1,39 +1,40 @@
import { useMachine } from '@xstate/react'
import { useFileSystemWatcher } from 'hooks/useFileSystemWatcher'
import { useProjectsLoader } from 'hooks/useProjectsLoader'
import { projectsMachine } from 'machines/projectsMachine'
import { createContext, useCallback, useEffect, useState } from 'react'
import { Actor, AnyStateMachine, fromPromise, Prop, StateFrom } from 'xstate'
import { useLspContext } from './LspProvider'
import toast from 'react-hot-toast'
import { useLocation, useNavigate, useSearchParams } from 'react-router-dom'
import { PATHS } from 'lib/paths'
import useStateMachineCommands from 'hooks/useStateMachineCommands'
import { newKclFile } from 'lang/project'
import { projectsCommandBarConfig } from 'lib/commandBarConfigs/projectsCommandConfig'
import {
CREATE_FILE_URL_PARAM,
FILE_EXT,
PROJECT_ENTRYPOINT,
} from 'lib/constants'
import {
createNewProjectDirectory,
listProjects,
renameProjectDirectory,
} from 'lib/desktop'
import {
getNextProjectIndex,
interpolateProjectNameWithIndex,
doesProjectNameNeedInterpolated,
getUniqueProjectName,
getNextFileName,
getNextProjectIndex,
getUniqueProjectName,
interpolateProjectNameWithIndex,
} from 'lib/desktopFS'
import useStateMachineCommands from 'hooks/useStateMachineCommands'
import { projectsCommandBarConfig } from 'lib/commandBarConfigs/projectsCommandConfig'
import { isDesktop } from 'lib/isDesktop'
import { commandBarActor } from 'machines/commandBarMachine'
import { useSettings } from 'machines/appMachine'
import {
CREATE_FILE_URL_PARAM,
FILE_EXT,
PROJECT_ENTRYPOINT,
} from 'lib/constants'
import { codeManager, kclManager } from 'lib/singletons'
import { PATHS } from 'lib/paths'
import { Project } from 'lib/project'
import { newKclFile } from 'lang/project'
import { codeManager, kclManager } from 'lib/singletons'
import { err } from 'lib/trap'
import { useSettings } from 'machines/appMachine'
import { commandBarActor } from 'machines/commandBarMachine'
import { projectsMachine } from 'machines/projectsMachine'
import { createContext, useCallback, useEffect, useState } from 'react'
import toast from 'react-hot-toast'
import { useLocation, useNavigate, useSearchParams } from 'react-router-dom'
import { Actor, AnyStateMachine, Prop, StateFrom, fromPromise } from 'xstate'
import { useLspContext } from './LspProvider'
type MachineContext<T extends AnyStateMachine> = {
state?: StateFrom<T>
@ -382,8 +383,8 @@ const ProjectsContextDesktop = ({
input.method === 'newProject'
? PROJECT_ENTRYPOINT
: input.name.endsWith(FILE_EXT)
? input.name
: input.name + FILE_EXT
? input.name
: input.name + FILE_EXT
let message = 'File created successfully'
const needsInterpolated = doesProjectNameNeedInterpolated(projectName)

View File

@ -1,16 +1,17 @@
import { useMenuListener } from 'hooks/useMenu'
import { coreDump } from 'lang/wasm'
import { CoreDumpManager } from 'lib/coredump'
import { CustomIcon } from './CustomIcon'
import { codeManager, engineCommandManager } from 'lib/singletons'
import React, { useMemo } from 'react'
import toast from 'react-hot-toast'
import Tooltip from './Tooltip'
import { rustContext } from 'lib/singletons'
import { reportRejection } from 'lib/trap'
import { toSync } from 'lib/utils'
import { useToken } from 'machines/appMachine'
import { rustContext } from 'lib/singletons'
import React, { useMemo } from 'react'
import toast from 'react-hot-toast'
import type { WebContentSendPayload } from '../menu/channels'
import { useMenuListener } from 'hooks/useMenu'
import { CustomIcon } from './CustomIcon'
import Tooltip from './Tooltip'
export const RefreshButton = ({ children }: React.PropsWithChildren) => {
const token = useToken()

View File

@ -1,21 +1,22 @@
import { useEffect, useState, createContext, ReactNode } from 'react'
import {
useNavigation,
useLocation,
useNavigate,
useRouteLoaderData,
} from 'react-router-dom'
import { PATHS } from 'lib/paths'
import { markOnce } from 'lib/performance'
import { useAuthNavigation } from 'hooks/useAuthNavigation'
import { useSettings } from 'machines/appMachine'
import { IndexLoaderData } from 'lib/types'
import { useFileSystemWatcher } from 'hooks/useFileSystemWatcher'
import { getAppSettingsFilePath } from 'lib/desktop'
import { isDesktop } from 'lib/isDesktop'
import { trap } from 'lib/trap'
import { useFileSystemWatcher } from 'hooks/useFileSystemWatcher'
import { PATHS } from 'lib/paths'
import { markOnce } from 'lib/performance'
import { loadAndValidateSettings } from 'lib/settings/settingsUtils'
import { trap } from 'lib/trap'
import { IndexLoaderData } from 'lib/types'
import { useSettings } from 'machines/appMachine'
import { settingsActor } from 'machines/appMachine'
import { ReactNode, createContext, useEffect, useState } from 'react'
import {
useLocation,
useNavigate,
useNavigation,
useRouteLoaderData,
} from 'react-router-dom'
import { OnboardingStatus } from '@rust/kcl-lib/bindings/OnboardingStatus'
export const RouteProviderContext = createContext({})

View File

@ -1,14 +1,15 @@
import { Dialog, Transition } from '@headlessui/react'
import { useCalculateKclExpression } from 'lib/useCalculateKclExpression'
import { Fragment, useState } from 'react'
import { type InstanceProps, create } from 'react-modal-promise'
import { Expr } from '../lang/wasm'
import {
AvailableVars,
addToInputHelper,
CalcResult,
CreateNewVariable,
addToInputHelper,
} from './AvailableVarsHelpers'
import { useCalculateKclExpression } from 'lib/useCalculateKclExpression'
type ModalResolve = {
value: string

View File

@ -1,14 +1,15 @@
import { Dialog, Transition } from '@headlessui/react'
import { useCalculateKclExpression } from 'lib/useCalculateKclExpression'
import { Fragment, useState } from 'react'
import { type InstanceProps, create } from 'react-modal-promise'
import { Expr } from '../lang/wasm'
import {
AvailableVars,
addToInputHelper,
CalcResult,
CreateNewVariable,
addToInputHelper,
} from './AvailableVarsHelpers'
import { useCalculateKclExpression } from 'lib/useCalculateKclExpression'
type ModalResolve = {
value: string

View File

@ -1,10 +1,11 @@
import { Dialog, Transition } from '@headlessui/react'
import { useCalculateKclExpression } from 'lib/useCalculateKclExpression'
import { Fragment } from 'react'
import { CreateNewVariable } from './AvailableVarsHelpers'
import { ActionButton } from './ActionButton'
import { toast } from 'react-hot-toast'
import { type InstanceProps, create } from 'react-modal-promise'
import { useCalculateKclExpression } from 'lib/useCalculateKclExpression'
import { ActionButton } from './ActionButton'
import { CreateNewVariable } from './AvailableVarsHelpers'
type ModalResolve = { variableName: string }
type ModalReject = boolean

View File

@ -1,31 +1,32 @@
import { useSelector } from '@xstate/react'
import { ActionButton } from 'components/ActionButton'
import { useLspContext } from 'components/LspProvider'
import decamelize from 'decamelize'
import { useDotDotSlash } from 'hooks/useDotDotSlash'
import {
createAndOpenNewTutorialProject,
getSettingsFolderPaths,
} from 'lib/desktopFS'
import { isDesktop } from 'lib/isDesktop'
import { openExternalBrowserIfDesktop } from 'lib/openWindow'
import { PATHS } from 'lib/paths'
import { Setting } from 'lib/settings/initialSettings'
import { SetEventTypes, SettingsLevel } from 'lib/settings/settingsTypes'
import {
shouldHideSetting,
shouldShowSettingInput,
} from 'lib/settings/settingsUtils'
import { Fragment } from 'react/jsx-runtime'
import { SettingsSection } from './SettingsSection'
import { useLocation, useNavigate } from 'react-router-dom'
import { isDesktop } from 'lib/isDesktop'
import { ActionButton } from 'components/ActionButton'
import { SettingsFieldInput } from './SettingsFieldInput'
import toast from 'react-hot-toast'
import { APP_VERSION, IS_NIGHTLY, getReleaseUrl } from 'routes/Settings'
import { PATHS } from 'lib/paths'
import {
createAndOpenNewTutorialProject,
getSettingsFolderPaths,
} from 'lib/desktopFS'
import { useDotDotSlash } from 'hooks/useDotDotSlash'
import { ForwardedRef, forwardRef, useEffect, useMemo } from 'react'
import { useLspContext } from 'components/LspProvider'
import { toSync } from 'lib/utils'
import { reportRejection } from 'lib/trap'
import { openExternalBrowserIfDesktop } from 'lib/openWindow'
import { toSync } from 'lib/utils'
import { settingsActor, useSettings } from 'machines/appMachine'
import { useSelector } from '@xstate/react'
import { ForwardedRef, forwardRef, useEffect, useMemo } from 'react'
import toast from 'react-hot-toast'
import { useLocation, useNavigate } from 'react-router-dom'
import { Fragment } from 'react/jsx-runtime'
import { APP_VERSION, IS_NIGHTLY, getReleaseUrl } from 'routes/Settings'
import { SettingsFieldInput } from './SettingsFieldInput'
import { SettingsSection } from './SettingsSection'
interface AllSettingsFieldsProps {
searchParamTab: SettingsLevel

View File

@ -1,4 +1,5 @@
import { RadioGroup } from '@headlessui/react'
import { SettingsTabButton } from './SettingsTabButton'
interface SettingsTabButtonProps {

View File

@ -1,26 +1,27 @@
import { MouseEventHandler, useEffect, useRef, useState } from 'react'
import Loading from './Loading'
import { useAppStream } from 'AppState'
import { ClientSideScene } from 'clientSideScene/ClientSideSceneComp'
import { useModelingContext } from 'hooks/useModelingContext'
import { useNetworkContext } from 'hooks/useNetworkContext'
import { NetworkHealthState } from 'hooks/useNetworkStatus'
import { ClientSideScene } from 'clientSideScene/ClientSideSceneComp'
import { btnName } from 'lib/cameraControls'
import { sendSelectEventToEngine } from 'lib/selections'
import { kclManager, engineCommandManager, sceneInfra } from 'lib/singletons'
import { useAppStream } from 'AppState'
import { getArtifactOfTypes } from 'lang/std/artifactGraph'
import {
DisconnectingType,
EngineCommandManagerEvents,
EngineConnectionStateType,
DisconnectingType,
} from 'lang/std/engineConnection'
import { useRouteLoaderData } from 'react-router-dom'
import { btnName } from 'lib/cameraControls'
import { PATHS } from 'lib/paths'
import { IndexLoaderData } from 'lib/types'
import { sendSelectEventToEngine } from 'lib/selections'
import { engineCommandManager, kclManager, sceneInfra } from 'lib/singletons'
import { err, reportRejection } from 'lib/trap'
import { getArtifactOfTypes } from 'lang/std/artifactGraph'
import { ViewControlContextMenu } from './ViewControlMenu'
import { useCommandBarState } from 'machines/commandBarMachine'
import { IndexLoaderData } from 'lib/types'
import { useSettings } from 'machines/appMachine'
import { useCommandBarState } from 'machines/commandBarMachine'
import { MouseEventHandler, useEffect, useRef, useState } from 'react'
import { useRouteLoaderData } from 'react-router-dom'
import Loading from './Loading'
import { ViewControlContextMenu } from './ViewControlMenu'
enum StreamState {
Playing = 'playing',

View File

@ -1,5 +1,4 @@
import { getMarks } from 'lib/performance'
import {
printDeltaTotal,
printInvocationCount,

View File

@ -1,14 +1,20 @@
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
import { useFileContext } from 'hooks/useFileContext'
import { isDesktop } from 'lib/isDesktop'
import { PATHS } from 'lib/paths'
import toast from 'react-hot-toast'
import {
TextToCad_type,
TextToCadIteration_type,
TextToCad_type,
} from '@kittycad/lib/dist/types/src/models'
import { useFileContext } from 'hooks/useFileContext'
import { base64Decode } from 'lang/wasm'
import { isDesktop } from 'lib/isDesktop'
import { openExternalBrowserIfDesktop } from 'lib/openWindow'
import { PATHS } from 'lib/paths'
import { codeManager, kclManager } from 'lib/singletons'
import { sendTelemetry } from 'lib/textToCad'
import { Themes } from 'lib/theme'
import { reportRejection } from 'lib/trap'
import { commandBarActor } from 'machines/commandBarMachine'
import { fileMachine } from 'machines/fileMachine'
import { useCallback, useEffect, useRef, useState } from 'react'
import toast from 'react-hot-toast'
import {
Box3,
Color,
@ -23,17 +29,12 @@ import {
Vector3,
WebGLRenderer,
} from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader'
import { base64Decode } from 'lang/wasm'
import { sendTelemetry } from 'lib/textToCad'
import { Themes } from 'lib/theme'
import { ActionButton } from './ActionButton'
import { commandBarActor } from 'machines/commandBarMachine'
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'
import { EventFrom } from 'xstate'
import { fileMachine } from 'machines/fileMachine'
import { reportRejection } from 'lib/trap'
import { codeManager, kclManager } from 'lib/singletons'
import { openExternalBrowserIfDesktop } from 'lib/openWindow'
import { ActionButton } from './ActionButton'
const CANVAS_SIZE = 128
const PROMPT_TRUNCATE_LENGTH = 128

View File

@ -1,5 +1,6 @@
import { fireEvent, render, screen } from '@testing-library/react'
import { vi } from 'vitest'
import { ToastUpdate } from './ToastUpdate'
describe('ToastUpdate tests', () => {

View File

@ -1,9 +1,10 @@
import toast from 'react-hot-toast'
import { ActionButton } from './ActionButton'
import { openExternalBrowserIfDesktop } from 'lib/openWindow'
import { escape, Marked, MarkedOptions, unescape } from '@ts-stack/markdown'
import { getReleaseUrl } from 'routes/Settings'
import { Marked, MarkedOptions, escape, unescape } from '@ts-stack/markdown'
import { SafeRenderer } from 'lib/markdown'
import { openExternalBrowserIfDesktop } from 'lib/openWindow'
import toast from 'react-hot-toast'
import { getReleaseUrl } from 'routes/Settings'
import { ActionButton } from './ActionButton'
export function ToastUpdate({
version,

View File

@ -1,17 +1,18 @@
import { toolTips } from 'lang/langHelpers'
import { Selections } from 'lib/selections'
import { Program, Expr, VariableDeclarator } from '../../lang/wasm'
import { getNodeFromPath } from '../../lang/queryAst'
import { getNodePathFromSourceRange } from 'lang/queryAstNodePathUtils'
import { isSketchVariablesLinked } from '../../lang/std/sketchConstraints'
import {
transformSecondarySketchLinesTagFirst,
getTransformInfos,
PathToNodeMap,
} from '../../lang/std/sketchcombos'
import { TransformInfo } from 'lang/std/stdTypes'
import { Selections } from 'lib/selections'
import { kclManager } from 'lib/singletons'
import { err } from 'lib/trap'
import { TransformInfo } from 'lang/std/stdTypes'
import { getNodeFromPath } from '../../lang/queryAst'
import { isSketchVariablesLinked } from '../../lang/std/sketchConstraints'
import {
PathToNodeMap,
getTransformInfos,
transformSecondarySketchLinesTagFirst,
} from '../../lang/std/sketchcombos'
import { Expr, Program, VariableDeclarator } from '../../lang/wasm'
export function equalAngleInfo({
selectionRanges,

View File

@ -1,17 +1,19 @@
import { toolTips } from 'lang/langHelpers'
import { TransformInfo } from 'lang/std/stdTypes'
import { Selections } from 'lib/selections'
import { Program, Expr, VariableDeclarator } from '../../lang/wasm'
import { kclManager } from 'lib/singletons'
import { err } from 'lib/trap'
import { Node } from '@rust/kcl-lib/bindings/Node'
import { getNodeFromPath } from '../../lang/queryAst'
import { isSketchVariablesLinked } from '../../lang/std/sketchConstraints'
import {
transformSecondarySketchLinesTagFirst,
getTransformInfos,
PathToNodeMap,
getTransformInfos,
transformSecondarySketchLinesTagFirst,
} from '../../lang/std/sketchcombos'
import { TransformInfo } from 'lang/std/stdTypes'
import { kclManager } from 'lib/singletons'
import { err } from 'lib/trap'
import { Node } from '@rust/kcl-lib/bindings/Node'
import { Expr, Program, VariableDeclarator } from '../../lang/wasm'
export function setEqualLengthInfo({
selectionRanges,

View File

@ -1,16 +1,18 @@
import { toolTips } from 'lang/langHelpers'
import { TransformInfo } from 'lang/std/stdTypes'
import { Selections } from 'lib/selections'
import { Program, Expr, VariableMap } from '../../lang/wasm'
import { kclManager } from 'lib/singletons'
import { err } from 'lib/trap'
import { Node } from '@rust/kcl-lib/bindings/Node'
import { getNodeFromPath } from '../../lang/queryAst'
import {
PathToNodeMap,
getTransformInfos,
transformAstSketchLines,
} from '../../lang/std/sketchcombos'
import { TransformInfo } from 'lang/std/stdTypes'
import { kclManager } from 'lib/singletons'
import { err } from 'lib/trap'
import { Node } from '@rust/kcl-lib/bindings/Node'
import { Expr, Program, VariableMap } from '../../lang/wasm'
export function horzVertInfo(
selectionRanges: Selections,

View File

@ -1,24 +1,26 @@
import { toolTips } from 'lang/langHelpers'
import { Program, Expr, VariableDeclarator } from '../../lang/wasm'
import { TransformInfo } from 'lang/std/stdTypes'
import { Selections } from 'lib/selections'
import { kclManager } from 'lib/singletons'
import { err } from 'lib/trap'
import { Node } from '@rust/kcl-lib/bindings/Node'
import { createVariableDeclaration } from '../../lang/modifyAst'
import {
getNodeFromPath,
isLinesParallelAndConstrained,
} from '../../lang/queryAst'
import { isSketchVariablesLinked } from '../../lang/std/sketchConstraints'
import {
transformSecondarySketchLinesTagFirst,
getTransformInfos,
PathToNodeMap,
getTransformInfos,
isExprBinaryPart,
transformSecondarySketchLinesTagFirst,
} from '../../lang/std/sketchcombos'
import { TransformInfo } from 'lang/std/stdTypes'
import { GetInfoModal, createInfoModal } from '../SetHorVertDistanceModal'
import { createVariableDeclaration } from '../../lang/modifyAst'
import { Expr, Program, VariableDeclarator } from '../../lang/wasm'
import { removeDoubleNegatives } from '../AvailableVarsHelpers'
import { kclManager } from 'lib/singletons'
import { err } from 'lib/trap'
import { Node } from '@rust/kcl-lib/bindings/Node'
import { GetInfoModal, createInfoModal } from '../SetHorVertDistanceModal'
const getModalInfo = createInfoModal(GetInfoModal)

View File

@ -1,17 +1,19 @@
import { toolTips } from 'lang/langHelpers'
import { codeRefFromRange } from 'lang/std/artifactGraph'
import { TransformInfo } from 'lang/std/stdTypes'
import { Selection, Selections } from 'lib/selections'
import { PathToNode, Program, Expr, topLevelRange } from '../../lang/wasm'
import { kclManager } from 'lib/singletons'
import { err } from 'lib/trap'
import { Node } from '@rust/kcl-lib/bindings/Node'
import { getNodeFromPath } from '../../lang/queryAst'
import {
PathToNodeMap,
getRemoveConstraintsTransforms,
transformAstSketchLines,
} from '../../lang/std/sketchcombos'
import { TransformInfo } from 'lang/std/stdTypes'
import { kclManager } from 'lib/singletons'
import { err } from 'lib/trap'
import { Node } from '@rust/kcl-lib/bindings/Node'
import { codeRefFromRange } from 'lang/std/artifactGraph'
import { Expr, PathToNode, Program, topLevelRange } from '../../lang/wasm'
export function removeConstrainingValuesInfo({
selectionRanges,

View File

@ -1,23 +1,25 @@
import { toolTips } from 'lang/langHelpers'
import { Program, Expr } from '../../lang/wasm'
import { TransformInfo } from 'lang/std/stdTypes'
import { Selections } from 'lib/selections'
import { kclManager } from 'lib/singletons'
import { err } from 'lib/trap'
import { Node } from '@rust/kcl-lib/bindings/Node'
import { createName, createVariableDeclaration } from '../../lang/modifyAst'
import { getNodeFromPath } from '../../lang/queryAst'
import {
getTransformInfos,
transformAstSketchLines,
PathToNodeMap,
getTransformInfos,
isExprBinaryPart,
transformAstSketchLines,
} from '../../lang/std/sketchcombos'
import { TransformInfo } from 'lang/std/stdTypes'
import { Expr, Program } from '../../lang/wasm'
import { removeDoubleNegatives } from '../AvailableVarsHelpers'
import {
SetAngleLengthModal,
createSetAngleLengthModal,
} from '../SetAngleLengthModal'
import { createName, createVariableDeclaration } from '../../lang/modifyAst'
import { removeDoubleNegatives } from '../AvailableVarsHelpers'
import { kclManager } from 'lib/singletons'
import { err } from 'lib/trap'
import { Node } from '@rust/kcl-lib/bindings/Node'
const getModalInfo = createSetAngleLengthModal(SetAngleLengthModal)
@ -39,8 +41,8 @@ export function absDistanceInfo({
constraint === 'xAbs' || constraint === 'yAbs'
? constraint
: constraint === 'snapToYAxis'
? 'xAbs'
: 'yAbs'
? 'xAbs'
: 'yAbs'
const _nodes = selectionRanges.graphSelections.map(({ codeRef }) => {
const tmp = getNodeFromPath<Expr>(kclManager.ast, codeRef.pathToNode, [
'CallExpression',

View File

@ -1,20 +1,21 @@
import { toolTips } from 'lang/langHelpers'
import { Program, Expr, VariableDeclarator } from '../../lang/wasm'
import { TransformInfo } from 'lang/std/stdTypes'
import { Selections } from 'lib/selections'
import { kclManager } from 'lib/singletons'
import { err } from 'lib/trap'
import { createVariableDeclaration } from '../../lang/modifyAst'
import { getNodeFromPath } from '../../lang/queryAst'
import { isSketchVariablesLinked } from '../../lang/std/sketchConstraints'
import {
transformSecondarySketchLinesTagFirst,
getTransformInfos,
PathToNodeMap,
getTransformInfos,
isExprBinaryPart,
transformSecondarySketchLinesTagFirst,
} from '../../lang/std/sketchcombos'
import { TransformInfo } from 'lang/std/stdTypes'
import { GetInfoModal, createInfoModal } from '../SetHorVertDistanceModal'
import { createVariableDeclaration } from '../../lang/modifyAst'
import { Expr, Program, VariableDeclarator } from '../../lang/wasm'
import { removeDoubleNegatives } from '../AvailableVarsHelpers'
import { kclManager } from 'lib/singletons'
import { err } from 'lib/trap'
import { GetInfoModal, createInfoModal } from '../SetHorVertDistanceModal'
const getModalInfo = createInfoModal(GetInfoModal)

View File

@ -1,21 +1,23 @@
import { toolTips } from 'lang/langHelpers'
import { Program, Expr, VariableDeclarator } from '../../lang/wasm'
import { TransformInfo } from 'lang/std/stdTypes'
import { Selections } from 'lib/selections'
import { kclManager } from 'lib/singletons'
import { cleanErrs, err } from 'lib/trap'
import { Node } from '@rust/kcl-lib/bindings/Node'
import { createLiteral, createVariableDeclaration } from '../../lang/modifyAst'
import { getNodeFromPath } from '../../lang/queryAst'
import { isSketchVariablesLinked } from '../../lang/std/sketchConstraints'
import {
transformSecondarySketchLinesTagFirst,
getTransformInfos,
PathToNodeMap,
getTransformInfos,
isExprBinaryPart,
transformSecondarySketchLinesTagFirst,
} from '../../lang/std/sketchcombos'
import { TransformInfo } from 'lang/std/stdTypes'
import { GetInfoModal, createInfoModal } from '../SetHorVertDistanceModal'
import { createLiteral, createVariableDeclaration } from '../../lang/modifyAst'
import { Expr, Program, VariableDeclarator } from '../../lang/wasm'
import { removeDoubleNegatives } from '../AvailableVarsHelpers'
import { kclManager } from 'lib/singletons'
import { Selections } from 'lib/selections'
import { cleanErrs, err } from 'lib/trap'
import { Node } from '@rust/kcl-lib/bindings/Node'
import { GetInfoModal, createInfoModal } from '../SetHorVertDistanceModal'
const getModalInfo = createInfoModal(GetInfoModal)

View File

@ -1,6 +1,16 @@
import { toolTips } from 'lang/langHelpers'
import { Program, Expr } from '../../lang/wasm'
import { TransformInfo } from 'lang/std/stdTypes'
import { KclCommandValue } from 'lib/commandTypes'
import { Selections } from 'lib/selections'
import { kclManager } from 'lib/singletons'
import { err } from 'lib/trap'
import {
createBinaryExpressionWithUnary,
createLocalName,
createName,
createVariableDeclaration,
} from '../../lang/modifyAst'
import { getNodeFromPath } from '../../lang/queryAst'
import {
PathToNodeMap,
@ -8,22 +18,13 @@ import {
isExprBinaryPart,
transformAstSketchLines,
} from '../../lang/std/sketchcombos'
import { TransformInfo } from 'lang/std/stdTypes'
import { Expr, Program } from '../../lang/wasm'
import { normaliseAngle } from '../../lib/utils'
import { removeDoubleNegatives } from '../AvailableVarsHelpers'
import {
SetAngleLengthModal,
createSetAngleLengthModal,
} from '../SetAngleLengthModal'
import {
createBinaryExpressionWithUnary,
createLocalName,
createName,
createVariableDeclaration,
} from '../../lang/modifyAst'
import { removeDoubleNegatives } from '../AvailableVarsHelpers'
import { normaliseAngle } from '../../lib/utils'
import { kclManager } from 'lib/singletons'
import { err } from 'lib/trap'
import { KclCommandValue } from 'lib/commandTypes'
const getModalInfo = createSetAngleLengthModal(SetAngleLengthModal)

View File

@ -20,7 +20,9 @@
/* The parts that will be transitioned */
opacity: 0;
transform: translate(var(--_x, 0), var(--_y, 0));
transition: transform 0.15s ease-out, opacity 0.11s ease-out;
transition:
transform 0.15s ease-out,
opacity 0.11s ease-out;
}
.tooltip {

View File

@ -1,5 +1,6 @@
import { fireEvent, render, screen } from '@testing-library/react'
import { vi } from 'vitest'
import { UpdaterRestartModal } from './UpdaterRestartModal'
describe('UpdaterRestartModal tests', () => {

View File

@ -1,4 +1,5 @@
import { create, InstanceProps } from 'react-modal-promise'
import { InstanceProps, create } from 'react-modal-promise'
import { ActionButton } from './ActionButton'
type ModalResolve = {

View File

@ -1,12 +1,13 @@
import { Models } from '@kittycad/lib'
import { fireEvent, render, screen, waitFor } from '@testing-library/react'
import UserSidebarMenu from './UserSidebarMenu'
import {
Route,
RouterProvider,
createMemoryRouter,
createRoutesFromElements,
} from 'react-router-dom'
import { Models } from '@kittycad/lib'
import UserSidebarMenu from './UserSidebarMenu'
type User = Models['User_type']

View File

@ -1,15 +1,16 @@
import { Popover, Transition } from '@headlessui/react'
import { ActionButton, ActionButtonProps } from './ActionButton'
import { useLocation, useNavigate } from 'react-router-dom'
import { Fragment, useMemo, useState } from 'react'
import { PATHS } from 'lib/paths'
import { Models } from '@kittycad/lib'
import { useAbsoluteFilePath } from 'hooks/useAbsoluteFilePath'
import Tooltip from './Tooltip'
import usePlatform from 'hooks/usePlatform'
import { isDesktop } from 'lib/isDesktop'
import { CustomIcon } from './CustomIcon'
import { PATHS } from 'lib/paths'
import { authActor } from 'machines/appMachine'
import { Fragment, useMemo, useState } from 'react'
import { useLocation, useNavigate } from 'react-router-dom'
import { ActionButton, ActionButtonProps } from './ActionButton'
import { CustomIcon } from './CustomIcon'
import Tooltip from './Tooltip'
type User = Models['User_type']

View File

@ -1,4 +1,10 @@
import { useModelingContext } from 'hooks/useModelingContext'
import { AxisNames, VIEW_NAMES_SEMANTIC } from 'lib/constants'
import { sceneInfra } from 'lib/singletons'
import { reportRejection } from 'lib/trap'
import { useSettings } from 'machines/appMachine'
import { useMemo } from 'react'
import {
ContextMenu,
ContextMenuDivider,
@ -6,11 +12,6 @@ import {
ContextMenuItemRefresh,
ContextMenuProps,
} from './ContextMenu'
import { AxisNames, VIEW_NAMES_SEMANTIC } from 'lib/constants'
import { useModelingContext } from 'hooks/useModelingContext'
import { useMemo } from 'react'
import { sceneInfra } from 'lib/singletons'
import { useSettings } from 'machines/appMachine'
export function useViewControlMenuItems() {
const { state: modelingState, send: modelingSend } = useModelingContext()

View File

@ -1,7 +1,8 @@
import { Dialog } from '@headlessui/react'
import { useState } from 'react'
import { ActionButton } from './ActionButton'
import { useKclContext } from 'lang/KclProvider'
import { useState } from 'react'
import { ActionButton } from './ActionButton'
export function WasmErrBanner() {
const [isBannerDismissed, setBannerDismissed] = useState(false)