Compare commits
	
		
			4 Commits
		
	
	
		
			v0.17.1
			...
			achalmers/
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 04976d509c | |||
| 185443a963 | |||
| 8a2fb83c11 | |||
| ecd6171882 | 
| @ -1,3 +1,3 @@ | ||||
| [codespell] | ||||
| ignore-words-list: crate,everytime,inout,co-ordinate,ot,nwo,absolutey | ||||
| skip: **/target,node_modules,build,**/Cargo.lock,./docs/kcl/*.md | ||||
| ignore-words-list: crate,everytime | ||||
| skip: **/target,node_modules,build | ||||
|  | ||||
| @ -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= | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -1,2 +1 @@ | ||||
| src/wasm-lib/* | ||||
| *.typegen.ts | ||||
|  | ||||
| @ -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" | ||||
|         } | ||||
|       } | ||||
|  | ||||
							
								
								
									
										85
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -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
									
								
							
							
						
						| @ -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 | ||||
							
								
								
									
										17
									
								
								.github/workflows/cargo-clippy.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -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 }}" | ||||
|  | ||||
							
								
								
									
										41
									
								
								.github/workflows/cargo-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -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 | ||||
|  | ||||
|  | ||||
							
								
								
									
										36
									
								
								.github/workflows/check-exampleKcl.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -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, | ||||
|             }); | ||||
							
								
								
									
										92
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -46,7 +46,6 @@ jobs: | ||||
|           workspaces: './src/wasm-lib' | ||||
|  | ||||
|       - run: yarn build:wasm | ||||
|       - run: yarn xstate:typegen | ||||
|       - run: yarn tsc | ||||
|  | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -187,10 +187,10 @@ jobs: | ||||
|       - 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 +224,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 +240,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,12 +252,12 @@ jobs: | ||||
|       - name: Run e2e tests (linux only) | ||||
|         if: matrix.os == 'ubuntu-latest' | ||||
|         run: | | ||||
|           cargo install tauri-driver@0.1.3 | ||||
|           cargo install tauri-driver | ||||
|           source .env.${{ env.BUILD_RELEASE == 'true' && 'production' || 'development' }} | ||||
|           export VITE_KC_API_BASE_URL | ||||
|           xvfb-run yarn test:e2e:tauri | ||||
|         env: | ||||
|           E2E_APPLICATION: "./src-tauri/target/${{ env.BUILD_RELEASE == 'true' && 'release' || 'debug' }}/zoo-modeling-app" | ||||
|           E2E_APPLICATION: "./src-tauri/target/${{ env.BUILD_RELEASE == 'true' && 'release' || 'debug' }}/kittycad-modeling" | ||||
|           KITTYCAD_API_TOKEN: ${{ env.BUILD_RELEASE == 'true' && secrets.KITTYCAD_API_TOKEN || secrets.KITTYCAD_API_TOKEN_DEV }} | ||||
|  | ||||
|  | ||||
| @ -272,24 +271,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 +304,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 +318,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 +334,9 @@ jobs: | ||||
|                 "dmg-universal": { | ||||
|                   "url": $darwin_url | ||||
|                 }, | ||||
|                 "appimage-x86_64": { | ||||
|                   "url": $linux_url | ||||
|                 }, | ||||
|                 "msi-x86_64": { | ||||
|                   "url": $windows_url | ||||
|                 } | ||||
| @ -336,62 +345,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@v2.0.0 | ||||
|         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@v2.0.0 | ||||
|         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@v2.0.0 | ||||
|         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@v2.0.0 | ||||
|         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* | ||||
|  | ||||
							
								
								
									
										62
									
								
								.github/workflows/generate-website-docs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -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 }} | ||||
|  | ||||
							
								
								
									
										16
									
								
								.github/workflows/playwright.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -4,26 +4,17 @@ 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 | ||||
|     - uses: KittyCAD/action-install-cli@v0.2.16 | ||||
|     - name: Install dependencies | ||||
|       run: yarn | ||||
|     - name: Install Playwright Browsers | ||||
| @ -88,7 +79,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 | ||||
|  | ||||
							
								
								
									
										21
									
								
								.github/workflows/vector.toml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -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" | ||||
							
								
								
									
										17
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -33,23 +33,20 @@ 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 | ||||
| # exports from snapshot-tests.spec.ts | ||||
| e2e/playwright/export-snapshots/*.ply | ||||
| e2e/playwright/export-snapshots/*.obj | ||||
| e2e/playwright/export-snapshots/*.step | ||||
| e2e/playwright/export-snapshots/*.stl | ||||
| e2e/playwright/export-snapshots/*binary.gltf | ||||
| e2e/playwright/export-snapshots/*embedded.gltf | ||||
|  | ||||
|  | ||||
| /test-results/ | ||||
| /playwright-report/ | ||||
| /blob-report/ | ||||
| /playwright/.cache/ | ||||
|  | ||||
|  | ||||
| ## generated files | ||||
| src/**/*.typegen.ts | ||||
|  | ||||
| src/wasm-lib/grackle/stdlib_cube_partial.json | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
							
								
								
									
										10
									
								
								README.md
									
									
									
									
									
								
							
							
						
						| @ -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,7 +183,7 @@ 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"\nsnapshottoken="your-snapshot-token"' > ./e2e/playwright/playwright-secrets2.env | ||||
