Compare commits

..

1 Commits

Author SHA1 Message Date
c9e27ffb95 WIP 2023-12-04 12:16:50 -06:00
640 changed files with 25935 additions and 109481 deletions

View File

@ -1,3 +1,3 @@
[codespell]
ignore-words-list: crate,everytime,inout,co-ordinate,ot,nwo,absolutey,atleast
skip: **/target,node_modules,build,**/Cargo.lock,./docs/kcl/*.md
ignore-words-list: crate,everytime
skip: **/target,node_modules,build

View File

@ -1,5 +1,6 @@
VITE_KC_API_WS_MODELING_URL=wss://api.dev.zoo.dev/ws/modeling/commands
VITE_KC_API_BASE_URL=https://api.dev.zoo.dev
VITE_KC_SITE_BASE_URL=https://dev.zoo.dev
VITE_KC_API_WS_MODELING_URL=wss://api.dev.kittycad.io/ws/modeling/commands
VITE_KC_API_BASE_URL=https://api.dev.kittycad.io
VITE_KC_SITE_BASE_URL=https://dev.kittycad.io
VITE_KC_SKIP_AUTH=false
VITE_KC_CONNECTION_TIMEOUT_MS=5000
VITE_KC_SENTRY_DSN=

View File

@ -1,5 +1,6 @@
VITE_KC_API_WS_MODELING_URL=wss://api.zoo.dev/ws/modeling/commands
VITE_KC_API_BASE_URL=https://api.zoo.dev
VITE_KC_SITE_BASE_URL=https://zoo.dev
VITE_KC_API_WS_MODELING_URL=wss://api.kittycad.io/ws/modeling/commands
VITE_KC_API_BASE_URL=https://api.kittycad.io
VITE_KC_SITE_BASE_URL=https://kittycad.io
VITE_KC_SKIP_AUTH=false
VITE_KC_CONNECTION_TIMEOUT_MS=15000
VITE_KC_SENTRY_DSN=https://a814f2f66734989a90367f48feee28ca@o1042111.ingest.sentry.io/4505789425844224

View File

@ -1,2 +1 @@
src/wasm-lib/*
*.typegen.ts

View File

@ -17,12 +17,12 @@
"never"
],
"react-hooks/exhaustive-deps": "off",
"@typescript-eslint/no-floating-promises": "warn"
},
"overrides": [
{
"files": ["e2e/**/*.ts"], // Update the pattern based on your file structure
"rules": {
"@typescript-eslint/no-floating-promises": "warn",
"testing-library/prefer-screen-queries": "off"
}
}

View File

@ -1,85 +0,0 @@
name: Bug Report
description: File a bug report for the Zoo Modeling App
title: "[BUG]: "
labels: ["bug"]
assignees: []
body:
- type: markdown
attributes:
value: "Thank you for taking the time to report a bug. Please provide as much information as possible to help us resolve it."
- type: textarea
id: describe-bug
attributes:
label: Describe the bug
description: A clear and concise description of what the bug is.
placeholder: "Explain the bug..."
validations:
required: true
- type: textarea
id: reproduce-bug
attributes:
label: Steps to Reproduce
description: Steps to reproduce the behavior.
placeholder: |
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
validations:
required: true
- type: textarea
id: expected-behavior
attributes:
label: Expected Behavior
description: Description of what you expected to happen.
placeholder: "I expected that..."
validations:
required: true
- type: textarea
id: screenshots
attributes:
label: Screenshots and Recordings
description: If applicable, add screenshots to help explain your problem. Maximum upload size is 10MB.
placeholder: "You can attach images or video recordings here."
validations:
required: false
- type: input
id: desktop-os
attributes:
label: Desktop OS
description: "Your operating system"
placeholder: "example: Windows 10, MacOS Big Sur"
validations:
required: true
- type: input
id: browser
attributes:
label: Browser
description: "If you are using the web version, please specify the browser you are using."
placeholder: "example: Chrome, Safari"
validations:
required: false
- type: input
id: version
attributes:
label: Version
description: "The version of the Zoo Modeling App you're using."
placeholder: "example: v0.15.0. You can find this in the settings."
validations:
required: true
- type: textarea
id: additional-context
attributes:
label: Additional Context
description: Add any other context about the problem here.
placeholder: "Anything else you want to add..."
validations:
required: false

50
.github/workflows/cargo-build.yml vendored Normal file
View File

@ -0,0 +1,50 @@
on:
push:
branches:
- main
paths:
- '**.rs'
- '**/Cargo.toml'
- '**/Cargo.lock'
- '**/rust-toolchain.toml'
- .github/workflows/cargo-build.yml
pull_request:
paths:
- '**.rs'
- '**/Cargo.toml'
- '**/Cargo.lock'
- '**/rust-toolchain.toml'
- .github/workflows/cargo-build.yml
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
name: cargo build
jobs:
cargobuild:
name: cargo build
runs-on: ubuntu-latest
strategy:
matrix:
dir: ['src/wasm-lib']
steps:
- uses: actions/checkout@v4
- name: Install latest rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: install dependencies
if: matrix.dir == 'src-tauri'
run: |
sudo apt-get update
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev librsvg2-dev patchelf
- name: Rust Cache
uses: Swatinem/rust-cache@v2.6.1
- name: Run cargo build
run: |
cd "${{ matrix.dir }}"
cargo build --all
shell: bash

View File

@ -9,6 +9,12 @@ on:
- '**.rs'
- .github/workflows/cargo-clippy.yml
pull_request:
paths:
- '**/Cargo.toml'
- '**/Cargo.lock'
- '**/rust-toolchain.toml'
- '**.rs'
- .github/workflows/cargo-build.yml
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
@ -37,6 +43,17 @@ jobs:
- name: Rust Cache
uses: Swatinem/rust-cache@v2.6.1
- name: Install ffmpeg
run: |
sudo apt update
sudo apt install \
ffmpeg \
libavformat-dev \
libavutil-dev \
libclang-dev \
libswscale-dev \
--no-install-recommends
- name: Run clippy
run: |
cd "${{ matrix.dir }}"

