Files
modeling-app/src/lib/onboardingPaths.ts
Frank Noirot 3b7b4f85a1 Update onboarding to V1 browser and desktop flows (#6714)
* Remove unused `telemetryLoader`

* Remove onboarding redirect behavior

* Allow subRoute to be passed to navigateToProject

* Replace warning dialog routes with toasts

* Wire up new utilities and toasts to UI components

* Add home sidebar buttons for tutorial flow

* Rename menu item

* Add flex-1 so home-layout fills available space

* Remove onboarding avatar tests, they are becoming irrelevant

* Consolidate onboarding tests to one longer one

and update it to not use pixel color checks, and use fixtures.

* Shorten warning toast button text

* tsc, lint, and circular deps

* Update circular dep file

* Fix mistakes made in circular update tweaking

* One more dumb created circular dep

* Update src/routes/Onboarding/utils.tsx

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>

* Fix narrow screen home layout breaking

* fix: kevin, navigation routes fixed

* fix: filename parsing is correct now for onboarding with the last file sep

* Fix e2e test state checks that are diff on Linux

* Create onboarding project entirely through systemIOMachine

* Fix Windows path construction

* Make utility to verify a string is an onboarding value

* Little biome formatting suggestion fix

* Units onboarding step was not using OnboardingButtons

* Add type checking of next and previous status, fix useNextClick

* Update `OnboardingStatus` type on WASM side

* Make onboarding different on browser and web, placeholder component

* Show proof of concept with custom content per route

* Make text type args not insta dismiss when you click anywhere

* Make some utility hooks for the onboarding

* Update requestedProjectName along with requestedProjectName

* Build out a rough draft of desktop onboarding

* Remove unused onboarding route files

* Build out rough draft of browser onboarding content

* @jgomez720 browser flow feedback

* @jgomez420 desktop feedback

* tsc and lints

* Tweaks

* Import is dead, long live Add files

* What's up with my inability to type "highlight"?

* Codespell and String casting

* Update browser sample to be axial fan

* lint and tsc

* codespell again

* Remove unused nightmare function `useDemoCode`

* Add a few unit tests

* Update desktop to use bulk file creation from #6747

* Oops overwrote main.kcl on the modify with text-to-cad step

* Undo the dumb use of `sep` that I introduced

* Fix up project test

which was fragile to the number of steps in the onboarding smh

* Fix up onboarding flow test

* typo

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: Kevin Nadro <kevin@zoo.dev>
2025-05-09 00:37:21 +00:00

76 lines
2.6 KiB
TypeScript

import type { OnboardingStatus } from '@rust/kcl-lib/bindings/OnboardingStatus'
import { isDesktop } from '@src/lib/isDesktop'
export type OnboardingPath = OnboardingStatus & `/${string}`
export type DesktopOnboardingPath = OnboardingPath & `/desktop${string}`
export type BrowserOnboardingPath = OnboardingPath & `/browser${string}`
// companion to "desktop routes" in `OnboardingRoutes` enum in Rust
export const desktopOnboardingPaths: Record<string, DesktopOnboardingPath> = {
welcome: '/desktop',
scene: '/desktop/scene',
toolbar: '/desktop/toolbar',
textToCadWelcome: '/desktop/text-to-cad',
textToCadPrompt: '/desktop/text-to-cad-prompt',
featureTreePane: '/desktop/feature-tree-pane',
codePane: '/desktop/code-pane',
projectFilesPane: '/desktop/project-pane',
otherPanes: '/desktop/other-panes',
promptToEditWelcome: '/desktop/prompt-to-edit',
promptToEditPrompt: '/desktop/prompt-to-edit-prompt',
promptToEditResult: '/desktop/prompt-to-edit-result',
imports: '/desktop/imports',
exports: '/desktop/exports',
conclusion: '/desktop/conclusion',
}
// companion to "web routes" in `OnboardingRoutes` enum in Rust
export const browserOnboardingPaths: Record<string, BrowserOnboardingPath> = {
welcome: '/browser',
scene: '/browser/scene',
toolbar: '/browser/toolbar',
textToCadWelcome: '/browser/text-to-cad',
textToCadPrompt: '/browser/text-to-cad-prompt',
featureTreePane: '/browser/feature-tree-pane',
promptToEditWelcome: '/browser/prompt-to-edit',
promptToEditPrompt: '/browser/prompt-to-edit-prompt',
promptToEditResult: '/browser/prompt-to-edit-result',
conclusion: '/browser/conclusion',
}
export const onboardingPaths = {
desktop: desktopOnboardingPaths,
browser: browserOnboardingPaths,
}
export const onboardingPathsArray = Object.values(onboardingPaths).flatMap(
(p) => Object.values(p)
)
/** Whatever the first onboarding path on the current platform is. */
export const onboardingStartPath = Object.values(
onboardingPaths[isDesktop() ? 'desktop' : 'browser']
)[0]
export const isOnboardingPath = (input: string): input is OnboardingStatus => {
return Object.values(onboardingPaths)
.flatMap((o) => Object.values(o))
.includes(input as OnboardingPath)
}
export const isDesktopOnboardingPath = (
input: string
): input is OnboardingStatus => {
return Object.values(onboardingPaths.desktop).includes(
input as DesktopOnboardingPath
)
}
export const isBrowserOnboardingPath = (
input: string
): input is OnboardingStatus => {
return Object.values(onboardingPaths.browser).includes(
input as BrowserOnboardingPath
)
}