| ``` | ||||
| then replace "your-token" with a dev token from dev.zoo.dev/account/api-tokens | ||||
|  | ||||
|  | ||||
							
								
								
									
										
											BIN
										
									
								
								app-icon.png
									
									
									
									
									
								
							
							
						
						| Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 207 KiB | 
| @ -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. | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
							
								
								
									
										389
									
								
								docs/kcl/arc.md
									
									
									
									
									
								
							
							
						
						| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -1,33 +0,0 @@ | ||||
| --- | ||||
| title: "e" | ||||
| excerpt: "Return the value of Euler’s number `e`." | ||||
| layout: manual | ||||
| --- | ||||
|  | ||||
| Return the value of Euler’s number `e`. | ||||
|  | ||||
|  | ||||
|  | ||||
| ```js | ||||
| e() -> number | ||||
| ``` | ||||
|  | ||||
| ### Tags | ||||
|  | ||||
| * `math` | ||||
|  | ||||
| ### Examples | ||||
|  | ||||
| ```js | ||||
| const myVar = e() | ||||
| ``` | ||||
|  | ||||
| ### Arguments | ||||
|  | ||||
|  | ||||
| ### Returns | ||||
|  | ||||
| `number` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
							
								
								
									
										540
									
								
								docs/kcl/hole.md
									
									
									
									
									
								
							
							
						
						| @ -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], | ||||
| } | ||||
| ``` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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) | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
							
								
								
									
										369
									
								
								docs/kcl/line.md
									
									
									
									
									
								
							
							
						
						| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
							
								
								
									
										51331
									
								
								docs/kcl/std.json
									
									
									
									
									
								
							
							
						
						
							
								
								
									
										4701
									
								
								docs/kcl/std.md
									
									
									
									
									
										Normal 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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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` | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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. | ||||
|  | ||||
|  | ||||
| Before Width: | Height: | Size: 221 KiB After Width: | Height: | Size: 72 KiB | 
| Before Width: | Height: | Size: 221 KiB After Width: | Height: | Size: 72 KiB | 
							
								
								
									
										2976
									
								
								e2e/playwright/export-snapshots/gltf-standard-2.gltf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								e2e/playwright/export-snapshots/gltf-standard.gltf
									
									
									
									
									
										Normal file
									
								
							
							
						
						| Before Width: | Height: | Size: 221 KiB | 
| Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 60 KiB | 
| Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 60 KiB | 
| Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 60 KiB | 