View File

@ -3,15 +3,14 @@ on:
branches:
- main
paths:
- 'src/wasm-lib/**.rs'
- '**.rs'
- '**/Cargo.toml'
- '**/Cargo.lock'
- '**/rust-toolchain.toml'
- .github/workflows/cargo-test.yml
pull_request:
paths:
- 'src/wasm-lib/**.rs'
- '**.rs'
- '**/Cargo.toml'
- '**/Cargo.lock'
- '**/rust-toolchain.toml'
@ -21,7 +20,7 @@ permissions: read-all
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
name: cargo test of wasm-lib
name: cargo test
jobs:
cargotest:
name: cargo test
@ -41,38 +40,26 @@ jobs:
run: |
sudo apt-get update
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev librsvg2-dev patchelf
- name: Install vector
run: |
curl --proto '=https' --tlsv1.2 -sSfL https://sh.vector.dev > /tmp/vector.sh
chmod +x /tmp/vector.sh
/tmp/vector.sh -y -no-modify-path
mkdir -p /tmp/vector
cp .github/workflows/vector.toml /tmp/vector.toml
sed -i "s#GITHUB_WORKFLOW#${GITHUB_WORKFLOW}#g" /tmp/vector.toml
sed -i "s#GITHUB_REPOSITORY#${GITHUB_REPOSITORY}#g" /tmp/vector.toml
sed -i "s#GITHUB_SHA#${GITHUB_SHA}#g" /tmp/vector.toml
sed -i "s#GITHUB_REF_NAME#${GITHUB_REF_NAME}#g" /tmp/vector.toml
sed -i "s#GH_ACTIONS_AXIOM_TOKEN#${{secrets.GH_ACTIONS_AXIOM_TOKEN}}#g" /tmp/vector.toml
cat /tmp/vector.toml
${HOME}/.vector/bin/vector --config /tmp/vector.toml &
- uses: taiki-e/install-action@cargo-llvm-cov
- uses: taiki-e/install-action@nextest
- name: Rust Cache
uses: Swatinem/rust-cache@v2.6.1
- name: Install ffmpeg
run: |
sudo apt update
sudo apt install \
ffmpeg \
libavformat-dev \
libavutil-dev \
libclang-dev \
libswscale-dev \
--no-install-recommends
- name: cargo test
shell: bash
run: |-
cd "${{ matrix.dir }}"
cargo llvm-cov nextest --all --lcov --output-path lcov.info --test-threads=1 --no-fail-fast -P ci 2>&1 | tee /tmp/github-actions.log
cargo nextest run --workspace --no-fail-fast -P ci
env:
KITTYCAD_API_TOKEN: ${{secrets.KITTYCAD_API_TOKEN}}
RUST_MIN_STACK: 10485760000
- name: Upload to codecov.io
uses: codecov/codecov-action@v4
with:
token: ${{secrets.CODECOV_TOKEN}}
fail_ci_if_error: true
flags: wasm-lib
verbose: true
files: lcov.info

View File

@ -1,36 +0,0 @@
name: Check Onboarding KCL
on:
pull_request:
types: [opened, synchronize]
paths:
- 'src/lib/exampleKcl.ts'
permissions:
contents: read
issues: write
pull-requests: write
jobs:
comment:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Comment on PR
uses: actions/github-script@v7
with:
script: |
const message = '`src/lib/exampleKcl.ts` has been updated in this PR, please review and update the `src/routes/onboarding`, if needed.';
const issue_number = context.payload.pull_request.number;
const owner = context.repo.owner;
const repo = context.repo.repo;
// Post a comment on the PR
await github.rest.issues.createComment({
owner,
repo,
issue_number,
body: message,
});

View File

@ -46,7 +46,6 @@ jobs:
workspaces: './src/wasm-lib'
- run: yarn build:wasm
- run: yarn xstate:typegen
- run: yarn tsc
@ -56,7 +55,7 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v4
- name: Install codespell
run: |
python -m pip install codespell
@ -86,6 +85,8 @@ jobs:
- run: yarn test:nowatch
- run: yarn test:cov
prepare-json-files:
runs-on: ubuntu-latest # seperate job on Ubuntu for easy string manipulations (compared to Windows)
@ -103,7 +104,7 @@ jobs:
if: github.event_name == 'schedule'
run: |
VERSION=$(date +'%-y.%-m.%-d') yarn bump-jsons
echo "$(jq --arg url 'https://dl.zoo.dev/releases/modeling-app/nightly/last_update.json' \
echo "$(jq --arg url 'https://dl.kittycad.io/releases/modeling-app/nightly/last_update.json' \
'.tauri.updater.endpoints[]=$url' src-tauri/tauri.release.conf.json --indent 2)" > src-tauri/tauri.release.conf.json
- uses: actions/upload-artifact@v3
@ -122,9 +123,8 @@ jobs:
needs: [prepare-json-files]
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-14, ubuntu-latest, windows-latest]
os: [macos-latest, ubuntu-latest, windows-latest]
steps:
- uses: actions/checkout@v4
@ -181,16 +181,13 @@ jobs:
cd ../../
cp src/wasm-lib/pkg/wasm_lib_bg.wasm public
- name: Run vite build (build:both)
run: yarn vite build --mode ${{ env.BUILD_RELEASE == 'true' && 'production' || 'development' }}
- name: Fix format
run: yarn fmt
- name: Install x86 target for Universal builds (MacOS only)
if: matrix.os == 'macos-14'
- name: Install Universal target (MacOS only)
if: matrix.os == 'macos-latest'
run: |
rustup target add x86_64-apple-darwin
rustup target add aarch64-apple-darwin
- name: Prepare certificate and variables (Windows only)
if: ${{ matrix.os == 'windows-latest' && env.BUILD_RELEASE == 'true' }}
@ -224,7 +221,7 @@ jobs:
with:
includeRelease: false
includeDebug: true
args: ${{ matrix.os == 'macos-14' && '--target universal-apple-darwin' || '' }}
args: ${{ matrix.os == 'macos-latest' && '--target universal-apple-darwin' || '' }}
- name: Build the app (release) and sign
uses: tauri-apps/tauri-action@v0
@ -240,12 +237,11 @@ jobs:
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
TAURI_CONF_ARGS: "--config ${{ matrix.os == 'windows-latest' && 'src-tauri\\tauri.release.conf.json' || 'src-tauri/tauri.release.conf.json' }}"
with:
args: "${{ matrix.os == 'macos-14' && '--target universal-apple-darwin' || '' }} ${{ env.TAURI_CONF_ARGS }}"
args: "${{ matrix.os == 'macos-latest' && '--target universal-apple-darwin' || '' }} ${{ env.TAURI_CONF_ARGS }}"
- uses: actions/upload-artifact@v3
if: matrix.os != 'ubuntu-latest'
env:
PREFIX: ${{ matrix.os == 'macos-14' && 'src-tauri/target/universal-apple-darwin' || 'src-tauri/target' }}
PREFIX: ${{ matrix.os == 'macos-latest' && 'src-tauri/target/universal-apple-darwin' || 'src-tauri/target' }}
MODE: ${{ env.BUILD_RELEASE == 'true' && 'release' || 'debug' }}
with:
path: "${{ env.PREFIX }}/${{ env.MODE }}/bundle/*/*"
@ -253,13 +249,11 @@ jobs:
- name: Run e2e tests (linux only)
if: matrix.os == 'ubuntu-latest'
run: |
cargo install tauri-driver@0.1.3
source .env.${{ env.BUILD_RELEASE == 'true' && 'production' || 'development' }}
export VITE_KC_API_BASE_URL
cargo install tauri-driver
xvfb-run yarn test:e2e:tauri
env:
E2E_APPLICATION: "./src-tauri/target/${{ env.BUILD_RELEASE == 'true' && 'release' || 'debug' }}/zoo-modeling-app"
KITTYCAD_API_TOKEN: ${{ env.BUILD_RELEASE == 'true' && secrets.KITTYCAD_API_TOKEN || secrets.KITTYCAD_API_TOKEN_DEV }}
E2E_APPLICATION: "./src-tauri/target/${{ env.BUILD_RELEASE == 'true' && 'release' || 'debug' }}/kittycad-modeling"
KITTYCAD_API_TOKEN: ${{ secrets.KITTYCAD_API_TOKEN }}
publish-apps-release:
@ -272,24 +266,26 @@ jobs:
PUB_DATE: ${{ github.event_name == 'release' && github.event.release.created_at || github.event.repository.updated_at }}
NOTES: ${{ github.event_name == 'release' && github.event.release.body || format('Nightly build, commit {0}', github.sha) }}
BUCKET_DIR: ${{ github.event_name == 'release' && 'dl.kittycad.io/releases/modeling-app' || 'dl.kittycad.io/releases/modeling-app/nightly' }}
WEBSITE_DIR: ${{ github.event_name == 'release' && 'dl.zoo.dev/releases/modeling-app' || 'dl.zoo.dev/releases/modeling-app/nightly' }}
steps:
- uses: actions/download-artifact@v3
- name: Generate the update static endpoint
run: |
ls -l artifact/*/*oo*
ls -l artifact/*/*itty*
DARWIN_SIG=`cat artifact/macos/*.app.tar.gz.sig`
LINUX_SIG=`cat artifact/appimage/*.AppImage.tar.gz.sig`
WINDOWS_SIG=`cat artifact/msi/*.msi.zip.sig`
RELEASE_DIR=https://${WEBSITE_DIR}/${VERSION}
RELEASE_DIR=https://${BUCKET_DIR}/${VERSION}
jq --null-input \
--arg version "${VERSION}" \
--arg pub_date "${PUB_DATE}" \
--arg notes "${NOTES}" \
--arg darwin_sig "$DARWIN_SIG" \
--arg darwin_url "$RELEASE_DIR/macos/Zoo%20Modeling%20App.app.tar.gz" \
--arg darwin_url "$RELEASE_DIR/macos/KittyCAD%20Modeling.app.tar.gz" \
--arg linux_sig "$LINUX_SIG" \
--arg linux_url "$RELEASE_DIR/appimage/kittycad-modeling_${VERSION_NO_V}_amd64.AppImage.tar.gz" \
--arg windows_sig "$WINDOWS_SIG" \
--arg windows_url "$RELEASE_DIR/msi/Zoo%20Modeling%20App_${VERSION_NO_V}_x64_en-US.msi.zip" \
--arg windows_url "$RELEASE_DIR/msi/KittyCAD%20Modeling_${VERSION_NO_V}_x64_en-US.msi.zip" \
'{
"version": $version,
"pub_date": $pub_date,
@ -303,6 +299,10 @@ jobs:
"signature": $darwin_sig,
"url": $darwin_url
},
"linux-x86_64": {
"signature": $linux_sig,
"url": $linux_url
},
"windows-x86_64": {
"signature": $windows_sig,
"url": $windows_url
@ -313,13 +313,14 @@ jobs:
- name: Generate the download static endpoint
run: |
RELEASE_DIR=https://${WEBSITE_DIR}/${VERSION}
RELEASE_DIR=https://${BUCKET_DIR}/${VERSION}
jq --null-input \
--arg version "${VERSION}" \
--arg pub_date "${PUB_DATE}" \
--arg notes "${NOTES}" \
--arg darwin_url "$RELEASE_DIR/dmg/Zoo%20Modeling%20App_${VERSION_NO_V}_universal.dmg" \
--arg windows_url "$RELEASE_DIR/msi/Zoo%20Modeling%20App_${VERSION_NO_V}_x64_en-US.msi" \
--arg darwin_url "$RELEASE_DIR/dmg/KittyCAD%20Modeling_${VERSION_NO_V}_universal.dmg" \
--arg linux_url "$RELEASE_DIR/appimage/kittycad-modeling_${VERSION_NO_V}_amd64.AppImage" \
--arg windows_url "$RELEASE_DIR/msi/KittyCAD%20Modeling_${VERSION_NO_V}_x64_en-US.msi" \
'{
"version": $version,
"pub_date": $pub_date,
@ -328,6 +329,9 @@ jobs:
"dmg-universal": {
"url": $darwin_url
},
"appimage-x86_64": {
"url": $linux_url
},
"msi-x86_64": {
"url": $windows_url
}
@ -336,62 +340,37 @@ jobs:
cat last_download.json
- name: Authenticate to Google Cloud
uses: 'google-github-actions/auth@v2.1.2'
uses: 'google-github-actions/auth@v2.0.0'
with:
credentials_json: '${{ secrets.GOOGLE_CLOUD_DL_SA }}'
- name: Set up Google Cloud SDK
uses: google-github-actions/setup-gcloud@v2.1.0
uses: google-github-actions/setup-gcloud@v1.1.1
with:
project_id: kittycadapi
- name: Upload release files to public bucket
uses: google-github-actions/upload-cloud-storage@v2.1.0
uses: google-github-actions/upload-cloud-storage@v1.0.3
with:
path: artifact
glob: '*/Zoo*'
glob: '*/*itty*'
parent: false
destination: ${{ env.BUCKET_DIR }}/${{ env.VERSION }}
- name: Upload update endpoint to public bucket
uses: google-github-actions/upload-cloud-storage@v2.1.0
uses: google-github-actions/upload-cloud-storage@v1.0.3
with:
path: last_update.json
destination: ${{ env.BUCKET_DIR }}
- name: Upload download endpoint to public bucket
uses: google-github-actions/upload-cloud-storage@v2.1.0
uses: google-github-actions/upload-cloud-storage@v1.0.3
with:
path: last_download.json
destination: ${{ env.BUCKET_DIR }}
- name: Upload release files to Github
if: ${{ github.event_name == 'release' }}
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@v1
with:
files: 'artifact/*/Zoo*'
announce_release:
needs: [publish-apps-release]
runs-on: ubuntu-latest
if: github.event_name == 'release'
steps:
- name: Check out code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install requests
- name: Announce Release
env:
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
RELEASE_VERSION: ${{ github.event.release.tag_name }}
RELEASE_BODY: ${{ github.event.release.body}}
run: python public/announce_release.py
files: artifact/*/*itty*

View File

@ -1,62 +0,0 @@
on:
push:
branches:
- main
paths:
- .github/workflows/generate-website-docs.yml
- 'docs/**'
pull_request:
paths:
- .github/workflows/generate-website-docs.yml
workflow_dispatch:
name: generate-website-docs
concurrency:
group: docs-${{ github.ref }}
cancel-in-progress: true
jobs:
generate-website-docs:
name: generate-website-docs
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/create-github-app-token@v1
id: app-token
with:
# required
app-id: ${{ secrets.GH_ORG_APP_ID }}
private-key: ${{ secrets.GH_ORG_APP_PRIVATE_KEY }}
owner: ${{ github.repository_owner }}
# Checkout the docs repo since we will want to update the files there.
- uses: actions/checkout@v4
with:
repository: 'kittycad/documentation'
path: 'documentation'
token: ${{ steps.app-token.outputs.token }}
- name: move docs to docs
shell: bash
run: |
mkdir -p documentation/content/pages/docs/kcl/
# cleanup old
rm -rf documentation/content/pages/docs/kcl/*.md
# move new
mv -f docs/kcl/*.md documentation/content/pages/docs/kcl/
- name: commit the changes in the docs repo
shell: bash
run: |
cd documentation
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git add .
git commit -am "YOYO NEW KCL DOCS!!" || exit 0
git fetch origin
git rebase origin/main || exit 0
export NEW_BRANCH="update-kcl-docs"
git checkout -b "$NEW_BRANCH"
git push -f origin "$NEW_BRANCH"
gh pr create --title "Update KCL docs" \
--body "Updating the generated kcl docs cc @jessfraz @franknoirot merge this" \
--head "$NEW_BRANCH" \
--base main || true
env:
GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}

View File

@ -4,26 +4,16 @@ on:
branches: [ main ]
pull_request:
branches: [ main ]
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
permissions:
contents: write
pull-requests: write
jobs:
playwright-ubuntu:
timeout-minutes: 60
runs-on: ubuntu-latest-8-cores
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'yarn'
- uses: KittyCAD/action-install-cli@main
- name: Install dependencies
run: yarn
- name: Install Playwright Browsers
@ -43,7 +33,6 @@ jobs:
env:
CI: true
token: ${{ secrets.KITTYCAD_API_TOKEN_DEV }}
snapshottoken: ${{ secrets.KITTYCAD_API_TOKEN }}
- uses: actions/upload-artifact@v3
if: always()
with:
@ -88,7 +77,8 @@ jobs:
playwright-macos:
timeout-minutes: 60
runs-on: macos-14
runs-on: macos-latest
needs: playwright-ubuntu
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4

View File

@ -1,21 +0,0 @@
[sources.github-actions-file]
type = "file"
data_dir = "/tmp/vector"
include = ["/tmp/github-actions.log"]
# Modify the logs to include the action name.
[transforms.add-action-name]
type = "remap"
inputs = [ "github-actions-file" ]
source = '''
.action = "GITHUB_WORKFLOW"
.repo = "GITHUB_REPOSITORY"
.sha = "GITHUB_SHA"
.ref = "GITHUB_REF_NAME"
'''
[sinks.axiom]
type = "axiom"
inputs = ["add-action-name"]
token = "GH_ACTIONS_AXIOM_TOKEN"
dataset = "github-actions"

12
.gitignore vendored
View File

@ -33,23 +33,11 @@ src/wasm-lib/bindings
src/wasm-lib/kcl/bindings
public/wasm_lib_bg.wasm
src/wasm-lib/lcov.info
src/wasm-lib/grackle/test_json_output
e2e/playwright/playwright-secrets.env
e2e/playwright/temp1.png
e2e/playwright/temp2.png
# exports from snapshot-tests.spec.ts "exports of each format should work"
e2e/playwright/export-snapshots/*
!e2e/playwright/export-snapshots/*.png
/test-results/
/playwright-report/
/blob-report/
/playwright/.cache/
## generated files
src/**/*.typegen.ts
src/wasm-lib/grackle/stdlib_cube_partial.json

View File

@ -10,4 +10,4 @@ src/wasm-lib/kcl/bindings
e2e/playwright/export-snapshots
# XState generated files
src/machines/**.typegen.ts
src/machines/modelingMachine.typegen.ts

View File

@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2023 The Zoo Authors
Copyright (c) 2023 The KittyCAD Authors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -1,17 +1,17 @@
![Zoo Modeling App](/public/zma-logomark-outlined.png)
![KittyCAD Modeling App](/public/kcma-logomark.png)
## Zoo Modeling App
## KittyCAD Modeling App
live at [app.zoo.dev](https://app.zoo.dev/)
live at [app.kittycad.io](https://app.kittycad.io/)
A CAD application from the future, brought to you by the [Zoo team](https://zoo.dev).
A CAD application from the future, brought to you by the [KittyCAD team](https://kittycad.io).
Modeling App is our take on what a modern modelling experience can be. It is applying several lessons learned in the decades since most major CAD tools came into existence:
The KittyCAD modeling app is our take on what a modern modelling experience can be. It is applying several lessons learned in the decades since most major CAD tools came into existence:
- All artifacts—including parts and assemblies—should be represented as human-readable code. At the end of the day, your CAD project should be "plain text"
- This makes version control—which is a solved problem in software engineering—trivial for CAD
- All GUI (or point-and-click) interactions should be actions performed on this code representation under the hood
- This unlocks a hybrid approach to modeling. Whether you point-and-click as you always have or you write your own KCL code, you are performing the same action in Modeling App
- This unlocks a hybrid approach to modeling. Whether you point-and-click as you always have or you write your own KCL code, you are performing the same action in KittyCAD Modeling App
- Everything graphics _has_ to be built for the GPU
- Most CAD applications have had to retrofit support for GPUs, but our geometry engine is made for GPUs (primarily Nvidia's Vulkan), getting the order of magnitude rendering performance boost with it
- Make the resource-intensive pieces of an application auto-scaling
@ -19,9 +19,9 @@ Modeling App is our take on what a modern modelling experience can be. It is app
We are excited about what a small team of people could build in a short time with our API. We welcome you to try our API, build your own applications, or contribute to ours!
Modeling App is a _hybrid_ user interface for CAD modeling. You can point-and-click to design parts (and soon assemblies), but everything you make is really just [`kcl` code](https://github.com/KittyCAD/kcl-experiments) under the hood. All of your CAD models can be checked into source control such as GitHub and responsibly versioned, rolled back, and more.
KittyCAD Modeling App is a _hybrid_ user interface for CAD modeling. You can point-and-click to design parts (and soon assemblies), but everything you make is really just [`kcl` code](https://github.com/KittyCAD/kcl-experiments) under the hood. All of your CAD models can be checked into source control such as GitHub and responsibly versioned, rolled back, and more.
The 3D view in Modeling App is just a video stream from our hosted geometry engine. The app sends new modeling commands to the engine via WebSockets, which returns back video frames of the view within the engine.
The 3D view in KittyCAD Modeling App is just a video stream from our hosted geometry engine. The app sends new modeling commands to the engine via WebSockets, which returns back video frames of the view within the engine.
## Tools
@ -94,6 +94,7 @@ For running the rust (not tauri rust though) only, you can
cd src/wasm-lib
cargo test
```
but you will need to have install ffmpeg prior to.
## Tauri
@ -136,12 +137,7 @@ Before you submit a contribution PR to this repo, please ensure that:
VERSION=x.y.z yarn run bump-jsons
```
Alternatively you can try the experimental `make-release.sh` bash script that will create the branch with the updated json files for you.
run `./make-release.sh` for a patch update
run `./make-release.sh "minor"` for minor
run `./make-release.sh "major"` for major
The PR may serve as a place to discuss the human-readable changelog and extra QA. A quick way of getting PR's merged since the last bump is to [use this PR filter](https://github.com/KittyCAD/modeling-app/pulls?q=is%3Apr+sort%3Aupdated-desc+is%3Amerged+), open up the browser console and paste in the following
The PR may serve as a place to discuss the human-readable changelog and extra QA. A quick way of getting PR's merged since the last bump is to [use this PR filter](https://github.com/KittyCAD/modeling-app/pulls?q=is%3Apr+sort%3Aupdated-desc+is%3Amerged+), open up the browser console and past in the following
```typescript
console.log(
@ -187,9 +183,9 @@ For more information on fuzzing you can check out
First time running plawright locally, you'll need to add the secrets file
```bash
touch ./e2e/playwright/playwright-secrets.env
printf 'token="your-token"\nsnapshottoken="your-snapshot-token"' > ./e2e/playwright/playwright-secrets.env
echo 'token="your-token"' > ./e2e/playwright/playwright-secrets.env
```
then replace "your-token" with a dev token from dev.zoo.dev/account/api-tokens
then replace "your-token" with a dev token from dev.kittycad.io/account/api-tokens
then:
run playwright

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 207 KiB

View File

@ -1,20 +0,0 @@
---
title: "KCL Known Issues"
excerpt: "Known issues with the KCL standard library for the Zoo Modeling App."
layout: manual
---
The following are bugs that are not in modeling-app or kcl itself. These bugs
once fixed in engine will just start working here with no language changes.
- **Sketch on Face**: If your sketch is outside the edges of the face (on which you
are sketching) you will get multiple models returned instead of one single
model for that sketch and its underlying 3D object.
If you see a red line around your model, it means this is happening.
- **Import**: Right now you can import a file, even if that file has brep data
you cannot edit it, after v1, the engine will account for this. You also cannot
currently move or transform the imported objects at all, once we have assemblies
this will work.
- **Fillets**: Fillets cannot intersect, you will get an error. Only simple fillet cases work currently.

View File

@ -1,34 +0,0 @@
---
title: "abs"
excerpt: "Computes the absolute value of a number."
layout: manual
---
Computes the absolute value of a number.
```js
abs(num: number) -> number
```
### Tags
* `math`
### Examples
```js
const myVar = abs(-4)
```
### Arguments
* `num`: `number` (REQUIRED)
### Returns
`number`

View File

@ -1,34 +0,0 @@
---
title: "acos"
excerpt: "Computes the arccosine of a number (in radians)."
layout: manual
---
Computes the arccosine of a number (in radians).
```js
acos(num: number) -> number
```
### Tags
* `math`
### Examples
```js
const myVar = acos(0.5)
```
### Arguments
* `num`: `number` (REQUIRED)
### Returns
`number`

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,34 +0,0 @@
---
title: "asin"
excerpt: "Computes the arcsine of a number (in radians)."
layout: manual
---
Computes the arcsine of a number (in radians).
```js
asin(num: number) -> number
```
### Tags
* `math`
### Examples
```js
const myVar = asin(0.5)
```
### Arguments
* `num`: `number` (REQUIRED)
### Returns
`number`

View File

@ -1,34 +0,0 @@
---
title: "atan"
excerpt: "Computes the arctangent of a number (in radians)."
layout: manual
---
Computes the arctangent of a number (in radians).
```js
atan(num: number) -> number
```
### Tags
* `math`
### Examples
```js
const myVar = atan(1.0)
```
### Arguments
* `num`: `number` (REQUIRED)
### Returns
`number`

File diff suppressed because one or more lines are too long

View File

@ -1,34 +0,0 @@
---
title: "ceil"
excerpt: "Computes the smallest integer greater than or equal to a number."
layout: manual
---
Computes the smallest integer greater than or equal to a number.
```js
ceil(num: number) -> number
```
### Tags
* `math`
### Examples
```js
const myVar = ceil(4.5)
```
### Arguments
* `num`: `number` (REQUIRED)
### Returns
`number`

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,34 +0,0 @@
---
title: "cos"
excerpt: "Computes the cosine of a number (in radians)."
layout: manual
---
Computes the cosine of a number (in radians).
```js
cos(num: number) -> number
```
### Tags
* `math`
### Examples
```js
const anotherVar = cos(2 * pi())
```
### Arguments
* `num`: `number` (REQUIRED)
### Returns
`number`

View File

@ -1,33 +0,0 @@
---
title: "e"
excerpt: "Return the value of Eulers number `e`."
layout: manual
---
Return the value of Eulers number `e`.
```js
e() -> number
```
### Tags
* `math`
### Examples
```js
const myVar = e()
```
### Arguments
### Returns
`number`

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,34 +0,0 @@
---
title: "floor"
excerpt: "Computes the largest integer less than or equal to a number."
layout: manual
---
Computes the largest integer less than or equal to a number.
```js
floor(num: number) -> number
```
### Tags
* `math`
### Examples
```js
const myVar = floor(4.5)
```
### Arguments
* `num`: `number` (REQUIRED)
### Returns
`number`

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,136 +0,0 @@
---
title: "import"
excerpt: "Import a CAD file."
layout: manual
---
Import a CAD file.
For formats lacking unit data (STL, OBJ, PLY), the default import unit is millimeters. Otherwise you can specify the unit by passing in the options parameter. If you import a gltf file, we will try to find the bin file and import it as well.
Import paths are relative to the current project directory. This only works in the desktop app not in browser.
```js
import(file_path: String, options?: ImportFormat) -> ImportedGeometry
```
### Examples
```js
const model = import("thing.obj")
```
```js
const model = import("cube.obj", { type: "obj", units: "m" })
```
```js
const model = import("my_model.gltf")
```
```js
const model = import("my_model.sldprt")
```
```js
const model = import("my_model.step")
```
### Arguments
* `file_path`: `String` (REQUIRED)
* `options`: `ImportFormat` - Import format specifier (OPTIONAL)
```js
{
type: "fbx",
} |
{
type: "gltf",
} |
{
// Co-ordinate system of input data. Defaults to the [KittyCAD co-ordinate system.
coords: {
// Axis the front face of a model looks along.
forward: {
// Axis specifier.
axis: "y" | "z",
// Specifies which direction the axis is pointing.
direction: "positive" | "negative",
},
// Axis pointing up and away from a model.
up: {
// Axis specifier.
axis: "y" | "z",
// Specifies which direction the axis is pointing.
direction: "positive" | "negative",
},
},
type: "obj",
// The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters.
units: "cm" | "ft" | "in" | "m" | "mm" | "yd",
} |
{
// Co-ordinate system of input data. Defaults to the [KittyCAD co-ordinate system.
coords: {
// Axis the front face of a model looks along.
forward: {
// Axis specifier.
axis: "y" | "z",
// Specifies which direction the axis is pointing.
direction: "positive" | "negative",
},
// Axis pointing up and away from a model.
up: {
// Axis specifier.
axis: "y" | "z",
// Specifies which direction the axis is pointing.
direction: "positive" | "negative",
},
},
type: "ply",
// The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters.
units: "cm" | "ft" | "in" | "m" | "mm" | "yd",
} |
{
type: "sldprt",
} |
{
type: "step",
} |
{
// Co-ordinate system of input data. Defaults to the [KittyCAD co-ordinate system.
coords: {
// Axis the front face of a model looks along.
forward: {
// Axis specifier.
axis: "y" | "z",
// Specifies which direction the axis is pointing.
direction: "positive" | "negative",
},
// Axis pointing up and away from a model.
up: {
// Axis specifier.
axis: "y" | "z",
// Specifies which direction the axis is pointing.
direction: "positive" | "negative",
},
},
type: "stl",
// The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters.
units: "cm" | "ft" | "in" | "m" | "mm" | "yd",
}
```
### Returns
`ImportedGeometry` - Data for an imported geometry.
```js
{
// The ID of the imported geometry.
id: uuid,
// The original file paths.
value: [string],
}
```

View File

@ -1,79 +0,0 @@
---
title: "KCL Standard Library"
excerpt: "Documentation for the KCL standard library for the Zoo Modeling App."
layout: manual
---
## Table of Contents
* [Types](kcl/types)
* [Known Issues](kcl/KNOWN-ISSUES)
* [`abs`](kcl/abs)
* [`acos`](kcl/acos)
* [`angleToMatchLengthX`](kcl/angleToMatchLengthX)
* [`angleToMatchLengthY`](kcl/angleToMatchLengthY)
* [`angledLine`](kcl/angledLine)
* [`angledLineOfXLength`](kcl/angledLineOfXLength)
* [`angledLineOfYLength`](kcl/angledLineOfYLength)
* [`angledLineThatIntersects`](kcl/angledLineThatIntersects)
* [`angledLineToX`](kcl/angledLineToX)
* [`angledLineToY`](kcl/angledLineToY)
* [`arc`](kcl/arc)
* [`asin`](kcl/asin)
* [`atan`](kcl/atan)
* [`bezierCurve`](kcl/bezierCurve)
* [`ceil`](kcl/ceil)
* [`circle`](kcl/circle)
* [`close`](kcl/close)
* [`cos`](kcl/cos)
* [`e`](kcl/e)
* [`extrude`](kcl/extrude)
* [`fillet`](kcl/fillet)
* [`floor`](kcl/floor)
* [`getEdge`](kcl/getEdge)
* [`getExtrudeWallTransform`](kcl/getExtrudeWallTransform)
* [`getNextAdjacentEdge`](kcl/getNextAdjacentEdge)
* [`getOppositeEdge`](kcl/getOppositeEdge)
* [`getPreviousAdjacentEdge`](kcl/getPreviousAdjacentEdge)
* [`helix`](kcl/helix)
* [`hole`](kcl/hole)
* [`import`](kcl/import)
* [`lastSegX`](kcl/lastSegX)
* [`lastSegY`](kcl/lastSegY)
* [`legAngX`](kcl/legAngX)
* [`legAngY`](kcl/legAngY)
* [`legLen`](kcl/legLen)
* [`line`](kcl/line)
* [`lineTo`](kcl/lineTo)
* [`ln`](kcl/ln)
* [`log`](kcl/log)
* [`log10`](kcl/log10)
* [`log2`](kcl/log2)
* [`max`](kcl/max)
* [`min`](kcl/min)
* [`patternCircular2d`](kcl/patternCircular2d)
* [`patternCircular3d`](kcl/patternCircular3d)
* [`patternLinear2d`](kcl/patternLinear2d)
* [`patternLinear3d`](kcl/patternLinear3d)
* [`pi`](kcl/pi)
* [`pow`](kcl/pow)
* [`revolve`](kcl/revolve)
* [`segAng`](kcl/segAng)
* [`segEndX`](kcl/segEndX)
* [`segEndY`](kcl/segEndY)
* [`segLen`](kcl/segLen)
* [`sin`](kcl/sin)
* [`sqrt`](kcl/sqrt)
* [`startProfileAt`](kcl/startProfileAt)
* [`startSketchAt`](kcl/startSketchAt)
* [`startSketchOn`](kcl/startSketchOn)
* [`tan`](kcl/tan)
* [`tangentialArc`](kcl/tangentialArc)
* [`tangentialArcTo`](kcl/tangentialArcTo)
* [`tau`](kcl/tau)
* [`toDegrees`](kcl/toDegrees)
* [`toRadians`](kcl/toRadians)
* [`xLine`](kcl/xLine)
* [`xLineTo`](kcl/xLineTo)
* [`yLine`](kcl/yLine)
* [`yLineTo`](kcl/yLineTo)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,35 +0,0 @@
---
title: "legAngX"
excerpt: "Returns the angle of the given leg for x."
layout: manual
---
Returns the angle of the given leg for x.
```js
legAngX(hypotenuse: number, leg: number) -> number
```
### Tags
* `utilities`
### Examples
```js
legAngX(5, 3)
```
### Arguments
* `hypotenuse`: `number` (REQUIRED)
* `leg`: `number` (REQUIRED)
### Returns
`number`

View File

@ -1,35 +0,0 @@
---
title: "legAngY"
excerpt: "Returns the angle of the given leg for y."
layout: manual
---
Returns the angle of the given leg for y.
```js
legAngY(hypotenuse: number, leg: number) -> number
```
### Tags
* `utilities`
### Examples
```js
legAngY(5, 3)
```
### Arguments
* `hypotenuse`: `number` (REQUIRED)
* `leg`: `number` (REQUIRED)
### Returns
`number`

View File

@ -1,35 +0,0 @@
---
title: "legLen"
excerpt: "Returns the length of the given leg."
layout: manual
---
Returns the length of the given leg.
```js
legLen(hypotenuse: number, leg: number) -> number
```
### Tags
* `utilities`
### Examples
```js
legLen(5, 3)
```
### Arguments
* `hypotenuse`: `number` (REQUIRED)
* `leg`: `number` (REQUIRED)
### Returns
`number`

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,34 +0,0 @@
---
title: "ln"
excerpt: "Computes the natural logarithm of the number."
layout: manual
---
Computes the natural logarithm of the number.
```js
ln(num: number) -> number
```
### Tags
* `math`
### Examples
```js
const myVar = ln(4)
```
### Arguments
* `num`: `number` (REQUIRED)
### Returns
`number`

View File

@ -1,35 +0,0 @@
---
title: "log"
excerpt: "Computes the logarithm of the number with respect to an arbitrary base."
layout: manual
---
Computes the logarithm of the number with respect to an arbitrary base.
The result might not be correctly rounded owing to implementation details; `log2()` can produce more accurate results for base 2, and `log10()` can produce more accurate results for base 10.
```js
log(num: number, base: number) -> number
```
### Tags
* `math`
### Examples
```js
const myVar = log(4, 2)
```
### Arguments
* `num`: `number` (REQUIRED)
* `base`: `number` (REQUIRED)
### Returns
`number`

View File

@ -1,34 +0,0 @@
---
title: "log10"
excerpt: "Computes the base 10 logarithm of the number."
layout: manual
---
Computes the base 10 logarithm of the number.
```js
log10(num: number) -> number
```
### Tags
* `math`
### Examples
```js
const myVar = log10(4)
```
### Arguments
* `num`: `number` (REQUIRED)
### Returns
`number`

View File

@ -1,34 +0,0 @@
---
title: "log2"
excerpt: "Computes the base 2 logarithm of the number."
layout: manual
---
Computes the base 2 logarithm of the number.
```js
log2(num: number) -> number
```
### Tags
* `math`
### Examples
```js
const myVar = log2(4)
```
### Arguments
* `num`: `number` (REQUIRED)
### Returns
`number`

View File

@ -1,34 +0,0 @@
---
title: "max"
excerpt: "Computes the maximum of the given arguments."
layout: manual
---
Computes the maximum of the given arguments.
```js
max(args: [number]) -> number
```
### Tags
* `math`
### Examples
```js
const myVar = max(4, 5, 6)
```
### Arguments
* `args`: `[number]` (REQUIRED)
### Returns
`number`

View File

@ -1,34 +0,0 @@
---
title: "min"
excerpt: "Computes the minimum of the given arguments."
layout: manual
---
Computes the minimum of the given arguments.
```js
min(args: [number]) -> number
```
### Tags
* `math`
### Examples
```js
const myVar = min(4, 5, 6)
```
### Arguments
* `args`: `[number]` (REQUIRED)
### Returns
`number`

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,33 +0,0 @@
---
title: "pi"
excerpt: "Return the value of `pi`. Archimedes constant (π)."
layout: manual
---
Return the value of `pi`. Archimedes constant (π).
```js
pi() -> number
```
### Tags
* `math`
### Examples
```js
const myVar = pi() * 3.0
```
### Arguments
### Returns
`number`

View File

@ -1,35 +0,0 @@
---
title: "pow"
excerpt: "Computes the number to a power."
layout: manual
---
Computes the number to a power.
```js
pow(num: number, pow: number) -> number
```
### Tags
* `math`
### Examples
```js
const myVar = pow(4, 2)
```
### Arguments
* `num`: `number` (REQUIRED)
* `pow`: `number` (REQUIRED)
### Returns
`number`

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,34 +0,0 @@
---
title: "sin"
excerpt: "Computes the sine of a number (in radians)."
layout: manual
---
Computes the sine of a number (in radians).
```js
sin(num: number) -> number
```
### Tags
* `math`
### Examples
```js
const myVar = sin(2 * pi())
```
### Arguments
* `num`: `number` (REQUIRED)
### Returns
`number`

View File

@ -1,34 +0,0 @@
---
title: "sqrt"
excerpt: "Computes the square root of a number."
layout: manual
---
Computes the square root of a number.
```js
sqrt(num: number) -> number
```
### Tags
* `math`
### Examples
```js
const myVar = sqrt(4)
```
### Arguments
* `num`: `number` (REQUIRED)
### Returns
`number`

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

4709
docs/kcl/std.md Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,34 +0,0 @@
---
title: "tan"
excerpt: "Computes the tangent of a number (in radians)."
layout: manual
---
Computes the tangent of a number (in radians).
```js
tan(num: number) -> number
```
### Tags
* `math`
### Examples
```js
const myVar = tan(2 * pi())
```
### Arguments
* `num`: `number` (REQUIRED)
### Returns
`number`

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,33 +0,0 @@
---
title: "tau"
excerpt: "Return the value of `tau`. The full circle constant (τ). Equal to 2π."
layout: manual
---
Return the value of `tau`. The full circle constant (τ). Equal to 2π.
```js
tau() -> number
```
### Tags
* `math`
### Examples
```js
const myVar = tau()
```
### Arguments
### Returns
`number`

View File

@ -1,34 +0,0 @@
---
title: "toDegrees"
excerpt: "Converts a number from radians to degrees."
layout: manual
---
Converts a number from radians to degrees.
```js
toDegrees(num: number) -> number
```
### Tags
* `math`
### Examples
```js
const myVar = toDegrees(2 * pi())
```
### Arguments
* `num`: `number` (REQUIRED)
### Returns
`number`

View File

@ -1,34 +0,0 @@
---
title: "toRadians"
excerpt: "Converts a number from degrees to radians."
layout: manual
---
Converts a number from degrees to radians.
```js
toRadians(num: number) -> number
```
### Tags
* `math`
### Examples
```js
const myVar = toRadians(180)
```
### Arguments
* `num`: `number` (REQUIRED)
### Returns
`number`

View File

@ -1,8 +1,4 @@
---
title: "KCL Types"
excerpt: "Documentation of types for the KCL standard library for the Zoo Modeling App."
layout: manual
---
# Types
`KCL` defines the following types and keywords the language.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 KiB

Some files were not shown because too many files have changed in this diff Show More