diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 431fc60..0000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,68 +0,0 @@ -name: Build - -on: - workflow_dispatch: - pull_request: - push: - branches: - - '**' - -jobs: - native: - strategy: - fail-fast: false - matrix: - # Disabling the linux build for now - # os: [ubuntu-latest, macos-latest, windows-latest] - os: [macos-latest, windows-latest] - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v3 - with: - submodules: true - - - uses: actions/setup-node@v3 - with: - node-version: 18 - - - name: JUCE Linux Dependencies - shell: bash - if: ${{ matrix.os == 'ubuntu-latest' }} - run: | - sudo apt-get update - sudo apt-get install -y freeglut3-dev - sudo apt-get install -y g++ - sudo apt-get install -y libasound2-dev - sudo apt-get install -y libcurl4-openssl-dev - sudo apt-get install -y libfreetype6-dev - sudo apt-get install -y libjack-jackd2-dev - sudo apt-get install -y libx11-dev - sudo apt-get install -y libxcomposite-dev - sudo apt-get install -y libxcursor-dev - sudo apt-get install -y libxinerama-dev - sudo apt-get install -y libxrandr-dev - sudo apt-get install -y mesa-common-dev - - - name: Build - shell: bash - run: | - set -x - set -e - - npm install - npm run build - - - name: Artifact naming - shell: bash - run: | - echo "ARTIFACT_DATESTRING=$(date +'%Y-%m-%d')" >> $GITHUB_ENV - echo "ARTIFACT_OS=$(echo $RUNNER_OS | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV - - - uses: actions/upload-artifact@v3 - with: - name: srvb-${{ env.ARTIFACT_OS }}-${{ env.ARTIFACT_DATESTRING }} - path: | - native/build/scripted/SRVB_artefacts/Release/VST3/ - native/build/scripted/SRVB_artefacts/Release/AU/ - !native/build/scripted/SRVB_artefacts/Release/VST3/*.lib - !native/build/scripted/SRVB_artefacts/Release/VST3/*.exp diff --git a/.gitignore b/.gitignore index 126959e..7792296 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ pnpm-debug.log* lerna-debug.log* # Builds +native node_modules build dist diff --git a/.gitmodules b/.gitmodules index e1c24ee..bd547be 100644 --- a/.gitmodules +++ b/.gitmodules @@ -6,4 +6,5 @@ url = https://github.com/juce-framework/JUCE.git [submodule "choc"] path = native/choc - url = https://github.com/nick-thompson/choc.git + url = https://github.com/cristianvogel/choc + branch = cristians-edits diff --git a/README.md b/README.md index 5b360d9..922266a 100644 --- a/README.md +++ b/README.md @@ -1,93 +1 @@ -# SRVB - -SRVB is a small digital reverb audio plugin (VST3/AU) for MacOS and Windows. - -This project demonstrates one way to write an audio plugin using JavaScript and -familiar web technologies, and while there are several variants on this approach, -it is meant to be both a compelling example and a good starting point for audio -plugins made with a similar architecture. - -## Overview - -The software architecture in this plugin is much like [Tauri](https://tauri.app/) and similar to -[Electron](https://www.electronjs.org/). The user interface is a simple Vite, React, and Tailwind app -at the root of the repository, which is packaged into the plugin app bundle and loaded into a native -webview instance owned by the plugin at runtime. - -The audio processing algorithm in the `dsp/` directory is also written in -JavaScript using [Elementary](https://elementary.audio), and is run in a separate -engine which directs the underlying native plugin audio processing. The native -plugin itself provides the harness for these two frontend JavaScript bundles, -and interfaces with the plugin host (typically a DAW) to coordinate the user -interface and the audio processing loop. - -## Elementary - -If you're new to Elementary Audio, [Elementary](https://elementary.audio) is a JavaScript/C++ library for building audio applications. - -* **Declarative:** Elementary makes it simple to create interactive audio processes through functional, declarative programming. Describe your audio process as a function of your application state, and Elementary will efficiently update the underlying audio engine as necessary. -* **Dynamic:** Most audio processing frameworks and tools facilitate building static processes. But what happens as your audio requirements change throughout the user journey? Elementary is designed to facilitate and adapt to the dynamic nature of modern audio applications. -* **Portable:** By decoupling the JavaScript API from the underlying audio engine (the "what" from the "how"), Elementary enables writing portable applications. Whether the underlying engine is running in the browser, an audio plugin, or an embedded device, the JavaScript layer remains the same. - -Find more in the [Elementary repository on GitHub](https://github.com/elemaudio/elementary) and the documentation [on the website](https://elementary.audio/). - -## Getting Started - -### Dependencies - -Before running the following steps, please make sure you have the following dependencies installed and -available at the command line: - -* [CMake](https://cmake.org/) -* [Node.js](https://nodejs.org/en) -* Bash: the build steps below expect to run scripts in a Bash environment. For Windows machines, consider running the following steps in a Git Bash environment, or with WSL. - -Next, we fetch the SRVB project and its dependencies, - -```bash -# Clone the project with its submodules -git clone --recurse-submodules https://github.com/elemaudio/srvb.git -cd srvb - -# Install npm dependencies -npm install -``` - -### Develop -```bash -npm run dev -``` - -In develop mode, the native plugin is compiled to fetch its JavaScript assets from localhost, where subsequently we -run the Vite dev server to serve those assets. This arrangement enables Vite's hot reloading behavior for developing -the plugin while it's running inside a host. - -### Release -```bash -npm run build -``` - -In release builds, the JavaScript bundles are packaged into the plugin app bundle so that the resulting bundle -is relocatable, thereby enabling distribution to end users. - -### Troubleshooting - -* After a successful build with either `npm run dev` or `npm run build`, you - should have local plugin binaries built and copied into the correct - audio plugin directories on your machine. If you don't see them, look in - `./native/build/scripted/SRVB_artefacts` and copy them manually -* **Note**: the CMake build on Windows attempts to copy the VST3 plugin binary - into `C:\Program Files`, a step that requires admin permissions. Therefore - you should either run your build as an admin, or disable the copy plugin step - in `native/CMakeLists.txt` and manually copy the plugin binary after build. -* **Note**: especially on MacOS, certain plugin hosts such as Ableton Live have - strict security settings that prevent them from recognizing local unsigned - binaries. You'll want to either add a codesign step to your build, or - configure the security settings of your host to address this. - -## License - -[MIT](./LICENSE.md) - -This project also uses [JUCE](https://juce.com/), which is licensed GPLv3. Please consult JUCE's license -agreement if you intend to distribute your own plugin based on this template. +# Under construction diff --git a/dsp/main.js b/dsp/main.js index 7057940..3b89585 100644 --- a/dsp/main.js +++ b/dsp/main.js @@ -2,7 +2,6 @@ import {Renderer, el} from '@elemaudio/core'; import {RefMap} from './RefMap'; import srvb from './srvb'; - // This project demonstrates writing a small FDN reverb effect in Elementary. // // First, we initialize a custom Renderer instance that marshals our instruction @@ -20,7 +19,7 @@ let refs = new RefMap(core); let prevState = null; function shouldRender(prevState, nextState) { - return (prevState === null) || (prevState.sampleRate !== nextState.sampleRate); + return (prevState === null) || (nextState ===null) || (prevState.sampleRate !== nextState.sampleRate); } // The important piece: here we register a state change callback with the native diff --git a/how_to_update_choc.md b/how_to_update_choc.md new file mode 100644 index 0000000..5d0769d --- /dev/null +++ b/how_to_update_choc.md @@ -0,0 +1,166 @@ +Important to update CHOC that is used in the native/choc submodule and also probably in Elementary submodule + +here is copilot guide. + + +cristianvogel: npm command to install everything including git submodules + +GitHub Copilot: ```bash +npm install && git submodule update --init --recursive +``` + +cristianvogel: remove all cache of git submodules + +GitHub Copilot: ```bash +git submodule deinit -f --all && git rm -rf .git/modules +``` + +cristianvogel: fatal: No url found for submodule path 'native/choc' in .gitmodules + + +There is no url registred in .gitmodules file + +GitHub Copilot: To resolve the issue of a missing URL for the submodule path 'native/choc' in the [`.gitmodules`](command:_github.copilot.openRelativePath?%5B%7B%22scheme%22%3A%22file%22%2C%22authority%22%3A%22%22%2C%22path%22%3A%22%2FUsers%2Fcristianvogel%2FDesktop%2FProgramming%2FSRVB-withCablesUI%2Fsrvb-fork%2F.gitmodules%22%2C%22query%22%3A%22%22%2C%22fragment%22%3A%22%22%7D%5D "/Users/cristianvogel/Desktop/Programming/SRVB-withCablesUI/srvb-fork/.gitmodules") file, you need to add the submodule information for 'native/choc' to the [`.gitmodules`](command:_github.copilot.openRelativePath?%5B%7B%22scheme%22%3A%22file%22%2C%22authority%22%3A%22%22%2C%22path%22%3A%22%2FUsers%2Fcristianvogel%2FDesktop%2FProgramming%2FSRVB-withCablesUI%2Fsrvb-fork%2F.gitmodules%22%2C%22query%22%3A%22%22%2C%22fragment%22%3A%22%22%7D%5D "/Users/cristianvogel/Desktop/Programming/SRVB-withCablesUI/srvb-fork/.gitmodules") file. This involves specifying the path and URL of the submodule. Here's how you can do it: + +1. Open the [`.gitmodules`](command:_github.copilot.openRelativePath?%5B%7B%22scheme%22%3A%22file%22%2C%22authority%22%3A%22%22%2C%22path%22%3A%22%2FUsers%2Fcristianvogel%2FDesktop%2FProgramming%2FSRVB-withCablesUI%2Fsrvb-fork%2F.gitmodules%22%2C%22query%22%3A%22%22%2C%22fragment%22%3A%22%22%7D%5D "/Users/cristianvogel/Desktop/Programming/SRVB-withCablesUI/srvb-fork/.gitmodules") file in your editor. +2. Add the following lines to register the 'native/choc' submodule: + +```properties +[submodule "choc"] + path = native/choc + url = <URL_TO_CHOC_GIT_REPOSITORY> +``` + +Replace `<URL_TO_CHOC_GIT_REPOSITORY>` with the actual URL of the 'choc' Git repository. + +3. Save the `.gitmodules` file. +4. Run the following commands in your terminal to synchronize your local configuration: + +```bash +git submodule init +git submodule update +``` + +This will initialize the new submodule and clone it into the specified path. + +cristianvogel: i am trying to remove this submodule referenence but it dosn't seem to de-install + +GitHub Copilot: To remove a submodule reference, such as `elementary` or `juce`, from your Git repository, you need to follow these steps. Let's use `elementary` as an example: + +1. **Delete the submodule entry from [`.gitmodules`](command:_github.copilot.openRelativePath?%5B%7B%22scheme%22%3A%22file%22%2C%22authority%22%3A%22%22%2C%22path%22%3A%22%2FUsers%2Fcristianvogel%2FDesktop%2FProgramming%2FSRVB-withCablesUI%2Fsrvb-fork%2F.gitmodules%22%2C%22query%22%3A%22%22%2C%22fragment%22%3A%22%22%7D%5D "/Users/cristianvogel/Desktop/Programming/SRVB-withCablesUI/srvb-fork/.gitmodules") file**: Open the [`.gitmodules`](command:_github.copilot.openRelativePath?%5B%7B%22scheme%22%3A%22file%22%2C%22authority%22%3A%22%22%2C%22path%22%3A%22%2FUsers%2Fcristianvogel%2FDesktop%2FProgramming%2FSRVB-withCablesUI%2Fsrvb-fork%2F.gitmodules%22%2C%22query%22%3A%22%22%2C%22fragment%22%3A%22%22%7D%5D "/Users/cristianvogel/Desktop/Programming/SRVB-withCablesUI/srvb-fork/.gitmodules") file and remove the section related to `elementary`. + + ```properties + [submodule "elementary"] + path = native/elementary + url = https://github.com/elemaudio/elementary.git + ``` + +2. **Stage the `.gitmodules` changes**: After editing the `.gitmodules` file, stage the changes for commit. + + ```bash + git add .gitmodules + ``` + +3. **Delete the submodule section from [`.git/config`](command:_github.copilot.openRelativePath?%5B%7B%22scheme%22%3A%22file%22%2C%22authority%22%3A%22%22%2C%22path%22%3A%22%2FUsers%2Fcristianvogel%2FDesktop%2FProgramming%2FSRVB-withCablesUI%2Fsrvb-fork%2F.git%2Fconfig%22%2C%22query%22%3A%22%22%2C%22fragment%22%3A%22%22%7D%5D "/Users/cristianvogel/Desktop/Programming/SRVB-withCablesUI/srvb-fork/.git/config")**: Open your [`.git/config`](command:_github.copilot.openRelativePath?%5B%7B%22scheme%22%3A%22file%22%2C%22authority%22%3A%22%22%2C%22path%22%3A%22%2FUsers%2Fcristianvogel%2FDesktop%2FProgramming%2FSRVB-withCablesUI%2Fsrvb-fork%2F.git%2Fconfig%22%2C%22query%22%3A%22%22%2C%22fragment%22%3A%22%22%7D%5D "/Users/cristianvogel/Desktop/Programming/SRVB-withCablesUI/srvb-fork/.git/config") file in a text editor and remove the submodule section related to `elementary`. + + ```ini + [submodule "elementary"] + url = https://github.com/elemaudio/elementary.git + ``` + +4. **Unstage and remove the submodule files**: Run the following commands to unstage the submodule path and then remove the submodule directory from your working directory. + + ```bash + git rm --cached native/elementary + rm -rf native/elementary + ``` + +5. **Remove the submodule's [`.git`](command:_github.copilot.openRelativePath?%5B%7B%22scheme%22%3A%22file%22%2C%22authority%22%3A%22%22%2C%22path%22%3A%22%2FUsers%2Fcristianvogel%2FDesktop%2FProgramming%2FSRVB-withCablesUI%2Fsrvb-fork%2F.git%22%2C%22query%22%3A%22%22%2C%22fragment%22%3A%22%22%7D%5D "/Users/cristianvogel/Desktop/Programming/SRVB-withCablesUI/srvb-fork/.git") directory**: Delete the [`.git`](command:_github.copilot.openRelativePath?%5B%7B%22scheme%22%3A%22file%22%2C%22authority%22%3A%22%22%2C%22path%22%3A%22%2FUsers%2Fcristianvogel%2FDesktop%2FProgramming%2FSRVB-withCablesUI%2Fsrvb-fork%2F.git%22%2C%22query%22%3A%22%22%2C%22fragment%22%3A%22%22%7D%5D "/Users/cristianvogel/Desktop/Programming/SRVB-withCablesUI/srvb-fork/.git") directory located in the submodule's directory. Since you've already removed the directory in the previous step, this is more of a general step if you need to manually remove any leftover [`.git`](command:_github.copilot.openRelativePath?%5B%7B%22scheme%22%3A%22file%22%2C%22authority%22%3A%22%22%2C%22path%22%3A%22%2FUsers%2Fcristianvogel%2FDesktop%2FProgramming%2FSRVB-withCablesUI%2Fsrvb-fork%2F.git%22%2C%22query%22%3A%22%22%2C%22fragment%22%3A%22%22%7D%5D "/Users/cristianvogel/Desktop/Programming/SRVB-withCablesUI/srvb-fork/.git") directories. + +6. **Commit your changes**: Commit the removal of the submodule. + + ```bash + git commit -m "Removed elementary submodule" + ``` + +7. **Delete the submodule's entry from the `.git/modules` directory**: Finally, remove the submodule's data from the `.git/modules` directory. + + ```bash + rm -rf .git/modules/native/elementary + ``` + +Repeat these steps for any other submodule you wish to remove, such as `juce`. Make sure to adjust the paths and names accordingly. + +cristianvogel: how do i specifiy a specific branch and commit for a submodule + +GitHub Copilot: To specify a specific branch and commit for a submodule in Git, follow these steps: + +1. **Navigate to the submodule directory**: First, change your current working directory to the submodule's directory. + + ```bash + cd path/to/submodule + ``` + + Replace `path/to/submodule` with the actual path to your submodule, such as `native/elementary`. + +2. **Checkout the specific branch**: Checkout the branch you want to track in the submodule. + + ```bash + git checkout branch-name + ``` + + Replace `branch-name` with the name of the branch you want to use. + +3. **Pull or reset to the specific commit**: If you want the latest commit from that branch, you can simply pull. However, if you need a specific commit, use `git reset` or `git checkout` to move to that commit. + + - To pull the latest changes (if you're tracking a branch): + + ```bash + git pull + ``` + + - To move to a specific commit: + + ```bash + git reset --hard commit-hash + ``` + + or + + ```bash + git checkout commit-hash + ``` + + Replace `commit-hash` with the hash of the commit you want to use. + +4. **Update the submodule reference in the main project**: After you have checked out the specific branch and commit in the submodule, navigate back to the root of your main project and stage the submodule changes. + + ```bash + cd ../.. + git add path/to/submodule + ``` + + This adds the new state of the submodule to your main project. + +5. **Commit the change**: Commit the update to the submodule reference in your main project. + + ```bash + git commit -m "Update submodule to specific branch and commit" + ``` + +6. **(Optional) Push the changes**: If you want these changes to be reflected in the remote repository, push them. + + ```bash + git push + ``` + +**Note**: If you want to ensure that the submodule is always checked out to a specific branch when others clone or pull from the main repository, you can add the `branch` option to the [`.gitmodules`](command:_github.copilot.openRelativePath?%5B%7B%22scheme%22%3A%22file%22%2C%22authority%22%3A%22%22%2C%22path%22%3A%22%2FUsers%2Fcristianvogel%2FDesktop%2FProgramming%2FSRVB-withCablesUI%2Fsrvb-fork%2F.gitmodules%22%2C%22query%22%3A%22%22%2C%22fragment%22%3A%22%22%7D%5D "/Users/cristianvogel/Desktop/Programming/SRVB-withCablesUI/srvb-fork/.gitmodules") file. This doesn't lock the submodule to a specific commit but ensures the specified branch is checked out. + +```properties +[submodule "submodule-name"] + path = path/to/submodule + url = https://example.com/submodule.git + branch = branch-name +``` + +Replace `submodule-name`, `path/to/submodule`, `https://example.com/submodule.git`, and `branch-name` with your submodule's name, path, URL, and branch name, respectively. After adding the branch to `.gitmodules`, remember to commit and push the `.gitmodules` file as well. \ No newline at end of file diff --git a/index.html b/index.html index 6c396ed..c9a1df2 100644 --- a/index.html +++ b/index.html @@ -1,12 +1,41 @@ <!DOCTYPE html> <html lang="en"> <head> - <meta charset="UTF-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>Elementary Effects Plugin</title> + <title>Four GL Dials</title> + <style> + body { + margin: 0; + background-color: #000; + color: #fff; + font-family: Helvetica, Arial, sans-serif; + overflow: hidden; /* disable scrolling / rubberband effect on mobile */ + height: 100vh; + } + + canvas { + display: block; + position: absolute; + outline: 0; + } + + * { + /* disable on touch highlights of html elements, especially on mobile! */ + -webkit-tap-highlight-color: transparent; + -webkit-touch-callout: none; + -webkit-user-select: auto; + -moz-user-select: none; + -ms-user-select: none; + user-select: auto; + } + </style> + + <meta charset="utf-8" /> + </head> <body> - <div id="root"></div> - <script type="module" src="/src/main.jsx"></script> + + <div id="app"></div> + <script type="module" src="/src/main.ts"></script> + </body> </html> diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index b25ac63..d1bf4a4 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.15) -project(Elem_SRVB VERSION 0.1.0) +project(NEL_SRVB VERSION 0.1.0) -set(TARGET_NAME SRVB) +set(TARGET_NAME NEL_SRVB) set(ASSETS_DIR ${CMAKE_SOURCE_DIR}/../dist/) option(JUCE_ENABLE_MODULE_SOURCE_GROUPS "Enable Module Source Groups" ON) @@ -12,34 +12,93 @@ option(ELEM_DEV_LOCALHOST "Run against localhost for static assets" OFF) add_subdirectory(juce) add_subdirectory(elementary/runtime) +if (WIN32) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(PC_ARCH "x64") + else() + set(PC_ARCH "x32") + endif() +endif() + juce_add_plugin(${TARGET_NAME} - BUNDLE_ID "audio.elementary.srvb" - COMPANY_NAME "Elementary Audio" - COMPANY_WEBSITE "https://www.elementary.audio" - COMPANY_EMAIL "nick@elementary.audio" - PLUGIN_MANUFACTURER_CODE Elem # A four-character manufacturer id with at least one upper-case character - PLUGIN_CODE Srvb # A unique four-character plugin id with at least one upper-case character + BUNDLE_ID "audio.neverenginelabs.NEL_SRVB" + COMPANY_NAME "NeverEngineLabs" + COMPANY_WEBSITE "https://neverenginelabs.com" + COMPANY_EMAIL "support@neverenginelabs.com" + PLUGIN_MANUFACTURER_CODE NLVB # A four-character manufacturer id with at least one upper-case character + PLUGIN_CODE ShRv # A unique four-character plugin id with at least one upper-case character COPY_PLUGIN_AFTER_BUILD FALSE # We enable this manually below after adding a copy step - APP_SANDBOX_ENABLED TRUE + APP_SANDBOX_ENABLED TRUE APP_SANDBOX_OPTIONS com.apple.security.network.client com.apple.security.files.user-selected.read-write FORMATS AU VST3 # The formats to build. Other valid formats are: AAX Unity VST AU AUv3 - PRODUCT_NAME ${TARGET_NAME}) # The name of the final executable, which can differ from the target name + PRODUCT_NAME "NELShifterMesh_${CMAKE_OSX_ARCHITECTURES}${PC_ARCH}_${BUILD_VERSION}") # The name of the final executable, which can differ from the target name + + # Keyzy Client Library + # Replace KeyzyClientLibraryX.X.X with your actual library version + +set(KeyzyClientLibrary_VERSION "v143") + +if(WIN32) + if(MSVC_VERSION EQUAL 1910) # VS 2017 + set(VS_VERSION "VS2017") + elseif(MSVC_VERSION EQUAL 1920) # VS 2019 + set(VS_VERSION "VS2019") + elseif(MSVC_VERSION GREATER_EQUAL 1930) # VS 2022 or later + set(VS_VERSION "VS2022") + endif() + + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ARCH "64") + else() + set(ARCH "86") + endif() + + # Set MD or MT based on your project requirements + set(MD_MT "MD") + + set(DEBUG_OR_RELEASE "$<$<CONFIG:Debug>:D>$<$<CONFIG:Release>:R>") + + set(LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/KeyzyClientLibrary/${VS_VERSION}/${DEBUG_OR_RELEASE}${ARCH}${MD_MT}_x64_${KeyzyClientLibrary_VERSION}) + + target_link_libraries(${TARGET_NAME} PRIVATE ${LIB_DIR}/Lib/KeyzyClient.lib) + +elseif(APPLE) + if(IOS) + set(LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/KeyzyClientLibrary/XcodeiOS) + else() + # Choose the correct library based on your target architectures + set(LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/KeyzyClientLibrary/XcodeAppleSiliconIntel64) + endif() + + find_library(KEYZY_CLIENT_LIB KeyzyClient PATHS ${LIB_DIR}/Lib) + if(NOT KEYZY_CLIENT_LIB) + message(FATAL_ERROR "KeyzyClient library not found") + endif() + target_link_libraries(${TARGET_NAME} PRIVATE ${KEYZY_CLIENT_LIB}) +endif() + +target_include_directories(${TARGET_NAME} PRIVATE + $<BUILD_INTERFACE:${LIB_DIR}/Include>) # Copy static assets post build if (NOT ELEM_DEV_LOCALHOST) get_target_property(ACTIVE_TARGETS ${TARGET_NAME} JUCE_ACTIVE_PLUGIN_TARGETS) - foreach(ACTIVE_TARGET IN LISTS ACTIVE_TARGETS) - message(STATUS "Adding resource copy step from ${ASSETS_DIR} for ${ACTIVE_TARGET}") - - get_target_property(ARTIFACT_FILE ${ACTIVE_TARGET} JUCE_PLUGIN_ARTEFACT_FILE) - set(RESOURCE_DIR "${ARTIFACT_FILE}/Contents/Resources/") - - add_custom_command(TARGET ${ACTIVE_TARGET} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E rm -rf "${RESOURCE_DIR}/dist" - COMMAND ${CMAKE_COMMAND} -E make_directory "${RESOURCE_DIR}/dist" - COMMAND ${CMAKE_COMMAND} -E copy_directory "${ASSETS_DIR}" "${RESOURCE_DIR}/dist" - VERBATIM) - endforeach() +foreach(ACTIVE_TARGET IN LISTS ACTIVE_TARGETS) + message(STATUS "Adding resource copy step from ${ASSETS_DIR} for ${ACTIVE_TARGET}") + + get_target_property(ARTIFACT_FILE ${ACTIVE_TARGET} JUCE_PLUGIN_ARTEFACT_FILE) + set(RESOURCE_DIR "${ARTIFACT_FILE}/Contents/Resources/") + +add_custom_command(TARGET ${ACTIVE_TARGET} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E rm -rf "${RESOURCE_DIR}/dist" + COMMAND ${CMAKE_COMMAND} -E echo "Removed directory: ${RESOURCE_DIR}/dist" + COMMAND ${CMAKE_COMMAND} -E make_directory "${RESOURCE_DIR}/dist" + COMMAND ${CMAKE_COMMAND} -E echo "Created directory: ${RESOURCE_DIR}/dist" + COMMAND ${CMAKE_COMMAND} -E copy_directory "${ASSETS_DIR}" "${RESOURCE_DIR}/dist" + COMMAND ${CMAKE_COMMAND} -E echo "Copied directory: ${ASSETS_DIR} to ${RESOURCE_DIR}/dist" + VERBATIM) + +endforeach() endif() # Enable copy step @@ -50,35 +109,42 @@ endif() target_sources(${TARGET_NAME} PRIVATE PluginProcessor.cpp - WebViewEditor.cpp) + WebViewEditor.cpp + ) target_include_directories(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/choc/gui - ${CMAKE_CURRENT_SOURCE_DIR}/choc/javascript) + ${CMAKE_CURRENT_SOURCE_DIR}/choc/javascript +) target_compile_features(${TARGET_NAME} PRIVATE cxx_std_17) -target_compile_definitions(${TARGET_NAME} + + target_compile_definitions(${TARGET_NAME} PRIVATE ELEM_DEV_LOCALHOST=${ELEM_DEV_LOCALHOST} JUCE_VST3_CAN_REPLACE_VST2=0 JUCE_USE_CURL=0) -target_link_libraries(${TARGET_NAME} + target_link_libraries(${TARGET_NAME} PRIVATE juce::juce_audio_basics - juce::juce_audio_devices - juce::juce_audio_plugin_client + # juce::juce_audio_devices + # juce::juce_audio_plugin_client juce::juce_audio_processors juce::juce_audio_utils - juce::juce_core - juce::juce_data_structures - juce::juce_dsp - juce::juce_events - juce::juce_graphics - juce::juce_gui_basics + # juce::juce_core + # juce::juce_data_structures + # juce::juce_dsp + # juce::juce_events + # juce::juce_graphics + # juce::juce_gui_basics juce::juce_gui_extra - runtime) + runtime + ) + + + diff --git a/native/PluginProcessor.cpp b/native/PluginProcessor.cpp index 2b7ab85..2de7224 100644 --- a/native/PluginProcessor.cpp +++ b/native/PluginProcessor.cpp @@ -3,19 +3,18 @@ #include <choc_javascript_QuickJS.h> - //============================================================================== // A quick helper for locating bundled asset files juce::File getAssetsDirectory() { #if JUCE_MAC auto assetsDir = juce::File::getSpecialLocation(juce::File::SpecialLocationType::currentApplicationFile) - .getChildFile("Contents/Resources/dist"); + .getChildFile("Contents/Resources/dist"); #elif JUCE_WINDOWS auto assetsDir = juce::File::getSpecialLocation(juce::File::SpecialLocationType::currentExecutableFile) // Plugin.vst3/Contents/<arch>/Plugin.vst3 - .getParentDirectory() // Plugin.vst3/Contents/<arch>/ - .getParentDirectory() // Plugin.vst3/Contents/ - .getChildFile("Resources/dist"); + .getParentDirectory() // Plugin.vst3/Contents/<arch>/ + .getParentDirectory() // Plugin.vst3/Contents/ + .getChildFile("Resources/dist"); #else #error "We only support Mac and Windows here yet." #endif @@ -25,10 +24,11 @@ juce::File getAssetsDirectory() //============================================================================== EffectsPluginProcessor::EffectsPluginProcessor() - : AudioProcessor (BusesProperties() - .withInput ("Input", juce::AudioChannelSet::stereo(), true) - .withOutput ("Output", juce::AudioChannelSet::stereo(), true)) - , jsContext(choc::javascript::createQuickJSContext()) + : AudioProcessor(BusesProperties() + .withInput("Input", juce::AudioChannelSet::stereo(), true) + .withOutput("Output", juce::AudioChannelSet::stereo(), true)), + jsContext(choc::javascript::createQuickJSContext()), + jsContext2(choc::javascript::createQuickJSContext()) { // Initialize parameters from the manifest file #if ELEM_DEV_LOCALHOST @@ -43,55 +43,146 @@ EffectsPluginProcessor::EffectsPluginProcessor() auto manifestFileContents = manifestFile.loadFileAsString().toStdString(); #endif - auto manifest = elem::js::parseJSON(manifestFileContents); + const auto manifest = elem::js::parseJSON(manifestFileContents); if (!manifest.isObject()) return; - auto parameters = manifest.getWithDefault("parameters", elem::js::Array()); + const auto parameters = manifest.getWithDefault("parameters", elem::js::Array()); + createParameters(parameters); - for (size_t i = 0; i < parameters.size(); ++i) { - auto descrip = parameters[i]; + // The view state property has to have some value so that when state is loaded + // from the host, the key exists and is populated. + meshState.insert_or_assign(MESH_STATE_PROPERTY, "{}" ); +} - if (!descrip.isObject()) +EffectsPluginProcessor::~EffectsPluginProcessor() +{ + for (auto &p : getParameters()) + { + p->removeListener(this); + } +} + +//============================================================================== +void EffectsPluginProcessor::createParameters(const std::vector<elem::js::Value> ¶meters) +{ + for (const auto ¶meter : parameters) + { + if (!parameter.isObject()) continue; - auto paramId = descrip.getWithDefault("paramId", elem::js::String("unknown")); - auto name = descrip.getWithDefault("name", elem::js::String("Unknown")); - auto minValue = descrip.getWithDefault("min", elem::js::Number(0)); - auto maxValue = descrip.getWithDefault("max", elem::js::Number(1)); - auto defValue = descrip.getWithDefault("defaultValue", elem::js::Number(0)); + auto paramId = parameter.getWithDefault("paramId", elem::js::String("unknown")); + auto name = parameter.getWithDefault("name", elem::js::String("Unknown")); + auto minValue = parameter.getWithDefault("min", elem::js::Number(0)); + auto maxValue = parameter.getWithDefault("max", elem::js::Number(1)); + auto defaultValue = parameter.getWithDefault("defaultValue", elem::js::Number(0)); + auto step = parameter.getWithDefault("step", elem::js::Number(0)); - auto* p = new juce::AudioParameterFloat( + auto *p = new juce::AudioParameterFloat( juce::ParameterID(paramId, 1), name, - {static_cast<float>(minValue), static_cast<float>(maxValue)}, - defValue - ); + {static_cast<float>(minValue), static_cast<float>(maxValue), static_cast<float>(step)}, + static_cast<float>(defaultValue)); + + // Keep a map from parameter ID to the juce audio parameter + // to avoid looping over the parameter list every time one changes + parameterMap.insert({paramId, p}); p->addListener(this); addParameter(p); // Push a new ParameterReadout onto the list to represent this parameter - paramReadouts.emplace_back(ParameterReadout { static_cast<float>(defValue), false }); + parameterReadouts.emplace_back(ParameterReadout{static_cast<float>(defaultValue), false}); // Update our state object with the default parameter value - state.insert_or_assign(paramId, defValue); + state.insert_or_assign(paramId, defaultValue); } } -EffectsPluginProcessor::~EffectsPluginProcessor() +juce::AudioProcessorEditor *EffectsPluginProcessor::createEditor() { - for (auto& p : getParameters()) + const auto editor = new WebViewEditor(this, getAssetsDirectory(), 905, 600); + + + // ----------- + // semi-online license activation + // ----------- + // From docs: + // You may need to use semi-online activation without giving a serial number. + // First two cases are: + // 1- You may choose to renew weekly the offline license of the users with Semi Online activation. + // You don't want to ask the serial number again and again. + // 2- You may set Offline License Life (recommended) to 30 days. After 30 days, the offline license + // will be INVALID. Then you will need to activate it again without a serial number. + editor->handleUnlockEvent = [this](choc::value::Value &v) { - p->removeListener(this); - } -} + const bool hasSerial = v.hasObjectMember("serial") && v["serial"].isString() && v["serial"].getString().length() > 0; + bool shouldActivate = licenseStatus != Keyzy::LicenseStatus::VALID; -//============================================================================== -juce::AudioProcessorEditor* EffectsPluginProcessor::createEditor() -{ - return new WebViewEditor(this, getAssetsDirectory(), 800, 704); + if (!hasSerial && shouldActivate) + { + licenseStatus = licenseActivator.activateSemiOnline(); + } + else if (hasSerial && shouldActivate && hasSerial) + { + const auto serial = v["serial"].getString(); + licenseStatus = licenseActivator.activateSemiOnline(serial.data()); + } + + sendJavascriptToUI("globalThis.__onUnlock__('" + unlock::errorStatuses(licenseStatus) + "')"); + // also send back the current host info + juce::PluginHostType hostType; + std::string hostDescription = static_cast<const char *>(hostType.getHostDescription()); + sendJavascriptToUI("globalThis.__hostInfo__('" + hostDescription + "')"); + }; + + editor->ready = [this]() + { + // Flush the error log queue to the UI + while (!errorLogQueue.empty()) + { + auto sent = sendJavascriptToUI(errorLogQueue.front()); + errorLogQueue.pop(); + } + dispatchStateChange(); + dispatchMeshStateChange(); + }; + + + // When setting a parameter value, we simply tell the host. This will in turn fire + // a parameterValueChanged event, which will catch and propagate through dispatching + // a state change event + editor->setParameterValue = [this](const std::string ¶mId, float value) + { + if (parameterMap.count(paramId) > 0) + { + parameterMap[paramId]->setValueNotifyingHost(value); + } + }; + + editor->setMeshState = [this](choc::value::Value &v) + { + meshState.insert_or_assign(MESH_STATE_PROPERTY, v.toString()); + dispatchStateChange(); + // dispatchMeshStateChange(); <--- was causing feedback loop! + }; + + + + +#if ELEM_DEV_LOCALHOST + editor->reload = [this]() + { + initJavaScriptEngine(); + initSecondJavaScriptEngine(); + dispatchStateChange(); + dispatchMeshStateChange(); + }; + +#endif + + return editor; } bool EffectsPluginProcessor::hasEditor() const @@ -102,7 +193,7 @@ bool EffectsPluginProcessor::hasEditor() const //============================================================================== const juce::String EffectsPluginProcessor::getName() const { - return JucePlugin_Name; + return "NELShifterMesh"; } bool EffectsPluginProcessor::acceptsMidi() const @@ -122,14 +213,14 @@ bool EffectsPluginProcessor::isMidiEffect() const double EffectsPluginProcessor::getTailLengthSeconds() const { - return 0.0; + return 3.0; } //============================================================================== int EffectsPluginProcessor::getNumPrograms() { - return 1; // NB: some hosts don't cope very well if you tell them there are 0 programs, - // so this should be at least 1, even if you're not really implementing programs. + return 1; // NB: some hosts don't cope very well if you tell them there are 0 programs, + // so this should be at least 1, even if you're not really implementing programs. } int EffectsPluginProcessor::getCurrentProgram() @@ -137,12 +228,12 @@ int EffectsPluginProcessor::getCurrentProgram() return 0; } -void EffectsPluginProcessor::setCurrentProgram (int /* index */) {} -const juce::String EffectsPluginProcessor::getProgramName (int /* index */) { return {}; } -void EffectsPluginProcessor::changeProgramName (int /* index */, const juce::String& /* newName */) {} +void EffectsPluginProcessor::setCurrentProgram(int /* index */) {} +const juce::String EffectsPluginProcessor::getProgramName(int /* index */) { return {}; } +void EffectsPluginProcessor::changeProgramName(int /* index */, const juce::String & /* newName */) {} //============================================================================== -void EffectsPluginProcessor::prepareToPlay (double sampleRate, int samplesPerBlock) +void EffectsPluginProcessor::prepareToPlay(double sampleRate, int samplesPerBlock) { // Some hosts call `prepareToPlay` on the real-time thread, some call it on the main thread. // To address the discrepancy, we check whether anything has changed since our last known @@ -151,11 +242,12 @@ void EffectsPluginProcessor::prepareToPlay (double sampleRate, int samplesPerBlo // // JUCE will synchronously handle the async update if it understands // that we're already on the main thread. - if (sampleRate != lastKnownSampleRate || samplesPerBlock != lastKnownBlockSize) { + if (sampleRate != lastKnownSampleRate || samplesPerBlock != lastKnownBlockSize) + { lastKnownSampleRate = sampleRate; lastKnownBlockSize = samplesPerBlock; - shouldInitialize.store(true); + runtimeSwapRequired.store(true); } // Now that the environment is set up, push our current state @@ -168,42 +260,59 @@ void EffectsPluginProcessor::releaseResources() // spare memory, etc. } -bool EffectsPluginProcessor::isBusesLayoutSupported (const AudioProcessor::BusesLayout& layouts) const +bool EffectsPluginProcessor::isBusesLayoutSupported(const AudioProcessor::BusesLayout &layouts) const { return true; } -void EffectsPluginProcessor::processBlock (juce::AudioBuffer<float>& buffer, juce::MidiBuffer& /* midiMessages */) +void EffectsPluginProcessor::processBlock(juce::AudioBuffer<float> &buffer, juce::MidiBuffer & /* midiMessages */) { + + // If the license is invalid, we clear the buffer and return + if (licenseStatus != Keyzy::LicenseStatus::VALID) + { + buffer.clear(); + return; + } + // Copy the input so that our input and output buffers are distinct scratchBuffer.makeCopyOf(buffer, true); - // Clear the output buffer to prevent any garbage if our runtime isn't ready - buffer.clear(); - // Process the elementary runtime - if (runtime != nullptr) { + if (runtime != nullptr && !runtimeSwapRequired) + + { runtime->process( - const_cast<const float**>(scratchBuffer.getArrayOfWritePointers()), + const_cast<const float **>(scratchBuffer.getArrayOfWritePointers()), getTotalNumInputChannels(), - const_cast<float**>(buffer.getArrayOfWritePointers()), + const_cast<float **>(buffer.getArrayOfWritePointers()), buffer.getNumChannels(), buffer.getNumSamples(), - nullptr - ); + nullptr); + } + else + { + // Clear the output buffer to prevent any garbage if our runtime isn't ready + buffer.clear(); + } + + if (runtimeSwapRequired) + { + shouldInitialize.store(true); + triggerAsyncUpdate(); } } -void EffectsPluginProcessor::parameterValueChanged (int parameterIndex, float newValue) +void EffectsPluginProcessor::parameterValueChanged(int parameterIndex, float newValue) { // Mark the updated parameter value in the dirty list - auto& pr = *std::next(paramReadouts.begin(), parameterIndex); + auto &readout = *std::next(parameterReadouts.begin(), parameterIndex); - pr.store({ newValue, true }); + readout.store({newValue, true}); triggerAsyncUpdate(); } -void EffectsPluginProcessor::parameterGestureChanged (int, bool) +void EffectsPluginProcessor::parameterGestureChanged(int, bool) { // Not implemented } @@ -213,33 +322,35 @@ void EffectsPluginProcessor::handleAsyncUpdate() { // First things first, we check the flag to identify if we should initialize the Elementary // runtime and engine. - if (shouldInitialize.exchange(false)) { - // TODO: This is definitely not thread-safe! It could delete a Runtime instance while - // the real-time thread is using it. Depends on when the host will call prepareToPlay. + if (shouldInitialize.exchange(false)) + { runtime = std::make_unique<elem::Runtime<float>>(lastKnownSampleRate, lastKnownBlockSize); initJavaScriptEngine(); + initSecondJavaScriptEngine(); + runtimeSwapRequired.store(false); } // Next we iterate over the current parameter values to update our local state // object, which we in turn dispatch into the JavaScript engine - auto& params = getParameters(); + auto ¶ms = getParameters(); // Reduce over the changed parameters to resolve our updated processor state - for (size_t i = 0; i < paramReadouts.size(); ++i) + for (size_t i = 0; i < parameterReadouts.size(); ++i) { // We atomically exchange an arbitrary value with a dirty flag false, because // we know that the next time we exchange, if the dirty flag is still false, the // value can be considered arbitrary. Only when we exchange and find the dirty flag // true do we consider the value as having been written by the processor since // we last looked. - auto& current = *std::next(paramReadouts.begin(), i); - auto pr = current.exchange({0.0f, false}); + auto ¤t = *std::next(parameterReadouts.begin(), i); + const auto pr = current.exchange({0.0f, false}); if (pr.dirty) { - if (auto* pf = dynamic_cast<juce::AudioParameterFloat*>(params[i])) { + if (const auto *pf = dynamic_cast<juce::AudioParameterFloat *>(params[i])) + { auto paramId = pf->paramID.toStdString(); - state.insert_or_assign(paramId, elem::js::Number(pr.value)); + state.insert_or_assign(paramId, static_cast<elem::js::Number>(pr.value)); } } } @@ -252,183 +363,256 @@ void EffectsPluginProcessor::initJavaScriptEngine() jsContext = choc::javascript::createQuickJSContext(); // Install some native interop functions in our JavaScript environment - jsContext.registerFunction("__postNativeMessage__", [this](choc::javascript::ArgumentList args) { - auto const batch = elem::js::parseJSON(args[0]->toString()); - auto const rc = runtime->applyInstructions(batch); + jsContext.registerFunction(NATIVE_MESSAGE_FUNCTION_NAME, [this](choc::javascript::ArgumentList args) + { + const auto batch = elem::js::parseJSON(args[0]->toString()); + const auto rc = runtime->applyInstructions(batch); if (rc != elem::ReturnCode::Ok()) { dispatchError("Runtime Error", elem::ReturnCode::describe(rc)); } - return choc::value::Value(); - }); - - jsContext.registerFunction("__log__", [this](choc::javascript::ArgumentList args) { - const auto* kDispatchScript = R"script( -(function() { - console.log(...JSON.parse(%)); - return true; -})(); -)script"; - - // Forward logs to the editor if it's available; then logs show up in one place. - // - // If not available, we fall back to std out. - if (auto* editor = static_cast<WebViewEditor*>(getActiveEditor())) { - auto v = choc::value::createEmptyArray(); - - for (size_t i = 0; i < args.numArgs; ++i) { - v.addArrayElement(*args[i]); - } - - auto expr = juce::String(kDispatchScript).replace("%", elem::js::serialize(choc::json::toString(v))).toStdString(); - editor->getWebViewPtr()->evaluateJavascript(expr); - } else { - for (size_t i = 0; i < args.numArgs; ++i) { - DBG(choc::json::toString(*args[i])); - } - } - - return choc::value::Value(); - }); + return choc::value::Value(); }); // A simple shim to write various console operations to our native __log__ handler - jsContext.evaluate(R"shim( -(function() { - if (typeof globalThis.console === 'undefined') { - globalThis.console = { - log(...args) { - __log__('[embedded:log]', ...args); - }, - warn(...args) { - __log__('[embedded:warn]', ...args); - }, - error(...args) { - __log__('[embedded:error]', ...args); - } - }; - } -})(); - )shim"); + jsContext.evaluateExpression(jsFunctions::consoleLogScript); - // Load and evaluate our Elementary js main file -#if ELEM_DEV_LOCALHOST - auto dspEntryFile = juce::URL("http://localhost:5173/dsp.main.js"); - auto dspEntryFileContents = dspEntryFile.readEntireTextStream().toStdString(); -#else - auto dspEntryFile = getAssetsDirectory().getChildFile("dsp.main.js"); + const auto dspEntryFileContents = loadDspEntryFileContents(); - if (!dspEntryFile.existsAsFile()) + if (dspEntryFileContents.has_value()) + { + jsContext.evaluateExpression(dspEntryFileContents.value()); + } + else + { return; - - auto dspEntryFileContents = dspEntryFile.loadFileAsString().toStdString(); -#endif - jsContext.evaluate(dspEntryFileContents); + } // Re-hydrate from current state - const auto* kHydrateScript = R"script( -(function() { - if (typeof globalThis.__receiveHydrationData__ !== 'function') - return false; + const auto expr = serialize(jsFunctions::hydrateScript, runtime->snapshot()); + jsContext.evaluateExpression(expr); +} + +void EffectsPluginProcessor::initSecondJavaScriptEngine() +{ + jsContext2 = choc::javascript::createQuickJSContext(); + + // Install some native interop functions in our JavaScript environment + jsContext2.registerFunction(NATIVE_MESSAGE_FUNCTION_NAME, [this](choc::javascript::ArgumentList args) + { + const auto batch = elem::js::parseJSON(args[0]->toString()); + + // const auto rc = runtime->applyInstructions(batch); + // if (rc != elem::ReturnCode::Ok()) { + // dispatchError("Runtime Error", elem::ReturnCode::describe(rc)); + // } - globalThis.__receiveHydrationData__(%); - return true; -})(); -)script"; + return choc::value::Value(); }); - auto expr = juce::String(kHydrateScript).replace("%", elem::js::serialize(elem::js::serialize(runtime->snapshot()))).toStdString(); - jsContext.evaluate(expr); + + const auto patchEntryFileContents = loadPatchEntryFileContents(); + + if (patchEntryFileContents.has_value()) + { + jsContext2.evaluateExpression(patchEntryFileContents.value()); + } + else + { + return; + } + + } void EffectsPluginProcessor::dispatchStateChange() { - const auto* kDispatchScript = R"script( -(function() { - if (typeof globalThis.__receiveStateChange__ !== 'function') - return false; - - globalThis.__receiveStateChange__(%); - return true; -})(); -)script"; - // Need the double serialize here to correctly form the string script. The first // serialize produces the payload we want, the second serialize ensures we can replace // the % character in the above block and produce a valid javascript expression. auto localState = state; - localState.insert_or_assign("sampleRate", lastKnownSampleRate); - - auto expr = juce::String(kDispatchScript).replace("%", elem::js::serialize(elem::js::serialize(localState))).toStdString(); - + localState.insert_or_assign(SAMPLE_RATE_PROPERTY, lastKnownSampleRate); + const auto expr = serialize(jsFunctions::dispatchScript, localState); // First we try to dispatch to the UI if it's available, because running this step will // just involve placing a message in a queue. - if (auto* editor = static_cast<WebViewEditor*>(getActiveEditor())) { - editor->getWebViewPtr()->evaluateJavascript(expr); + sendJavascriptToUI(expr); + // Next we dispatch to the local engine which will evaluate any necessary JavaScript synchronously + // here on the main thread + try + { + jsContext.evaluateExpression(expr); + } + catch (std::exception &e) + { + dispatchError("DSP JS:", e.what()); } +} +void EffectsPluginProcessor::dispatchMeshStateChange() +{ + // Need the double serialize here to correctly form the string script. The first + // serialize produces the payload we want, the second serialize ensures we can replace + // the % character in the above block and produce a valid javascript expression. + auto localState = meshState; + const auto expr = serialize(jsFunctions::dispatchMeshStateScript, localState); + // First we try to dispatch to the UI if it's available, because running this step will + // just involve placing a message in a queue. + sendJavascriptToUI(expr); // Next we dispatch to the local engine which will evaluate any necessary JavaScript synchronously // here on the main thread - jsContext.evaluate(expr); + try + { + jsContext.evaluateExpression(expr); + } + catch (std::exception &e) + { + dispatchError("DSP JS:", e.what()); + } } -void EffectsPluginProcessor::dispatchError(std::string const& name, std::string const& message) +void EffectsPluginProcessor::dispatchError(std::string const &name, std::string const &message) { - const auto* kDispatchScript = R"script( -(function() { - if (typeof globalThis.__receiveError__ !== 'function') - return false; - - let e = new Error(%); - e.name = @; - - globalThis.__receiveError__(e); - return true; -})(); -)script"; - // Need the serialize here to correctly form the string script. - auto expr = juce::String(kDispatchScript).replace("@", elem::js::serialize(name)).replace("%", elem::js::serialize(message)).toStdString(); + const auto expr = juce::String(jsFunctions::errorScript).replace("@", elem::js::serialize(name)).replace("%", elem::js::serialize(message)).toStdString(); // First we try to dispatch to the UI if it's available, because running this step will // just involve placing a message in a queue. - if (auto* editor = static_cast<WebViewEditor*>(getActiveEditor())) { - editor->getWebViewPtr()->evaluateJavascript(expr); + if (!sendJavascriptToUI(expr)) + { + if (errorLogQueue.size() == MAX_ERROR_LOG_QUEUE_SIZE) + { + errorLogQueue.pop(); + } + errorLogQueue.push(expr); } // Next we dispatch to the local engine which will evaluate any necessary JavaScript synchronously // here on the main thread - jsContext.evaluate(expr); + jsContext.evaluateExpression(expr); +} + +std::optional<std::string> EffectsPluginProcessor::loadDspEntryFileContents() const +{ + // Load and evaluate our Elementary js main file +#if ELEM_DEV_LOCALHOST + auto dspEntryFile = juce::URL("http://localhost:5173/dsp.main.js"); + auto dspEntryFileContents = dspEntryFile.readEntireTextStream().toStdString(); +#else + auto dspEntryFile = getAssetsDirectory().getChildFile(MAIN_DSP_JS_FILE); + + if (!dspEntryFile.existsAsFile()) + return std::nullopt; + + auto dspEntryFileContents = dspEntryFile.loadFileAsString().toStdString(); +#endif + + return dspEntryFileContents; +} + +std::optional<std::string> EffectsPluginProcessor::loadPatchEntryFileContents() const +{ + // Load and evaluate our Elementary js main file +#if ELEM_DEV_LOCALHOST + auto patchEntryFile = juce::URL("http://localhost:5173/patch.main.js"); + auto patchEntryFileContents = patchEntryFile.readEntireTextStream().toStdString(); +#else + auto patchEntryFile = getAssetsDirectory().getChildFile(MAIN_PATCH_JS_FILE); + + if (!patchEntryFile.existsAsFile()) + return std::nullopt; + + auto patchEntryFileContents = patchEntryFile.loadFileAsString().toStdString(); +#endif + + return patchEntryFileContents; +} + + +bool EffectsPluginProcessor::sendJavascriptToUI(const std::string &expr) const +{ + if (const auto *editor = dynamic_cast<WebViewEditor *>(getActiveEditor())) + { + editor->executeJavascript(expr); + return true; + } + return false; +} + +std::string EffectsPluginProcessor::serialize(const std::string &function, const elem::js::Object &data, const juce::String &replacementChar) +{ + return juce::String(function).replace(replacementChar, elem::js::serialize(elem::js::serialize(data))).toStdString(); +} + +std::string EffectsPluginProcessor::serialize(const std::string &function, const choc::value::Value &data, const juce::String &replacementChar) +{ + return juce::String(function).replace(replacementChar, choc::json::toString(data)).toStdString(); } //============================================================================== -void EffectsPluginProcessor::getStateInformation (juce::MemoryBlock& destData) +void EffectsPluginProcessor::getStateInformation(juce::MemoryBlock &destData) { - auto serialized = elem::js::serialize(state); - destData.replaceAll((void *) serialized.c_str(), serialized.size()); + + // serialise the secondary store for meshData + // then insert it into the data to be stored by the host + state.insert_or_assign(MESH_STATE_PROPERTY, meshState.at(MESH_STATE_PROPERTY)); + // seriliase the whole package + const auto serializedState = elem::js::serialize(state); + // stash + destData.replaceAll((void *)serializedState.c_str(), serializedState.size()); + // remove the meshData from the active param state updates + // so the meshData doesn't get sent on every update + state.erase(MESH_STATE_PROPERTY); } -void EffectsPluginProcessor::setStateInformation (const void* data, int sizeInBytes) +void EffectsPluginProcessor::setStateInformation(const void *data, int sizeInBytes) { - try { - auto str = std::string(static_cast<const char*>(data), sizeInBytes); - auto parsed = elem::js::parseJSON(str); + auto parsed = elem::js::parseJSON("{}"); + // restore the data the host stashed previously + const auto jsonString = std::string(static_cast<const char *>(data), sizeInBytes); + // try to deserialise the whole stashed data string + try + { + parsed = elem::js::parseJSON(jsonString); + } + catch (...) + { + dispatchError("Stored data error:", parsed.toString()); + } + + // try to re-assign the local stores from the stashed data + try + { auto o = parsed.getObject(); - for (auto &i: o) { - std::map<std::string, elem::js::Value>::iterator it; - it = state.find(i.first); - if (it != state.end()) { - state.insert_or_assign(i.first, i.second); + for (auto &[key, value] : o) + { + if (key != MESH_STATE_PROPERTY) + { + if (state.count(key) > 0) + { + state.insert_or_assign(key, value); + } + } + else + { + meshState.insert_or_assign(MESH_STATE_PROPERTY, value); } } - } catch(...) { + dispatchStateChange(); + dispatchMeshStateChange(); + } + + catch (...) + { // Failed to parse the incoming state, or the state we did parse was not actually - // an object type. How you handle it is up to you, here we just ignore it + // an object type. How you handle it is up to you. + dispatchError("State Error", "Failed to restore mesh!"); } + + } //============================================================================== // This creates new instances of the plugin.. -juce::AudioProcessor* JUCE_CALLTYPE createPluginFilter() +juce::AudioProcessor *JUCE_CALLTYPE createPluginFilter() { return new EffectsPluginProcessor(); } diff --git a/native/PluginProcessor.h b/native/PluginProcessor.h index d828257..efe4129 100644 --- a/native/PluginProcessor.h +++ b/native/PluginProcessor.h @@ -6,6 +6,7 @@ #include <choc_javascript.h> #include <elem/Runtime.h> +#include <KeyzyLicenseActivator.h> //============================================================================== class EffectsPluginProcessor @@ -14,21 +15,23 @@ class EffectsPluginProcessor private juce::AsyncUpdater { public: + void createParameters(const std::vector<elem::js::Value> ¶meters); + //============================================================================== EffectsPluginProcessor(); ~EffectsPluginProcessor() override; //============================================================================== - juce::AudioProcessorEditor* createEditor() override; + juce::AudioProcessorEditor *createEditor() override; bool hasEditor() const override; //============================================================================== - void prepareToPlay (double sampleRate, int samplesPerBlock) override; + void prepareToPlay(double sampleRate, int samplesPerBlock) override; void releaseResources() override; - bool isBusesLayoutSupported (const juce::AudioProcessor::BusesLayout& layouts) const override; + bool isBusesLayoutSupported(const juce::AudioProcessor::BusesLayout &layouts) const override; - void processBlock (juce::AudioBuffer<float>&, juce::MidiBuffer&) override; + void processBlock(juce::AudioBuffer<float> &, juce::MidiBuffer &) override; //============================================================================== const juce::String getName() const override; @@ -41,55 +44,289 @@ class EffectsPluginProcessor //============================================================================== int getNumPrograms() override; int getCurrentProgram() override; - void setCurrentProgram (int index) override; - const juce::String getProgramName (int index) override; - void changeProgramName (int index, const juce::String& newName) override; + void setCurrentProgram(int index) override; + const juce::String getProgramName(int index) override; + void changeProgramName(int index, const juce::String &newName) override; //============================================================================== - void getStateInformation (juce::MemoryBlock& destData) override; - void setStateInformation (const void* data, int sizeInBytes) override; + void getStateInformation(juce::MemoryBlock &destData) override; + void setStateInformation(const void *data, int sizeInBytes) override; //============================================================================== /** Implement the AudioProcessorParameter::Listener interface. */ - void parameterValueChanged (int parameterIndex, float newValue) override; - void parameterGestureChanged (int parameterIndex, bool gestureIsStarting) override; + void parameterValueChanged(int parameterIndex, float newValue) override; + void parameterGestureChanged(int parameterIndex, bool gestureIsStarting) override; //============================================================================== /** Implement the AsyncUpdater interface. */ void handleAsyncUpdate() override; //============================================================================== + /** Internal helper for initializing the embedded JS engine. */ void initJavaScriptEngine(); + void initSecondJavaScriptEngine(); /** Internal helper for propagating processor state changes. */ void dispatchStateChange(); - void dispatchError(std::string const& name, std::string const& message); + + /** INternal helper for mesh data view state changes */ + void dispatchMeshStateChange(); + + /** error to UI */ + void dispatchError(std::string const &name, std::string const &message); private: + std::string MESH_STATE_PROPERTY = "meshState"; + + std::string MAIN_DSP_JS_FILE = "dsp.main.js"; + + std::string MAIN_PATCH_JS_FILE = "patch.main.js"; + + std::string SAMPLE_RATE_PROPERTY = "sampleRate"; + + std::string NATIVE_MESSAGE_FUNCTION_NAME = "__postNativeMessage__"; + + std::string LOG_FUNCTION_NAME = "__log__"; + + // The maximum number of error messages to keep in the queue + size_t MAX_ERROR_LOG_QUEUE_SIZE = 200; + + std::optional<std::string> loadDspEntryFileContents() const; + + std::optional<std::string> loadPatchEntryFileContents() const; + + /** + * + * @param expr javascript expression to evaluate in the view context + * @return true if the view exists, false if not + */ + bool sendJavascriptToUI(const std::string &expr) const; + + static std::string serialize(const std::string &function, const elem::js::Object &data, const juce::String &replacementChar = "%"); + static std::string serialize(const std::string &function, const choc::value::Value &data, const juce::String &replacementChar = "%"); + //============================================================================== - std::atomic<bool> shouldInitialize { false }; + std::atomic<bool> runtimeSwapRequired{false}; + std::atomic<bool> shouldInitialize{false}; double lastKnownSampleRate = 0; int lastKnownBlockSize = 0; + //===== js stores and context ==// elem::js::Object state; + elem::js::Object meshState; choc::javascript::Context jsContext; + choc::javascript::Context jsContext2; juce::AudioBuffer<float> scratchBuffer; std::unique_ptr<elem::Runtime<float>> runtime; + std::map<std::string, juce::AudioParameterFloat *> parameterMap; + std::queue<std::string> errorLogQueue; + //============================================================================== // A simple "dirty list" abstraction here for propagating realtime parameter // value changes - struct ParameterReadout { + struct ParameterReadout + { float value = 0; bool dirty = false; }; - std::list<std::atomic<ParameterReadout>> paramReadouts; + std::list<std::atomic<ParameterReadout>> parameterReadouts; static_assert(std::atomic<ParameterReadout>::is_always_lock_free); //============================================================================== - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (EffectsPluginProcessor) + // Keyzy License Activator + // Keyzy::ProductData productData{"YOUR_APP_ID", "YOUR_API_KEY", "YOUR_PRODUCT_CODE", "YOUR_CRYPTION_KEY"}; + + Keyzy::ProductData productData // hidden + Keyzy::KeyzyLicenseActivator licenseActivator{productData}; + Keyzy::LicenseStatus licenseStatus = Keyzy::LicenseStatus::NOT_AUTHORIZED; + + //============================================================================== + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(EffectsPluginProcessor) }; + +namespace unlock +{ + inline std::string errorStatuses(Keyzy::LicenseStatus status) + { + switch (status) + { + case Keyzy::LicenseStatus::EXPIRED: + return "Expired"; + + case Keyzy::LicenseStatus::INVALID: + return "Invalid"; + + case Keyzy::LicenseStatus::NOT_AUTHORIZED: + return "Not authorized"; + + case Keyzy::LicenseStatus::SERIAL_INVALID: + return "Serial invalid"; + + case Keyzy::LicenseStatus::PRODUCT_NOT_EXIST: + return "Product does not exist"; + + case Keyzy::LicenseStatus::PRODUCT_NOT_EXIST_FOR_USER: + return "Product does not exist"; + + case Keyzy::LicenseStatus::PRODUCT_NOT_ACTIVE: + return "Product is not active"; + + case Keyzy::LicenseStatus::SKU_NOT_EXIST: + return "SKU does not exist"; + + case Keyzy::LicenseStatus::SKU_NOT_ACTIVE: + return "SKU is not active"; + + case Keyzy::LicenseStatus::REACHED_MAX_NUMBER_OF_HOST: + return "Reached maximum number of host"; + + case Keyzy::LicenseStatus::PRODUCT_NOT_EXIST_FOR_SKU: + return "Product does not exist for this SKU"; + + case Keyzy::LicenseStatus::ACTIVATION_DEACTIVATED: + return "Activation is deactivated"; + + case Keyzy::LicenseStatus::SUBSCRIPTION_LICENSE_EXPIRED: + return "Subscription license expired!"; + + case Keyzy::LicenseStatus::SUBSCRIPTION_LICENSE_NOT_STARTED: + return "Subscription license not started!"; + + case Keyzy::LicenseStatus::TRIAL_LICENSE_EXPIRED: + return "Trial license expired!"; + + case Keyzy::LicenseStatus::TRIAL_LICENSE_NOT_STARTED: + return "Trial license not started!"; + + case Keyzy::LicenseStatus::CANNOT_KEEP_SERIAL: + return "Cannot keep serial!"; + + case Keyzy::LicenseStatus::CANNOT_KEEP_LICENSE_FILE: + return "Cannot keep license file!"; + + case Keyzy::LicenseStatus::ACTIVATION_DELETED: + return "Activation deleted!"; + + case Keyzy::LicenseStatus::CLIENT_SERIAL_DOES_NOT_EXIST: + return "Client serial does not exist!"; + + case Keyzy::LicenseStatus::CONNECTION_ERROR: + return "Connection Error!"; + + case Keyzy::LicenseStatus::TOO_MANY_REQUESTS: + return "Too Many Requests!"; + + case Keyzy::LicenseStatus::NO_ACTIVE_SUBSCRIPTION: + return "No Active Subscription!"; + + case Keyzy::LicenseStatus::CURRENT_LICENSE_DOES_NOT_EXIST: + return "Current license does not exist!"; + + case Keyzy::LicenseStatus::UPGRADE_LICENSE_DOES_NOT_EXIST: + return "Upgrade license does not exist!"; + + case Keyzy::LicenseStatus::UPGRADE_LICENSE_DOES_NOT_MATCH: + return "Upgrade license does not match for upgrade with current license!"; + + case Keyzy::LicenseStatus::ANOTHER_TRIAL_LICENSE_ALREADY_ACTIVATED: + return "Another trial license has already been activated on this device!"; + + case Keyzy::LicenseStatus::SKU_NUMBER_VALIDATION: + return "sku_number parameter cannot be validated!"; + + case Keyzy::LicenseStatus::PRODUCT_CODE_VALIDATION: + return "product_code parameter cannot be validated!"; + + case Keyzy::LicenseStatus::NAME_VALIDATION: + return "name parameter cannot be validated!"; + + case Keyzy::LicenseStatus::EMAIL_VALIDATION: + return "email parameter cannot be validated!"; + + case Keyzy::LicenseStatus::NO_FREE_LICENSES: + return "You do not have any free licenses for this sku. Please generate new licenses for this sku!"; + + case Keyzy::LicenseStatus::NAME_OR_EMAIL_VALIDATION: + return "Either the name or email filed must be filled!"; + + case Keyzy::LicenseStatus::LICENSE_NOT_EXIST_NOT_ASSIGNED_DEALER_ALREADY_DEPOSITED: + return "The license does not exist or is not assigned to a dealer or is already deposited!"; + + case Keyzy::LicenseStatus::VALID: // Just in case + return "Valid"; + + default: + return "Unknown"; + } + } +} + +namespace jsFunctions +{ + inline auto consoleLogScript = R"shim( +(function() { + if (typeof globalThis.console === 'undefined') { + globalThis.console = { + log(...args) { + __log__('[embedded:log]', ...args); + }, + warn(...args) { + __log__('[embedded:warn]', ...args); + }, + error(...args) { + __log__('[embedded:error]', ...args); + } + }; + } +})(); + )shim"; + + inline auto hydrateScript = R"script( +(function() { + if (typeof globalThis.__receiveHydrationData__ !== 'function') + return false; + + globalThis.__receiveHydrationData__(%); + return true; +})(); +)script"; + + inline auto dispatchScript = R"script( +(function() { + if (typeof globalThis.__receiveStateChange__ !== 'function') + return false; + + globalThis.__receiveStateChange__(%); + return true; +})(); +)script"; + + //// seperated for Mesh state send + inline auto dispatchMeshStateScript = R"script( +(function() { + if (typeof globalThis.__receiveMeshStateChange__ !== 'function') + return false; + + globalThis.__receiveMeshStateChange__(%); + return true; +})(); +)script"; + + inline auto errorScript = R"script( +(function() { + if (typeof globalThis.__receiveError__ !== 'function') + return false; + + let e = new Error(%); + e.name = @; + + globalThis.__receiveError__(e); + return true; +})(); +)script"; +} diff --git a/native/WebViewEditor.cpp b/native/WebViewEditor.cpp index 5a39609..a2873ba 100644 --- a/native/WebViewEditor.cpp +++ b/native/WebViewEditor.cpp @@ -1,22 +1,23 @@ #include "PluginProcessor.h" #include "WebViewEditor.h" - // A helper for reading numbers from a choc::Value, which seems to opportunistically parse // JSON numbers into ints or 32-bit floats whenever it wants. -double numberFromChocValue(const choc::value::ValueView& v) { +double numberFromChocValue(const choc::value::ValueView &v) +{ return ( - v.isFloat32() ? (double) v.getFloat32() - : (v.isFloat64() ? v.getFloat64() - : (v.isInt32() ? (double) v.getInt32() - : (double) v.getInt64()))); + v.isFloat32() ? (double)v.getFloat32() + : (v.isFloat64() ? v.getFloat64() + : (v.isInt32() ? (double)v.getInt32() + : (double)v.getInt64()))); } -std::string getMimeType(std::string const& ext) { - static std::unordered_map<std::string, std::string> mimeTypes { - { ".html", "text/html" }, - { ".js", "application/javascript" }, - { ".css", "text/css" }, +std::string getMimeType(std::string const &ext) +{ + static std::unordered_map<std::string, std::string> mimeTypes{ + {".html", "text/html"}, + {".js", "application/javascript"}, + {".css", "text/css"}, }; if (mimeTypes.count(ext) > 0) @@ -26,19 +27,22 @@ std::string getMimeType(std::string const& ext) { } //============================================================================== -WebViewEditor::WebViewEditor(juce::AudioProcessor* proc, juce::File const& assetDirectory, int width, int height) +WebViewEditor::WebViewEditor(juce::AudioProcessor *proc, juce::File const &assetDirectory, int width, int height) : juce::AudioProcessorEditor(proc) { - setSize(720, 444); + setSize(width, height); + setResizable(true, false); choc::ui::WebView::Options opts; #if JUCE_DEBUG - opts.enableDebugMode = true; + opts.enableDebugMode = false; #endif -#if ! ELEM_DEV_LOCALHOST - opts.fetchResource = [=](const choc::ui::WebView::Options::Path& p) -> std::optional<choc::ui::WebView::Options::Resource> { +#if !ELEM_DEV_LOCALHOST + opts.enableDebugMode = false; + opts.fetchResource = [=](const choc::ui::WebView::Options::Path &p) -> std::optional<choc::ui::WebView::Options::Resource> + { auto relPath = "." + (p == "/" ? "/index.html" : p); auto f = assetDirectory.getChildFile(relPath); juce::MemoryBlock mb; @@ -46,93 +50,95 @@ WebViewEditor::WebViewEditor(juce::AudioProcessor* proc, juce::File const& asset if (!f.existsAsFile() || !f.loadFileAsData(mb)) return {}; - return choc::ui::WebView::Options::Resource { - std::vector<uint8_t>(mb.begin(), mb.end()), - getMimeType(f.getFileExtension().toStdString()) - }; + return choc::ui::WebView::Options::Resource{ + std::string(mb.begin(), mb.end()), + getMimeType(f.getFileExtension().toStdString())}; + + + + + }; #endif - webView = std::make_unique<choc::ui::WebView>(opts); + webView = std::make_unique<choc::ui::WebView>(opts); #if JUCE_MAC - viewContainer.setView(webView->getViewHandle()); + viewContainer.setView(webView->getViewHandle()); #elif JUCE_WINDOWS viewContainer.setHWND(webView->getViewHandle()); #else #error "We only support MacOS and Windows here yet." #endif - addAndMakeVisible(viewContainer); - viewContainer.setBounds({0, 0, 720, 440}); + addAndMakeVisible(viewContainer); + viewContainer.setBounds({0, 0, 905, 600}); - // Install message passing handlers - webView->bind("__postNativeMessage__", [=](const choc::value::ValueView& args) -> choc::value::Value { + // Install message passing handlers + webView->bind(POST_NATIVE_MESSAGE, [=](const choc::value::ValueView &args) -> choc::value::Value + { if (args.isArray()) { - auto eventName = args[0].getString(); + const auto eventName = args[0].getString(); // When the webView loads it should send a message telling us that it has established // its message-passing hooks and is ready for a state dispatch - if (eventName == "ready") { - if (auto* ptr = dynamic_cast<EffectsPluginProcessor*>(getAudioProcessor())) { - ptr->dispatchStateChange(); - } + if (eventName == READY_EVENT) { + ready(); } -#if ELEM_DEV_LOCALHOST - if (eventName == "reload") { - if (auto* ptr = dynamic_cast<EffectsPluginProcessor*>(getAudioProcessor())) { - ptr->initJavaScriptEngine(); - ptr->dispatchStateChange(); - } + if (eventName == RELOAD_EVENT) { + reload(); } -#endif - if (eventName == "setParameterValue" && args.size() > 1) { + if (eventName == SET_PARAMETER_VALUE && args.size() > 1) { return handleSetParameterValueEvent(args[1]); } + + if (eventName == SET_MESH_STATE && args.size() > 1) { + // Take a copy of the value and pass it to the view state change handler. + auto value = choc::value::Value(args[1]); + setMeshState(value); + } + + // For Keyzy send an unlock event with an object containing the serial number + if (eventName == UNLOCK_EVENT && args.size() > 1) { + auto value = choc::value::Value(args[1]); + handleUnlockEvent(value); + } } - return {}; - }); + return {}; + }); #if ELEM_DEV_LOCALHOST - webView->navigate("http://localhost:5173"); + webView->navigate("http://localhost:5173"); #endif -} + } -choc::ui::WebView* WebViewEditor::getWebViewPtr() -{ - return webView.get(); -} + void WebViewEditor::paint(juce::Graphics &g) + { + } -void WebViewEditor::paint (juce::Graphics& g) -{ -} + void WebViewEditor::resized() + { + viewContainer.setBounds(getLocalBounds()); + } -void WebViewEditor::resized() -{ - viewContainer.setBounds(getLocalBounds()); -} + void WebViewEditor::executeJavascript(const std::string &script) const + { + webView->evaluateJavascript(script); + } -//============================================================================== -choc::value::Value WebViewEditor::handleSetParameterValueEvent(const choc::value::ValueView& e) { - // When setting a parameter value, we simply tell the host. This will in turn fire - // a parameterValueChanged event, which will catch and propagate through dispatching - // a state change event - if (e.isObject() && e.hasObjectMember("paramId") && e.hasObjectMember("value")) { - auto const& paramId = e["paramId"].getString(); - double const v = numberFromChocValue(e["value"]); - - for (auto& p : getAudioProcessor()->getParameters()) { - if (auto* pf = dynamic_cast<juce::AudioParameterFloat*>(p)) { - if (pf->paramID.toStdString() == paramId) { - pf->setValueNotifyingHost(v); - break; - } - } + //============================================================================== + choc::value::Value WebViewEditor::handleSetParameterValueEvent(const choc::value::ValueView &e) const + { + if (e.isObject() && e.hasObjectMember("paramId") && e.hasObjectMember("value")) + { + auto const ¶mId = e["paramId"].getString(); + double const v = numberFromChocValue(e["value"]); + + setParameterValue(std::string{paramId}, static_cast<float>(v)); } - } - return choc::value::Value(); -} + return {}; + } diff --git a/native/WebViewEditor.h b/native/WebViewEditor.h index 5504d10..9a9c1ed 100644 --- a/native/WebViewEditor.h +++ b/native/WebViewEditor.h @@ -5,7 +5,6 @@ #include <choc_WebView.h> - //============================================================================== // A simple juce::AudioProcessorEditor that holds a choc::WebView and sets the // WebView instance to cover the entire region of the editor. @@ -13,20 +12,35 @@ class WebViewEditor : public juce::AudioProcessorEditor { public: //============================================================================== - WebViewEditor(juce::AudioProcessor* proc, juce::File const& assetDirectory, int width, int height); + WebViewEditor(juce::AudioProcessor *proc, juce::File const &assetDirectory, int width, int height); + + //============================================================================== + void paint(juce::Graphics &g) override; + void resized() override; //============================================================================== - choc::ui::WebView* getWebViewPtr(); + // Keyzy + std::function<void(choc::value::Value &)> handleUnlockEvent = [](choc::value::Value &) {}; //============================================================================== - void paint (juce::Graphics& g) override; - void resized() override; + std::function<void(choc::value::Value &)> setMeshState = [](choc::value::Value &) {}; + std::function<void(const std::string &, float)> setParameterValue = [](const std::string &, float) {}; + std::function<void()> reload = []() {}; + std::function<void()> ready = []() {}; + + void executeJavascript(const std::string &script) const; private: - //============================================================================== - choc::value::Value handleSetParameterValueEvent(const choc::value::ValueView& e); + std::string POST_NATIVE_MESSAGE = "__postNativeMessage__"; + std::string READY_EVENT = "ready"; + std::string RELOAD_EVENT = "reload"; + std::string SET_PARAMETER_VALUE = "setParameterValue"; + std::string SET_MESH_STATE = "setMeshState"; + std::string UNLOCK_EVENT = "unlock"; + std::string HOST_INFO = "hostInfo"; + + choc::value::Value handleSetParameterValueEvent(const choc::value::ValueView &e) const; - //============================================================================== std::unique_ptr<choc::ui::WebView> webView; #if JUCE_MAC @@ -34,6 +48,6 @@ class WebViewEditor : public juce::AudioProcessorEditor #elif JUCE_WINDOWS juce::HWNDComponent viewContainer; #else - #error "We only support MacOS and Windows here yet." +#error "We only support MacOS and Windows here yet." #endif }; diff --git a/native/choc b/native/choc index 090fd7c..b086c62 160000 --- a/native/choc +++ b/native/choc @@ -1 +1 @@ -Subproject commit 090fd7cf41ea2b5d317420af45097cc22a975656 +Subproject commit b086c628c82f2e12c794ad2642b11b41ef6f50e1 diff --git a/package-lock.json b/package-lock.json index f8a3141..37ac7ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,26 +9,22 @@ "version": "0.0.0", "dependencies": { "@elemaudio/core": "^3.0.0", - "@heroicons/react": "^2.0.18", - "@use-gesture/react": "^10.2.27", "cpy-cli": "^4.2.0", "esbuild": "^0.17.8", "invariant": "^2.2.4", - "react": "^18.2.0", - "react-dom": "^18.2.0", "resize-observer-polyfill": "^1.5.1", "rimraf": "^5.0.0", + "worker-timers": "^8.0.2", "zustand": "^4.3.8" }, "devDependencies": { - "@types/react": "^18.0.37", - "@types/react-dom": "^18.0.11", - "@vitejs/plugin-react": "^4.0.0", + "@sveltejs/vite-plugin-svelte": "^3.1.1", "autoprefixer": "^10.4.14", "concurrently": "^8.2.2", "postcss": "^8.4.24", + "svelte": "^5.0.0-next.184", "tailwindcss": "^3.3.2", - "vite": "^4.3.9", + "vite": "^5.0.0", "zx": "^7.2.3" } }, @@ -58,287 +54,43 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", - "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", - "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", - "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", - "dev": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/runtime": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", - "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", - "dev": true, + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz", + "integrity": "sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -346,55 +98,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", - "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@elemaudio/core": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@elemaudio/core/-/core-3.0.0.tgz", @@ -405,6 +108,22 @@ "shallowequal": "^1.1.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/android-arm": { "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", @@ -735,14 +454,6 @@ "node": ">=12" } }, - "node_modules/@heroicons/react": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.0.18.tgz", - "integrity": "sha512-7TyMjRrZZMBPa+/5Y8lN0iyvUU/01PeMGX2+RE7cQWpEUIcb4QotzUObFkJDejj/HUH4qjP/eQ0gzzKs2f+6Yw==", - "peerDependencies": { - "react": ">= 16" - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -785,14 +496,14 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -808,9 +519,9 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" @@ -823,21 +534,15 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -879,120 +584,340 @@ "node": ">=14" } }, - "node_modules/@types/fs-extra": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.3.tgz", - "integrity": "sha512-sF59BlXtUdzEAL1u0MSvuzWd7PdZvZEtnaVkzX5mjpdWTJ8brG0jUqve3jPCzSzvAKKMHTG8F8o/WMQLtleZdQ==", + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz", + "integrity": "sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@types/jsonfile": "*", - "@types/node": "*" - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@types/jsonfile": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.3.tgz", - "integrity": "sha512-/yqTk2SZ1wIezK0hiRZD7RuSf4B3whFxFamB1kGStv+8zlWScTMcHanzfc0XKWs5vA1TkHeckBlOyM8jxU8nHA==", + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.1.tgz", + "integrity": "sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@types/node": { - "version": "18.18.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.8.tgz", - "integrity": "sha512-OLGBaaK5V3VRBS1bAkMVP2/W9B+H8meUfl866OrMNQqt7wDgdpWPp5o6gmIc9pB+lIQHSq4ZL8ypeH1vPxcPaQ==", + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.1.tgz", + "integrity": "sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@types/ps-tree": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@types/ps-tree/-/ps-tree-1.1.4.tgz", - "integrity": "sha512-CJyu2BqU/aZN/s8Ili3jiMctqXfTjCaWXirEcjRD8y1lUQZJ8eNohnal8+LXeWFs1VbdAOrCIdgATFsv+lnQ5Q==", - "dev": true + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.1.tgz", + "integrity": "sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@types/react": { - "version": "18.2.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.14.tgz", - "integrity": "sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==", + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.1.tgz", + "integrity": "sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@types/react-dom": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.6.tgz", - "integrity": "sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==", + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.1.tgz", + "integrity": "sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@types/react": "*" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", - "dev": true + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.1.tgz", + "integrity": "sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@types/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/which/-/which-3.0.1.tgz", - "integrity": "sha512-OJWjr4k8gS1HXuOnCmQbBrQez+xqt/zqfp5PhgbKtsmEFEuojAg23arr+TiTZZ1TORdUF9RKXb/WKEpT1dwgSg==", - "dev": true + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.1.tgz", + "integrity": "sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.1.tgz", + "integrity": "sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.1.tgz", + "integrity": "sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.1.tgz", + "integrity": "sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.1.tgz", + "integrity": "sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.1.tgz", + "integrity": "sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.1.tgz", + "integrity": "sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.1.tgz", + "integrity": "sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@use-gesture/core": { - "version": "10.2.27", - "resolved": "https://registry.npmjs.org/@use-gesture/core/-/core-10.2.27.tgz", - "integrity": "sha512-V4XV7hn9GAD2MYu8yBBVi5iuWBsAMfjPRMsEVzoTNGYH72tf0kFP+OKqGKc8YJFQIJx6yj+AOqxmEHOmx2/MEA==" + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.1.tgz", + "integrity": "sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@use-gesture/react": { - "version": "10.2.27", - "resolved": "https://registry.npmjs.org/@use-gesture/react/-/react-10.2.27.tgz", - "integrity": "sha512-7E5vnWCxeslWlxwZ8uKIcnUZVMTRMZ8cvSnLLKF1NkyNb3PnNiAzoXM4G1vTKJKRhgOTeI6wK1YsEpwo9ABV5w==", + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.1.1.tgz", + "integrity": "sha512-rimpFEAboBBHIlzISibg94iP09k/KYdHgVhJlcsTfn7KMBhc70jFX/GRWkRdFCc2fdnk+4+Bdfej23cMDnJS6A==", + "dev": true, "dependencies": { - "@use-gesture/core": "10.2.27" + "@sveltejs/vite-plugin-svelte-inspector": "^2.1.0", + "debug": "^4.3.4", + "deepmerge": "^4.3.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.10", + "svelte-hmr": "^0.16.0", + "vitefu": "^0.2.5" + }, + "engines": { + "node": "^18.0.0 || >=20" }, "peerDependencies": { - "react": ">= 16.8.0" + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.0" } }, - "node_modules/@vitejs/plugin-react": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.1.tgz", - "integrity": "sha512-g25lL98essfeSj43HJ0o4DMp0325XK0ITkxpgChzJU/CyemgyChtlxfnRbjfwxDGCTRxTiXtQAsdebQXKMRSOA==", + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.1.0.tgz", + "integrity": "sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==", "dev": true, "dependencies": { - "@babel/core": "^7.22.5", - "@babel/plugin-transform-react-jsx-self": "^7.22.5", - "@babel/plugin-transform-react-jsx-source": "^7.22.5", - "react-refresh": "^0.14.0" + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.0.0 || >=20" }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^3.0.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte/node_modules/svelte-hmr": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.16.0.tgz", + "integrity": "sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==", + "dev": true, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^12.20 || ^14.13.1 || >= 16" + }, + "peerDependencies": { + "svelte": "^3.19.0 || ^4.0.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/fs-extra": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.3.tgz", + "integrity": "sha512-sF59BlXtUdzEAL1u0MSvuzWd7PdZvZEtnaVkzX5mjpdWTJ8brG0jUqve3jPCzSzvAKKMHTG8F8o/WMQLtleZdQ==", + "dev": true, + "dependencies": { + "@types/jsonfile": "*", + "@types/node": "*" + } + }, + "node_modules/@types/jsonfile": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.3.tgz", + "integrity": "sha512-/yqTk2SZ1wIezK0hiRZD7RuSf4B3whFxFamB1kGStv+8zlWScTMcHanzfc0XKWs5vA1TkHeckBlOyM8jxU8nHA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" + }, + "node_modules/@types/node": { + "version": "18.18.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.8.tgz", + "integrity": "sha512-OLGBaaK5V3VRBS1bAkMVP2/W9B+H8meUfl866OrMNQqt7wDgdpWPp5o6gmIc9pB+lIQHSq4ZL8ypeH1vPxcPaQ==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" + }, + "node_modules/@types/ps-tree": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/ps-tree/-/ps-tree-1.1.4.tgz", + "integrity": "sha512-CJyu2BqU/aZN/s8Ili3jiMctqXfTjCaWXirEcjRD8y1lUQZJ8eNohnal8+LXeWFs1VbdAOrCIdgATFsv+lnQ5Q==", + "dev": true + }, + "node_modules/@types/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/which/-/which-3.0.1.tgz", + "integrity": "sha512-OJWjr4k8gS1HXuOnCmQbBrQez+xqt/zqfp5PhgbKtsmEFEuojAg23arr+TiTZZ1TORdUF9RKXb/WKEpT1dwgSg==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-typescript": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz", + "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==", + "dev": true, "peerDependencies": { - "vite": "^4.2.0" + "acorn": ">=8.9.0" } }, "node_modules/aggregate-error": { @@ -1054,6 +979,15 @@ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/arrify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", @@ -1098,6 +1032,15 @@ "postcss": "^8.1.0" } }, + "node_modules/axobject-query": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", + "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1123,11 +1066,11 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -1534,12 +1477,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/cp-file": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-9.1.0.tgz", @@ -1621,12 +1558,6 @@ "node": ">=4" } }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true - }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", @@ -1653,9 +1584,9 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -1711,6 +1642,24 @@ "node": ">=0.10.0" } }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -1817,6 +1766,22 @@ "node": ">=0.8.0" } }, + "node_modules/esm-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", + "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==", + "dev": true + }, + "node_modules/esrap": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.2.2.tgz", + "integrity": "sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1" + } + }, "node_modules/event-stream": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", @@ -1866,6 +1831,18 @@ "node": ">= 6" } }, + "node_modules/fast-unique-numbers": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/fast-unique-numbers/-/fast-unique-numbers-9.0.7.tgz", + "integrity": "sha512-K6hYNu8ZsVb7mwmd9OKxHmw4aLa+IFiBxt1e/FZVFFta94ZgNAHqIgUtDzd7AJaVoo/CoNTgr6sj1Dbj3PQPKg==", + "dependencies": { + "@babel/runtime": "^7.24.8", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.2.0" + } + }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -1898,9 +1875,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1990,9 +1967,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -2017,15 +1994,6 @@ "fx": "index.js" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -2090,15 +2058,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/globby": { "version": "13.2.0", "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.0.tgz", @@ -2290,6 +2249,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-reference": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2326,35 +2294,11 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -2386,6 +2330,15 @@ "node": ">=0.10.0" } }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -2400,6 +2353,12 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "dev": true + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -2431,13 +2390,13 @@ "loose-envify": "cli.js" } }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/magic-string": { + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", "dev": true, "dependencies": { - "yallist": "^3.0.2" + "@jridgewell/sourcemap-codec": "^1.4.15" } }, "node_modules/make-dir": { @@ -2603,9 +2562,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { @@ -2935,10 +2894,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -2970,9 +2928,9 @@ } }, "node_modules/postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "version": "8.4.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", + "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", "dev": true, "funding": [ { @@ -2989,9 +2947,9 @@ } ], "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -3166,6 +3124,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -3173,32 +3132,11 @@ "node": ">=0.10.0" } }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, "dependencies": { "pify": "^2.3.0" } @@ -3288,8 +3226,7 @@ "node_modules/regenerator-runtime": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", - "dev": true + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "node_modules/require-directory": { "version": "2.1.1", @@ -3332,18 +3269,37 @@ } }, "node_modules/rollup": { - "version": "3.25.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.2.tgz", - "integrity": "sha512-VLnkxZMDr3jpxgtmS8pQZ0UvhslmF4ADq/9w4erkctbgjCqLW9oa89fJuXEs4ZmgyoF7Dm8rMDKSS5b5u2hHUg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.1.tgz", + "integrity": "sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==", "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14.18.0", + "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.18.1", + "@rollup/rollup-android-arm64": "4.18.1", + "@rollup/rollup-darwin-arm64": "4.18.1", + "@rollup/rollup-darwin-x64": "4.18.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.1", + "@rollup/rollup-linux-arm-musleabihf": "4.18.1", + "@rollup/rollup-linux-arm64-gnu": "4.18.1", + "@rollup/rollup-linux-arm64-musl": "4.18.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.1", + "@rollup/rollup-linux-riscv64-gnu": "4.18.1", + "@rollup/rollup-linux-s390x-gnu": "4.18.1", + "@rollup/rollup-linux-x64-gnu": "4.18.1", + "@rollup/rollup-linux-x64-musl": "4.18.1", + "@rollup/rollup-win32-arm64-msvc": "4.18.1", + "@rollup/rollup-win32-ia32-msvc": "4.18.1", + "@rollup/rollup-win32-x64-msvc": "4.18.1", "fsevents": "~2.3.2" } }, @@ -3378,18 +3334,10 @@ "tslib": "^2.1.0" } }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -3450,9 +3398,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3675,6 +3623,30 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svelte": { + "version": "5.0.0-next.184", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.0.0-next.184.tgz", + "integrity": "sha512-oHWNajXOytt/5s2Ark3o/CP7bHLx+o/QZjTkCtU1dECqSmYyGqrIsoZi0Cx0VBdXAHMqI+1/T70ppaL1cL7LEw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.5", + "acorn": "^8.11.3", + "acorn-typescript": "^1.4.13", + "aria-query": "^5.3.0", + "axobject-query": "^4.0.0", + "esm-env": "^1.0.0", + "esrap": "^1.2.2", + "is-reference": "^3.0.2", + "locate-character": "^3.0.0", + "magic-string": "^0.30.5", + "zimmerframe": "^1.1.2" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/tailwindcss": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", @@ -3757,15 +3729,6 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -3804,10 +3767,9 @@ "dev": true }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "node_modules/undici-types": { "version": "5.26.5", @@ -3862,65 +3824,476 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vite": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz", + "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.39", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/vite": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", - "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, - "dependencies": { - "esbuild": "^0.17.5", - "postcss": "^8.4.23", - "rollup": "^3.21.0" - }, + "hasInstallScript": true, "bin": { - "vite": "bin/vite.js" + "esbuild": "bin/esbuild" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=12" }, "optionalDependencies": { - "fsevents": "~2.3.2" - }, + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/vitefu": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", + "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", + "dev": true, "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" }, "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { + "vite": { "optional": true } } @@ -3957,6 +4330,37 @@ "node": ">= 8" } }, + "node_modules/worker-timers": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/worker-timers/-/worker-timers-8.0.2.tgz", + "integrity": "sha512-Xna4rPTforH+a3/Kyukf9diO8MDdKY/nuDU77Ptx3SPi+2V/QfWGdwGUxVOk4oFyCnRoe71ZjH6axjyVWO5Nqw==", + "dependencies": { + "@babel/runtime": "^7.24.8", + "tslib": "^2.6.3", + "worker-timers-broker": "^7.0.3", + "worker-timers-worker": "^8.0.2" + } + }, + "node_modules/worker-timers-broker": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/worker-timers-broker/-/worker-timers-broker-7.0.3.tgz", + "integrity": "sha512-LG/xWCCOg6UwRnmAzy05wCvn3jIO60AcpT/CgG3TmaYK93+biainiivSVHGK6VEBeJzETrFAKZ9JgW8gkae+Ag==", + "dependencies": { + "@babel/runtime": "^7.24.8", + "fast-unique-numbers": "^9.0.7", + "tslib": "^2.6.3", + "worker-timers-worker": "^8.0.2" + } + }, + "node_modules/worker-timers-worker": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/worker-timers-worker/-/worker-timers-worker-8.0.2.tgz", + "integrity": "sha512-Bx8grqm3TyHLorTMBbtoL+fAMwTBgx+c4IiE23fCNinlUpqTISEa9UXR6GAjgHAB2GlZjNLgisLjx9a6CKFV3Q==", + "dependencies": { + "@babel/runtime": "^7.24.8", + "tslib": "^2.6.3" + } + }, "node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", @@ -4089,12 +4493,6 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, "node_modules/yaml": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", @@ -4170,6 +4568,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zimmerframe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", + "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", + "dev": true + }, "node_modules/zustand": { "version": "4.3.8", "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.3.8.tgz", @@ -4268,252 +4672,38 @@ } }, "@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "requires": { - "@babel/highlight": "^7.22.5" - } - }, - "@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", - "dev": true - }, - "@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - } - }, - "@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", - "dev": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "requires": { - "@babel/types": "^7.22.5" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" } }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true - }, "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" - }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==" }, "@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", - "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", - "dev": true - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", - "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", - "dev": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", - "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" } }, "@babel/runtime": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", - "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", - "dev": true, + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz", + "integrity": "sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==", "requires": { "regenerator-runtime": "^0.14.0" } }, - "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/traverse": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", - "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - } - }, "@elemaudio/core": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@elemaudio/core/-/core-3.0.0.tgz", @@ -4524,6 +4714,13 @@ "shallowequal": "^1.1.0" } }, + "@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "dev": true, + "optional": true + }, "@esbuild/android-arm": { "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", @@ -4656,12 +4853,6 @@ "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", "optional": true }, - "@heroicons/react": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.0.18.tgz", - "integrity": "sha512-7TyMjRrZZMBPa+/5Y8lN0iyvUU/01PeMGX2+RE7cQWpEUIcb4QotzUObFkJDejj/HUH4qjP/eQ0gzzKs2f+6Yw==", - "requires": {} - }, "@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -4690,81 +4881,224 @@ } } }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true + }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz", + "integrity": "sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.1.tgz", + "integrity": "sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.1.tgz", + "integrity": "sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.1.tgz", + "integrity": "sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.1.tgz", + "integrity": "sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-musleabihf": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.1.tgz", + "integrity": "sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.1.tgz", + "integrity": "sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.1.tgz", + "integrity": "sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.1.tgz", + "integrity": "sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.1.tgz", + "integrity": "sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-s390x-gnu": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.1.tgz", + "integrity": "sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.1.tgz", + "integrity": "sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.1.tgz", + "integrity": "sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==", "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } + "optional": true }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.1.tgz", + "integrity": "sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==", + "dev": true, + "optional": true }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.1.tgz", + "integrity": "sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==", + "dev": true, + "optional": true }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "@rollup/rollup-win32-x64-msvc": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.1.tgz", + "integrity": "sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==", + "dev": true, + "optional": true }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "@sveltejs/vite-plugin-svelte": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.1.1.tgz", + "integrity": "sha512-rimpFEAboBBHIlzISibg94iP09k/KYdHgVhJlcsTfn7KMBhc70jFX/GRWkRdFCc2fdnk+4+Bdfej23cMDnJS6A==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@sveltejs/vite-plugin-svelte-inspector": "^2.1.0", + "debug": "^4.3.4", + "deepmerge": "^4.3.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.10", + "svelte-hmr": "^0.16.0", + "vitefu": "^0.2.5" }, "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "svelte-hmr": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.16.0.tgz", + "integrity": "sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==", + "dev": true, + "requires": {} } } }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "@sveltejs/vite-plugin-svelte-inspector": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.1.0.tgz", + "integrity": "sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==", + "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "debug": "^4.3.4" } }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "optional": true + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true }, "@types/fs-extra": { "version": "11.0.3", @@ -4804,74 +5138,30 @@ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, "@types/ps-tree": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/@types/ps-tree/-/ps-tree-1.1.4.tgz", "integrity": "sha512-CJyu2BqU/aZN/s8Ili3jiMctqXfTjCaWXirEcjRD8y1lUQZJ8eNohnal8+LXeWFs1VbdAOrCIdgATFsv+lnQ5Q==", "dev": true }, - "@types/react": { - "version": "18.2.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.14.tgz", - "integrity": "sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.6.tgz", - "integrity": "sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", - "dev": true - }, "@types/which": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/which/-/which-3.0.1.tgz", "integrity": "sha512-OJWjr4k8gS1HXuOnCmQbBrQez+xqt/zqfp5PhgbKtsmEFEuojAg23arr+TiTZZ1TORdUF9RKXb/WKEpT1dwgSg==", "dev": true }, - "@use-gesture/core": { - "version": "10.2.27", - "resolved": "https://registry.npmjs.org/@use-gesture/core/-/core-10.2.27.tgz", - "integrity": "sha512-V4XV7hn9GAD2MYu8yBBVi5iuWBsAMfjPRMsEVzoTNGYH72tf0kFP+OKqGKc8YJFQIJx6yj+AOqxmEHOmx2/MEA==" - }, - "@use-gesture/react": { - "version": "10.2.27", - "resolved": "https://registry.npmjs.org/@use-gesture/react/-/react-10.2.27.tgz", - "integrity": "sha512-7E5vnWCxeslWlxwZ8uKIcnUZVMTRMZ8cvSnLLKF1NkyNb3PnNiAzoXM4G1vTKJKRhgOTeI6wK1YsEpwo9ABV5w==", - "requires": { - "@use-gesture/core": "10.2.27" - } + "acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true }, - "@vitejs/plugin-react": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.1.tgz", - "integrity": "sha512-g25lL98essfeSj43HJ0o4DMp0325XK0ITkxpgChzJU/CyemgyChtlxfnRbjfwxDGCTRxTiXtQAsdebQXKMRSOA==", + "acorn-typescript": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz", + "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==", "dev": true, - "requires": { - "@babel/core": "^7.22.5", - "@babel/plugin-transform-react-jsx-self": "^7.22.5", - "@babel/plugin-transform-react-jsx-source": "^7.22.5", - "react-refresh": "^0.14.0" - } + "requires": {} }, "aggregate-error": { "version": "4.0.1", @@ -4917,6 +5207,15 @@ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true }, + "aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "requires": { + "dequal": "^2.0.3" + } + }, "arrify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", @@ -4936,6 +5235,15 @@ "postcss-value-parser": "^4.2.0" } }, + "axobject-query": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", + "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "dev": true, + "requires": { + "dequal": "^2.0.3" + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -4958,11 +5266,11 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browserslist": { @@ -5233,12 +5541,6 @@ } } }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "cp-file": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-9.1.0.tgz", @@ -5290,12 +5592,6 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, - "csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true - }, "data-uri-to-buffer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", @@ -5312,9 +5608,9 @@ } }, "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "requires": { "ms": "2.1.2" @@ -5346,6 +5642,18 @@ } } }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true + }, "didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -5436,6 +5744,22 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, + "esm-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", + "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==", + "dev": true + }, + "esrap": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.2.2.tgz", + "integrity": "sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1" + } + }, "event-stream": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", @@ -5478,6 +5802,15 @@ } } }, + "fast-unique-numbers": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/fast-unique-numbers/-/fast-unique-numbers-9.0.7.tgz", + "integrity": "sha512-K6hYNu8ZsVb7mwmd9OKxHmw4aLa+IFiBxt1e/FZVFFta94ZgNAHqIgUtDzd7AJaVoo/CoNTgr6sj1Dbj3PQPKg==", + "requires": { + "@babel/runtime": "^7.24.8", + "tslib": "^2.6.3" + } + }, "fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -5497,9 +5830,9 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "requires": { "to-regex-range": "^5.0.1" } @@ -5561,9 +5894,9 @@ "dev": true }, "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "optional": true }, @@ -5578,12 +5911,6 @@ "integrity": "sha512-rIYQBmx85Jfhd3pkSw06YPgvSvfTi022ZXTeFDkcCZGCs5nt3sjqFBGtcMFe1TR2S00RDz63be0ab5mhCiOLBw==", "dev": true }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -5629,12 +5956,6 @@ "is-glob": "^4.0.3" } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, "globby": { "version": "13.2.0", "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.0.tgz", @@ -5777,6 +6098,15 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" }, + "is-reference": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -5802,23 +6132,11 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -5839,6 +6157,12 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, + "kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true + }, "lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -5850,6 +6174,12 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "dev": true + }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -5872,13 +6202,13 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "magic-string": { + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", "dev": true, "requires": { - "yallist": "^3.0.2" + "@jridgewell/sourcemap-codec": "^1.4.15" } }, "make-dir": { @@ -6000,9 +6330,9 @@ } }, "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true }, "nested-error-stacks": { @@ -6217,10 +6547,9 @@ } }, "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "picomatch": { "version": "2.3.1", @@ -6240,14 +6569,14 @@ "dev": true }, "postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "version": "8.4.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", + "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", "dev": true, "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" } }, "postcss-import": { @@ -6341,25 +6670,11 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "peer": true, "requires": { "loose-envify": "^1.1.0" } }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, - "react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", - "dev": true - }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -6425,8 +6740,7 @@ "regenerator-runtime": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", - "dev": true + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "require-directory": { "version": "2.1.1", @@ -6453,11 +6767,28 @@ } }, "rollup": { - "version": "3.25.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.2.tgz", - "integrity": "sha512-VLnkxZMDr3jpxgtmS8pQZ0UvhslmF4ADq/9w4erkctbgjCqLW9oa89fJuXEs4ZmgyoF7Dm8rMDKSS5b5u2hHUg==", - "dev": true, - "requires": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.1.tgz", + "integrity": "sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==", + "dev": true, + "requires": { + "@rollup/rollup-android-arm-eabi": "4.18.1", + "@rollup/rollup-android-arm64": "4.18.1", + "@rollup/rollup-darwin-arm64": "4.18.1", + "@rollup/rollup-darwin-x64": "4.18.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.1", + "@rollup/rollup-linux-arm-musleabihf": "4.18.1", + "@rollup/rollup-linux-arm64-gnu": "4.18.1", + "@rollup/rollup-linux-arm64-musl": "4.18.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.1", + "@rollup/rollup-linux-riscv64-gnu": "4.18.1", + "@rollup/rollup-linux-s390x-gnu": "4.18.1", + "@rollup/rollup-linux-x64-gnu": "4.18.1", + "@rollup/rollup-linux-x64-musl": "4.18.1", + "@rollup/rollup-win32-arm64-msvc": "4.18.1", + "@rollup/rollup-win32-ia32-msvc": "4.18.1", + "@rollup/rollup-win32-x64-msvc": "4.18.1", + "@types/estree": "1.0.5", "fsevents": "~2.3.2" } }, @@ -6478,18 +6809,10 @@ "tslib": "^2.1.0" } }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "requires": { - "loose-envify": "^1.1.0" - } - }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" }, "shallowequal": { "version": "1.1.0", @@ -6526,9 +6849,9 @@ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true }, "spawn-command": { @@ -6694,6 +7017,27 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "svelte": { + "version": "5.0.0-next.184", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.0.0-next.184.tgz", + "integrity": "sha512-oHWNajXOytt/5s2Ark3o/CP7bHLx+o/QZjTkCtU1dECqSmYyGqrIsoZi0Cx0VBdXAHMqI+1/T70ppaL1cL7LEw==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.1", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.5", + "acorn": "^8.11.3", + "acorn-typescript": "^1.4.13", + "aria-query": "^5.3.0", + "axobject-query": "^4.0.0", + "esm-env": "^1.0.0", + "esrap": "^1.2.2", + "is-reference": "^3.0.2", + "locate-character": "^3.0.0", + "magic-string": "^0.30.5", + "zimmerframe": "^1.1.2" + } + }, "tailwindcss": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", @@ -6762,12 +7106,6 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -6794,10 +7132,9 @@ "dev": true }, "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "undici-types": { "version": "5.26.5", @@ -6843,17 +7180,211 @@ } }, "vite": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", - "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz", + "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==", "dev": true, "requires": { - "esbuild": "^0.17.5", - "fsevents": "~2.3.2", - "postcss": "^8.4.23", - "rollup": "^3.21.0" + "esbuild": "^0.21.3", + "fsevents": "~2.3.3", + "postcss": "^8.4.39", + "rollup": "^4.13.0" + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "dev": true, + "optional": true + }, + "esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + } } }, + "vitefu": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", + "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", + "dev": true, + "requires": {} + }, "web-streams-polyfill": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", @@ -6874,6 +7405,37 @@ "isexe": "^2.0.0" } }, + "worker-timers": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/worker-timers/-/worker-timers-8.0.2.tgz", + "integrity": "sha512-Xna4rPTforH+a3/Kyukf9diO8MDdKY/nuDU77Ptx3SPi+2V/QfWGdwGUxVOk4oFyCnRoe71ZjH6axjyVWO5Nqw==", + "requires": { + "@babel/runtime": "^7.24.8", + "tslib": "^2.6.3", + "worker-timers-broker": "^7.0.3", + "worker-timers-worker": "^8.0.2" + } + }, + "worker-timers-broker": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/worker-timers-broker/-/worker-timers-broker-7.0.3.tgz", + "integrity": "sha512-LG/xWCCOg6UwRnmAzy05wCvn3jIO60AcpT/CgG3TmaYK93+biainiivSVHGK6VEBeJzETrFAKZ9JgW8gkae+Ag==", + "requires": { + "@babel/runtime": "^7.24.8", + "fast-unique-numbers": "^9.0.7", + "tslib": "^2.6.3", + "worker-timers-worker": "^8.0.2" + } + }, + "worker-timers-worker": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/worker-timers-worker/-/worker-timers-worker-8.0.2.tgz", + "integrity": "sha512-Bx8grqm3TyHLorTMBbtoL+fAMwTBgx+c4IiE23fCNinlUpqTISEa9UXR6GAjgHAB2GlZjNLgisLjx9a6CKFV3Q==", + "requires": { + "@babel/runtime": "^7.24.8", + "tslib": "^2.6.3" + } + }, "wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", @@ -6964,12 +7526,6 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, "yaml": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", @@ -7026,6 +7582,12 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" }, + "zimmerframe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", + "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", + "dev": true + }, "zustand": { "version": "4.3.8", "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.3.8.tgz", diff --git a/package.json b/package.json index 0d3eed2..7883378 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "dev": "npm run dev-native && concurrently \"npm run dev-dsp\" \"vite\"", "dev-native": "zx scripts/build-native.mjs --dev", "dev-dsp": "esbuild dsp/main.js --watch --bundle --outfile=public/dsp.main.js", + "dev-ui": "vite", "build-native": "zx scripts/build-native.mjs", "build-dsp": "esbuild dsp/main.js --bundle --outfile=public/dsp.main.js", "build-ui": "vite build", @@ -18,26 +19,22 @@ }, "dependencies": { "@elemaudio/core": "^3.0.0", - "@heroicons/react": "^2.0.18", - "@use-gesture/react": "^10.2.27", "cpy-cli": "^4.2.0", "esbuild": "^0.17.8", "invariant": "^2.2.4", - "react": "^18.2.0", - "react-dom": "^18.2.0", "resize-observer-polyfill": "^1.5.1", "rimraf": "^5.0.0", + "worker-timers": "^8.0.2", "zustand": "^4.3.8" }, "devDependencies": { - "@types/react": "^18.0.37", - "@types/react-dom": "^18.0.11", - "@vitejs/plugin-react": "^4.0.0", + "@sveltejs/vite-plugin-svelte": "^3.1.1", "autoprefixer": "^10.4.14", "concurrently": "^8.2.2", "postcss": "^8.4.24", + "svelte": "^5.0.0-next.184", "tailwindcss": "^3.3.2", - "vite": "^4.3.9", + "vite": "^5.0.0", "zx": "^7.2.3" } } diff --git a/public/assets/65bbe44771656d76fa1e7e54_voro.png b/public/assets/65bbe44771656d76fa1e7e54_voro.png new file mode 100644 index 0000000..804cfe9 Binary files /dev/null and b/public/assets/65bbe44771656d76fa1e7e54_voro.png differ diff --git a/public/assets/ChivoMono-Medium-msdf.json b/public/assets/ChivoMono-Medium-msdf.json new file mode 100644 index 0000000..f018459 --- /dev/null +++ b/public/assets/ChivoMono-Medium-msdf.json @@ -0,0 +1 @@ +{"pages":["ChivoMono-Medium.png"],"chars":[{"id":106,"index":315,"char":"j","width":16,"height":42,"xoffset":2,"yoffset":11,"xadvance":25,"chnl":15,"x":0,"y":0,"page":0},{"id":81,"index":149,"char":"Q","width":27,"height":39,"xoffset":-1,"yoffset":12,"xadvance":25,"chnl":15,"x":0,"y":43,"page":0},{"id":103,"index":285,"char":"g","width":26,"height":37,"xoffset":0,"yoffset":16,"xadvance":25,"chnl":15,"x":17,"y":0,"page":0},{"id":98,"index":251,"char":"b","width":23,"height":35,"xoffset":2,"yoffset":11,"xadvance":25,"chnl":15,"x":0,"y":83,"page":0},{"id":100,"index":258,"char":"d","width":23,"height":35,"xoffset":0,"yoffset":11,"xadvance":25,"chnl":15,"x":0,"y":119,"page":0},{"id":102,"index":284,"char":"f","width":23,"height":35,"xoffset":1,"yoffset":10,"xadvance":25,"chnl":15,"x":0,"y":155,"page":0},{"id":48,"index":462,"char":"0","width":24,"height":34,"xoffset":0,"yoffset":12,"xadvance":25,"chnl":15,"x":0,"y":191,"page":0},{"id":51,"index":465,"char":"3","width":25,"height":34,"xoffset":0,"yoffset":12,"xadvance":25,"chnl":15,"x":24,"y":83,"page":0},{"id":54,"index":468,"char":"6","width":25,"height":34,"xoffset":1,"yoffset":12,"xadvance":25,"chnl":15,"x":28,"y":38,"page":0},{"id":56,"index":470,"char":"8","width":25,"height":34,"xoffset":0,"yoffset":12,"xadvance":25,"chnl":15,"x":44,"y":0,"page":0},{"id":57,"index":471,"char":"9","width":25,"height":34,"xoffset":0,"yoffset":12,"xadvance":25,"chnl":15,"x":24,"y":118,"page":0},{"id":67,"index":30,"char":"C","width":26,"height":34,"xoffset":-1,"yoffset":12,"xadvance":25,"chnl":15,"x":24,"y":153,"page":0},{"id":71,"index":65,"char":"G","width":26,"height":34,"xoffset":-1,"yoffset":12,"xadvance":25,"chnl":15,"x":25,"y":188,"page":0},{"id":79,"index":115,"char":"O","width":27,"height":34,"xoffset":-1,"yoffset":12,"xadvance":25,"chnl":15,"x":50,"y":73,"page":0},{"id":83,"index":156,"char":"S","width":26,"height":34,"xoffset":-1,"yoffset":12,"xadvance":25,"chnl":15,"x":54,"y":35,"page":0},{"id":104,"index":292,"char":"h","width":23,"height":34,"xoffset":1,"yoffset":11,"xadvance":25,"chnl":15,"x":70,"y":0,"page":0},{"id":105,"index":296,"char":"i","width":23,"height":34,"xoffset":2,"yoffset":11,"xadvance":25,"chnl":15,"x":50,"y":108,"page":0},{"id":107,"index":318,"char":"k","width":24,"height":34,"xoffset":1,"yoffset":11,"xadvance":25,"chnl":15,"x":51,"y":143,"page":0},{"id":108,"index":321,"char":"l","width":23,"height":34,"xoffset":1,"yoffset":11,"xadvance":25,"chnl":15,"x":74,"y":108,"page":0},{"id":49,"index":463,"char":"1","width":24,"height":33,"xoffset":1,"yoffset":12,"xadvance":25,"chnl":15,"x":25,"y":223,"page":0},{"id":50,"index":464,"char":"2","width":25,"height":33,"xoffset":0,"yoffset":12,"xadvance":25,"chnl":15,"x":50,"y":223,"page":0},{"id":52,"index":466,"char":"4","width":26,"height":33,"xoffset":0,"yoffset":12,"xadvance":25,"chnl":15,"x":78,"y":70,"page":0},{"id":53,"index":467,"char":"5","width":25,"height":33,"xoffset":0,"yoffset":12,"xadvance":25,"chnl":15,"x":81,"y":35,"page":0},{"id":55,"index":469,"char":"7","width":24,"height":33,"xoffset":1,"yoffset":12,"xadvance":25,"chnl":15,"x":94,"y":0,"page":0},{"id":65,"index":1,"char":"A","width":28,"height":33,"xoffset":-2,"yoffset":12,"xadvance":25,"chnl":15,"x":52,"y":178,"page":0},{"id":66,"index":29,"char":"B","width":25,"height":33,"xoffset":1,"yoffset":12,"xadvance":25,"chnl":15,"x":76,"y":143,"page":0},{"id":68,"index":36,"char":"D","width":26,"height":33,"xoffset":1,"yoffset":12,"xadvance":25,"chnl":15,"x":98,"y":104,"page":0},{"id":69,"index":42,"char":"E","width":23,"height":33,"xoffset":1,"yoffset":12,"xadvance":25,"chnl":15,"x":105,"y":69,"page":0},{"id":70,"index":63,"char":"F","width":23,"height":33,"xoffset":1,"yoffset":12,"xadvance":25,"chnl":15,"x":107,"y":34,"page":0},{"id":72,"index":72,"char":"H","width":23,"height":33,"xoffset":1,"yoffset":12,"xadvance":25,"chnl":15,"x":119,"y":0,"page":0},{"id":73,"index":76,"char":"I","width":21,"height":33,"xoffset":2,"yoffset":12,"xadvance":25,"chnl":15,"x":76,"y":212,"page":0},{"id":74,"index":93,"char":"J","width":22,"height":33,"xoffset":2,"yoffset":12,"xadvance":25,"chnl":15,"x":81,"y":177,"page":0},{"id":75,"index":95,"char":"K","width":26,"height":33,"xoffset":1,"yoffset":12,"xadvance":25,"chnl":15,"x":102,"y":138,"page":0},{"id":76,"index":97,"char":"L","width":22,"height":33,"xoffset":2,"yoffset":12,"xadvance":25,"chnl":15,"x":125,"y":103,"page":0},{"id":77,"index":105,"char":"M","width":25,"height":33,"xoffset":0,"yoffset":12,"xadvance":25,"chnl":15,"x":129,"y":68,"page":0},{"id":78,"index":106,"char":"N","width":23,"height":33,"xoffset":1,"yoffset":12,"xadvance":25,"chnl":15,"x":131,"y":34,"page":0},{"id":80,"index":147,"char":"P","width":25,"height":33,"xoffset":1,"yoffset":12,"xadvance":25,"chnl":15,"x":143,"y":0,"page":0},{"id":82,"index":150,"char":"R","width":27,"height":33,"xoffset":1,"yoffset":12,"xadvance":25,"chnl":15,"x":98,"y":211,"page":0},{"id":84,"index":164,"char":"T","width":26,"height":33,"xoffset":-1,"yoffset":12,"xadvance":25,"chnl":15,"x":104,"y":172,"page":0},{"id":85,"index":170,"char":"U","width":24,"height":33,"xoffset":0,"yoffset":12,"xadvance":25,"chnl":15,"x":129,"y":137,"page":0},{"id":86,"index":197,"char":"V","width":28,"height":33,"xoffset":-2,"yoffset":12,"xadvance":25,"chnl":15,"x":148,"y":102,"page":0},{"id":87,"index":198,"char":"W","width":29,"height":33,"xoffset":-2,"yoffset":12,"xadvance":25,"chnl":15,"x":126,"y":206,"page":0},{"id":88,"index":203,"char":"X","width":29,"height":33,"xoffset":-2,"yoffset":12,"xadvance":25,"chnl":15,"x":131,"y":171,"page":0},{"id":89,"index":204,"char":"Y","width":28,"height":33,"xoffset":-1,"yoffset":12,"xadvance":25,"chnl":15,"x":154,"y":136,"page":0},{"id":90,"index":213,"char":"Z","width":26,"height":33,"xoffset":-1,"yoffset":12,"xadvance":25,"chnl":15,"x":156,"y":205,"page":0},{"id":112,"index":370,"char":"p","width":23,"height":33,"xoffset":2,"yoffset":19,"xadvance":25,"chnl":15,"x":161,"y":170,"page":0},{"id":113,"index":372,"char":"q","width":23,"height":33,"xoffset":0,"yoffset":19,"xadvance":25,"chnl":15,"x":183,"y":204,"page":0},{"id":116,"index":388,"char":"t","width":24,"height":33,"xoffset":0,"yoffset":13,"xadvance":25,"chnl":15,"x":207,"y":0,"page":0},{"id":121,"index":428,"char":"y","width":25,"height":33,"xoffset":0,"yoffset":20,"xadvance":25,"chnl":15,"x":177,"y":0,"page":0},{"id":119,"index":422,"char":"w","width":29,"height":25,"xoffset":-2,"yoffset":20,"xadvance":25,"chnl":15,"x":207,"y":34,"page":0},{"id":43,"index":663,"char":"+","width":26,"height":25,"xoffset":0,"yoffset":20,"xadvance":25,"chnl":15,"x":177,"y":34,"page":0},{"id":97,"index":223,"char":"a","width":25,"height":26,"xoffset":1,"yoffset":19,"xadvance":25,"chnl":15,"x":155,"y":60,"page":0},{"id":99,"index":252,"char":"c","width":23,"height":26,"xoffset":0,"yoffset":19,"xadvance":25,"chnl":15,"x":0,"y":226,"page":0},{"id":101,"index":263,"char":"e","width":24,"height":26,"xoffset":0,"yoffset":19,"xadvance":25,"chnl":15,"x":232,"y":0,"page":0},{"id":109,"index":328,"char":"m","width":25,"height":26,"xoffset":0,"yoffset":19,"xadvance":25,"chnl":15,"x":177,"y":87,"page":0},{"id":110,"index":329,"char":"n","width":23,"height":26,"xoffset":1,"yoffset":19,"xadvance":25,"chnl":15,"x":181,"y":60,"page":0},{"id":111,"index":338,"char":"o","width":24,"height":26,"xoffset":0,"yoffset":19,"xadvance":25,"chnl":15,"x":207,"y":60,"page":0},{"id":114,"index":373,"char":"r","width":26,"height":26,"xoffset":0,"yoffset":19,"xadvance":25,"chnl":15,"x":207,"y":87,"page":0},{"id":115,"index":379,"char":"s","width":23,"height":26,"xoffset":1,"yoffset":19,"xadvance":25,"chnl":15,"x":232,"y":60,"page":0},{"id":117,"index":394,"char":"u","width":25,"height":26,"xoffset":1,"yoffset":20,"xadvance":25,"chnl":15,"x":207,"y":114,"page":0},{"id":118,"index":421,"char":"v","width":26,"height":25,"xoffset":0,"yoffset":20,"xadvance":25,"chnl":15,"x":183,"y":141,"page":0},{"id":120,"index":427,"char":"x","width":25,"height":25,"xoffset":0,"yoffset":20,"xadvance":25,"chnl":15,"x":185,"y":167,"page":0},{"id":122,"index":437,"char":"z","width":21,"height":25,"xoffset":2,"yoffset":20,"xadvance":25,"chnl":15,"x":155,"y":34,"page":0},{"id":42,"index":580,"char":"*","width":22,"height":21,"xoffset":2,"yoffset":12,"xadvance":25,"chnl":15,"x":234,"y":87,"page":0},{"id":45,"index":588,"char":"-","width":15,"height":8,"xoffset":5,"yoffset":27,"xadvance":25,"chnl":15,"x":28,"y":73,"page":0},{"id":46,"index":569,"char":".","width":10,"height":10,"xoffset":8,"yoffset":35,"xadvance":25,"chnl":15,"x":76,"y":246,"page":0}],"info":{"face":"ChivoMono-Medium","size":42,"bold":0,"italic":0,"charset":[".","*","-","+","0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"],"unicode":1,"stretchH":100,"smooth":1,"aa":1,"padding":[2,2,2,2],"spacing":[0,0]},"common":{"lineHeight":50,"base":41,"scaleW":256,"scaleH":256,"pages":1,"packed":0,"alphaChnl":0,"redChnl":0,"greenChnl":0,"blueChnl":0},"distanceField":{"fieldType":"msdf","distanceRange":4},"kernings":[]} \ No newline at end of file diff --git a/public/assets/ChivoMono-Medium.png b/public/assets/ChivoMono-Medium.png new file mode 100644 index 0000000..5a5e872 Binary files /dev/null and b/public/assets/ChivoMono-Medium.png differ diff --git a/public/assets/forkawesome-webfont.ttf b/public/assets/forkawesome-webfont.ttf new file mode 100644 index 0000000..6cf62ef Binary files /dev/null and b/public/assets/forkawesome-webfont.ttf differ diff --git a/public/assets/lib_matcaps_Chrome_Blue_Tint-White.png b/public/assets/lib_matcaps_Chrome_Blue_Tint-White.png new file mode 100644 index 0000000..81e23e9 Binary files /dev/null and b/public/assets/lib_matcaps_Chrome_Blue_Tint-White.png differ diff --git a/src/App.svelte b/src/App.svelte new file mode 100644 index 0000000..35d5fa4 --- /dev/null +++ b/src/App.svelte @@ -0,0 +1,47 @@ +<script type='ts'> + import { onMount } from "svelte"; + import { WWTimer } from './stores/WWTimer' + import { fade } from "svelte/transition"; + + let cablesLoaded = $state(false); + + const timers = [ + new WWTimer(500), + new WWTimer(1000), + new WWTimer(2000) +] + +let timedOut = $state(false) + + onMount( () => { + document.addEventListener("CABLES.jsLoaded", function () { + cablesLoaded = true; + }) +}); + +</script> + +<svelte:head> + <script type="text/javascript" src="/src/cables-js/patch.js" async></script> + <script type="module" src="/src/cables-js/loader.svelte.js" ></script> +</svelte:head> + +<canvas id="glcanvas" width="100vw" height="100vh" ></canvas> + +{#if cablesLoaded } + { timers[2].start( ()=> timedOut = true ) } + {#if !timedOut} + <pre class='console-text' out:fade>NEL SRVB</pre> + {/if} +{:else} + <pre class='console-text' in:fade>Loading...</pre> +{/if} + +<style> + .console-text { + position: absolute; + left: 1rem; + top: 1rem; + color: chartreuse; + } +</style> \ No newline at end of file diff --git a/src/cables-js/loader.svelte.js b/src/cables-js/loader.svelte.js new file mode 100644 index 0000000..2672ebc --- /dev/null +++ b/src/cables-js/loader.svelte.js @@ -0,0 +1,18 @@ + + +document.addEventListener("CABLES.jsLoaded", function () { + // Now CABLES is defined, proceed with initialization + CABLES.patch = new CABLES.Patch({ + patch: CABLES.exportedPatch, + prefixAssetPath: "", + assetPath: "assets/", + jsPath: "js/", + glCanvasId: "glcanvas", + glCanvasResizeToWindow: true, + onError: (e)=> console.error(e) , + onPatchLoaded: ()=> console.log("Patch loaded") , + onFinishedLoading: ()=> console.log("Cables done loading"), + canvas: { alpha: true, premultipliedAlpha: true }, // make canvas transparent + }); + }); + diff --git a/src/cables-js/patch.js b/src/cables-js/patch.js new file mode 100644 index 0000000..598b070 --- /dev/null +++ b/src/cables-js/patch.js @@ -0,0 +1,19212 @@ +var CABLES; +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "default": () => (/* binding */ core) +}); + +// NAMESPACE OBJECT: ./src/core/base64.js +var base64_namespaceObject = {}; +__webpack_require__.r(base64_namespaceObject); +__webpack_require__.d(base64_namespaceObject, { + "b64decTypedArray": () => (b64decTypedArray), + "b64encTypesArray": () => (b64encTypesArray), + "base64Chars": () => (base64Chars), + "base64lookup": () => (base64lookup) +}); + +// NAMESPACE OBJECT: ./src/core/utils.js +var utils_namespaceObject = {}; +__webpack_require__.r(utils_namespaceObject); +__webpack_require__.d(utils_namespaceObject, { + "UTILS": () => (UTILS), + "ajax": () => (ajax), + "ajaxSync": () => (ajaxSync), + "basename": () => (basename), + "cacheBust": () => (cacheBust), + "clamp": () => (clamp), + "cleanJson": () => (cleanJson), + "copyArray": () => (copyArray), + "filename": () => (filename), + "generateUUID": () => (generateUUID), + "getShortOpName": () => (getShortOpName), + "keyCodeToName": () => (keyCodeToName), + "logStack": () => (logStack), + "map": () => (map), + "prefixedHash": () => (prefixedHash), + "request": () => (request), + "shortId": () => (shortId), + "shuffleArray": () => (shuffleArray), + "simpleId": () => (simpleId), + "smoothStep": () => (smoothStep), + "smootherStep": () => (smootherStep), + "uuid": () => (uuid) +}); + +// NAMESPACE OBJECT: ./src/core/anim.js +var anim_namespaceObject = {}; +__webpack_require__.r(anim_namespaceObject); +__webpack_require__.d(anim_namespaceObject, { + "ANIM": () => (ANIM), + "Anim": () => (Anim) +}); + +;// CONCATENATED MODULE: ./src/core/base64.js +const base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +// Use a lookup table to find the index. +const _base64lookup = new Uint8Array(256); +for (let i = 0; i < base64Chars.length; i++) _base64lookup[base64Chars.charCodeAt(i)] = i; + +const base64lookup = _base64lookup; + +const b64encTypesArray = function (arraybuffer) +{ + if (arraybuffer.buffer) arraybuffer = arraybuffer.buffer; + let bytes = new Uint8Array(arraybuffer), + i, + len = bytes.length, + base64 = ""; + + for (i = 0; i < len; i += 3) + { + base64 += base64Chars[bytes[i] >> 2]; + base64 += base64Chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)]; + base64 += base64Chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)]; + base64 += base64Chars[bytes[i + 2] & 63]; + } + + if (len % 3 === 2) base64 = base64.substring(0, base64.length - 1) + "="; + else if (len % 3 === 1) base64 = base64.substring(0, base64.length - 2) + "=="; + + return base64; +}; + +const b64decTypedArray = function (base64) +{ + let bufferLength = base64.length * 0.75, + len = base64.length, + i, + p = 0, + encoded1, + encoded2, + encoded3, + encoded4; + + if (base64[base64.length - 1] === "=") + { + bufferLength--; + if (base64[base64.length - 2] === "=") bufferLength--; + } + + let arraybuffer = new ArrayBuffer(bufferLength), + bytes = new Uint8Array(arraybuffer); + + for (i = 0; i < len; i += 4) + { + encoded1 = base64lookup[base64.charCodeAt(i)]; + encoded2 = base64lookup[base64.charCodeAt(i + 1)]; + encoded3 = base64lookup[base64.charCodeAt(i + 2)]; + encoded4 = base64lookup[base64.charCodeAt(i + 3)]; + + bytes[p++] = (encoded1 << 2) | (encoded2 >> 4); + bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2); + bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63); + } + + return arraybuffer; +}; + +;// CONCATENATED MODULE: ./src/core/constants.js +const CONSTANTS = { + "ANIM": { + "EASINGS": [ + "linear", + "absolute", + "smoothstep", + "smootherstep", + "Cubic In", + "Cubic Out", + "Cubic In Out", + "Expo In", + "Expo Out", + "Expo In Out", + "Sin In", + "Sin Out", + "Sin In Out", + "Quart In", + "Quart Out", + "Quart In Out", + "Quint In", + "Quint Out", + "Quint In Out", + "Back In", + "Back Out", + "Back In Out", + "Elastic In", + "Elastic Out", + "Bounce In", + "Bounce Out", + ], + "EASING_LINEAR": 0, + "EASING_ABSOLUTE": 1, + "EASING_SMOOTHSTEP": 2, + "EASING_SMOOTHERSTEP": 3, + "EASING_CUBICSPLINE": 4, + + "EASING_CUBIC_IN": 5, + "EASING_CUBIC_OUT": 6, + "EASING_CUBIC_INOUT": 7, + + "EASING_EXPO_IN": 8, + "EASING_EXPO_OUT": 9, + "EASING_EXPO_INOUT": 10, + + "EASING_SIN_IN": 11, + "EASING_SIN_OUT": 12, + "EASING_SIN_INOUT": 13, + + "EASING_BACK_IN": 14, + "EASING_BACK_OUT": 15, + "EASING_BACK_INOUT": 16, + + "EASING_ELASTIC_IN": 17, + "EASING_ELASTIC_OUT": 18, + + "EASING_BOUNCE_IN": 19, + "EASING_BOUNCE_OUT": 21, + + "EASING_QUART_IN": 22, + "EASING_QUART_OUT": 23, + "EASING_QUART_INOUT": 24, + + "EASING_QUINT_IN": 25, + "EASING_QUINT_OUT": 26, + "EASING_QUINT_INOUT": 27, + }, + + "OP": { + "OP_PORT_TYPE_VALUE": 0, + "OP_PORT_TYPE_NUMBER": 0, + "OP_PORT_TYPE_FUNCTION": 1, + "OP_PORT_TYPE_TRIGGER": 1, + "OP_PORT_TYPE_OBJECT": 2, + "OP_PORT_TYPE_TEXTURE": 2, + "OP_PORT_TYPE_ARRAY": 3, + "OP_PORT_TYPE_DYNAMIC": 4, + "OP_PORT_TYPE_STRING": 5, + + "OP_VERSION_PREFIX": "_v", + }, + + "PORT": { + "PORT_DIR_IN": 0, + "PORT_DIR_OUT": 1, + }, + + "PACO": { + "PACO_CLEAR": 0, + "PACO_VALUECHANGE": 1, + "PACO_OP_DELETE": 2, + "PACO_UNLINK": 3, + "PACO_LINK": 4, + "PACO_LOAD": 5, + "PACO_OP_CREATE": 6, + "PACO_OP_ENABLE": 7, + "PACO_OP_DISABLE": 8, + "PACO_UIATTRIBS": 9, + "PACO_VARIABLES": 10, + "PACO_TRIGGERS": 11, + "PACO_PORT_SETVARIABLE": 12, + "PACO_PORT_SETANIMATED": 13, + "PACO_PORT_ANIM_UPDATED": 14, + "PACO_DESERIALIZE": 15 + + }, +}; + +;// CONCATENATED MODULE: ./src/core/utils.js + +/** + * @external CABLES + * @namespace Utils + */ + + + +const UTILS = {}; +/** + * Merge two Float32Arrays. + * @function float32Concat + * @memberof Utils + * @param {Float32Array} first Left-hand side array + * @param {Float32Array} second Right-hand side array + * @return {Float32Array} + * @static + */ +UTILS.float32Concat = function (first, second) +{ + if (!(first instanceof Float32Array)) first = new Float32Array(first); + if (!(second instanceof Float32Array)) second = new Float32Array(second); + + const result = new Float32Array(first.length + second.length); + + result.set(first); + result.set(second, first.length); + + return result; +}; + +/** + * get op shortname: only last part of fullname and without version + * @function getShortOpName + * @memberof CABLES + * @param {String} full op name + * @static + */ +const getShortOpName = function (fullname) +{ + let name = fullname.split(".")[fullname.split(".").length - 1]; + + if (name.contains(CONSTANTS.OP.OP_VERSION_PREFIX)) + { + const n = name.split(CONSTANTS.OP.OP_VERSION_PREFIX)[1]; + name = name.substring(0, name.length - (CONSTANTS.OP.OP_VERSION_PREFIX + n).length); + } + return name; +}; + +/** + * randomize order of an array + * @function shuffleArray + * @memberof Utils + * @param {Array|Float32Array} array {Array} original + * @return {Array|Float32Array} shuffled array + * @static + */ +const shuffleArray = function (array) +{ + for (let i = array.length - 1; i > 0; i--) + { + const j = Math.floor(Math.seededRandom() * (i + 1)); + const temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + return array; +}; + + +/** + * generate a short "relativly unique" id + * @function shortId + * @memberof Utils + * @return {String} generated ID + * @static + */ + +const _shortIds = {}; +const _shortId = function () +{ + let str = Math.random().toString(36).substr(2, 9); + + if (_shortIds.hasOwnProperty(str)) str = _shortId(); + _shortIds[str] = true; + return str; +}; +const shortId = _shortId; + + +/** + * generate a UUID + * @function uuid + * @memberof Utils + * @return {String} generated UUID + * @static + */ +const _uuid = function () +{ + let d = new Date().getTime(); + const uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => + { + const r = (d + Math.random() * 16) % 16 | 0; + d = Math.floor(d / 16); + return (c == "x" ? r : (r & 0x3) | 0x8).toString(16); + }); + return uuid; +}; +const uuid = _uuid; +const generateUUID = _uuid; + + + +function cleanJson(obj) +{ + for (const i in obj) + { + if (obj[i] && typeof objValue === "object" && obj[i].constructor === Object) obj[i] = cleanJson(obj[i]); + + if (obj[i] === null || obj[i] === undefined) delete obj[i]; + else if (Array.isArray(obj[i]) && obj[i].length == 0) delete obj[i]; + } + + return obj; +} + + +/** + * @see http://stackoverflow.com/q/7616461/940217 + * @return {string} + */ +const _prefixedHash = function (str, prefix = "id") +{ + let hash = 0; + if (Array.prototype.reduce) + { + hash = str.split("").reduce((a, b) => { a = ((a << 5) - a) + b.charCodeAt(0); return a & a; }, 0); + } + else + { + if (str.length > 0) + { + for (let i = 0; i < str.length; i++) + { + let character = str.charCodeAt(i); + hash = ((hash << 5) - hash) + character; + hash &= hash; // Convert to 32bit integer + } + } + } + return prefix + "" + hash; +}; +const prefixedHash = _prefixedHash; + +/** + * generate a simple ID + * @function simpleId + * @memberof Utils + * @return {Number} new id + * @static + */ +let simpleIdCounter = 0; +const simpleId = function () +{ + simpleIdCounter++; + return simpleIdCounter; +}; + +/** + * smoothStep a value + * @function smoothStep + * @memberof Utils + * @function + * @param {Number} value value to be smoothed [0-1] + * @return {Number} smoothed value + * @static + */ +const smoothStep = function (perc) +{ + const x = Math.max(0, Math.min(1, (perc - 0) / (1 - 0))); + perc = x * x * (3 - 2 * x); // smoothstep + return perc; +}; + +/** + * smootherstep a value + * @function smootherStep + * @memberof Utils + * @param value {Number} value to be smoothed [0-1] + * @return {Number} smoothed value + * @static + */ +const smootherStep = function (perc) +{ + const x = Math.max(0, Math.min(1, (perc - 0) / (1 - 0))); + perc = x * x * x * (x * (x * 6 - 15) + 10); // smootherstep + return perc; +}; + + +/** + * clamp number / make sure its between min/max + * @function clamp + * @memberof Utils + * @param {Number} value value to be mapped + * @param {Number} min minimum value + * @param {Number} max maximum value + * @static + */ +const clamp = function (value, min, max) +{ + return Math.min(Math.max(value, min), max); +}; + +/** + * map a value in a range to a value in another range + * @function map + * @memberof Utils + * @param {Number} value value to be mapped + * @param {Number} oldMin old range minimum value + * @param {Number} oldMax old range maximum value + * @param {Number} newMin new range minimum value + * @param {Number} newMax new range maximum value + * @return {Number} mapped value + * @static + */ +const map = function (x, _oldMin, _oldMax, _newMin, _newMax, _easing) +{ + if (x >= _oldMax) return _newMax; + if (x <= _oldMin) return _newMin; + + let reverseInput = false; + const oldMin = Math.min(_oldMin, _oldMax); + const oldMax = Math.max(_oldMin, _oldMax); + if (oldMin != _oldMin) reverseInput = true; + + let reverseOutput = false; + const newMin = Math.min(_newMin, _newMax); + const newMax = Math.max(_newMin, _newMax); + if (newMin != _newMin) reverseOutput = true; + + let portion = 0; + let r = 0; + + if (reverseInput) portion = ((oldMax - x) * (newMax - newMin)) / (oldMax - oldMin); + else portion = ((x - oldMin) * (newMax - newMin)) / (oldMax - oldMin); + + if (reverseOutput) r = newMax - portion; + else r = portion + newMin; + + if (!_easing) return r; + if (_easing == 1) + { + // smoothstep + x = Math.max(0, Math.min(1, (r - _newMin) / (_newMax - _newMin))); + return _newMin + x * x * (3 - 2 * x) * (_newMax - _newMin); + } + if (_easing == 2) + { + // smootherstep + x = Math.max(0, Math.min(1, (r - _newMin) / (_newMax - _newMin))); + return _newMin + x * x * x * (x * (x * 6 - 15) + 10) * (_newMax - _newMin); + } + + return r; +}; + +/** + * @namespace Math + */ +/** + * set random seed for seededRandom() + * @memberof Math + * @type Number + * @static + */ +Math.randomSeed = 1; + + +Math.setRandomSeed = function (seed) +{ + // https://github.com/cables-gl/cables_docs/issues/622 + Math.randomSeed = seed * 50728129; + if (seed != 0) + { + Math.randomSeed = Math.seededRandom() * 17624813; + Math.randomSeed = Math.seededRandom() * 9737333; + } +}; + + +/** + * generate a seeded random number + * @function seededRandom + * @memberof Math + * @param {Number} max minimum possible random number + * @param {Number} min maximum possible random number + * @return {Number} random value + * @static + */ +Math.seededRandom = function (max, min) +{ + if (Math.randomSeed === 0) Math.randomSeed = Math.random() * 999; + max = max || 1; + min = min || 0; + + Math.randomSeed = (Math.randomSeed * 9301 + 49297) % 233280; + const rnd = Math.randomSeed / 233280.0; + + return min + rnd * (max - min); +}; + + +// ---------------------------------------------------------------- + +/** + * returns true if parameter is a number + * @function isNumeric + * @memberof Utils + * @param {Any} value The value to check. + * @return {Boolean} + * @static + */ +UTILS.isNumeric = function (n) +{ + return !isNaN(parseFloat(n)) && isFinite(n); +}; + +/** + * returns true if parameter is array + * @function isArray + * @param {Any} value Value to check + * @memberof Utils + * @return {Boolean} + * @static + */ +UTILS.isArray = function (v) +{ + return Object.prototype.toString.call(v) === "[object Array]"; +}; + +/** + * @namespace String + */ + +/** + * append a linebreak to a string + * @function endl + * @memberof String + * @return {String} string with newline break appended ('\n') + */ +String.prototype.endl = function () +{ + return this + "\n"; +}; + +/** + * return true if string starts with prefix + * @function startsWith + * @memberof String + * @param {String} prefix The prefix to check. + * @return {Boolean} + */ +String.prototype.startsWith = function (prefix) +{ + return this.indexOf(prefix) === 0; +}; + +/** + * return true if string ends with suffix + * @function endsWith + * @memberof String + * @param {String} suffix + * @return {Boolean} + */ +String.prototype.endsWith = String.prototype.endsWith || function (suffix) +{ + return this.match(suffix + "$") == suffix; +}; + +/** + * return true if string contains string + * @function contains + * @memberof String + * @param {String} searchStr + * @return {Boolean} + */ +String.prototype.contains = String.prototype.contains || function (searchStr) +{ + return this.indexOf(searchStr) > -1; +}; + + + +// ---------------------------------------------------------------- + +/** + * append a unique/random parameter to a url, so the browser is forced to reload the file, even if its cached + * @function cacheBust + * @static + * @memberof Utils + * @param {String} url The url to append the cachebuster parameter to. + * @return {String} url with cachebuster parameter + */ +const cacheBust = function (url) +{ + if (url.contains("?")) url += "&"; + else url += "?"; + return url + "cache=" + CABLES.uuid(); +}; + +/** + * copy the content of an array + * @function copyArray + * @static + * @memberof Utils + * @param {Array} sourceArray + * @param {Array} dst optional + * @return {Array} dst + */ +const copyArray = function (src, dst) +{ + if (!src) return null; + dst = dst || []; + dst.length = src.length; + for (let i = 0; i < src.length; i++) + { + dst[i] = src[i]; + } + + return dst; +}; + + +/** + * return the filename part of a url without extension + * @function basename + * @static + * @memberof Utils + * @param {String} url + * @return {String} just the filename + */ +const basename = function (url) +{ + let name = CABLES.filename(url); + + const parts2 = name.split("."); + name = parts2[0]; + + return name; +}; + +/** + * output a stacktrace to the console + * @function logStack + * @static + * @memberof Utils + */ +const logStack = function () +{ + console.log("logstack", (new Error()).stack); +}; + +/** + * return the filename part of a url + * @function filename + * @static + * @memberof Utils + * @param {String} url + * @return {String} just the filename + */ +const filename = function (url) +{ + let name = ""; + if (!url) return ""; + + if (url.startsWith("data:") && url.contains(":")) + { + const parts = url.split(","); + return parts[0]; + } + + const parts = (url + "").split("/"); + if (parts.length > 0) + { + const str = parts[parts.length - 1]; + let parts2 = str.split("?"); + name = parts2[0]; + } + + return name || ""; +}; + + +const ajaxSync = function (url, cb, method, post, contenttype) +{ + request({ + "url": url, + "cb": cb, + "method": method, + "data": post, + "contenttype": contenttype, + "sync": true, + }); +}; + +/** + * make an ajax request + * @function ajax + * @static + */ +const ajax = function (url, cb, method, post, contenttype, jsonP, headers = {}, options = {}) +{ + const requestOptions = { + "url": url, + "cb": cb, + "method": method, + "data": post, + "contenttype": contenttype, + "sync": false, + "jsonP": jsonP, + "headers": headers, + }; + if (options && options.credentials) requestOptions.credentials = options.credentials; + request(requestOptions); +}; + +const request = function (options) +{ + if (!options.hasOwnProperty("asynch")) options.asynch = true; + + let xhr; + try + { + xhr = new XMLHttpRequest(); + } + catch (e) {} + + xhr.onreadystatechange = function () + { + if (xhr.readyState != 4) return; + + if (options.cb) + { + if (xhr.status == 200 || xhr.status == 0) options.cb(false, xhr.responseText, xhr); + else options.cb(true, xhr.responseText, xhr); + } + }; + + try + { + xhr.open(options.method ? options.method.toUpperCase() : "GET", options.url, !options.sync); + } + catch (e) + { + if (options.cb && e) options.cb(true, e.msg, xhr); + } + + if (typeof options.headers === "object") + { + const keys = Object.keys(options.headers); + for (let i = 0; i < keys.length; i++) + { + const name = keys[i]; + const value = options.headers[name]; + xhr.setRequestHeader(name, value); + } + } + + if (options.credentials && options.credentials !== "omit") + { + xhr.withCredentials = true; + } + + try + { + if (!options.post && !options.data) + { + xhr.send(); + } + else + { + xhr.setRequestHeader( + "Content-type", + options.contenttype ? options.contenttype : "application/x-www-form-urlencoded", + ); + xhr.send(options.data || options.post); + } + } + catch (e) + { + if (options.cb) options.cb(true, e.msg, xhr); + } +}; + + +const keyCodeToName = function (keyCode) +{ + if (!keyCode && keyCode !== 0) return "Unidentified"; + const keys = { + "8": "Backspace", + "9": "Tab", + "12": "Clear", + "13": "Enter", + "16": "Shift", + "17": "Control", + "18": "Alt", + "19": "Pause", + "20": "CapsLock", + "27": "Escape", + "32": "Space", + "33": "PageUp", + "34": "PageDown", + "35": "End", + "36": "Home", + "37": "ArrowLeft", + "38": "ArrowUp", + "39": "ArrowRight", + "40": "ArrowDown", + "45": "Insert", + "46": "Delete", + "112": "F1", + "113": "F2", + "114": "F3", + "115": "F4", + "116": "F5", + "117": "F6", + "118": "F7", + "119": "F8", + "120": "F9", + "121": "F10", + "122": "F11", + "123": "F12", + "144": "NumLock", + "145": "ScrollLock", + "224": "Meta" + }; + if (keys[keyCode]) + { + return keys[keyCode]; + } + else + { + return String.fromCharCode(keyCode); + } +}; +// ---------------------------------------------------------------- + +window.performance = window.performance || { + "offset": Date.now(), + "now": function now() + { + return Date.now() - this.offset; + }, +}; + + + +;// CONCATENATED MODULE: ../shared/client/src/logger.js +/* eslint-disable no-console */ + +class Logger +{ + constructor(initiator) + { + this._logs = []; + this.initiator = initiator; + } + + stack(t) + { + console.info("[" + this.initiator + "] ", t); + console.log((new Error()).stack); + } + + groupCollapsed(t) + { + console.groupCollapsed("[" + this.initiator + "] " + t); + } + + table(t) + { + console.table(t); + } + + groupEnd() + { + console.groupEnd(); + } + + error(args) + { + console.error("[" + this.initiator + "]", ...arguments); + if (window.gui) window.gui.emitEvent("coreLogEvent", this.initiator, "error", arguments); + } + + info(args) + { + console.error("[" + this.initiator + "]", ...arguments); + if (window.gui) window.gui.emitEvent("coreLogEvent", this.initiator, "info", arguments); + } + + warn(args) + { + console.warn("[" + this.initiator + "]", ...arguments); + // console.log((new Error()).stack); + if (window.gui) window.gui.emitEvent("coreLogEvent", this.initiator, "warn", arguments); + } + + verbose() + { + if ((CABLES.UI && CABLES.UI.logFilter.shouldPrint(this.initiator, ...arguments)) || !CABLES.logSilent) + console.log("[" + this.initiator + "]", ...arguments); + if (window.gui) window.gui.emitEvent("coreLogEvent", this.initiator, "verbose", arguments); + } + + log(args) + { + if ((CABLES.UI && CABLES.UI.logFilter.shouldPrint(this.initiator, ...arguments)) || !CABLES.logSilent) + console.log("[" + this.initiator + "]", ...arguments); + if (window.gui) window.gui.emitEvent("coreLogEvent", this.initiator, "log", arguments); + } + + userInteraction(text) + { + // this.log({ "initiator": "userinteraction", "text": text }); + } +} + +;// CONCATENATED MODULE: ./src/core/anim_key.js + + +const Key = function (obj) +{ + this.time = 0.0; + this.value = 0.0; + // this.ui = null; + this.onChange = null; + this._easing = 0; + // this.bezTangIn = 0; + // this.bezTangOut = 0; + // this.bezTime = 0.5; + // this.bezValue = 0; + // this.bezTimeIn = -0.5; + // this.bezValueIn = 0; + + this.cb = null; + this.cbTriggered = false; + + // const bezierAnim = null; + // this._updateBezier = false; + + this.setEasing(CONSTANTS.ANIM.EASING_LINEAR); + this.set(obj); +}; + +Key.cubicSpline = function (perc, key1, key2) +{ + let + previousPoint = key1.value, + previousTangent = key1.bezTangOut, + nextPoint = key2.value, + nextTangent = key2.bezTangIn; + let t = perc; + let t2 = t * t; + let t3 = t2 * t; + + return (2 * t3 - 3 * t2 + 1) * previousPoint + (t3 - 2 * t2 + t) * previousTangent + (-2 * t3 + 3 * t2) * nextPoint + (t3 - t2) * nextTangent; +}; + +Key.easeCubicSpline = function (perc, key2) +{ + return Key.cubicSpline(perc, this, key2); +}; + + +Key.linear = function (perc, key1, key2) +{ + return parseFloat(key1.value) + parseFloat(key2.value - key1.value) * perc; +}; + +Key.easeLinear = function (perc, key2) +{ + return Key.linear(perc, this, key2); +}; + +Key.easeAbsolute = function (perc, key2) +{ + return this.value; +}; + +const easeExpoIn = function (t) +{ + return (t = 2 ** (10 * (t - 1))); +}; + +Key.easeExpoIn = function (t, key2) +{ + t = easeExpoIn(t); + return Key.linear(t, this, key2); +}; + +const easeExpoOut = function (t) +{ + t = -(2 ** (-10 * t)) + 1; + return t; +}; + +Key.easeExpoOut = function (t, key2) +{ + t = easeExpoOut(t); + return Key.linear(t, this, key2); +}; + +const easeExpoInOut = function (t) +{ + t *= 2; + if (t < 1) + { + t = 0.5 * 2 ** (10 * (t - 1)); + } + else + { + t--; + t = 0.5 * (-(2 ** (-10 * t)) + 2); + } + return t; +}; + +Key.easeExpoInOut = function (t, key2) +{ + t = easeExpoInOut(t); + return Key.linear(t, this, key2); +}; + +Key.easeSinIn = function (t, key2) +{ + t = -1 * Math.cos((t * Math.PI) / 2) + 1; + return Key.linear(t, this, key2); +}; + +Key.easeSinOut = function (t, key2) +{ + t = Math.sin((t * Math.PI) / 2); + return Key.linear(t, this, key2); +}; + +Key.easeSinInOut = function (t, key2) +{ + t = -0.5 * (Math.cos(Math.PI * t) - 1.0); + return Key.linear(t, this, key2); +}; + +const easeCubicIn = function (t) +{ + t = t * t * t; + return t; +}; + +Key.easeCubicIn = function (t, key2) +{ + t = easeCubicIn(t); + return Key.linear(t, this, key2); +}; + + +// b 0 +// c 1/2 or 1 +// d always 1 +// easeOutCubic: function (x, t, b, c, d) { +// return c*((t=t/d-1)*t*t + 1) + b; + +Key.easeInQuint = function (t, key2) +{ + t = t * t * t * t * t; + return Key.linear(t, this, key2); +}; +Key.easeOutQuint = function (t, key2) +{ + t = (t -= 1) * t * t * t * t + 1; + return Key.linear(t, this, key2); +}; +Key.easeInOutQuint = function (t, key2) +{ + if ((t /= 0.5) < 1) t = 0.5 * t * t * t * t * t; + else t = 0.5 * ((t -= 2) * t * t * t * t + 2); + return Key.linear(t, this, key2); +}; + +Key.easeInQuart = function (t, key2) +{ + t = t * t * t * t; + return Key.linear(t, this, key2); +}; + +Key.easeOutQuart = function (t, key2) +{ + // return -c * ((t=t/d-1)*t*t*t - 1) + b; + t = -1 * ((t -= 1) * t * t * t - 1); + return Key.linear(t, this, key2); +}; + +Key.easeInOutQuart = function (t, key2) +{ + if ((t /= 0.5) < 1) t = 0.5 * t * t * t * t; + else t = -0.5 * ((t -= 2) * t * t * t - 2); + return Key.linear(t, this, key2); +}; + +Key.bounce = function (t) +{ + if ((t /= 1) < 1 / 2.75) t = 7.5625 * t * t; + else if (t < 2 / 2.75) t = 7.5625 * (t -= 1.5 / 2.75) * t + 0.75; + else if (t < 2.5 / 2.75) t = 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375; + else t = 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375; + return t; +}; + +Key.easeInBounce = function (t, key2) +{ + return Key.linear(Key.bounce(t), this, key2); + // return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d); +}; + +Key.easeOutBounce = function (t, key2) +{ + return Key.linear(Key.bounce(t), this, key2); +}; + +Key.easeInElastic = function (t, key2) +{ + let s = 1.70158; + let p = 0; + let a = 1; + + const b = 0; + const d = 1; + const c = 1; + + if (t === 0) t = b; + else if ((t /= d) == 1) t = b + c; + else + { + if (!p) p = d * 0.3; + if (a < Math.abs(c)) + { + a = c; + s = p / 4; + } + else s = (p / (2 * Math.PI)) * Math.asin(c / a); + t = -(a * 2 ** (10 * (t -= 1)) * Math.sin(((t * d - s) * (2 * Math.PI)) / p)) + b; + } + + return Key.linear(t, this, key2); +}; + + +Key.easeOutElastic = function (t, key2) +{ + let s = 1.70158; + let p = 0; + let a = 1; + + const b = 0; + const d = 1; + const c = 1; + + if (t === 0) t = b; + else if ((t /= d) == 1) t = b + c; + else + { + if (!p) p = d * 0.3; + if (a < Math.abs(c)) + { + a = c; + s = p / 4; + } + else s = (p / (2 * Math.PI)) * Math.asin(c / a); + t = a * 2 ** (-10 * t) * Math.sin(((t * d - s) * (2 * Math.PI)) / p) + c + b; + } + + return Key.linear(t, this, key2); +}; + +Key.easeInBack = function (t, key2) +{ + const s = 1.70158; + t = t * t * ((s + 1) * t - s); + + return Key.linear(t, this, key2); +}; + +Key.easeOutBack = function (t, key2) +{ + const s = 1.70158; + t = (t = t / 1 - 1) * t * ((s + 1) * t + s) + 1; + + return Key.linear(t, this, key2); +}; + +Key.easeInOutBack = function (t, key2) +{ + let s = 1.70158; + const c = 1 / 2; + if ((t /= 1 / 2) < 1) t = c * (t * t * (((s *= 1.525) + 1) * t - s)); + else t = c * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2); + + return Key.linear(t, this, key2); +}; + +const easeCubicOut = function (t) +{ + t--; + t = t * t * t + 1; + return t; +}; + +Key.easeCubicOut = function (t, key2) +{ + t = easeCubicOut(t); + return Key.linear(t, this, key2); +}; + +const easeCubicInOut = function (t) +{ + t *= 2; + if (t < 1) t = 0.5 * t * t * t; + else + { + t -= 2; + t = 0.5 * (t * t * t + 2); + } + return t; +}; + +Key.easeCubicInOut = function (t, key2) +{ + t = easeCubicInOut(t); + return Key.linear(t, this, key2); +}; + +Key.easeSmoothStep = function (perc, key2) +{ + // var x = Math.max(0, Math.min(1, (perc-0)/(1-0))); + const x = Math.max(0, Math.min(1, perc)); + perc = x * x * (3 - 2 * x); // smoothstep + return Key.linear(perc, this, key2); +}; + +Key.easeSmootherStep = function (perc, key2) +{ + const x = Math.max(0, Math.min(1, (perc - 0) / (1 - 0))); + perc = x * x * x * (x * (x * 6 - 15) + 10); // smootherstep + return Key.linear(perc, this, key2); +}; + +Key.prototype.setEasing = function (e) +{ + this._easing = e; + + if (this._easing == CONSTANTS.ANIM.EASING_LINEAR) this.ease = Key.easeLinear; + else if (this._easing == CONSTANTS.ANIM.EASING_ABSOLUTE) this.ease = Key.easeAbsolute; + else if (this._easing == CONSTANTS.ANIM.EASING_SMOOTHSTEP) this.ease = Key.easeSmoothStep; + else if (this._easing == CONSTANTS.ANIM.EASING_SMOOTHERSTEP) this.ease = Key.easeSmootherStep; + else if (this._easing == CONSTANTS.ANIM.EASING_CUBIC_IN) this.ease = Key.easeCubicIn; + else if (this._easing == CONSTANTS.ANIM.EASING_CUBIC_OUT) this.ease = Key.easeCubicOut; + else if (this._easing == CONSTANTS.ANIM.EASING_CUBIC_INOUT) this.ease = Key.easeCubicInOut; + else if (this._easing == CONSTANTS.ANIM.EASING_EXPO_IN) this.ease = Key.easeExpoIn; + else if (this._easing == CONSTANTS.ANIM.EASING_EXPO_OUT) this.ease = Key.easeExpoOut; + else if (this._easing == CONSTANTS.ANIM.EASING_EXPO_INOUT) this.ease = Key.easeExpoInOut; + else if (this._easing == CONSTANTS.ANIM.EASING_SIN_IN) this.ease = Key.easeSinIn; + else if (this._easing == CONSTANTS.ANIM.EASING_SIN_OUT) this.ease = Key.easeSinOut; + else if (this._easing == CONSTANTS.ANIM.EASING_SIN_INOUT) this.ease = Key.easeSinInOut; + else if (this._easing == CONSTANTS.ANIM.EASING_BACK_OUT) this.ease = Key.easeOutBack; + else if (this._easing == CONSTANTS.ANIM.EASING_BACK_IN) this.ease = Key.easeInBack; + else if (this._easing == CONSTANTS.ANIM.EASING_BACK_INOUT) this.ease = Key.easeInOutBack; + else if (this._easing == CONSTANTS.ANIM.EASING_ELASTIC_IN) this.ease = Key.easeInElastic; + else if (this._easing == CONSTANTS.ANIM.EASING_ELASTIC_OUT) this.ease = Key.easeOutElastic; + else if (this._easing == CONSTANTS.ANIM.EASING_ELASTIC_INOUT) this.ease = Key.easeElasticInOut; + else if (this._easing == CONSTANTS.ANIM.EASING_BOUNCE_IN) this.ease = Key.easeInBounce; + else if (this._easing == CONSTANTS.ANIM.EASING_BOUNCE_OUT) this.ease = Key.easeOutBounce; + else if (this._easing == CONSTANTS.ANIM.EASING_QUART_OUT) this.ease = Key.easeOutQuart; + else if (this._easing == CONSTANTS.ANIM.EASING_QUART_IN) this.ease = Key.easeInQuart; + else if (this._easing == CONSTANTS.ANIM.EASING_QUART_INOUT) this.ease = Key.easeInOutQuart; + else if (this._easing == CONSTANTS.ANIM.EASING_QUINT_OUT) this.ease = Key.easeOutQuint; + else if (this._easing == CONSTANTS.ANIM.EASING_QUINT_IN) this.ease = Key.easeInQuint; + else if (this._easing == CONSTANTS.ANIM.EASING_QUINT_INOUT) this.ease = Key.easeInOutQuint; + else if (this._easing == CONSTANTS.ANIM.EASING_CUBICSPLINE) + { + // this._updateBezier = true; + this.ease = Key.easeCubicSpline; + } + else + { + this._easing = CONSTANTS.ANIM.EASING_LINEAR; + this.ease = Key.easeLinear; + } +}; + +Key.prototype.trigger = function () +{ + this.cb(); + this.cbTriggered = true; +}; + +Key.prototype.setValue = function (v) +{ + this.value = v; + // this._updateBezier = true; + if (this.onChange !== null) this.onChange(); +}; + +Key.prototype.set = function (obj) +{ + if (obj) + { + if (obj.e) this.setEasing(obj.e); + if (obj.cb) + { + this.cb = obj.cb; + this.cbTriggered = false; + } + + if (obj.b) + { + // this.bezTime = obj.b[0]; + // this.bezValue = obj.b[1]; + // this.bezTimeIn = obj.b[2]; + // this.bezValueIn = obj.b[3]; + // this._updateBezier = true; + } + + if (obj.hasOwnProperty("t")) this.time = obj.t; + if (obj.hasOwnProperty("time")) this.time = obj.time; + if (obj.hasOwnProperty("v")) this.value = obj.v; + else if (obj.hasOwnProperty("value")) this.value = obj.value; + } + if (this.onChange !== null) this.onChange(); +}; + +Key.prototype.getSerialized = function () +{ + const obj = {}; + obj.t = this.time; + obj.v = this.value; + obj.e = this._easing; + // if (this._easing == CONSTANTS.ANIM.EASING_CUBICSPLINE) obj.b = [this.bezTime, this.bezValue, this.bezTimeIn, this.bezValueIn]; + + return obj; +}; + +Key.prototype.getEasing = function () +{ + return this._easing; +}; + + + +;// CONCATENATED MODULE: ./src/core/eventtarget.js + + +const EventTarget = function () +{ + this._log = new Logger("eventtarget"); + this._eventCallbacks = {}; + this._logName = ""; + this._logEvents = false; + this._listeners = {}; + + this.addEventListener = this.on = function (which, cb, idPrefix) + { + const event = + { + "id": (idPrefix || "") + CABLES.simpleId(), + "name": which, + "cb": cb, + }; + if (!this._eventCallbacks[which]) this._eventCallbacks[which] = [event]; + else this._eventCallbacks[which].push(event); + + this._listeners[event.id] = event; + + return event.id; + }; + + this.hasEventListener = function (which, cb) + { + if (which && !cb) + { + // check by id + if (this._listeners[which]) return true; + else return false; + } + else + { + this._log.warn("old eventtarget function haseventlistener!"); + if (which && cb) + { + if (this._eventCallbacks[which]) + { + const idx = this._eventCallbacks[which].indexOf(cb); + if (idx == -1) return false; + return true; + } + } + } + }; + + this.hasListenerForEventName = function (eventName) + { + return this._eventCallbacks[eventName] && this._eventCallbacks[eventName].length > 0; + }; + + this.removeEventListener = this.off = function (which, cb) + { + if (which === null || which === undefined) return; + + if (!cb) // new style, remove by id, not by name/callback + { + const event = this._listeners[which]; + if (!event) + { + this._log.log("could not find event..."); + return; + } + + let found = true; + while (found) + { + found = false; + let index = -1; + for (let i = 0; i < this._eventCallbacks[event.name].length; i++) + { + if (this._eventCallbacks[event.name][i].id.startsWith(which)) // this._eventCallbacks[event.name][i].id == which || + { + found = true; + index = i; + } + } + + if (index !== -1) + { + this._eventCallbacks[event.name].splice(index, 1); + delete this._listeners[which]; + } + } + + return; + } + + this._log.info("[eventtaget] ", "old function signature: removeEventListener! use listener id"); + this._log.log((new Error()).stack); + + let index = null; + for (let i = 0; i < this._eventCallbacks[which].length; i++) + if (this._eventCallbacks[which][i].cb == cb) + index = i; + + if (index !== null) + { + delete this._eventCallbacks[index]; + } + else this._log.warn("removeEventListener not found " + which); + }; + + this.logEvents = function (enabled, name) + { + this._logEvents = enabled; + this._logName = name; + }; + + this.emitEvent = function (which, param1, param2, param3, param4, param5, param6) + { + if (this._logEvents) this._log.log("[event] ", this._logName, which, this._eventCallbacks); + + if (this._eventCallbacks[which]) + { + for (let i = 0; i < this._eventCallbacks[which].length; i++) + { + if (this._eventCallbacks[which][i]) + { + this._eventCallbacks[which][i].cb(param1, param2, param3, param4, param5, param6); + } + } + } + else + { + if (this._logEvents) this._log.log("[event] has no event callback", which, this._eventCallbacks); + } + }; +}; + + + +;// CONCATENATED MODULE: ./src/core/anim.js + + + + + +/** + * Keyframed interpolated animation. + * + * Available Easings: + * <pre> + * CONSTANTS.ANIM.EASING_LINEAR + * CONSTANTS.ANIM.EASING_ABSOLUTE + * CONSTANTS.ANIM.EASING_SMOOTHSTEP + * CONSTANTS.ANIM.EASING_SMOOTHERSTEP + * CONSTANTS.ANIM.EASING_CUBICSPLINE + + * CONSTANTS.ANIM.EASING_CUBIC_IN + * CONSTANTS.ANIM.EASING_CUBIC_OUT + * CONSTANTS.ANIM.EASING_CUBIC_INOUT + + * CONSTANTS.ANIM.EASING_EXPO_IN + * CONSTANTS.ANIM.EASING_EXPO_OUT + * CONSTANTS.ANIM.EASING_EXPO_INOUT + + * CONSTANTS.ANIM.EASING_SIN_IN + * CONSTANTS.ANIM.EASING_SIN_OUT + * CONSTANTS.ANIM.EASING_SIN_INOUT + + * CONSTANTS.ANIM.EASING_BACK_IN + * CONSTANTS.ANIM.EASING_BACK_OUT + * CONSTANTS.ANIM.EASING_BACK_INOUT + + * CONSTANTS.ANIM.EASING_ELASTIC_IN + * CONSTANTS.ANIM.EASING_ELASTIC_OUT + + * CONSTANTS.ANIM.EASING_BOUNCE_IN + * CONSTANTS.ANIM.EASING_BOUNCE_OUT + + * CONSTANTS.ANIM.EASING_QUART_IN + * CONSTANTS.ANIM.EASING_QUART_OUT + * CONSTANTS.ANIM.EASING_QUART_INOUT + + * CONSTANTS.ANIM.EASING_QUINT_IN + * CONSTANTS.ANIM.EASING_QUINT_OUT + * CONSTANTS.ANIM.EASING_QUINT_INOUT + * </pre> + * @hideconstructor + * @external CABLES + * @namespace Anim + * @class + * @example + * var anim=new CABLES.Anim(); + * anim.setValue(0,0); // set value 0 at 0 seconds + * anim.setValue(10,1); // set value 1 at 10 seconds + * anim.getValue(5); // get value at 5 seconds - this returns 0.5 + */ + +const Anim = function (cfg) +{ + EventTarget.apply(this); + + cfg = cfg || {}; + this.keys = []; + this.onChange = null; + this.stayInTimeline = false; + this.loop = false; + this._log = new Logger("Anim"); + this._lastKeyIndex = 0; + this._cachedIndex = 0; + this.name = cfg.name || null; + + /** + * @member defaultEasing + * @memberof Anim + * @instance + * @type {Number} + */ + this.defaultEasing = cfg.defaultEasing || CONSTANTS.ANIM.EASING_LINEAR; + this.onLooped = null; + + this._timesLooped = 0; + this._needsSort = false; +}; + +Anim.prototype.forceChangeCallback = function () +{ + if (this.onChange !== null) this.onChange(); + this.emitEvent("onChange", this); +}; + +Anim.prototype.getLoop = function () +{ + return this.loop; +}; + +Anim.prototype.setLoop = function (target) +{ + this.loop = target; + this.emitEvent("onChange", this); +}; + +/** + * returns true if animation has ended at @time + * checks if last key time is < time + * @param {Number} time + * @returns {Boolean} + * @memberof Anim + * @instance + * @function + */ +Anim.prototype.hasEnded = function (time) +{ + if (this.keys.length === 0) return true; + if (this.keys[this._lastKeyIndex].time <= time) return true; + return false; +}; + +Anim.prototype.isRising = function (time) +{ + if (this.hasEnded(time)) return false; + const ki = this.getKeyIndex(time); + if (this.keys[ki].value < this.keys[ki + 1].value) return true; + return false; +}; + +/** + * remove all keys from animation before time + * @param {Number} time + * @memberof Anim + * @instance + * @function + */ +Anim.prototype.clearBefore = function (time) +{ + const v = this.getValue(time); + const ki = this.getKeyIndex(time); + + this.setValue(time, v); + + if (ki > 1) this.keys.splice(0, ki); + this._updateLastIndex(); +}; +/** + * remove all keys from animation + * @param {Number} [time=0] set a new key at time with the old value at time + * @memberof Anim + * @instance + * @function + */ +Anim.prototype.clear = function (time) +{ + let v = 0; + if (time) v = this.getValue(time); + this.keys.length = 0; + this._updateLastIndex(); + if (time) this.setValue(time, v); + if (this.onChange !== null) this.onChange(); + this.emitEvent("onChange", this); +}; + +Anim.prototype.sortKeys = function () +{ + this.keys.sort((a, b) => { return parseFloat(a.time) - parseFloat(b.time); }); + this._updateLastIndex(); + this._needsSort = false; + if (this.keys.length % 1000 == 0)console.log(this.name, this.keys.length); +}; + +Anim.prototype.getLength = function () +{ + if (this.keys.length === 0) return 0; + return this.keys[this.keys.length - 1].time; +}; + +Anim.prototype.getKeyIndex = function (time) +{ + let index = 0; + let start = 0; + if (this._cachedIndex && this.keys.length > this._cachedIndex && time >= this.keys[this._cachedIndex].time) start = this._cachedIndex; + for (let i = start; i < this.keys.length; i++) + { + if (time >= this.keys[i].time) index = i; + if (this.keys[i].time > time) + { + if (time != 0) this._cachedIndex = index; + return index; + } + } + + return index; +}; + +/** + * set value at time + * @function setValue + * @memberof Anim + * @instance + * @param {Number} time + * @param {Number} value + * @param {Function} [callback] callback + */ +Anim.prototype.setValue = function (time, value, cb) +{ + let found = null; + + if (this.keys.length == 0 || time <= this.keys[this.keys.length - 1].time) + for (let i = 0; i < this.keys.length; i++) + if (this.keys[i].time == time) + { + found = this.keys[i]; + this.keys[i].setValue(value); + this.keys[i].cb = cb; + break; + } + + if (!found) + { + found = new Key( + { + "time": time, + "value": value, + "e": this.defaultEasing, + "cb": cb, + }); + this.keys.push(found); + + // if (this.keys.length % 1000 == 0)console.log(this.name, this.keys.length); + this._updateLastIndex(); + } + + if (this.onChange) this.onChange(); + this.emitEvent("onChange", this); + this._needsSort = true; + return found; +}; + +Anim.prototype.setKeyEasing = function (index, e) +{ + if (this.keys[index]) + { + this.keys[index].setEasing(e); + this.emitEvent("onChange", this); + } +}; + +Anim.prototype.getSerialized = function () +{ + const obj = {}; + obj.keys = []; + obj.loop = this.loop; + + for (let i = 0; i < this.keys.length; i++) + obj.keys.push(this.keys[i].getSerialized()); + + return obj; +}; + +Anim.prototype.getKey = function (time) +{ + const index = this.getKeyIndex(time); + return this.keys[index]; +}; + +Anim.prototype.getNextKey = function (time) +{ + let index = this.getKeyIndex(time) + 1; + if (index >= this.keys.length) index = this.keys.length - 1; + + return this.keys[index]; +}; + +Anim.prototype.isFinished = function (time) +{ + if (this.keys.length <= 0) return true; + return time > this.keys[this.keys.length - 1].time; +}; + +Anim.prototype.isStarted = function (time) +{ + if (this.keys.length <= 0) return false; + return time >= this.keys[0].time; +}; + +/** + * get value at time + * @function getValue + * @memberof Anim + * @instance + * @param {Number} [time] time + * @returns {Number} interpolated value at time + */ +Anim.prototype.getValue = function (time) +{ + if (this.keys.length === 0) + { + return 0; + } + if (this._needsSort) this.sortKeys(); + + if (!this.loop && time > this.keys[this._lastKeyIndex].time) + { + if (this.keys[this._lastKeyIndex].cb && !this.keys[this._lastKeyIndex].cbTriggered) this.keys[this._lastKeyIndex].trigger(); + + return this.keys[this._lastKeyIndex].value; + } + + if (time < this.keys[0].time) + { + // if (this.name)console.log("A"); + + return this.keys[0].value; + } + + if (this.loop && time > this.keys[this._lastKeyIndex].time) + { + const currentLoop = time / this.keys[this._lastKeyIndex].time; + if (currentLoop > this._timesLooped) + { + this._timesLooped++; + if (this.onLooped) this.onLooped(); + } + time = (time - this.keys[0].time) % (this.keys[this._lastKeyIndex].time - this.keys[0].time); + time += this.keys[0].time; + } + + const index = this.getKeyIndex(time); + if (index >= this._lastKeyIndex) + { + if (this.keys[this._lastKeyIndex].cb && !this.keys[this._lastKeyIndex].cbTriggered) this.keys[this._lastKeyIndex].trigger(); + + return this.keys[this._lastKeyIndex].value; + } + + + const index2 = index + 1; + const key1 = this.keys[index]; + const key2 = this.keys[index2]; + + if (key1.cb && !key1.cbTriggered) key1.trigger(); + + if (!key2) return -1; + + const perc = (time - key1.time) / (key2.time - key1.time); + + if (!key1.ease) this.log._warn("has no ease", key1, key2); + + return key1.ease(perc, key2); +}; + +Anim.prototype._updateLastIndex = function () +{ + this._lastKeyIndex = this.keys.length - 1; +}; + +Anim.prototype.addKey = function (k) +{ + if (k.time === undefined) + { + this.log.warn("key time undefined, ignoring!"); + } + else + { + this.keys.push(k); + if (this.onChange !== null) this.onChange(); + this.emitEvent("onChange", this); + } + this._updateLastIndex(); +}; + +Anim.prototype.easingFromString = function (str) +{ + if (str == "linear") return CONSTANTS.ANIM.EASING_LINEAR; + if (str == "absolute") return CONSTANTS.ANIM.EASING_ABSOLUTE; + if (str == "smoothstep") return CONSTANTS.ANIM.EASING_SMOOTHSTEP; + if (str == "smootherstep") return CONSTANTS.ANIM.EASING_SMOOTHERSTEP; + + if (str == "Cubic In") return CONSTANTS.ANIM.EASING_CUBIC_IN; + if (str == "Cubic Out") return CONSTANTS.ANIM.EASING_CUBIC_OUT; + if (str == "Cubic In Out") return CONSTANTS.ANIM.EASING_CUBIC_INOUT; + + if (str == "Expo In") return CONSTANTS.ANIM.EASING_EXPO_IN; + if (str == "Expo Out") return CONSTANTS.ANIM.EASING_EXPO_OUT; + if (str == "Expo In Out") return CONSTANTS.ANIM.EASING_EXPO_INOUT; + + if (str == "Sin In") return CONSTANTS.ANIM.EASING_SIN_IN; + if (str == "Sin Out") return CONSTANTS.ANIM.EASING_SIN_OUT; + if (str == "Sin In Out") return CONSTANTS.ANIM.EASING_SIN_INOUT; + + if (str == "Back In") return CONSTANTS.ANIM.EASING_BACK_IN; + if (str == "Back Out") return CONSTANTS.ANIM.EASING_BACK_OUT; + if (str == "Back In Out") return CONSTANTS.ANIM.EASING_BACK_INOUT; + + if (str == "Elastic In") return CONSTANTS.ANIM.EASING_ELASTIC_IN; + if (str == "Elastic Out") return CONSTANTS.ANIM.EASING_ELASTIC_OUT; + + if (str == "Bounce In") return CONSTANTS.ANIM.EASING_BOUNCE_IN; + if (str == "Bounce Out") return CONSTANTS.ANIM.EASING_BOUNCE_OUT; + + if (str == "Quart Out") return CONSTANTS.ANIM.EASING_QUART_OUT; + if (str == "Quart In") return CONSTANTS.ANIM.EASING_QUART_IN; + if (str == "Quart In Out") return CONSTANTS.ANIM.EASING_QUART_INOUT; + + if (str == "Quint Out") return CONSTANTS.ANIM.EASING_QUINT_OUT; + if (str == "Quint In") return CONSTANTS.ANIM.EASING_QUINT_IN; + if (str == "Quint In Out") return CONSTANTS.ANIM.EASING_QUINT_INOUT; +}; + +Anim.prototype.createPort = function (op, title, cb) +{ + const port = op.inDropDown(title, CONSTANTS.ANIM.EASINGS); + + // const port = op.addInPort( + // new Port(op, title, CONSTANTS.OP.OP_PORT_TYPE_VALUE, { + // "display": "dropdown", + // "values": CONSTANTS.ANIM.EASINGS, + // }), + // ); + + port.set("linear"); + port.defaultValue = "linear"; + + port.onChange = function () + { + this.defaultEasing = this.easingFromString(port.get()); + this.emitEvent("onChangeDefaultEasing", this); + + if (cb) cb(); + }.bind(this); + + return port; +}; + +// ------------------------------ + +Anim.slerpQuaternion = function (time, q, animx, animy, animz, animw) +{ + if (!Anim.slerpQuaternion.q1) + { + Anim.slerpQuaternion.q1 = quat.create(); + Anim.slerpQuaternion.q2 = quat.create(); + } + + const i1 = animx.getKeyIndex(time); + let i2 = i1 + 1; + if (i2 >= animx.keys.length) i2 = animx.keys.length - 1; + + if (i1 == i2) + { + quat.set(q, animx.keys[i1].value, animy.keys[i1].value, animz.keys[i1].value, animw.keys[i1].value); + } + else + { + const key1Time = animx.keys[i1].time; + const key2Time = animx.keys[i2].time; + const perc = (time - key1Time) / (key2Time - key1Time); + + quat.set(Anim.slerpQuaternion.q1, animx.keys[i1].value, animy.keys[i1].value, animz.keys[i1].value, animw.keys[i1].value); + + quat.set(Anim.slerpQuaternion.q2, animx.keys[i2].value, animy.keys[i2].value, animz.keys[i2].value, animw.keys[i2].value); + + quat.slerp(q, Anim.slerpQuaternion.q1, Anim.slerpQuaternion.q2, perc); + } + return q; +}; + +const ANIM = { "Key": Key }; + + + + +;// CONCATENATED MODULE: ./src/core/core_link.js + + + +/** + * @external CABLES + * @namespace Link + * @param {Object} patch The patch object + * @description a link is a connection between two ops/ports -> one input and one output port + * @hideconstructor + * @class + */ +const Link = function (scene) +{ + EventTarget.apply(this); + + this.id = CABLES.simpleId(); + this.portIn = null; + this.portOut = null; + this.scene = scene; // todo: make private and rename to patch + this.activityCounter = 0; + this.ignoreInSerialize = false; +}; + +Link.prototype.setValue = function (v) +{ + if (v === undefined) this._setValue(); + else this.portIn.set(v); +}; + +Link.prototype.activity = function () +{ + this.activityCounter++; + // if(Date.now()-this.lastTime>100) + // { + // // this.lastTime=Date.now(); + // // this.changesPerSecond=this.changesCounter*10; + // this.changesCounter=0; + // } +}; + +Link.prototype._setValue = function () +{ + if (!this.portOut) + { + this.remove(); + return; + } + const v = this.portOut.get(); + + if (v == v) // NaN is the only JavaScript value that is treated as unequal to itself + { + if (this.portIn.type != CONSTANTS.OP.OP_PORT_TYPE_FUNCTION) this.activity(); + + if (this.portIn.get() !== v) + { + this.portIn.set(v); + } + else + { + if (this.portIn.changeAlways) this.portIn.set(v); + if (this.portOut.forceRefChange) this.portIn.forceChange(); + } + } +}; + +/** + * @function getOtherPort + * @memberof Link + * @instance + * @param {Port} port + * @description returns the port of the link, which is not port + */ +Link.prototype.getOtherPort = function (p) +{ + if (p == this.portIn) return this.portOut; + return this.portIn; +}; + +/** + * @function remove + * @memberof Link + * @instance + * @description unlink/remove this link from all ports + */ +Link.prototype.remove = function () +{ + if (this.portIn) this.portIn.removeLink(this); + if (this.portOut) this.portOut.removeLink(this); + if (this.scene) + { + this.scene.emitEvent("onUnLink", this.portIn, this.portOut, this); + } + + if (this.portIn && (this.portIn.type == CONSTANTS.OP.OP_PORT_TYPE_OBJECT || this.portIn.type == CONSTANTS.OP.OP_PORT_TYPE_ARRAY)) + { + this.portIn.set(null); + if (this.portIn.links.length > 0) this.portIn.set(this.portIn.links[0].getOtherPort(this.portIn).get()); + } + + if (this.portIn) this.portIn.op._checkLinksNeededToWork(); + if (this.portOut) this.portOut.op._checkLinksNeededToWork(); + + this.portIn = null; + this.portOut = null; + this.scene = null; +}; + +/** + * @function link + * @memberof Link + * @instance + * @description link those two ports + * @param {Port} port1 + * @param {Port} port2 + */ +Link.prototype.link = function (p1, p2) +{ + if (!Link.canLink(p1, p2)) + { + console.warn("[core_link] cannot link ports!", p1, p2); + return false; + } + + if (p1.direction == CONSTANTS.PORT.PORT_DIR_IN) + { + this.portIn = p1; + this.portOut = p2; + } + else + { + this.portIn = p2; + this.portOut = p1; + } + + p1.addLink(this); + p2.addLink(this); + + this.setValue(); + + if (p1.onLink) p1.onLink(this); + if (p2.onLink) p2.onLink(this); + + p1.op._checkLinksNeededToWork(); + p2.op._checkLinksNeededToWork(); +}; + +Link.prototype.getSerialized = function () +{ + const obj = {}; + + obj.portIn = this.portIn.getName(); + obj.portOut = this.portOut.getName(); + obj.objIn = this.portIn.op.id; + obj.objOut = this.portOut.op.id; + + return obj; +}; + +// -------------------------------------------- + +/** + * @function canLinkText + * @memberof Link + * @instance + * @description return a text message with human readable reason if ports can not be linked, or can be + * @param {Port} port1 + * @param {Port} port2 + */ +Link.canLinkText = function (p1, p2) +{ + if (p1.direction == p2.direction) + { + let txt = "(out)"; + if (p2.direction == CONSTANTS.PORT.PORT_DIR_IN) txt = "(in)"; + return "can not link: same direction " + txt; + } + if (p1.op == p2.op) return "can not link: same op"; + if (p1.type != CONSTANTS.OP.OP_PORT_TYPE_DYNAMIC && p2.type != CONSTANTS.OP.OP_PORT_TYPE_DYNAMIC) + { + if (p1.type != p2.type) return "can not link: different type"; + } + + if (CABLES.UI && p1.type == CONSTANTS.OP.OP_PORT_TYPE_OBJECT && p2.type == CONSTANTS.OP.OP_PORT_TYPE_OBJECT) + { + if (p1.uiAttribs.objType && p2.uiAttribs.objType) + if (p1.uiAttribs.objType != p2.uiAttribs.objType) + return "incompatible objects"; + } + + + if (!p1) return "can not link: port 1 invalid"; + if (!p2) return "can not link: port 2 invalid"; + + if (p1.direction == CONSTANTS.PORT.PORT_DIR_IN && p1.isAnimated()) return "can not link: is animated"; + if (p2.direction == CONSTANTS.PORT.PORT_DIR_IN && p2.isAnimated()) return "can not link: is animated"; + + // if(p1.direction==CABLES.CONSTANTS.PORT.PORT_DIR_IN && p1.links.length>0)return 'input port already busy'; + // if(p2.direction==CABLES.CONSTANTS.PORT.PORT_DIR_IN && p2.links.length>0)return 'input port already busy'; + if (p1.isLinkedTo(p2)) return "ports already linked"; + + if ((p1.canLink && !p1.canLink(p2)) || (p2.canLink && !p2.canLink(p1))) return "Incompatible"; + + return "can link"; +}; + +/** + * @function canLink + * @memberof Link + * @instance + * @description return true if ports can be linked + * @param {Port} port1 + * @param {Port} port2 + * @returns {Boolean} + */ +Link.canLink = function (p1, p2) +{ + if (!p1) return false; + if (!p2) return false; + if (p1.direction == CONSTANTS.PORT.PORT_DIR_IN && p1.isAnimated()) return false; + if (p2.direction == CONSTANTS.PORT.PORT_DIR_IN && p2.isAnimated()) return false; + + if (p1.isHidden() || p2.isHidden()) return false; + + if (p1.isLinkedTo(p2)) return false; + + if (p1.direction == p2.direction) return false; + + if (CABLES.UI && p1.type == CONSTANTS.OP.OP_PORT_TYPE_OBJECT && p2.type == CONSTANTS.OP.OP_PORT_TYPE_OBJECT) + { + if (p1.uiAttribs.objType && p2.uiAttribs.objType) + { + if (p1.uiAttribs.objType.indexOf("sg_") == 0 && p2.uiAttribs.objType.indexOf("sg_") == 0) return true; + if (p1.uiAttribs.objType != p2.uiAttribs.objType) + return false; + } + } + + if (p1.type != p2.type && (p1.type != CONSTANTS.OP.OP_PORT_TYPE_DYNAMIC && p2.type != CONSTANTS.OP.OP_PORT_TYPE_DYNAMIC)) return false; + if (p1.type == CONSTANTS.OP.OP_PORT_TYPE_DYNAMIC || p2.type == CONSTANTS.OP.OP_PORT_TYPE_DYNAMIC) return true; + + if (p1.op == p2.op) return false; + + if (p1.canLink && !p1.canLink(p2)) return false; + if (p2.canLink && !p2.canLink(p1)) return false; + + return true; +}; + + + +;// CONCATENATED MODULE: ./src/core/core_port.js + + + + + + + +/** + * data is coming into and out of ops through input and output ports + * @external CABLES + * @namespace Port + * @class + * @hideconstructor + * @example + * const myPort=op.inString("String Port"); + */ +const Port = function (___op, name, type, uiAttribs) +{ + EventTarget.apply(this); + + this.data = {}; // UNUSED, DEPRECATED, only left in for backwards compatibility with userops + this._log = new Logger("core_port"); + /** + * @type {Number} + * @name direction + * @instance + * @memberof Port + * @description direction of port (input(0) or output(1)) + */ + this.direction = CONSTANTS.PORT.PORT_DIR_IN; + this.id = String(CABLES.simpleId()); + this._op = ___op; + + /** + * @type {Array<Link>} + * @name links + * @instance + * @memberof Port + * @description links of port + */ + this.links = []; + this.value = 0.0; + this.name = name; + this.type = type || CONSTANTS.OP.OP_PORT_TYPE_VALUE; + this.uiAttribs = uiAttribs || {}; + this.anim = null; + this._oldAnimVal = -5711; + this.defaultValue = null; + + + this._uiActiveState = true; + this.ignoreValueSerialize = false; + this.onLinkChanged = null; + this.crashed = false; + + this._valueBeforeLink = null; + this._lastAnimFrame = -1; + this._animated = false; + + this.onValueChanged = null; + this.onTriggered = null; + this.onUiActiveStateChange = null; + this.changeAlways = false; + this.forceRefChange = false; + + this._useVariableName = null; + + this.activityCounter = 0; + this.apf = 0; + this.activityCounterStartFrame = 0; + + this._tempLastUiValue = null; + + Object.defineProperty(this, "title", { + get() + { + return this.uiAttribs.title || this.name; + } }); + + + Object.defineProperty(this, "parent", { + get() + { + this._log.stack("use port.op, not .parent"); + return this._op; + } }); + + + + Object.defineProperty(this, "op", { + get() + { + return this._op; + } }); + + + Object.defineProperty(this, "val", { + get() + { + this._log.warn("val getter deprecated!", this); + this._log.stack("val getter deprecated"); + return this.get(); + }, + set(v) + { + this._log.warn("val setter deprecated!", this); + this._log.stack("val setter deprecated"); + this.setValue(v); + } + }); +}; + + +/** + * copy over a uiattrib from an external connected port to another port + * @function copyLinkedUiAttrib + * @memberof Port + * @param {which} attrib name + * @param {Port} source port + * @instance + * @example + +inArray.onLinkChanged=()=> +{ + if(inArray) inArray.copyLinkedUiAttrib("stride", outArray); +}; + + */ +Port.prototype.copyLinkedUiAttrib = function (which, port) +{ + if (!CABLES.UI) return; + if (!this.isLinked()) return; + + const attr = {}; + attr[which] = this.links[0].getOtherPort(this).getUiAttrib(which); + port.setUiAttribs(attr); +}; + + +// TODO make extend class for ports, like for ops only for ui +Port.prototype.getValueForDisplay = function () +{ + let str = this.value; + + if (typeof this.value === "string" || this.value instanceof String) + { + if (str.length > 1000) + { + str = str.substring(0, 999); + str += "..."; + } + if (this.uiAttribs && (this.uiAttribs.display == "boolnum")) + { + str += " - "; + + if (!this.value) str += "false"; + else str += "true"; + } + + str = str.replace(/[\u00A0-\u9999<>\&]/g, function (i) + { + return "&#" + i.charCodeAt(0) + ";"; + }); + + + if (str.length > 100) str = str.substring(0, 100); + } + else + { + str = this.value; + } + return str; +}; + +/** + * change listener for input value ports, overwrite to react to changes + * @function onChange + * @memberof Port + * @instance + * @example + * const myPort=op.inString("MyPort"); + * myPort.onChange=function() + * { + * console.log("was changed to: ",myPort.get()); + * } + * + */ +Port.prototype.onAnimToggle = function () {}; +Port.prototype._onAnimToggle = function () +{ + this.onAnimToggle(); +}; + + +/** + * @function remove + * @memberof Port + * @instance + * @description remove port + */ +Port.prototype.remove = function () +{ + // this.setUiAttribs({hidePort:true}); + this.removeLinks(); + this._op.removePort(this); +}; + +/** + * set ui attributes + * @function setUiAttribs + * @memberof Port + * @instance + * @param {Object} newAttribs + * <pre> + * title - overwrite title of port (by default this is portname) + * greyout - port paramater will appear greyed out, can not be + * hidePort - port will be hidden from op + * hideParam - port params will be hidden from parameter panel + * showIndex - only for dropdowns - show value index (e.g. `0 - normal` ) + * editorSyntax - set syntax highlighting theme for editor port + * ignoreObjTypeErrors - do not auto check object types + * </pre> + * @example + * myPort.setUiAttribs({greyout:true}); + */ +Port.prototype.setUiAttribs = function (newAttribs) +{ + let changed = false; + if (!this.uiAttribs) this.uiAttribs = {}; + + for (const p in newAttribs) + { + if (newAttribs[p] === undefined) + { + // delete newAttribs[p]; + delete this.uiAttribs[p]; + continue; + } + if (this.uiAttribs[p] != newAttribs[p]) changed = true; + this.uiAttribs[p] = newAttribs[p]; + + if (p == "group" && this.indexPort) this.indexPort.setUiAttribs({ "group": newAttribs[p] }); + } + + if (newAttribs.hasOwnProperty("expose")) this._op.patch.emitEvent("subpatchExpose", this._op.uiAttribs.subPatch); + + if (changed) this.emitEvent("onUiAttrChange", newAttribs, this); +}; + +/** + * get ui attributes + * @function getUiAttribs + * @memberof Port + * @example + * myPort.getUiAttribs(); + */ +Port.prototype.getUiAttribs = function () +{ + return this.uiAttribs; +}; + +/** + * get ui attribute + * @function getUiAttrib + * @memberof Port + * @instance + * @param {String} attribName + * <pre> + * attribName - return value of the ui-attribute, or null on unknown attribute + * </pre> + * @example + * myPort.setUiAttribs("values"); + */ +Port.prototype.getUiAttrib = function (attribName) +{ + if (!this.uiAttribs || !this.uiAttribs.hasOwnProperty(attribName)) + { + return null; + } + return this.uiAttribs[attribName]; +}; + +/** + * @function get + * @memberof Port + * @instance + * @description get value of port + */ +Port.prototype.get = function () +{ + if (this._animated && this._lastAnimFrame != this._op.patch.getFrameNum()) + { + this._lastAnimFrame = this._op.patch.getFrameNum(); + this.value = this.anim.getValue(this._op.patch.timer.getTime()); + + this._oldAnimVal = this.value; + this.forceChange(); + } + + return this.value; +}; + +Port.prototype.setRef = function (v) +{ + this.forceRefChange = true; + this.set(v); +}; + +/** + * @function setValue + * @memberof Port + * @instance + * @description set value of port / will send value to all linked ports (only for output ports) + */ +Port.prototype.set = Port.prototype.setValue = function (v) +{ + if (v === undefined) v = null; + + if (this._op.enabled && !this.crashed) + { + if (v !== this.value || this.changeAlways || this.type == CONSTANTS.OP.OP_PORT_TYPE_TEXTURE || this.type == CONSTANTS.OP.OP_PORT_TYPE_ARRAY) + { + if (this._animated) + { + this.anim.setValue(this._op.patch.timer.getTime(), v); + } + else + { + try + { + this.value = v; + this.forceChange(); + } + catch (ex) + { + this.crashed = true; + this.op.crashed = true; + + console.log("crash", this.op.objName); + + this.setValue = function (_v) {}; + this.onTriggered = function () {}; + + this._log.error("onvaluechanged exception cought", ex); + this._log.error(ex.stack); + this._log.warn("exception in: " + this._op.name); + + if (this._op.patch.isEditorMode()) gui.showOpCrash(this._op); + + this._op.patch.emitEvent("exception", ex, this._op); + if (this._op.onError) this._op.onError(ex); + } + + if (this._op && this._op.patch && this._op.patch.isEditorMode() && this.type == CONSTANTS.OP.OP_PORT_TYPE_TEXTURE) gui.texturePreview().updateTexturePort(this); + } + + if (this.direction == CONSTANTS.PORT.PORT_DIR_OUT) for (let i = 0; i < this.links.length; ++i) this.links[i].setValue(); + } + } +}; + +Port.prototype.updateAnim = function () +{ + if (this._animated) + { + this.value = this.get(); + + if (this._oldAnimVal != this.value || this.changeAlways) + { + this._oldAnimVal = this.value; + this.forceChange(); + } + this._oldAnimVal = this.value; + } +}; + +Port.prototype.forceChange = function () +{ + if (this.onValueChanged || this.onChange) + { + // very temporary: deprecated warning!!!!!!!!! + // if(params.length>0) this._log.warn('TOM: port has onchange params!',this._op.objName,this.name); + } + this._activity(); + this.emitEvent("change", this.value, this); + + if (this.onChange) this.onChange(this, this.value); + else if (this.onValueChanged) this.onValueChanged(this, this.value); // deprecated +}; + +/** + * @function getTypeString + * @memberof Port + * @instance + * @description get port type as string, e.g. "Function","Value"... + * @return {String} type + */ +Port.prototype.getTypeString = function () +{ + if (this.type == CONSTANTS.OP.OP_PORT_TYPE_VALUE) return "Number"; + if (this.type == CONSTANTS.OP.OP_PORT_TYPE_FUNCTION) return "Trigger"; + if (this.type == CONSTANTS.OP.OP_PORT_TYPE_OBJECT) return "Object"; + if (this.type == CONSTANTS.OP.OP_PORT_TYPE_DYNAMIC) return "Dynamic"; + if (this.type == CONSTANTS.OP.OP_PORT_TYPE_ARRAY) return "Array"; + if (this.type == CONSTANTS.OP.OP_PORT_TYPE_STRING) return "String"; + return "Unknown"; +}; + +Port.prototype.deSerializeSettings = function (objPort) +{ + if (!objPort) return; + if (objPort.animated) this.setAnimated(objPort.animated); + if (objPort.useVariable) this.setVariableName(objPort.useVariable); + if (objPort.title) this.setUiAttribs({ "title": objPort.title }); + if (objPort.expose) this.setUiAttribs({ "expose": true }); + if (objPort.order) this.setUiAttribs({ "order": objPort.order }); + if (objPort.multiPortNum) this.setUiAttribs({ "multiPortNum": objPort.multiPortNum }); + + if (objPort.anim) + { + if (!this.anim) this.anim = new Anim({ "name": "port " + this.name }); + this._op._hasAnimPort = true; + this.anim.addEventListener("onChange", () => + { + this._op.patch.emitEvent("portAnimUpdated", this._op, this, this.anim); + }); + if (objPort.anim.loop) this.anim.loop = objPort.anim.loop; + for (const ani in objPort.anim.keys) + { + this.anim.keys.push(new ANIM.Key(objPort.anim.keys[ani])); + } + this.anim.sortKeys(); + } +}; + +Port.prototype.setInitialValue = function (v) +{ + if (this.op.preservedPortLinks[this.name]) + { + for (let i = 0; i < this.op.preservedPortLinks[this.name].length; i++) + { + const lobj = this.op.preservedPortLinks[this.name][i]; + this.op.patch._addLink( + lobj.objIn, + lobj.objOut, + lobj.portIn, + lobj.portOut); + } + } + + if (this.op.preservedPortValues && this.op.preservedPortValues.hasOwnProperty(this.name) && this.op.preservedPortValues[this.name] !== undefined) + { + this.set(this.op.preservedPortValues[this.name]); + } + else + if (v !== undefined) this.set(v); + if (v !== undefined) this.defaultValue = v; +}; + +Port.prototype.getSerialized = function () +{ + let obj = { "name": this.getName() }; + + + if (!this.ignoreValueSerialize && this.links.length === 0) + { + if (this.type == CONSTANTS.OP.OP_PORT_TYPE_OBJECT && this.value && this.value.tex) {} + else obj.value = this.value; + } + if (this._useVariableName) obj.useVariable = this._useVariableName; + if (this._animated) obj.animated = true; + if (this.anim) obj.anim = this.anim.getSerialized(); + if (this.uiAttribs.multiPortNum) obj.multiPortNum = this.uiAttribs.multiPortNum; + if (this.uiAttribs.display == "file") obj.display = this.uiAttribs.display; + if (this.uiAttribs.expose) + { + obj.expose = true; + if (this.uiAttribs.hasOwnProperty("order")) obj.order = this.uiAttribs.order; + } + if (this.uiAttribs.title) obj.title = this.uiAttribs.title; + if ((this.preserveLinks || this.direction == CONSTANTS.PORT.PORT_DIR_OUT) && this.links.length > 0) + { + obj.links = []; + for (const i in this.links) + { + if (!this.links[i].ignoreInSerialize && (this.links[i].portIn && this.links[i].portOut)) obj.links.push(this.links[i].getSerialized()); + } + } + + if (this.direction == CONSTANTS.PORT.PORT_DIR_IN && this.links.length > 0) + { + for (const i in this.links) + { + if (!this.links[i].portIn || !this.links[i].portOut) continue; + + const otherp = this.links[i].getOtherPort(this); + // check if functions exist, are defined in core_extend_ops code in ui + if (otherp.op.isInBlueprint2 && this.op.isInBlueprint2) + { + if (otherp.op.isInBlueprint2() && !this.op.isInBlueprint2()) + { + obj.links = obj.links || []; + obj.links.push(this.links[i].getSerialized()); + } + } + } + } + + if (obj.links && obj.links.length == 0) delete obj.links; + if (this.type === CONSTANTS.OP.OP_PORT_TYPE_FUNCTION) delete obj.value; + if (this.type === CONSTANTS.OP.OP_PORT_TYPE_FUNCTION && this.links.length == 0) obj = null; + if (obj && Object.keys(obj).length == 1 && obj.name)obj = null; // obj is null if there is no real information other than name + cleanJson(obj); + + return obj; +}; + +Port.prototype.shouldLink = function () +{ + return true; +}; + +/** + * @function removeLinks + * @memberof Port + * @instance + * @description remove all links from port + */ +Port.prototype.removeLinks = function () +{ + let count = 0; + while (this.links.length > 0) + { + count++; + if (count > 5000) + { + this._log.warn("could not delete links... / infinite loop"); + this.links.length = 0; + break; + } + this.links[0].remove(); + } +}; + +/** + * @function removeLink + * @memberof Port + * @instance + * @description remove all link from port + * @param {CABLES.Link} link + */ +Port.prototype.removeLink = function (link) +{ + for (const i in this.links) + if (this.links[i] == link) + this.links.splice(i, 1); + + if (this.direction == CONSTANTS.PORT.PORT_DIR_IN) + { + if (this.type == CONSTANTS.OP.OP_PORT_TYPE_VALUE) this.setValue(this._valueBeforeLink || 0); + else this.setValue(this._valueBeforeLink || null); + } + + if (CABLES.UI && this._op.checkLinkTimeWarnings) this._op.checkLinkTimeWarnings(); + + if (this.onLinkChanged) this.onLinkChanged(); + this.emitEvent("onLinkChanged"); + this._op.emitEvent("onLinkChanged"); +}; + +/** + * @function getName + * @memberof Port + * @instance + * @description return port name + */ +Port.prototype.getName = function () +{ + return this.name; +}; + +/** + * @function getTitle + * @memberof Port + * @instance + * @description return port name or title + */ +Port.prototype.getTitle = function () +{ + if (this.uiAttribs.title) return this.uiAttribs.title; + return this.name; +}; + +Port.prototype.addLink = function (l) +{ + this._valueBeforeLink = this.value; + this.links.push(l); + if (CABLES.UI && this._op.checkLinkTimeWarnings) this._op.checkLinkTimeWarnings(); + + if (this.onLinkChanged) this.onLinkChanged(); + this.emitEvent("onLinkChanged"); + this._op.emitEvent("onLinkChanged"); +}; + +/** + * @function getLinkTo + * @memberof Port + * @instance + * @param {Port} otherPort + * @description return link, which is linked to otherPort + */ +Port.prototype.getLinkTo = function (p2) +{ + for (const i in this.links) if (this.links[i].portIn == p2 || this.links[i].portOut == p2) return this.links[i]; +}; + +/** + * @function removeLinkTo + * @memberof Port + * @instance + * @param {Port} otherPort + * @description removes link, which is linked to otherPort + */ +Port.prototype.removeLinkTo = function (p2) +{ + for (const i in this.links) + { + if (this.links[i].portIn == p2 || this.links[i].portOut == p2) + { + this.links[i].remove(); + if (CABLES.UI && this._op.checkLinkTimeWarnings) this._op.checkLinkTimeWarnings(); + + if (this.onLinkChanged) this.onLinkChanged(); + this.emitEvent("onLinkChanged"); + return; + } + } +}; + +/** + * @function isLinkedTo + * @memberof Port + * @instance + * @param {Port} otherPort + * @description returns true if port is linked to otherPort + */ +Port.prototype.isLinkedTo = function (p2) +{ + for (const i in this.links) if (this.links[i].portIn == p2 || this.links[i].portOut == p2) return true; + + return false; +}; + +Port.prototype._activity = function () +{ + this.activityCounter++; +}; + +/** + * @function trigger + * @memberof Port + * @instance + * @description trigger the linked port (usually invoked on an output function port) + */ +Port.prototype.trigger = function () +{ + const linksLength = this.links.length; + + this._activity(); + if (linksLength === 0) return; + if (!this._op.enabled) return; + + let portTriggered = null; + try + { + for (let i = 0; i < linksLength; ++i) + { + if (this.links[i].portIn) + { + portTriggered = this.links[i].portIn; + + portTriggered.op.patch.pushTriggerStack(portTriggered); + portTriggered._onTriggered(); + + portTriggered.op.patch.popTriggerStack(); + } + if (this.links[i]) this.links[i].activity(); + } + } + catch (ex) + { + portTriggered.op.enabled = false; + + if (this._op.patch.isEditorMode()) + { + this._op.patch.emitEvent("exception", ex, portTriggered.op); + this._op.patch.emitEvent("opcrash", portTriggered); + console.log("crash", portTriggered.op.objName); + + if (portTriggered.op.onError) portTriggered.op.onError(ex); + } + this._log.warn("exception!"); + this._log.error("ontriggered exception caught", ex); + this._log.error(ex.stack); + this._log.warn("exception in: " + portTriggered.op.name); + } +}; + +Port.prototype.call = function () +{ + this._log.warn("call deprecated - use trigger() "); + this.trigger(); +}; + +Port.prototype.execute = function () +{ + this._log.warn("### execute port: " + this.getName(), this.goals.length); +}; + +Port.prototype.setVariableName = function (n) +{ + this._useVariableName = n; + + + this._op.patch.on("variableRename", (oldname, newname) => + { + if (oldname != this._useVariableName) return; + this._useVariableName = newname; + }); +}; + +Port.prototype.getVariableName = function () +{ + return this._useVariableName; +}; + +Port.prototype.setVariable = function (v) +{ + this.setAnimated(false); + const attr = { "useVariable": false }; + + if (this._variableIn && this._varChangeListenerId) + { + this._variableIn.off(this._varChangeListenerId); + this._variableIn = null; + } + + if (v) + { + this._variableIn = this._op.patch.getVar(v); + + if (!this._variableIn) + { + this._log.warn("PORT VAR NOT FOUND!!!", v); + } + else + { + if (this.type == CONSTANTS.OP.OP_PORT_TYPE_OBJECT) + { + this._varChangeListenerId = this._variableIn.on("change", () => { this.set(null); this.set(this._variableIn.getValue()); }); + } + else + { + this._varChangeListenerId = this._variableIn.on("change", this.set.bind(this)); + } + this.set(this._variableIn.getValue()); + } + this._useVariableName = v; + attr.useVariable = true; + attr.variableName = this._useVariableName; + } + else + { + attr.variableName = this._useVariableName = null; + attr.useVariable = false; + } + + this.setUiAttribs(attr); + this._op.patch.emitEvent("portSetVariable", this._op, this, v); +}; + +Port.prototype._handleNoTriggerOpAnimUpdates = function (a) +{ + let hasTriggerPort = false; + for (let i = 0; i < this._op.portsIn.length; i++) + { + if (this._op.portsIn.type == CONSTANTS.OP.OP_PORT_TYPE_FUNCTION) + { + hasTriggerPort = true; + break; + } + } + + if (!hasTriggerPort) + { + if (a) this._notriggerAnimUpdate = this._op.patch.on("onRenderFrame", + () => + { + this.updateAnim(); + }); + else this._op.patch.removeEventListener(this._notriggerAnimUpdate); + } +}; + +Port.prototype.setAnimated = function (a) +{ + if (this._animated != a) + { + this._animated = a; + this._op._hasAnimPort = true; + + if (this._animated && !this.anim) + { + this.anim = new Anim({ "name": "port " + this.name }); + this.anim.addEventListener("onChange", () => + { + this._op.patch.emitEvent("portAnimUpdated", this._op, this, this.anim); + }); + } + this._onAnimToggle(); + } + + this._handleNoTriggerOpAnimUpdates(a); + if (!a) + { + this.anim = null; + } + + this.setUiAttribs({ "isAnimated": this._animated }); +}; + +Port.prototype.toggleAnim = function () +{ + this._animated = !this._animated; + if (this._animated && !this.anim) + { + this.anim = new Anim({ "name": "port " + this.name }); + this.anim.addEventListener("onChange", () => + { + this._op.patch.emitEvent("portAnimUpdated", this._op, this, this.anim); + }); + } + this.setAnimated(this._animated); + this._onAnimToggle(); + this.setUiAttribs({ "isAnimated": this._animated }); +}; + +/** + * <pre> + * CABLES.CONSTANTS.OP.OP_PORT_TYPE_VALUE = 0; + * CABLES.CONSTANTS.OP.OP_PORT_TYPE_FUNCTION = 1; + * CABLES.CONSTANTS.OP.OP_PORT_TYPE_OBJECT = 2; + * CABLES.CONSTANTS.OP.OP_PORT_TYPE_TEXTURE = 2; + * CABLES.CONSTANTS.OP.OP_PORT_TYPE_ARRAY = 3; + * CABLES.CONSTANTS.OP.OP_PORT_TYPE_DYNAMIC = 4; + * CABLES.CONSTANTS.OP.OP_PORT_TYPE_STRING = 5; + * </pre> + * @function getType + * @memberof Port + * @instance + * @return {Number} type of port + */ +Port.prototype.getType = function () +{ + return this.type; +}; + +/** + * @function isLinked + * @memberof Port + * @instance + * @return {Boolean} true if port is linked + */ +Port.prototype.isLinked = function () +{ + return this.links.length > 0 || this._animated || this._useVariableName != null; +}; + +Port.prototype.isBoundToVar = function () +{ + const b = this._useVariableName != null; + this.uiAttribs.boundToVar = b; + return b; +}; +/** + * @function isAnimated + * @memberof Port + * @instance + * @return {Boolean} true if port is animated + */ +Port.prototype.isAnimated = function () +{ + return this._animated; +}; + +/** + * @function isHidden + * @memberof Port + * @instance + * @return {Boolean} true if port is hidden + */ +Port.prototype.isHidden = function () +{ + return this.uiAttribs.hidePort; +}; + +/** + * @function onTriggered + * @memberof Port + * @instance + * @param {onTriggeredCallback} callback + * @description set callback, which will be executed when port was triggered (usually output port) + */ +Port.prototype._onTriggered = function (a) +{ + this._activity(); + this._op.updateAnims(); + if (this._op.enabled && this.onTriggered) this.onTriggered(a); +}; + +Port.prototype._onSetProfiling = function (v) +{ + this._op.patch.profiler.add("port", this); + this.setValue(v); + this._op.patch.profiler.add("port", null); +}; + +Port.prototype._onTriggeredProfiling = function () +{ + if (this._op.enabled && this.onTriggered) + { + this._op.patch.profiler.add("port", this); + this.onTriggered(); + this._op.patch.profiler.add("port", null); + } +}; + + + +Port.prototype.getUiActiveState = function () +{ + return this._uiActiveState; +}; + +Port.prototype.setUiActiveState = function (onoff) +{ + this._uiActiveState = onoff; + if (this.onUiActiveStateChange) this.onUiActiveStateChange(); +}; + +/** + * @deprecated + */ +Port.prototype.onValueChange = function (cb) +{ + this.onChange = cb; +}; + +/** + * @deprecated + */ +Port.prototype.hidePort = function () {}; + + +/** + * Returns the port type string, e.g. "value" based on the port type number + * @function portTypeNumberToString + * @instance + * @memberof Port + * @param {Number} type - The port type number + * @returns {String} - The port type as string + */ +Port.portTypeNumberToString = function (type) +{ + if (type == CONSTANTS.OP.OP_PORT_TYPE_VALUE) return "value"; + if (type == CONSTANTS.OP.OP_PORT_TYPE_FUNCTION) return "function"; + if (type == CONSTANTS.OP.OP_PORT_TYPE_OBJECT) return "object"; + if (type == CONSTANTS.OP.OP_PORT_TYPE_ARRAY) return "array"; + if (type == CONSTANTS.OP.OP_PORT_TYPE_STRING) return "string"; + if (type == CONSTANTS.OP.OP_PORT_TYPE_DYNAMIC) return "dynamic"; + return "unknown"; +}; + + + +;// CONCATENATED MODULE: ./src/core/core_port_switch.js + + + + +class SwitchPort extends Port +{ + constructor(__parent, name, type, uiAttribs, indexPort) + { + super(__parent, name, type, uiAttribs); + + this.get = () => + { + let s = super.get(); + + if (CABLES.UI) + { + if ( + s === "" || + s === null || + s === undefined || + (uiAttribs.values && uiAttribs.values.indexOf(String(s)) === -1) + ) + { + this.op.setUiError("invalidswitch", "Invalid Value [" + this.name + "]: \"" + s + "\""); + } + else this.op.setUiError("invalidswitch", null); + } + + if (s === null || s === undefined)s = ""; + + return s; + }; + + this.indexPort = indexPort; + this.indexPort.set = (value) => + { + const values = uiAttribs.values; + + if (!values) + { + // console.log("switch port has no values", this); + return; + } + + let intValue = Math.floor(value); + + intValue = Math.min(intValue, values.length - 1); + intValue = Math.max(intValue, 0); + + this.indexPort.setValue(intValue); + this.set(values[intValue]); + + if (this.op.patch.isEditorMode() && performance.now() - (this.lastTime || 0) > 100 && window.gui && gui.patchView.isCurrentOp(this.op)) + { + gui.opParams.show(this.op); + this.lastTime = performance.now(); + } + }; + } + + setUiAttribs(attribs) + { + const hidePort = attribs.hidePort; + attribs.hidePort = true; + super.setUiAttribs(attribs); + if (typeof hidePort !== "undefined") + { + this.indexPort.setUiAttribs({ hidePort }); + } + } +} + + + +;// CONCATENATED MODULE: ./src/core/core_port_select.js + + + + +class ValueSelectPort extends SwitchPort +{ + setUiAttribs(newAttribs) + { + // never unhide valuePort when indexPort is linked + if (this.indexPort.isLinked()) + { + for (const p in newAttribs) + { + if (p == "greyout" && !newAttribs[p]) newAttribs[p] = "true"; + } + } + super.setUiAttribs(newAttribs); + } +} + + + + + +;// CONCATENATED MODULE: ./src/core/core_port_multi.js + + + +const MIN_NUM_PORTS = 2; + +class MultiPort extends Port +{ + constructor(__parent, name, type, dir, uiAttribs) + { + super(__parent, name, CONSTANTS.OP.OP_PORT_TYPE_ARRAY, uiAttribs); + + this.uiAttribs.multiPortNum = this.uiAttribs.multiPortNum || MIN_NUM_PORTS; + this.setUiAttribs({ "multiPort": true, "group": this.name, "order": -1 }); + this.ports = []; + this.direction = dir; + + const updateArray = () => + { + const arr = []; + for (let i = 0; i < this.ports.length - 1; i++) + { + arr[i] = this.ports[i]; + } + + this.setRef(arr); + }; + + + + + + const updateUi = () => + { + for (let i = 0; i < this.ports.length; i++) + { + let lp; // undefined to remove/not set it + let opacity;// undefined to remove/not set it + let grey;// undefined to remove/not set it + + if (!this.uiAttribs.editable)grey = true; + if (i == 0) lp = this.ports.length; + if (i == this.ports.length - 1) + { + opacity = 0.2; + grey = true; + } + + this.ports[i].setUiAttribs({ "longPort": lp, "opacity": opacity, "greyout": grey, "group": this.name }); + } + }; + + this.removeInvalidPorts = () => + { + for (let i = 0; i < this.ports.length; i++) + { + if (!this.ports[i]) this.ports.splice(i, 1); + } + }; + + this.countPorts = () => + { + if (gui.patchView.patchRenderer.isDraggingPort()) + { + clearTimeout(this.retryTo); + this.retryTo = setTimeout(this.countPorts.bind(this)); + return; + } + this.retryTo = null; + + let redo = false; + this.removeListeners(); + this.removeInvalidPorts(); + + for (let i = 0; i < this.ports.length; i++) + { + if (this.ports[i] && this.ports[i].links.length > 1) + { + const po = this.ports[i + 1]; + const otherPort = this.ports[i].links[0].getOtherPort(this.ports[i]); + this.ports[i].links[0].remove(); + this.op.patch.link(this.op, po.name, otherPort.op, otherPort.name); + redo = true; + break; + } + } + + + let foundHole = true; + if (!this.uiAttribs.editable) + while (foundHole) + { + foundHole = false; + for (let i = this.ports.length - 1; i > 0; i--) + { + if (this.ports[i] && this.ports[i].links.length > 0 && this.ports[i - 1].links.length == 0) + { + console.log("found hole!"); + // found hole + + const otherPort = this.ports[i].links[0].getOtherPort(this.ports[i]); + this.ports[i].links[0].remove(); + + const po = this.ports[i - 1]; + + if (po && this.ports[i]) + { + console.log("move ", this.ports[i].name, "to", po.name); + + this.op.patch.link(this.op, po.name, otherPort.op, otherPort.name); + foundHole = true; + redo = true; + break; + } + } + } + } + + if (this.ports.length > 2) + { + let i = this.ports.length - 1; + if (!this.uiAttribs.editable) + { + if (this.ports[i].links.length == 0 && this.ports[i - 1].links.length == 0) + { + this.ports[i].remove(); + this.ports[i] = null; + } + } + } + this.removeInvalidPorts(); + + if (this.ports[this.ports.length - 1].isLinked()) this.newPort(); + + updateArray(); + updateUi(); + + if (redo) this.countPorts(); + else this.addListeners(); + }; + + this.removeListeners = () => + { + for (let i = 0; i < this.ports.length; i++) + { + const po = this.ports[i]; + po.multiPortChangeListener = po.off(po.multiPortChangeListener); + po.multiLinkChangeListener = po.off(po.multiLinkChangeListener); + } + }; + + this.addListeners = () => + { + for (let i = 0; i < this.ports.length; i++) + { + const po = this.ports[i]; + + if (po.multiPortChangeListener)po.multiPortChangeListener = po.off(po.multiPortChangeListener); + po.multiPortChangeListener = po.on("change", updateArray.bind(this)); + + if (po.multiPortTriggerListener)po.multiPortTriggerListener = po.off(po.multiPortTriggerListener); + po.multiPortTriggerListener = po.on("trigger", this.trigger()); + + + if (po.multiLinkChangeListener)po.multiLinkChangeListener = po.off(po.multiLinkChangeListener); + po.multiLinkChangeListener = po.on("onLinkChanged", this.countPorts.bind(this)); + } + }; + + this.newPort = () => + { + const attrs = {}; + if (type == CABLES.OP_PORT_TYPE_STRING) attrs.type = "string"; + const po = new Port(this.op, name + "_" + this.ports.length, type, attrs); + + po.direction = dir; + this.ports.push(po); + console.log("CONSTANTS.PORT_DIR_OUT", CONSTANTS.PORT.PORT_DIR_OUT, this.direction); + if (this.direction == CONSTANTS.PORT.PORT_DIR_OUT) this.op.addOutPort(po); + else this.op.addInPort(po); + + po.setInitialValue(""); + this.addListeners(); + + updateUi(); + return po; + }; + + this.initPorts = () => + { + for (let i = 0; i < 2; i++) this.newPort(); + updateArray(); + updateUi(); + }; + + this.checkNum = () => + { + if (MIN_NUM_PORTS != this.uiAttribs.multiPortNum) this.setUiAttribs({ "editable": true }); + + this.uiAttribs.multiPortNum = Math.max(MIN_NUM_PORTS, this.uiAttribs.multiPortNum); + + while (this.ports.length < this.uiAttribs.multiPortNum) this.newPort(); + while (this.ports.length > this.uiAttribs.multiPortNum) if (this.ports[this.ports.length - 1]) this.ports.pop().remove(); + + this.removeInvalidPorts(); + }; + + this.incDec = (incDir) => + { + this.setUiAttribs({ "multiPortNum": this.uiAttribs.multiPortNum + incDir }); + this.checkNum(); + this.setUiAttribs({ "editable": true }); + updateUi(); + }; + + this.on("onUiAttrChange", this.checkNum.bind(this)); + this.checkNum(); + } +} + + + + + +;// CONCATENATED MODULE: ./src/core/core_op.js + + + + + + + + + +/** + * op the class of all operators + * @external CABLES + * @namespace Op + * @hideconstructor + */ + +/** + * @type {Object} + * @name attachments + * @instance + * @memberof Op + * @description access file attachments as String values + * @example + * // set shader source to attached files (files are called shader.vert / shader.frag) + * shader.setSource(attachments.shader_vert,attachments.shader_frag); + */ + +const Ops = {}; + +const Op = function () +{ + EventTarget.apply(this); + + this._log = new Logger("core_op"); + this.data = {}; // UNUSED, DEPRECATED, only left in for backwards compatibility with userops + this.storage = {}; // op-specific data to be included in export + this._objName = ""; + this.portsOut = []; + this.portsIn = []; + this.portsInData = []; // original loaded patch data + this.opId = ""; // unique op id + this.uiAttribs = {}; + this.enabled = true; + this.patch = arguments[0]; + this.name = arguments[1]; + this.preservedPortValues = {}; + this.preservedPortLinks = {}; + + this._linkTimeRules = { + "needsLinkedToWork": [], + "needsParentOp": null + }; + + this.shouldWork = {}; + this.hasUiErrors = false; + this._uiErrors = {}; + this._hasAnimPort = false; + + if (arguments[1]) + { + this._shortOpName = CABLES.getShortOpName(arguments[1]); + this.getTitle(); + } + + this.id = arguments[2] || shortId(); // instance id + this.onAddPort = null; + this.onCreate = null; + this.onResize = null; + this.onLoaded = null; + this.onDelete = null; + this.onUiAttrChange = null; + this.onError = null; + + this._instances = null; + + /** + * overwrite this to prerender shader and meshes / will be called by op `loadingStatus` + * @function preRender + * @memberof Op + * @instance + */ + this.preRender = null; + + /** + * overwrite this to initialize your op + * @function init + * @memberof Op + * @instance + */ + this.init = null; + + Object.defineProperty(this, "objName", { get() { return this._objName; } }); + Object.defineProperty(this, "shortName", { get() { return this._shortOpName; } }); + + if (this.initUi) this.initUi(); +}; + +{ + Op.prototype.clearUiAttrib = function (name) + { + const obj = {}; + obj.name = null; + this.uiAttrib(obj); + }; + + Op.prototype.checkMainloopExists = function () + { + if (!CABLES.UI) return; + if (!this.patch.cgl.mainloopOp) this.setUiError("nomainloop", "patch should have a mainloop to use this op"); + else this.setUiError("nomainloop", null); + }; + + Op.prototype.getTitle = function () + { + if (!this.uiAttribs) return "nouiattribs" + this.name; + + if ((this.uiAttribs.title === undefined || this.uiAttribs.title === "") && this.objName.indexOf("Ops.Ui.") == -1) + this.uiAttribs.title = this._shortOpName; + + if (this.uiAttribs.title === undefined) this.uiAttribs.title = this._shortOpName; + + return this.uiAttribs.title; + }; + + Op.prototype.setTitle = function (name) + { + const doEmitEvent = this.name != name; + this.name = name; + + if (this.uiAttribs.title != name) this.uiAttr({ "title": name }); + if (doEmitEvent) this.emitEvent("onTitleChange", name); + }; + + Op.prototype.setStorage = function (newAttribs) + { + if (!newAttribs) return; + this.storage = this.storage || {}; + + let changed = false; + for (const p in newAttribs) + { + if (this.storage[p] != newAttribs[p]) changed = true; + this.storage[p] = newAttribs[p]; + } + + if (changed) this.emitEvent("onStorageChange", newAttribs); + }; + + Op.prototype.isSubPatchOp = function () + { + if (this.storage) return (this.storage.subPatchVer || 0); + }; + + const _setUiAttrib = function (newAttribs) + { + if (!newAttribs) return; + + if (newAttribs.error || newAttribs.warning || newAttribs.hint) + { + this._log.warn("old ui error/warning attribute in " + this.name + ", use op.setUiError !", newAttribs); + } + + + + if (typeof newAttribs != "object") this._log.error("op.uiAttrib attribs are not of type object"); + if (!this.uiAttribs) this.uiAttribs = {}; + + + let emitMove = false; + if ( + CABLES.UI && + newAttribs.hasOwnProperty("translate") && + ( + !this.uiAttribs.translate || + this.uiAttribs.translate.x != newAttribs.translate.x || + this.uiAttribs.translate.y != newAttribs.translate.y + )) emitMove = true; + + + if (newAttribs.hasOwnProperty("disabled")) + { + this.setEnabled(!newAttribs.disabled); + } + + let changed = false; + for (const p in newAttribs) + { + if (this.uiAttribs[p] != newAttribs[p]) changed = true; + this.uiAttribs[p] = newAttribs[p]; + } + + if (this.uiAttribs.hasOwnProperty("selected") && this.uiAttribs.selected == false) delete this.uiAttribs.selected; + if (newAttribs.title && newAttribs.title != this.name) this.setTitle(newAttribs.title); + + if (changed) + { + this.emitEvent("onUiAttribsChange", newAttribs); + this.patch.emitEvent("onUiAttribsChange", this, newAttribs); + } + + + if (emitMove) this.emitEvent("move"); + }; + /** + * setUiAttrib + * possible values: + * <pre> + * warning - warning message - showing up in op parameter panel + * error - error message - showing up in op parameter panel + * extendTitle - op title extension, e.g. [ + ] + * </pre> + * @function setUiAttrib + * @param {Object} newAttribs, e.g. {"attrib":value} + * @memberof Op + * @instance + * @example + * op.setUiAttrib({"extendTitle":str}); + */ + Op.prototype.setUiAttribs = Op.prototype.setUiAttrib = Op.prototype.uiAttr = _setUiAttrib; + + Op.prototype.getName = function () + { + if (this.uiAttribs.name) return this.uiAttribs.name; + return this.name; + }; + + Op.prototype.addOutPort = function (p) + { + p.direction = CONSTANTS.PORT.PORT_DIR_OUT; + p._op = this; + this.portsOut.push(p); + this.emitEvent("onPortAdd", p); + return p; + }; + + Op.prototype.hasDynamicPort = function () + { + let i = 0; + for (i = 0; i < this.portsIn.length; i++) + { + if (this.portsIn[i].type == CONSTANTS.OP.OP_PORT_TYPE_DYNAMIC) return true; + if (this.portsIn[i].getName() == "dyn") return true; + } + for (i = 0; i < this.portsOut.length; i++) + { + if (this.portsOut[i].type == CONSTANTS.OP.OP_PORT_TYPE_DYNAMIC) return true; + if (this.portsOut[i].getName() == "dyn") return true; + } + + return false; + }; + + Op.prototype.addInPort = function (p) + { + if (!(p instanceof Port)) throw new Error("parameter is not a port!"); + + p.direction = CONSTANTS.PORT.PORT_DIR_IN; + p._op = this; + + this.portsIn.push(p); + this.emitEvent("onPortAdd", p); + + return p; + }; + + /** + * create a trigger input port + * @function inTrigger + * @instance + * @memberof Op + * @param {String} name + * @return {Port} created port + * + */ + Op.prototype.inFunction = Op.prototype.inTrigger = function (name, v) + { + const p = this.addInPort(new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_FUNCTION)); + if (v !== undefined) p.set(v); + return p; + }; + + /** + * create multiple UI trigger buttons + * @function inTriggerButton + * @memberof Op + * @instance + * @param {String} name + * @param {Array} names + * @return {Port} created port + */ + Op.prototype.inFunctionButton = Op.prototype.inTriggerButton = function (name, v) + { + const p = this.addInPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_FUNCTION, { + "display": "button" + }) + ); + if (v !== undefined) p.set(v); + return p; + }; + + Op.prototype.inFunctionButton = Op.prototype.inUiTriggerButtons = function (name, v) + { + const p = this.addInPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_FUNCTION, { + "display": "buttons" + }) + ); + if (v !== undefined) p.set(v); + return p; + }; + + + + /** + * create a number value input port + * @function inFloat + * @memberof Op + * @instance + * @param {String} name + * @param {Number} value + * @return {Port} created port + */ + Op.prototype.inValueFloat = Op.prototype.inValue = Op.prototype.inFloat = function (name, v) + { + const p = this.addInPort(new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_VALUE)); + + p.setInitialValue(v); + + return p; + }; + + /** + * create a boolean input port, displayed as a checkbox + * @function inBool + * @instance + * @memberof Op + * @param {String} name + * @param {Boolean} value + * @return {Port} created port + */ + Op.prototype.inValueBool = Op.prototype.inBool = function (name, v) + { + // old + const p = this.addInPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_NUMBER, { + "display": "bool" + }) + ); + // if (v !== undefined) + // { + p.setInitialValue(v); + // p.set(v); + // p.defaultValue = p.get(); + // } + + return p; + }; + + + Op.prototype.inMultiPort = function (name, type) + { + const p = new MultiPort( + this, + name, + type, + CONSTANTS.PORT_DIR_IN, + { + "display": "multiport", + "hidePort": true + } + ); + p.ignoreValueSerialize = true; + + this.addInPort(p); + p.initPorts(); + + return p; + }; + + Op.prototype.outMultiPort = function (name, type) + { + const p = new MultiPort( + this, + name, + type, + CONSTANTS.PORT.PORT_DIR_OUT, + { + "display": "multiport", + "hidePort": true + } + ); + p.ignoreValueSerialize = true; + + this.addOutPort(p); + p.initPorts(); + + return p; + }; + + + + Op.prototype.inValueString = function (name, v) + { + const p = this.addInPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_VALUE, { + "type": "string" + }) + ); + p.value = ""; + + p.setInitialValue(v); + return p; + }; + + /** + * create a String value input port + * @function inString + * @instance + * @memberof Op + * @param {String} name + * @param {String} value default value + * @return {Port} created port + */ + Op.prototype.inString = function (name, v) + { + const p = this.addInPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_STRING, { + "type": "string" + }) + ); + v = v || ""; + // p.value = v; + + p.setInitialValue(v); + return p; + }; + + /** + * create a String value input port displayed as TextArea + * @function inValueText + * @instance + * @memberof Op + * @param {String} name + * @param {String} value default value + * @return {Port} created port + */ + Op.prototype.inValueText = function (name, v) + { + const p = this.addInPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_VALUE, { + "type": "string", + "display": "text" + }) + ); + p.value = ""; + + p.setInitialValue(v); + // if (v !== undefined) + // { + // p.set(v); + // p.defaultValue = v; + // } + return p; + }; + + Op.prototype.inTextarea = function (name, v) + { + const p = this.addInPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_STRING, { + "type": "string", + "display": "text" + }) + ); + p.value = ""; + if (v !== undefined) + { + p.set(v); + p.defaultValue = v; + } + return p; + }; + + /** + * create a String value input port displayed as editor + * @function inStringEditor + * @instance + * @memberof Op + * @param {String} name + * @param {String} value default value + * @return {Port} created port + */ + // new string + Op.prototype.inStringEditor = function (name, v, syntax, hideFormatButton = true) + { + const p = this.addInPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_STRING, { + "type": "string", + "display": "editor", + "editShortcut": true, + "editorSyntax": syntax, + "hideFormatButton": hideFormatButton + })); + + p.value = ""; + if (v !== undefined) + { + p.set(v); + p.defaultValue = v; + } + return p; + }; + + // old + Op.prototype.inValueEditor = function (name, v, syntax, hideFormatButton = true) + { + const p = this.addInPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_NUMBER, { + "type": "string", + "display": "editor", + "editorSyntax": syntax, + "hideFormatButton": hideFormatButton + }) + ); + p.value = ""; + if (v !== undefined) + { + p.set(v); + p.defaultValue = v; + } + return p; + }; + + /** + * create a string select box + * @function inDropDown + * @instance + * @memberof Op + * @param {String} name + * @param {Array} values + * @param {String} value default value + * @return {Port} created port + */ + Op.prototype.inValueSelect = Op.prototype.inDropDown = function (name, values, v, noindex) + { + let p = null; + if (!noindex) + { + const indexPort = new Port(this, name + " index", CONSTANTS.OP.OP_PORT_TYPE_NUMBER, { + "increment": "integer", + "hideParam": true + }); + const n = this.addInPort(indexPort); + + if (values) for (let i = 0; i < values.length; i++) values[i] = String(values[i]); + + const valuePort = new ValueSelectPort( + this, + name, + CONSTANTS.OP.OP_PORT_TYPE_NUMBER, + { + "display": "dropdown", + "hidePort": true, + "type": "string", + "values": values + }, + n + ); + + valuePort.indexPort = indexPort; + + valuePort.on("change", (val, thePort) => + { + if (!thePort.indexPort.isLinked() && thePort.uiAttribs.values) + { + const idx = thePort.uiAttribs.values.indexOf(val); + if (idx > -1) thePort.indexPort.set(idx); + } + }); + + indexPort.onLinkChanged = function () + { + valuePort.setUiAttribs({ "greyout": indexPort.isLinked() }); + }; + + p = this.addInPort(valuePort); + + if (v !== undefined) + { + p.set(v); + const index = values.findIndex((item) => { return item == v; }); + n.setValue(index); + p.defaultValue = v; + n.defaultValue = index; + } + } + else + { + const valuePort = new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_VALUE, { + "display": "dropdown", + "hidePort": true, + "type": "string", + values + }); + + p = this.addInPort(valuePort); + } + + return p; + }; + + /** + * create a string switch box + * @function inSwitch + * @instance + * @memberof Op + * @param {String} name + * @param {Array} values + * @param {String} value default value + * @return {Port} created port + */ + Op.prototype.inSwitch = function (name, values, v, noindex) + { + let p = null; + if (!noindex) + { + if (!v)v = values[0]; + const indexPort = new Port(this, name + " index", CONSTANTS.OP.OP_PORT_TYPE_VALUE, { + "increment": "integer", + "values": values, + "hideParam": true + }); + const n = this.addInPort(indexPort); + + if (values) for (let i = 0; i < values.length; i++) values[i] = String(values[i]); + + const switchPort = new SwitchPort( + this, + name, + CONSTANTS.OP.OP_PORT_TYPE_STRING, + { + "display": "switch", + "hidePort": true, + "type": "string", + "values": values + }, + n + ); + + switchPort.indexPort = indexPort; + + switchPort.on("change", (val, thePort) => + { + if (!thePort.indexPort.isLinked() && thePort.uiAttribs.values) + { + const idx = thePort.uiAttribs.values.indexOf(val); + if (idx > -1) thePort.indexPort.set(idx); + } + }); + + indexPort.onLinkChanged = function () + { + switchPort.setUiAttribs({ "greyout": indexPort.isLinked() }); + }; + p = this.addInPort(switchPort); + + if (v !== undefined) + { + p.set(v); + const index = values.findIndex((item) => { return item == v; }); + n.setValue(index); + p.defaultValue = v; + n.defaultValue = index; + } + } + else + { + const switchPort = new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_STRING, { + "display": "switch", + "hidePort": true, + "type": "string", + "values": values + }); + p = this.addInPort(switchPort); + } + + return p; + }; + + /** + * create a integer input port + * @function inInt + * @instance + * @memberof Op + * @param {String} name + * @param {number} value default value + * @return {Port} created port + */ + Op.prototype.inValueInt = Op.prototype.inInt = function (name, v) + { + // old + const p = this.addInPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_VALUE, { + "increment": "integer" + }) + ); + if (v !== undefined) + { + p.set(v); + p.defaultValue = v; + } + return p; + }; + + /** + * create a file/URL input port + * @function inURL + * @instance + * @memberof Op + * @param {String} name + * @return {Port} created port + */ + Op.prototype.inFile = function (name, filter, v) + { + const p = this.addInPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_VALUE, { + "display": "file", + "type": "string", + "filter": filter + }) + ); + if (v !== undefined) + { + p.set(v); + p.defaultValue = v; + } + return p; + }; + + Op.prototype.inUrl = function (name, filter, v) + { + const p = this.addInPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_STRING, { + "display": "file", + "type": "string", + "filter": filter + }) + ); + if (v !== undefined) + { + p.set(v); + p.defaultValue = v; + } + return p; + }; + + /** + * create a texture input port + * @function inTexture + * @instance + * @memberof Op + * @param {String} name + * @return {Port} created port + */ + Op.prototype.inTexture = function (name, v) + { + const p = this.addInPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_OBJECT, { + "display": "texture", + "objType": "texture", + "preview": true + }) + ); + p.ignoreValueSerialize = true; + if (v !== undefined) p.set(v); + return p; + }; + + + /** + * create a object input port + * @function inObject + * @instance + * @memberof Op + * @param {String} name + * @return {Port} created port + */ + Op.prototype.inObject = function (name, v, objType) + { + const p = this.addInPort(new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_OBJECT, { "objType": objType })); + p.ignoreValueSerialize = true; + + if (v !== undefined) p.set(v); + return p; + }; + + Op.prototype.inGradient = function (name, v) + { + const p = this.addInPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_VALUE, { + "display": "gradient" + // "hidePort": true + }) + ); + if (v !== undefined) p.set(v); + return p; + }; + + + Op.prototype.getPortVisibleIndex = function (p) + { + let ports = this.portsIn; + if (p.direction == CONSTANTS.PORT_DIR_OUT)ports = this.portsOut; + + let index = 0; + for (let i = 0; i < ports.length; i++) + { + if (ports[i].uiAttribs.hidePort) continue; + index++; + if (ports[i] == p) return index; + } + }; + + /** + * create a array input port + * @function inArray + * @instance + * @memberof Op + * @param {String} name + * @return {Port} created port + */ + Op.prototype.inArray = function (name, v, stride) + { + if (!stride && CABLES.UTILS.isNumeric(v))stride = v; + + const p = this.addInPort(new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_ARRAY, { "stride": stride })); + + if (v !== undefined && (Array.isArray(v) || v == null)) p.set(v); + + // if (v !== undefined) p.set(v); + return p; + }; + + /** + * create a value slider input port + * @function inFloatSlider + * @instance + * @memberof Op + * @param {String} name + * @param {number} defaultvalue + * @param {number} min + * @param {number} max + * @return {Port} created port + */ + Op.prototype.inValueSlider = Op.prototype.inFloatSlider = function (name, v, min, max) + { + const uiattribs = { "display": "range" }; + + if (min != undefined && max != undefined) + { + uiattribs.min = min; + uiattribs.max = max; + } + + const p = this.addInPort(new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_VALUE, uiattribs)); + if (v !== undefined) + { + p.set(v); + p.defaultValue = v; + } + return p; + }; + + /** + * create output trigger port + * @function outTrigger + * @instance + * @memberof Op + * @param {String} name + * @return {Port} created port + */ + Op.prototype.outFunction = Op.prototype.outTrigger = function (name, v) + { + // old + const p = this.addOutPort(new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_FUNCTION)); + if (v !== undefined) p.set(v); + return p; + }; + + /** + * create output value port + * @function outNumber + * @instance + * @memberof Op + * @param {String} name + * @param {number} default value + * @return {Port} created port + */ + Op.prototype.outValue = Op.prototype.outNumber = function (name, v) + { + // old + const p = this.addOutPort(new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_VALUE)); + if (v !== undefined) p.set(v); + return p; + }; + + /** + * create output boolean port + * @function outBool + * @instance + * @memberof Op + * @param {String} name + * @return {Port} created port + */ + Op.prototype.outValueBool = Op.prototype.outBool = function (name, v) + { + // old + const p = this.addOutPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_VALUE, { + "display": "bool" + }) + ); + if (v !== undefined) p.set(v); + else p.set(0); + return p; + }; + + /** + * create output boolean port,value will be converted to 0 or 1 + * @function outBool + * @instance + * @memberof Op + * @param {String} name + * @return {Port} created port + */ + Op.prototype.outBoolNum = function (name, v) + { + const p = this.addOutPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_VALUE, { + "display": "boolnum" + }) + ); + + p.set = function (b) + { + this.setValue(b ? 1 : 0); + // console.log("bool set", b, this.get()); + }.bind(p); + + if (v !== undefined) p.set(v); + else p.set(0); + return p; + }; + + /** + * create output string port + * @function outString + * @instance + * @memberof Op + * @param {String} name + * @return {Port} created port + */ + Op.prototype.outValueString = function (name, v) + { + const p = this.addOutPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_VALUE, { + "type": "string" + }) + ); + if (v !== undefined) p.set(v); + return p; + }; + Op.prototype.outString = function (name, v) + { + const p = this.addOutPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_STRING, { + "type": "string" + }) + ); + if (v !== undefined) p.set(v); + else p.set(""); + return p; + }; + + /** + * create output object port + * @function outObject + * @instance + * @memberof Op + * @param {String} name + * @return {Port} created port + */ + Op.prototype.outObject = function (name, v, objType) + { + const p = this.addOutPort(new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_OBJECT, { "objType": objType || null })); + p.set(v || null); + p.ignoreValueSerialize = true; + return p; + }; + + /** + * create output array port + * @function outArray + * @instance + * @memberof Op + * @param {String} name + * @return {Port} created port + */ + Op.prototype.outArray = function (name, v, stride) + { + if (!stride && CABLES.UTILS.isNumeric(v))stride = v; + const p = this.addOutPort(new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_ARRAY, { "stride": stride })); + if (v !== undefined && (Array.isArray(v) || v == null)) p.set(v); + + p.ignoreValueSerialize = true; + return p; + }; + + /** + * create output texture port + * @function outTexture + * @instance + * @memberof Op + * @param {String} name + * @return {Port} created port + */ + Op.prototype.outTexture = function (name, v) + { + const p = this.addOutPort( + new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_OBJECT, { + "preview": true, + "objType": "texture", + "display": "texture" + }) + ); + if (v !== undefined) p.set(v || CGL.Texture.getEmptyTexture(this.patch.cgl)); + + p.ignoreValueSerialize = true; + return p; + }; + + Op.prototype.inDynamic = function (name, filter, options, v) + { + const p = new Port(this, name, CONSTANTS.OP.OP_PORT_TYPE_DYNAMIC, options); + + p.shouldLink = function (p1, p2) + { + if (filter && UTILS.isArray(filter)) + { + for (let i = 0; i < filter.length; i++) + { + if (p1 == this && p2.type === filter[i]) return true; + if (p2 == this && p1.type === filter[i]) return true; + } + return false; // types do not match + } + return true; // no filter set + }; + + this.addInPort(p); + if (v !== undefined) + { + p.set(v); + p.defaultValue = v; + } + return p; + }; + + Op.prototype.removeLinks = function () + { + for (let i = 0; i < this.portsIn.length; i++) this.portsIn[i].removeLinks(); + for (let ipo = 0; ipo < this.portsOut.length; ipo++) this.portsOut[ipo].removeLinks(); + }; + + Op.prototype.getSerialized = function () + { + const opObj = {}; + + if (this.opId) opObj.opId = this.opId; + if (this.patch.storeObjNames) opObj.objName = this.objName; + + + opObj.id = this.id; + opObj.uiAttribs = JSON.parse(JSON.stringify(this.uiAttribs)) || {}; + + if (this.storage && Object.keys(this.storage).length > 0) opObj.storage = JSON.parse(JSON.stringify(this.storage)); + if (this.uiAttribs.hasOwnProperty("working") && this.uiAttribs.working == true) delete this.uiAttribs.working; + if (opObj.uiAttribs.hasOwnProperty("uierrors")) delete opObj.uiAttribs.uierrors; + + if (opObj.uiAttribs.title == this._shortOpName) delete opObj.uiAttribs.title; + + opObj.portsIn = []; + opObj.portsOut = []; + + // console.log("this.portsIn", this.portsIn); + + for (let i = 0; i < this.portsIn.length; i++) + { + const s = this.portsIn[i].getSerialized(); + if (s)opObj.portsIn.push(s); + } + for (const ipo in this.portsOut) + { + const s = this.portsOut[ipo].getSerialized(); + if (s)opObj.portsOut.push(s); + } + + if (opObj.portsIn.length == 0) delete opObj.portsIn; + if (opObj.portsOut.length == 0) delete opObj.portsOut; + cleanJson(opObj); + + return opObj; + }; + + Op.prototype.getFirstOutPortByType = function (type) + { + for (const ipo in this.portsOut) if (this.portsOut[ipo].type == type) return this.portsOut[ipo]; + }; + + Op.prototype.getFirstInPortByType = function (type) + { + for (const ipo in this.portsIn) if (this.portsIn[ipo].type == type) return this.portsIn[ipo]; + }; + + /** + * return port by the name portName + * @function getPort + * @instance + * @memberof Op + * @param {String} portName + * @return {Port} + */ + Op.prototype.getPort = Op.prototype.getPortByName = function (name, lowerCase) + { + if (lowerCase) + { + for (let ipi = 0; ipi < this.portsIn.length; ipi++) + if (this.portsIn[ipi].getName().toLowerCase() == name || this.portsIn[ipi].id.toLowerCase() == name) + return this.portsIn[ipi]; + + for (let ipo = 0; ipo < this.portsOut.length; ipo++) + if (this.portsOut[ipo].getName().toLowerCase() == name || this.portsOut[ipo].id.toLowerCase() == name) + return this.portsOut[ipo]; + } + else + { + for (let ipi = 0; ipi < this.portsIn.length; ipi++) + if (this.portsIn[ipi].getName() == name || this.portsIn[ipi].id == name) + return this.portsIn[ipi]; + + for (let ipo = 0; ipo < this.portsOut.length; ipo++) + if (this.portsOut[ipo].getName() == name || this.portsOut[ipo].id == name) + return this.portsOut[ipo]; + } + }; + + + /** + * return port by the name id + * @function getPortById + * @instance + * @memberof Op + * @param {String} id + * @return {Port} + */ + Op.prototype.getPortById = function (id) + { + for (let ipi = 0; ipi < this.portsIn.length; ipi++) if (this.portsIn[ipi].id == id) return this.portsIn[ipi]; + for (let ipo = 0; ipo < this.portsOut.length; ipo++) if (this.portsOut[ipo].id == id) return this.portsOut[ipo]; + }; + + Op.prototype.updateAnims = function () + { + if (this._hasAnimPort) + for (let i = 0; i < this.portsIn.length; i++) this.portsIn[i].updateAnim(); + }; + + Op.prototype.log = function () + { + const initiator = "op " + this.objName; + if (CABLES.UI && !CABLES.UI.logFilter.shouldPrint(initiator, ...arguments)) return; + if (!CABLES.UI && this.patch.silent) return; + + const args = ["[op " + CABLES.getShortOpName(this.objName) + "]"]; + args.push.apply(args, arguments); + Function.prototype.apply.apply(console.log, [console, args]);// eslint-disable-line + }; + + Op.prototype.error = Op.prototype.logError = function () + { + if (!this) + { + console.log("no this...!!!"); + debugger; + return; + } + + // if (this.patch.silent) return; + const args = ["[op " + CABLES.getShortOpName(this.objName) + "]"]; + args.push.apply(args, arguments); + Function.prototype.apply.apply(console.error, [console, args]);// eslint-disable-line + if (window.gui) window.gui.emitEvent("opLogEvent", this.objName, "error", arguments); + }; + + Op.prototype.warn = Op.prototype.logWarn = function () + { + // if (this.patch.silent) return; + const args = ["[op " + CABLES.getShortOpName(this.objName) + "]"]; + args.push.apply(args, arguments); + Function.prototype.apply.apply(console.warn, [console, args]);// eslint-disable-line + }; + + Op.prototype.verbose = Op.prototype.logVerbose = function () + { + const initiator = "op " + CABLES.getShortOpName(this.objName); + if (CABLES.UI && !CABLES.UI.logFilter.shouldPrint(initiator, ...arguments)) return; + + if (!CABLES.UI && this.patch.silent) return; + + const args = ["[" + initiator + "]"]; + args.push.apply(args, arguments); + Function.prototype.apply.apply(console.info, [console, args]);// eslint-disable-line + }; + + + Op.prototype.profile = function (enable) + { + for (let ipi = 0; ipi < this.portsIn.length; ipi++) + { + this.portsIn[ipi]._onTriggered = this.portsIn[ipi]._onTriggeredProfiling; + this.portsIn[ipi].set = this.portsIn[ipi]._onSetProfiling; + } + }; + + Op.prototype.findParent = function (objName) + { + for (let ipi = 0; ipi < this.portsIn.length; ipi++) + { + if (this.portsIn[ipi].isLinked()) + { + if (this.portsIn[ipi].links[0].portOut.parent.objName == objName) + return this.portsIn[ipi].links[0].portOut.parent; + + let found = null; + found = this.portsIn[ipi].links[0].portOut.parent.findParent(objName); + if (found) return found; + } + } + return null; + }; + + + // todo: check instancing stuff? + Op.prototype.cleanUp = function () + { + if (this._instances) + { + for (let i = 0; i < this._instances.length; i++) + { + if (this._instances[i].onDelete) this._instances[i].onDelete(); + } + + + this._instances.length = 0; + } + for (let i = 0; i < this.portsIn.length; i++) + { + this.portsIn[i].setAnimated(false); + } + + if (this.onAnimFrame) this.patch.removeOnAnimFrame(this); + }; + + // todo: check instancing stuff? + Op.prototype.instanced = function (triggerPort) + { + console.log("instanced", this.patch.instancing.numCycles()); + if (this.patch.instancing.numCycles() === 0) return false; + + + let i = 0; + let ipi = 0; + if (!this._instances || this._instances.length != this.patch.instancing.numCycles()) + { + if (!this._instances) this._instances = []; + this._.log("creating instances of ", this.objName, this.patch.instancing.numCycles(), this._instances.length); + this._instances.length = this.patch.instancing.numCycles(); + + for (i = 0; i < this._instances.length; i++) + { + this._instances[i] = this.patch.createOp(this.objName, true); + this._instances[i].instanced = function () + { + return false; + }; + this._instances[i].uiAttr(this.uiAttribs); + + for (let ipo = 0; ipo < this.portsOut.length; ipo++) + { + if (this.portsOut[ipo].type == CONSTANTS.OP.OP_PORT_TYPE_FUNCTION) + { + this._instances[i].getPortByName(this.portsOut[ipo].name).trigger = this.portsOut[ipo].trigger.bind(this.portsOut[ipo]); + } + } + } + + for (ipi = 0; ipi < this.portsIn.length; ipi++) + { + this.portsIn[ipi].onChange = null; + this.portsIn[ipi].onValueChanged = null; + } + } + + const theTriggerPort = null; + for (ipi = 0; ipi < this.portsIn.length; ipi++) + { + if ( + this.portsIn[ipi].type == CONSTANTS.OP.OP_PORT_TYPE_VALUE || + this.portsIn[ipi].type == CONSTANTS.OP.OP_PORT_TYPE_ARRAY + ) + { + this._instances[this.patch.instancing.index()].portsIn[ipi].set(this.portsIn[ipi].get()); + } + if (this.portsIn[ipi].type == CONSTANTS.OP.OP_PORT_TYPE_FUNCTION) + { + // if(this._instances[ this.patch.instancing.index() ].portsIn[ipi].name==triggerPort.name) + // theTriggerPort=this._instances[ this.patch.instancing.index() ].portsIn[ipi]; + } + } + + if (theTriggerPort) theTriggerPort.onTriggered(); + + for (ipi = 0; ipi < this.portsOut.length; ipi++) + { + if (this.portsOut[ipi].type == CONSTANTS.OP.OP_PORT_TYPE_VALUE) + { + this.portsOut[ipi].set(this._instances[this.patch.instancing.index()].portsOut[ipi].get()); + } + } + + return true; + }; + + // todo: check instancing stuff? + Op.prototype.initInstancable = function () + { + // if(this.isInstanced) + // { + // console.log('cancel instancing'); + // return; + // } + // this._instances=[]; + // for(var ipi=0;ipi<this.portsIn.length;ipi++) + // { + // if(this.portsIn[ipi].type==CONSTANTS.OP.OP_PORT_TYPE_VALUE) + // { + // + // } + // if(this.portsIn[ipi].type==CONSTANTS.OP.OP_PORT_TYPE_FUNCTION) + // { + // // var piIndex=ipi; + // this.portsIn[ipi].onTriggered=function(piIndex) + // { + // + // var i=0; + // // console.log('trigger',this._instances.length); + // + // }.bind(this,ipi ); + // + // } + // }; + // this._instances=null; + }; + + Op.prototype.setValues = function (obj) + { + for (const i in obj) + { + const port = this.getPortByName(i); + if (port) port.set(obj[i]); + else this._log.warn("op.setValues: port not found:", i); + } + }; + + /** + * return true if op has this error message id + * @function hasUiError + * @instance + * @memberof Op + * @param {id} error id + * @returns {Boolean} - has id + */ + Op.prototype.hasUiError = function (id) + { + return this._uiErrors.hasOwnProperty(id) && this._uiErrors[id]; + }; + + /** + * show op error message - set message to null to remove error message + * @function setUiError + * @instance + * @memberof Op + * @param {id} error id + * @param {txt} text message + * @param {level} level + */ + Op.prototype.setUiError = function (id, txt, level) + { + // overwritten in ui: core_extend_op + }; + + // todo: remove + Op.prototype.setError = function (id, txt) + { + this._log.warn("old error message op.error() - use op.setUiError()"); + }; + + + /** + * enable/disable op + * @function + * @instance + * @memberof Op + * @param {boolean} + */ + Op.prototype.setEnabled = function (b) + { + this.enabled = b; + this.emitEvent("onEnabledChange", b); + if (!this.enabled) this.setUiError("_disabled", "Op is disabled", 0); + else this.setUiError("_disabled", null); + }; + + /** + * organize ports into a group + * @function + * @instance + * @memberof Op + * @param {String} name + * @param {Array} ports + */ + Op.prototype.setPortGroup = function (name, ports) + { + for (let i = 0; i < ports.length; i++) + { + if (ports[i]) + if (ports[i].setUiAttribs) ports[i].setUiAttribs({ "group": name }); + else + { + this._log.error("setPortGroup: invalid port!"); + } + } + }; + + /** + * visually indicate ports that they are coordinate inputs + * @function + * @instance + * @memberof Op + * @param {Port} portX + * @param {Port} portY + * @param {Port} portZ + */ + Op.prototype.setUiAxisPorts = function (px, py, pz) + { + if (px) px.setUiAttribs({ "axis": "X" }); + if (py) py.setUiAttribs({ "axis": "Y" }); + if (pz) pz.setUiAttribs({ "axis": "Z" }); + }; + + /** + * remove port from op + * @function removePort + * @instance + * @memberof Op + * @param {Port} port to remove + */ + Op.prototype.removePort = function (port) + { + for (let ipi = 0; ipi < this.portsIn.length; ipi++) + { + if (this.portsIn[ipi] == port) + { + this.portsIn.splice(ipi, 1); + this.emitEvent("onUiAttribsChange", {}); + this.emitEvent("onPortRemoved", {}); + return; + } + } + }; + + Op.prototype._checkLinksNeededToWork = function () {}; + + /** + * show a warning of this op is not a child of parentOpName + * @function + * @instance + * @memberof Op + * @param {String} parentOpName + */ + Op.prototype.toWorkNeedsParent = function (parentOpName) + { + if (!this.patch.isEditorMode()) return; + + this._linkTimeRules.needsParentOp = parentOpName; + }; + + // /** + // * show a warning of this op is a child of parentOpName + // * @function + // * @instance + // * @memberof Op + // * @param {String} parentOpName + // */ + Op.prototype.toWorkShouldNotBeChild = function (parentOpName, type) + { + if (!this.patch.isEditorMode()) return; + this._linkTimeRules.forbiddenParent = parentOpName; + if (type != undefined) this._linkTimeRules.forbiddenParentType = type; + }; + + + /** + * show a small X to indicate op is not working when given ports are not linked + * @function + * @instance + * @memberof Op + * @param {Port} port1 + * @param {Port} port2 + * @param {Port} port3 + */ + Op.prototype.toWorkPortsNeedToBeLinked = function () + { + if (!this.patch.isEditorMode()) return; + for (let i = 0; i < arguments.length; i++) + if (this._linkTimeRules.needsLinkedToWork.indexOf(arguments[i]) == -1) this._linkTimeRules.needsLinkedToWork.push(arguments[i]); + }; + Op.prototype.toWorkPortsNeedToBeLinkedReset = function () + { + if (!this.patch.isEditorMode()) return; + this._linkTimeRules.needsLinkedToWork.length = 0; + if (this.checkLinkTimeWarnings) this.checkLinkTimeWarnings(); + }; + + Op.prototype.initVarPorts = function () + { + for (let i = 0; i < this.portsIn.length; i++) + { + if (this.portsIn[i].getVariableName()) this.portsIn[i].setVariable(this.portsIn[i].getVariableName()); + } + }; + + /** + * refresh op parameters, if current op is selected + * @function + * @instance + * @memberof Op + */ + Op.prototype.refreshParams = function () + { + if (this.patch && this.patch.isEditorMode() && this.isCurrentUiOp()) + { + gui.opParams.show(this); + } + }; + + /** + * Returns true if op is selected and parameter are shown in the editor, can only return true if in editor/ui + * @function isCurrentUiOp + * @instance + * @memberof Op + * @returns {Boolean} - is current ui op + */ + Op.prototype.isCurrentUiOp = function () + { + if (this.patch.isEditorMode()) return gui.patchView.isCurrentOp(this); + }; + + /** + * Implement to render 2d canvas based graphics from in an op + * @function renderVizLayer + * @instance + * @memberof Op + * @param {ctx} context of canvas 2d + * @param {Object} layer info + * @param {number} layer.x x position on canvas + * @param {number} layer.y y position on canvas + * @param {number} layer.width width of canvas + * @param {number} layer.height height of canvas + * @param {number} layer.scale current scaling of patchfield view + */ + Op.prototype.renderVizLayer = null; // optionaly defined in op instance +} + + + +;// CONCATENATED MODULE: ./src/core/loadingstatus.js + + + + +/** + * LoadingStatus class, manages asynchronous loading jobs + * + * @external CABLES + * @namespace LoadingStatus + * @hideconstructor + * @class + */ +const LoadingStatus = function (patch) +{ + EventTarget.apply(this); + + this._log = new Logger("LoadingStatus"); + this._loadingAssets = {}; + this._cbFinished = []; + this._assetTasks = []; + this._percent = 0; + this._count = 0; + this._countFinished = 0; + this._order = 0; + this._startTime = 0; + this._patch = patch; + this._wasFinishedPrinted = false; + this._loadingAssetTaskCb = false; +}; + +LoadingStatus.prototype.setOnFinishedLoading = function (cb) +{ + this._cbFinished.push(cb); +}; + +LoadingStatus.prototype.getNumAssets = function () +{ + return this._countFinished; +}; + +LoadingStatus.prototype.getProgress = function () +{ + return this._percent; +}; + +LoadingStatus.prototype.checkStatus = function () +{ + this._countFinished = 0; + this._count = 0; + + for (const i in this._loadingAssets) + { + this._count++; + if (!this._loadingAssets[i].finished) + { + this._countFinished++; + } + } + + this._percent = (this._count - this._countFinished) / this._count; + + if (this._countFinished === 0) + { + for (let j = 0; j < this._cbFinished.length; j++) + { + if (this._cbFinished[j]) + { + const cb = this._cbFinished[j]; + setTimeout(() => { cb(this._patch); this.emitEvent("finishedAll"); }, 100); + } + } + + if (!this._wasFinishedPrinted) + { + this._wasFinishedPrinted = true; + this.print(); + } + this.emitEvent("finishedAll"); + } +}; + +LoadingStatus.prototype.getList = function () +{ + let arr = []; + for (const i in this._loadingAssets) + { + arr.push(this._loadingAssets[i]); + } + + return arr; +}; + + +LoadingStatus.prototype.getListJobs = function () +{ + let arr = []; + for (const i in this._loadingAssets) + { + if (!this._loadingAssets[i].finished)arr.push(this._loadingAssets[i].name); + } + + return arr; +}; + +LoadingStatus.prototype.print = function () +{ + if (this._patch.config.silent) return; + + const rows = []; + + for (const i in this._loadingAssets) + { + rows.push([ + this._loadingAssets[i].order, + this._loadingAssets[i].type, + this._loadingAssets[i].name, + (this._loadingAssets[i].timeEnd - this._loadingAssets[i].timeStart) / 1000 + "s", + ]); + } + + this._log.groupCollapsed( + "finished loading " + this._order + " assets in " + (Date.now() - this._startTime) / 1000 + "s", + ); + this._log.table(rows); + this._log.groupEnd(); +}; + +LoadingStatus.prototype.finished = function (id) +{ + const l = this._loadingAssets[id]; + if (l) + { + if (l.finished) this._log.warn("loading job was already finished", l); + + if (l.op) l.op.setUiAttribs({ "loading": false }); + l.finished = true; + l.timeEnd = Date.now(); + } + + this.checkStatus(); + this.emitEvent("finishedTask"); +}; + +LoadingStatus.prototype._startAssetTasks = function () +{ + for (let i = 0; i < this._assetTasks.length; i++) this._assetTasks[i](); + this._assetTasks.length = 0; +}; + +/** + * delay an asset loading task, mainly to wait for ui to be finished loading and showing, and only then start loading assets + * @function addAssetLoadingTask + * @instance + * @memberof Op + * @param {function} callback + */ +LoadingStatus.prototype.addAssetLoadingTask = function (cb) +{ + if (this._patch.isEditorMode() && !CABLES.UI.loaded) + { + this._assetTasks.push(cb); + + if (!this._loadingAssetTaskCb)window.gui.addEventListener("uiloaded", this._startAssetTasks.bind(this)); + this._loadingAssetTaskCb = true; + } + else + { + cb(); + } + this.emitEvent("addAssetTask"); +}; + +LoadingStatus.prototype.existByName = function (name) +{ + for (let i in this._loadingAssets) + { + if (this._loadingAssets[i].name == name && !this._loadingAssets[i].finished) + { + return true; + } + } +}; + +LoadingStatus.prototype.start = function (type, name, op) +{ + if (this._startTime == 0) this._startTime = Date.now(); + const id = generateUUID(); + + if (op)op.setUiAttribs({ "loading": true }); + + this._loadingAssets[id] = { + "id": id, + "op": op, + "type": type, + "name": name, + "finished": false, + "timeStart": Date.now(), + "order": this._order, + }; + this._order++; + + this.emitEvent("startTask"); + + return id; +}; + + + +;// CONCATENATED MODULE: ./src/core/instancing.js +// todo: needs to be removed... + +const Instancing = function () +{ + this._loops = []; + this._indizes = []; + this._index = 0; +}; + +Instancing.prototype.pushLoop = function (maxNum) +{ + this._loops.push(Math.abs(Math.floor(maxNum))); + this._indizes.push(this._index); +}; + +Instancing.prototype.popLoop = function () +{ + this._loops.pop(); + // this._index--; + this._index = this._indizes.pop(); + if (this._loops.length === 0) this._index = 0; +}; + +Instancing.prototype.numLoops = function () +{ + return this._loops.length; +}; + +Instancing.prototype.numCycles = function () +{ + if (this._loops.length === 0) return 0; + let num = this._loops[0]; + for (let i = 1; i < this._loops.length; i++) num *= this._loops[i]; + + return num; +}; + +Instancing.prototype.inLoop = function () +{ + return this._loops.length > 0; +}; + +Instancing.prototype.increment = function () +{ + this._index++; +}; + +Instancing.prototype.index = function () +{ + return this._index; +}; + + + +;// CONCATENATED MODULE: ./src/core/timer.js + + +/** @namespace CABLES */ + +const internalNow = function () +{ + return window.performance.now(); +}; + +/** + * current time in milliseconds + * @memberof CABLES + * @function now + * @static + */ +const now = function () +{ + return internalNow(); +}; + +// ---------------------------- + +/** + * Measuring time + * @external CABLES + * @namespace Timer + * @hideconstructor + * @class + */ +const Timer = function () +{ + EventTarget.apply(this); + + this._timeStart = internalNow(); + this._timeOffset = 0; + + this._currentTime = 0; + this._lastTime = 0; + this._paused = true; + this._delay = 0; + this.overwriteTime = -1; +}; + + +Timer.prototype._internalNow = function () +{ + if (this._ts) return this._ts; + return internalNow(); +}; + +Timer.prototype._getTime = function () +{ + this._lastTime = (this._internalNow() - this._timeStart) / 1000; + return this._lastTime + this._timeOffset; +}; + +Timer.prototype.setDelay = function (d) +{ + this._delay = d; + this.emitEvent("timeChange"); +}; + +/** + * @function + * @memberof Timer + * @instance + * @description returns true if timer is playing + * @return {Boolean} value + */ +Timer.prototype.isPlaying = function () +{ + return !this._paused; +}; + +/** + * @function + * @memberof Timer + * @instance + * @description update timer + * @return {Number} time + */ +Timer.prototype.update = function (ts) +{ + if (ts) this._ts = ts; + if (this._paused) return; + this._currentTime = this._getTime(); + + return this._currentTime; +}; + +/** + * @function + * @memberof Timer + * @instance + * @return {Number} time in milliseconds + */ +Timer.prototype.getMillis = function () +{ + return this.get() * 1000; +}; + +/** + * @function + * @memberof Timer + * @instance + * @return {Number} value time in seconds + */ +Timer.prototype.get = Timer.prototype.getTime = function () +{ + if (this.overwriteTime >= 0) return this.overwriteTime - this._delay; + return this._currentTime - this._delay; +}; + +/** + * toggle between play/pause state + * @function + * @memberof Timer + * @instance + */ +Timer.prototype.togglePlay = function () +{ + if (this._paused) this.play(); + else this.pause(); +}; + +/** + * set current time + * @function + * @memberof Timer + * @instance + * @param {Number} t + */ +Timer.prototype.setTime = function (t) +{ + if (isNaN(t) || t < 0) t = 0; + this._timeStart = this._internalNow(); + this._timeOffset = t; + this._currentTime = t; + this.emitEvent("timeChange"); +}; + +Timer.prototype.setOffset = function (val) +{ + if (this._currentTime + val < 0) + { + this._timeStart = this._internalNow(); + this._timeOffset = 0; + this._currentTime = 0; + } + else + { + this._timeOffset += val; + this._currentTime = this._lastTime + this._timeOffset; + } + this.emitEvent("timeChange"); +}; + +/** + * (re)starts the timer + * @function + * @memberof Timer + * @instance + */ +Timer.prototype.play = function () +{ + this._timeStart = this._internalNow(); + this._paused = false; + this.emitEvent("playPause"); +}; + +/** + * pauses the timer + * @function + * @memberof Timer + * @instance + */ +Timer.prototype.pause = function () +{ + this._timeOffset = this._currentTime; + this._paused = true; + this.emitEvent("playPause"); +}; + + + +;// CONCATENATED MODULE: ./src/core/core_profiler.js + + +class Profiler +{ + constructor(patch) + { + this.startFrame = patch.getFrameNum(); + this.items = {}; + this.currentId = null; + this.currentStart = 0; + this._patch = patch; + } + + getItems() + { + return this.items; + } + + clear() + { + if (this.paused) return; + this.items = {}; + } + + togglePause() + { + this.paused = !this.paused; + if (!this.paused) + { + this.items = {}; + this.currentStart = performance.now(); + } + } + + add(type, object) + { + if (this.paused) return; + + if (this.currentId !== null) + { + if (!object || object.id != this.currentId) + { + if (this.items[this.currentId]) + { + this.items[this.currentId].timeUsed += performance.now() - this.currentStart; + + if (!this.items[this.currentId].peakTime || now() - this.items[this.currentId].peakTime > 5000) + { + this.items[this.currentId].peak = 0; + this.items[this.currentId].peakTime = now(); + } + this.items[this.currentId].peak = Math.max(this.items[this.currentId].peak, performance.now() - this.currentStart); + } + } + } + + if (object !== null) + { + if (!this.items[object.id]) + { + this.items[object.id] = { + "numTriggers": 0, + "timeUsed": 0, + }; + } + + if (this.items[object.id].lastFrame != this._patch.getFrameNum()) this.items[object.id].numTriggers = 0; + + this.items[object.id].lastFrame = this._patch.getFrameNum(); + this.items[object.id].numTriggers++; + this.items[object.id].opid = object.op.id; + this.items[object.id].title = object.op.name + "." + object.name; + this.items[object.id].subPatch = object.op.uiAttribs.subPatch; + + this.currentId = object.id; + this.currentStart = performance.now(); + } + else + { + this.currentId = null; + } + } + + print() + { + console.log("--------"); + for (const i in this.items) + { + console.log(this.items[i].title + ": " + this.items[i].numTriggers + " / " + this.items[i].timeUsed); + } + } +} + + + +;// CONCATENATED MODULE: ./src/core/cgl/constants.js +const SHADER = { + // default attributes + "SHADERVAR_VERTEX_POSITION": "vPosition", + "SHADERVAR_VERTEX_NUMBER": "attrVertIndex", + "SHADERVAR_VERTEX_NORMAL": "attrVertNormal", + "SHADERVAR_VERTEX_TEXCOORD": "attrTexCoord", + "SHADERVAR_INSTANCE_MMATRIX": "instMat", + "SHADERVAR_VERTEX_COLOR": "attrVertColor", + + "SHADERVAR_INSTANCE_INDEX": "instanceIndex", + + // default uniforms + "SHADERVAR_UNI_PROJMAT": "projMatrix", + "SHADERVAR_UNI_VIEWMAT": "viewMatrix", + "SHADERVAR_UNI_MODELMAT": "modelMatrix", + "SHADERVAR_UNI_NORMALMAT": "normalMatrix", + "SHADERVAR_UNI_INVVIEWMAT": "inverseViewMatrix", + "SHADERVAR_UNI_INVPROJMAT": "invProjMatrix", + "SHADERVAR_UNI_MATERIALID": "materialId", + "SHADERVAR_UNI_OBJECTID": "objectId", + + "SHADERVAR_UNI_VIEWPOS": "camPos", +}; + + +const BLEND_MODES = { + "BLEND_NONE": 0, + "BLEND_NORMAL": 1, + "BLEND_ADD": 2, + "BLEND_SUB": 3, + "BLEND_MUL": 4, +}; + + + + + +const RAD2DEG = 180.0 / Math.PI; +const DEG2RAD = Math.PI / 180.0; + +const constants_CONSTANTS = { + "MATH": { + "DEG2RAD": DEG2RAD, + "RAD2DEG": RAD2DEG, + }, + "SHADER": SHADER, + "BLEND_MODES": BLEND_MODES, +}; + + + + +;// CONCATENATED MODULE: ./src/core/cg/cg_uniform.js + + + +class CgUniform +{ + constructor(__shader, __type, __name, _value, _port2, _port3, _port4, _structUniformName, _structName, _propertyName) + { + this._log = new Logger("cg_uniform"); + this._type = __type; + this._name = __name; + this._shader = __shader; + this._value = 0.00001; + this._oldValue = null; + this._port = null; + this._structName = _structName; + this._structUniformName = _structUniformName; + this._propertyName = _propertyName; + + this._shader._addUniform(this); + this.needsUpdate = true; + this.shaderType = null; + this.comment = null; + + if (__type == "f") + { + this.set = this.setValue = this.setValueF.bind(this); + this.updateValue = this.updateValueF.bind(this); + } + else if (__type == "f[]") + { + this.set = this.setValue = this.setValueArrayF.bind(this); + this.updateValue = this.updateValueArrayF.bind(this); + } + else if (__type == "2f[]") + { + this.set = this.setValue = this.setValueArray2F.bind(this); + this.updateValue = this.updateValueArray2F.bind(this); + } + else if (__type == "3f[]") + { + this.set = this.setValue = this.setValueArray3F.bind(this); + this.updateValue = this.updateValueArray3F.bind(this); + } + else if (__type == "4f[]") + { + this.set = this.setValue = this.setValueArray4F.bind(this); + this.updateValue = this.updateValueArray4F.bind(this); + } + else if (__type == "i") + { + this.set = this.setValue = this.setValueI.bind(this); + this.updateValue = this.updateValueI.bind(this); + } + else if (__type == "2i") + { + this.set = this.setValue = this.setValue2I.bind(this); + this.updateValue = this.updateValue2I.bind(this); + } + else if (__type == "3i") + { + this.set = this.setValue = this.setValue3I.bind(this); + this.updateValue = this.updateValue3I.bind(this); + } + else if (__type == "4i") + { + this.set = this.setValue = this.setValue4I.bind(this); + this.updateValue = this.updateValue4I.bind(this); + } + else if (__type == "b") + { + this.set = this.setValue = this.setValueBool.bind(this); + this.updateValue = this.updateValueBool.bind(this); + } + else if (__type == "4f") + { + this.set = this.setValue = this.setValue4F.bind(this); + this.updateValue = this.updateValue4F.bind(this); + } + else if (__type == "3f") + { + this.set = this.setValue = this.setValue3F.bind(this); + this.updateValue = this.updateValue3F.bind(this); + } + else if (__type == "2f") + { + this.set = this.setValue = this.setValue2F.bind(this); + this.updateValue = this.updateValue2F.bind(this); + } + else if (__type == "t") + { + this.set = this.setValue = this.setValueT.bind(this); + this.updateValue = this.updateValueT.bind(this); + } + else if (__type == "tc") + { + this.set = this.setValue = this.setValueT.bind(this); + this.updateValue = this.updateValueT.bind(this); + } + else if (__type == "t[]") + { + this.set = this.setValue = this.setValueArrayT.bind(this); + this.updateValue = this.updateValueArrayT.bind(this); + } + else if (__type == "m4" || __type == "m4[]") + { + this.set = this.setValue = this.setValueM4.bind(this); + this.updateValue = this.updateValueM4.bind(this); + } + else throw new Error("Unknown uniform type"); + + if (typeof _value == "object" && _value instanceof Port) + { + this._port = _value; + this._value = this._port.get(); + + + if (_port2 && _port3 && _port4) + { + if (!(_port2 instanceof Port) || !(_port3 instanceof Port) || !(_port4 instanceof Port)) + { + this._log.error("[cgl_uniform] mixed port/value parameter for vec4 ", this._name); + } + + this._value = [0, 0, 0, 0]; + this._port2 = _port2; + this._port3 = _port3; + this._port4 = _port4; + + this._port.on("change", this.updateFromPort4f.bind(this)); + this._port2.on("change", this.updateFromPort4f.bind(this)); + this._port3.on("change", this.updateFromPort4f.bind(this)); + this._port4.on("change", this.updateFromPort4f.bind(this)); + + // this._port.onChange = this._port2.onChange = this._port3.onChange = this._port4.onChange = this.updateFromPort4f.bind(this); + this.updateFromPort4f(); + } + else if (_port2 && _port3) + { + if (!(_port2 instanceof Port) || !(_port3 instanceof Port)) + { + this._log.error("[cgl_uniform] mixed port/value parameter for vec4 ", this._name); + } + + this._value = [0, 0, 0]; + this._port2 = _port2; + this._port3 = _port3; + // this._port.onChange = this._port2.onChange = this._port3.onChange = this.updateFromPort3f.bind(this); + this._port.on("change", this.updateFromPort3f.bind(this)); + this._port2.on("change", this.updateFromPort3f.bind(this)); + this._port3.on("change", this.updateFromPort3f.bind(this)); + + this.updateFromPort3f(); + } + else if (_port2) + { + if (!(_port2 instanceof Port)) + { + this._log.error("[cgl_uniform] mixed port/value parameter for vec4 ", this._name); + } + + this._value = [0, 0]; + this._port2 = _port2; + // this._port.onChange = this._port2.onChange = this.updateFromPort2f.bind(this); + this._port.on("change", this.updateFromPort2f.bind(this)); + this._port2.on("change", this.updateFromPort2f.bind(this)); + + this.updateFromPort2f(); + } + else + { + // this._port.on = this.updateFromPort.bind(this); + this._port.on("change", this.updateFromPort.bind(this)); + } + } + else this._value = _value; + + this.setValue(this._value); + this.needsUpdate = true; + } + + + getType() + { + return this._type; + } + + getName() + { + return this._name; + } + + getValue() + { + return this._value; + } + + getShaderType() + { + return this.shaderType; + } + + isStructMember() + { + return !!this._structName; + } + + + updateFromPort4f() + { + this._value[0] = this._port.get(); + this._value[1] = this._port2.get(); + this._value[2] = this._port3.get(); + this._value[3] = this._port4.get(); + this.setValue(this._value); + } + + updateFromPort3f() + { + this._value[0] = this._port.get(); + this._value[1] = this._port2.get(); + this._value[2] = this._port3.get(); + this.setValue(this._value); + } + + updateFromPort2f() + { + this._value[0] = this._port.get(); + this._value[1] = this._port2.get(); + this.setValue(this._value); + } + + updateFromPort() + { + this.setValue(this._port.get()); + } +} + +/* harmony default export */ const cg_uniform = (CgUniform); + +;// CONCATENATED MODULE: ./src/core/cgl/cgl_shader_uniform.js + + + + +/** + * Shader uniforms + * + * types: + * <pre> + * f - float + * 2f - vec2 + * 3f - vec3 + * 4f - vec4 + * i - integer + * t - texture + * m4 - mat4, 4x4 float matrix + * f[] - array of floats + * 2f[] - array of float vec2 + * 3f[] - array of float vec3 + * 4f[] - array of float vec4 + * </pre> + * + * @external CGL + * @namespace Uniform + * @class + * @param {Shader} shader + * @param {String} [type=f] + * @param {String} name + * @param {Number|Port} value can be a Number,Matrix or Port + * @example + * // bind float uniform called myfloat and initialize with value 1.0 + * const unir=new CGL.Uniform(shader,'f','myfloat',1.0); + * unir.setValue(1.0); + * + * // bind float uniform called myfloat and automatically set it to input port value + * const myPort=op.inFloat("input"); + * const pv=new CGL.Uniform(shader,'f','myfloat',myPort); + * + */ + + +// export const Uniform(__shader, __type, __name, _value, _port2, _port3, _port4, _structUniformName, _structName, _propertyName) + +class Uniform extends cg_uniform +{ + constructor(__shader, __type, __name, _value, _port2, _port3, _port4, _structUniformName, _structName, _propertyName) + { + super(__shader, __type, __name, _value, _port2, _port3, _port4, _structUniformName, _structName, _propertyName); + this._loc = -1; + this._cgl = __shader._cgl; + } + + get name() + { + return this._name; + } + + copy(newShader) + { + const uni = new Uniform(newShader, this._type, this._name, this._value, this._port2, this._port3, this._port4, this._structUniformName, this._structName, this._propertyName); + uni.shaderType = this.shaderType; + return uni; + } + + /** + * returns type as glsl type string. e.g. 'f' returns 'float' + * @function getGlslTypeString + * @memberof Uniform + * @instance + * @return {string} type as string + */ + getGlslTypeString() + { + return Uniform.glslTypeString(this._type); + } + + _isValidLoc() + { + return this._loc != -1;// && this._loc != null; + } + + resetLoc() + { + this._loc = -1; + this.needsUpdate = true; + } + + bindTextures() {} + + getLoc() + { + return this._loc; + } + + updateFromPort4f() + { + this._value[0] = this._port.get(); + this._value[1] = this._port2.get(); + this._value[2] = this._port3.get(); + this._value[3] = this._port4.get(); + this.setValue(this._value); + } + + updateFromPort3f() + { + this._value[0] = this._port.get(); + this._value[1] = this._port2.get(); + this._value[2] = this._port3.get(); + this.setValue(this._value); + } + + updateFromPort2f() + { + this._value[0] = this._port.get(); + this._value[1] = this._port2.get(); + this.setValue(this._value); + } + + updateFromPort() + { + this.setValue(this._port.get()); + } + + updateValueF() + { + if (!this._isValidLoc()) this._loc = this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(), this._name); + else this.needsUpdate = false; + + this._shader.getCgl().gl.uniform1f(this._loc, this._value); + this._cgl.profileData.profileUniformCount++; + } + + setValueF(v) + { + if (v != this._value) + { + this.needsUpdate = true; + this._value = v; + } + } + + updateValueI() + { + if (!this._isValidLoc()) this._loc = this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(), this._name); + else this.needsUpdate = false; + + this._shader.getCgl().gl.uniform1i(this._loc, this._value); + this._cgl.profileData.profileUniformCount++; + } + + updateValue2I() + { + if (!this._value) return; + + if (!this._isValidLoc()) + { + this._loc = this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(), this._name); + this._cgl.profileData.profileShaderGetUniform++; + this._cgl.profileData.profileShaderGetUniformName = this._name; + } + + this._shader.getCgl().gl.uniform2i(this._loc, this._value[0], this._value[1]); + + this.needsUpdate = false; + this._cgl.profileData.profileUniformCount++; + } + + updateValue3I() + { + if (!this._value) return; + if (!this._isValidLoc()) + { + this._loc = this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(), this._name); + this._cgl.profileData.profileShaderGetUniform++; + this._cgl.profileData.profileShaderGetUniformName = this._name; + } + + this._shader.getCgl().gl.uniform3i(this._loc, this._value[0], this._value[1], this._value[2]); + this.needsUpdate = false; + this._cgl.profileData.profileUniformCount++; + } + + updateValue4I() + { + if (!this._isValidLoc()) + { + this._loc = this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(), this._name); + this._cgl.profileData.profileShaderGetUniform++; + this._cgl.profileData.profileShaderGetUniformName = this._name; + } + this._shader.getCgl().gl.uniform4i(this._loc, this._value[0], this._value[1], this._value[2], this._value[3]); + this._cgl.profileData.profileUniformCount++; + } + + setValueI(v) + { + if (v != this._value) + { + this.needsUpdate = true; + this._value = v; + } + } + + setValue2I(v) + { + if (!v) return; + if (!this._oldValue) + { + this._oldValue = [v[0] - 1, 1]; + this.needsUpdate = true; + } + else if (v[0] != this._oldValue[0] || v[1] != this._oldValue[1]) + { + this._oldValue[0] = v[0]; + this._oldValue[1] = v[1]; + this.needsUpdate = true; + } + + this._value = v; + } + + setValue3I(v) + { + if (!v) return; + if (!this._oldValue) + { + this._oldValue = [v[0] - 1, 1, 2]; + this.needsUpdate = true; + } + else if (v[0] != this._oldValue[0] || v[1] != this._oldValue[1] || v[2] != this._oldValue[2]) + { + this._oldValue[0] = v[0]; + this._oldValue[1] = v[1]; + this._oldValue[2] = v[2]; + this.needsUpdate = true; + } + + this._value = v; + } + + setValue4I(v) + { + this.needsUpdate = true; + this._value = v || vec4.create(); + } + + updateValueBool() + { + if (!this._isValidLoc()) this._loc = this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(), this._name); + else this.needsUpdate = false; + this._shader.getCgl().gl.uniform1i(this._loc, this._value ? 1 : 0); + + this._cgl.profileData.profileUniformCount++; + } + + setValueBool(v) + { + if (v != this._value) + { + this.needsUpdate = true; + this._value = v; + } + } + + setValueArray4F(v) + { + this.needsUpdate = true; + this._value = v; + } + + updateValueArray4F() + { + if (!this._isValidLoc()) this._loc = this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(), this._name); + else this.needsUpdate = false; + + if (!this._value) return; + this._shader.getCgl().gl.uniform4fv(this._loc, this._value); + this._cgl.profileData.profileUniformCount++; + } + + setValueArray3F(v) + { + this.needsUpdate = true; + this._value = v; + } + + updateValueArray3F() + { + if (!this._isValidLoc()) this._loc = this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(), this._name); + else this.needsUpdate = false; + + if (!this._value) return; + this._shader.getCgl().gl.uniform3fv(this._loc, this._value); + this._cgl.profileData.profileUniformCount++; + } + + setValueArray2F(v) + { + this.needsUpdate = true; + this._value = v; + } + + updateValueArray2F() + { + if (!this._isValidLoc()) this._loc = this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(), this._name); + else this.needsUpdate = false; + + if (!this._value) return; + this._shader.getCgl().gl.uniform2fv(this._loc, this._value); + this._cgl.profileData.profileUniformCount++; + } + + setValueArrayF(v) + { + this.needsUpdate = true; + this._value = v; + } + + updateValueArrayF() + { + if (!this._isValidLoc()) this._loc = this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(), this._name); + else this.needsUpdate = false; + + if (!this._value) return; + this._shader.getCgl().gl.uniform1fv(this._loc, this._value); + this._cgl.profileData.profileUniformCount++; + } + + setValueArrayT(v) + { + this.needsUpdate = true; + this._value = v; + } + + + updateValue3F() + { + if (!this._value) return; + if (!this._isValidLoc()) + { + this._loc = this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(), this._name); + this._cgl.profileData.profileShaderGetUniform++; + this._cgl.profileData.profileShaderGetUniformName = this._name; + } + + this._shader.getCgl().gl.uniform3f(this._loc, this._value[0], this._value[1], this._value[2]); + this.needsUpdate = false; + this._cgl.profileData.profileUniformCount++; + } + + setValue3F(v) + { + if (!v) return; + if (!this._oldValue) + { + this._oldValue = [v[0] - 1, 1, 2]; + this.needsUpdate = true; + } + else if (v[0] != this._oldValue[0] || v[1] != this._oldValue[1] || v[2] != this._oldValue[2]) + { + this._oldValue[0] = v[0]; + this._oldValue[1] = v[1]; + this._oldValue[2] = v[2]; + this.needsUpdate = true; + } + + this._value = v; + } + + updateValue2F() + { + if (!this._value) return; + + if (!this._isValidLoc()) + { + this._loc = this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(), this._name); + this._cgl.profileData.profileShaderGetUniform++; + this._cgl.profileData.profileShaderGetUniformName = this._name; + } + + this._shader.getCgl().gl.uniform2f(this._loc, this._value[0], this._value[1]); + this.needsUpdate = false; + this._cgl.profileData.profileUniformCount++; + } + + setValue2F(v) + { + if (!v) return; + if (!this._oldValue) + { + this._oldValue = [v[0] - 1, 1]; + this.needsUpdate = true; + } + else if (v[0] != this._oldValue[0] || v[1] != this._oldValue[1]) + { + this._oldValue[0] = v[0]; + this._oldValue[1] = v[1]; + this.needsUpdate = true; + } + this._value = v; + } + + updateValue4F() + { + if (!this._isValidLoc()) + { + this._loc = this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(), this._name); + this._cgl.profileData.profileShaderGetUniform++; + this._cgl.profileData.profileShaderGetUniformName = this._name; + } + + if (!this._value) + { + this._log.warn("no value for uniform", this._name, this); + this._value = [0, 0, 0, 0]; + } + + this.needsUpdate = false; + this._shader.getCgl().gl.uniform4f(this._loc, this._value[0], this._value[1], this._value[2], this._value[3]); + this._cgl.profileData.profileUniformCount++; + } + + setValue4F(v) + { + if (typeof this.value == "number") this.value = vec4.create(); // this should not be needed, but somehow it crashes with some shadermods + + if (!v) return; + if (!this._oldValue) + { + this._oldValue = [v[0] - 1, 1, 2, 3]; + this.needsUpdate = true; + } + else if (v[0] != this._oldValue[0] || v[1] != this._oldValue[1] || v[2] != this._oldValue[2] || v[3] != this._oldValue[3]) + { + this._oldValue[0] = v[0]; + this._oldValue[1] = v[1]; + this._oldValue[2] = v[2]; + this.needsUpdate = true; + } + + this._value = v; + } + + updateValueM4() + { + if (!this._isValidLoc()) + { + this._loc = this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(), this._name); + this._cgl.profileData.profileShaderGetUniform++; + this._cgl.profileData.profileShaderGetUniformName = this._name; + } + if (!this._value || this._value.length % 16 != 0) return console.log("this.name", this._name, this._value); + + this._shader.getCgl().gl.uniformMatrix4fv(this._loc, false, this._value); + this._cgl.profileData.profileUniformCount++; + } + + setValueM4(v) + { + this.needsUpdate = true; + this._value = v || mat4.create(); + } + + updateValueArrayT() + { + if (!this._isValidLoc()) this._loc = this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(), this._name); + else this.needsUpdate = false; + + if (!this._value) return; + this._shader.getCgl().gl.uniform1iv(this._loc, this._value); + this._cgl.profileData.profileUniformCount++; + } + + updateValueT() + { + if (!this._isValidLoc()) + { + this._loc = this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(), this._name); + this._cgl.profileData.profileShaderGetUniform++; + this._cgl.profileData.profileShaderGetUniformName = this._name; + } + + this._cgl.profileData.profileUniformCount++; + this._shader.getCgl().gl.uniform1i(this._loc, this._value); + this.needsUpdate = false; + } + + setValueT(v) + { + this.needsUpdate = true; + this._value = v; + } +} + + +Uniform.glslTypeString = (t) => +{ + if (t == "f") return "float"; + if (t == "b") return "bool"; + if (t == "i") return "int"; + if (t == "2i") return "ivec2"; + if (t == "2f") return "vec2"; + if (t == "3f") return "vec3"; + if (t == "4f") return "vec4"; + if (t == "m4") return "mat4"; + + if (t == "t") return "sampler2D"; + if (t == "tc") return "samplerCube"; + + if (t == "3f[]") return null; // ignore this for now... + if (t == "m4[]") return null; // ignore this for now... + if (t == "f[]") return null; // ignore this for now... + + console.warn("[CGL UNIFORM] unknown glsl type string ", t); +}; + + +/** + * @function setValue + * @memberof Uniform + * @instance + * @param {Number|Array|Matrix|Texture} value + */ + + + +;// CONCATENATED MODULE: ./src/core/cgl/cgl_texture.js + + + + + +const DEFAULT_TEXTURE_SIZE = 8; + +/** + * A Texture + * @external CGL + * @namespace Texture + * @constructor + * @param {Context} cgl + * @param {Object} [options] + * @hideconstructor + * @class + * @example + * // generate a 256x256 pixel texture of random colors + * const size=256; + * const data = new Uint8Array(size*size*4); + * + * for(var x=0;x<size*size*4;x++) data[ x*4+3]=255; + * + * const tex=new CGL.Texture(cgl); + * tex.initFromData(data,size,size,CGL.Texture.FILTER_NEAREST,CGL.Texture.WRAP_REPEAT); + */ +const Texture = function (__cgl, options = {}) +{ + if (!__cgl) throw new Error("no cgl"); + this._log = new Logger("cgl_texture"); + this._cgl = __cgl; + this.pixelFormat = options.pixelFormat || Texture.PFORMATSTR_RGBA8UB; + this.tex = this._cgl.gl.createTexture(); + this.id = CABLES.uuid(); + this.width = 0; + this.height = 0; + this.loading = false; + this.flip = true; + this.flipped = false; + this.shadowMap = false; + this.deleted = false; + this.image = null; + this.anisotropic = 0; + this.filter = Texture.FILTER_NEAREST; + this.wrap = Texture.WRAP_CLAMP_TO_EDGE; + this.texTarget = this._cgl.gl.TEXTURE_2D; + if (options && options.type) this.texTarget = options.type; + this.textureType = Texture.TYPE_DEFAULT; + this.unpackAlpha = true; + this._fromData = true; + this.name = "unknown"; + + this._glDataType = -1; + this._glInternalFormat = -1; + this._glDataFormat = -1; + + + if (options) + { + this.name = options.name || this.name; + if (options.isDepthTexture) + { + this.textureType = Texture.TYPE_DEPTH; + } + if (options.isFloatingPointTexture === true) this.textureType = Texture.TYPE_FLOAT; + + if ("textureType" in options) this.textureType = options.textureType; + if ("filter" in options) this.filter = options.filter; + if ("wrap" in options) this.wrap = options.wrap; + if ("unpackAlpha" in options) this.unpackAlpha = options.unpackAlpha; + if ("flip" in options) this.flip = options.flip; + if ("shadowMap" in options) this.shadowMap = options.shadowMap; + if ("anisotropic" in options) this.anisotropic = options.anisotropic; + } + else + { + options = {}; + } + + if (!options.pixelFormat && options.isFloatingPointTexture) this.pixelFormat = Texture.PFORMATSTR_RGBA32F; + + if (this.textureType == Texture.TYPE_DEPTH) this.pixelFormat = Texture.PFORMATSTR_DEPTH; + + + + if (!options.width) options.width = DEFAULT_TEXTURE_SIZE; + if (!options.height) options.height = DEFAULT_TEXTURE_SIZE; + + this._cgl.profileData.profileTextureNew++; + + + this.setFormat(Texture.setUpGlPixelFormat(this._cgl, this.pixelFormat)); + this._cgl.profileData.addHeavyEvent("texture created", this.name, options.width + "x" + options.height); + + this.setSize(options.width, options.height); + this.getInfoOneLine(); +}; + +Texture.prototype.isFloatingPoint = function () +{ + return Texture.isPixelFormatFloat(this.pixelFormat); +}; + +/** + * returns true if otherTexture has same options (width/height/filter/wrap etc) + * @function compareSettings + * @memberof Texture + * @instance + * @param {Texture} otherTexture + * @returns {Boolean} + */ +Texture.prototype.compareSettings = function (tex) +{ + // if (!tex) { this._log.warn("compare: no tex"); return false; } + // if (tex.width != this.width) this._log.warn("tex.width not equal", tex.width, this.width); + // if (tex.height != this.height) this._log.warn("tex.height not equal", tex.height, this.height); + // if (tex.filter != this.filter) this._log.warn("tex.filter not equal"); + // if (tex.wrap != this.wrap) this._log.warn("tex.wrap not equal"); + // if (tex.textureType != this.textureType) this._log.warn("tex.textureType not equal"); + // if (tex.unpackAlpha != this.unpackAlpha) this._log.warn("tex.unpackAlpha not equal"); + // if (tex.anisotropic != this.anisotropic) this._log.warn("tex.anisotropic not equal"); + // if (tex.shadowMap != this.shadowMap) this._log.warn("tex.shadowMap not equal"); + // if (tex.texTarget != this.texTarget) this._log.warn("tex.texTarget not equal"); + // if (tex.flip != this.flip) this._log.warn("tex.flip not equal"); + + if (!tex) return false; + return ( + tex.width == this.width && + tex.height == this.height && + tex.filter == this.filter && + tex.wrap == this.wrap && + tex.textureType == this.textureType && + tex.unpackAlpha == this.unpackAlpha && + tex.anisotropic == this.anisotropic && + tex.shadowMap == this.shadowMap && + tex.texTarget == this.texTarget && + tex.flip == this.flip + ); +}; + +/** + * returns a new texture with the same settings (does not copy texture itself) + * @function clone + * @memberof Texture + * @instance + * @returns {Texture} + */ +Texture.prototype.clone = function () +{ + const newTex = new Texture(this._cgl, { + "name": this.name, + "filter": this.filter, + "anisotropic": this.anisotropic, + "wrap": this.wrap, + "textureType": this.textureType, + "pixelFormat": this.pixelFormat, + "unpackAlpha": this.unpackAlpha, + "flip": this.flip, + "width": this.width, + "height": this.height, + }); + + this._cgl.profileData.addHeavyEvent("texture created", this.name, this.width + "x" + this.height); + + if (!this.compareSettings(newTex)) + { + this._log.error("Cloned texture settings do not compare!"); + this._log.error(this); + this._log.error(newTex); + } + + return newTex; +}; + + +Texture.prototype.setFormat = function (o) +{ + this.pixelFormat = o.pixelFormat; + this._glDataFormat = o.glDataFormat; + this._glInternalFormat = o.glInternalFormat; + this._glDataType = o.glDataType; +}; + + +Texture.setUpGlPixelFormat = function (cgl, pixelFormatStr) +{ + const o = {}; + + if (!pixelFormatStr) + { + console.log("no pixelformatstr!"); + console.log((new Error()).stack); + pixelFormatStr = Texture.PFORMATSTR_RGBA8UB; + } + + o.pixelFormatBase = pixelFormatStr; + + + o.pixelFormat = pixelFormatStr; + o.glDataType = cgl.gl.UNSIGNED_BYTE; + o.glInternalFormat = cgl.gl.RGBA8; + o.glDataFormat = cgl.gl.RGBA; + + let floatDatatype = cgl.gl.FLOAT; + + if (cgl.glUseHalfFloatTex) + { + if (pixelFormatStr == Texture.PFORMATSTR_RGBA32F) pixelFormatStr = Texture.PFORMATSTR_RGBA16F; + if (pixelFormatStr == Texture.PFORMATSTR_RG32F) pixelFormatStr = Texture.PFORMATSTR_RG16F; + if (pixelFormatStr == Texture.PFORMATSTR_R32F) pixelFormatStr = Texture.PFORMATSTR_R16F; + } + + if (pixelFormatStr.contains("16bit")) + { + if (cgl.glVersion == 2) + { + // cgl.enableExtension("OES_texture_half_float"); + const hasExt = cgl.enableExtension("EXT_color_buffer_half_float"); + + if (!hasExt) + { + console.warn("no 16bit extension, fallback to 32bit", pixelFormatStr); + // fallback to 32 bit? + if (pixelFormatStr == Texture.PFORMATSTR_RGBA16F) pixelFormatStr = Texture.PFORMATSTR_RGBA32F; + if (pixelFormatStr == Texture.PFORMATSTR_RGB16F) pixelFormatStr = Texture.PFORMATSTR_RGB32F; + if (pixelFormatStr == Texture.PFORMATSTR_RG16F) pixelFormatStr = Texture.PFORMATSTR_RG32F; + if (pixelFormatStr == Texture.PFORMATSTR_R16F) pixelFormatStr = Texture.PFORMATSTR_R32F; + } + else + { + floatDatatype = cgl.gl.HALF_FLOAT; + } + } + } + + if (cgl.glVersion == 1) + { + o.glInternalFormat = cgl.gl.RGBA; + + if (pixelFormatStr == Texture.PFORMATSTR_RGBA16F || pixelFormatStr == Texture.PFORMATSTR_RG16F || pixelFormatStr == Texture.PFORMATSTR_R16F) + { + const ext = cgl.enableExtension("OES_texture_half_float"); + if (!ext) throw new Error("no half float texture extension"); + + floatDatatype = ext.HALF_FLOAT_OES; + } + } + + + if (pixelFormatStr == Texture.PFORMATSTR_RGBA8UB) + { + } + else if (pixelFormatStr == Texture.PFORMATSTR_RGB565) + { + o.glInternalFormat = cgl.gl.RGB565; + o.glDataFormat = cgl.gl.RGB; + } + else if (pixelFormatStr == Texture.PFORMATSTR_R8UB) + { + o.glInternalFormat = cgl.gl.R8; + o.glDataFormat = cgl.gl.RED; + } + else if (pixelFormatStr == Texture.PFORMATSTR_RG8UB) + { + o.glInternalFormat = cgl.gl.RG8; + o.glDataFormat = cgl.gl.RG; + } + else if (pixelFormatStr == Texture.PFORMATSTR_RGB8UB) + { + o.glInternalFormat = cgl.gl.RGB8; + o.glDataFormat = cgl.gl.RGB; + } + else if (pixelFormatStr == Texture.PFORMATSTR_SRGBA8) + { + o.glInternalFormat = cgl.gl.SRGB8_ALPHA8; + } + + else if (pixelFormatStr == Texture.PFORMATSTR_R32F) + { + o.glInternalFormat = cgl.gl.R32F; + o.glDataFormat = cgl.gl.RED; + o.glDataType = floatDatatype; + } + else if (pixelFormatStr == Texture.PFORMATSTR_R16F) + { + o.glInternalFormat = cgl.gl.R16F; + o.glDataType = floatDatatype; + o.glDataFormat = cgl.gl.RED; + } + else if (pixelFormatStr == Texture.PFORMATSTR_RG16F) + { + o.glInternalFormat = cgl.gl.RG16F; + o.glDataType = floatDatatype; + o.glDataFormat = cgl.gl.RG; + } + else if (pixelFormatStr == Texture.PFORMATSTR_RGBA16F) + { + if (cgl.glVersion == 1) o.glInternalFormat = cgl.gl.RGBA; + else o.glInternalFormat = cgl.gl.RGBA16F; + o.glDataType = floatDatatype; + } + else if (pixelFormatStr == Texture.PFORMATSTR_R11FG11FB10F) + { + o.glInternalFormat = cgl.gl.R11F_G11F_B10F; + o.glDataType = floatDatatype; + o.glDataFormat = cgl.gl.RGB; + } + else if (pixelFormatStr == Texture.PFORMATSTR_RGBA32F) + { + if (cgl.glVersion == 1) o.glInternalFormat = cgl.gl.RGBA; + else o.glInternalFormat = cgl.gl.RGBA32F; + o.glDataType = floatDatatype; + } + else if (pixelFormatStr == Texture.PFORMATSTR_DEPTH) + { + if (cgl.glVersion == 1) + { + o.glInternalFormat = cgl.gl.DEPTH_COMPONENT; + o.glDataType = cgl.gl.UNSIGNED_SHORT; + o.glDataFormat = cgl.gl.DEPTH_COMPONENT; + } + else + { + o.glInternalFormat = cgl.gl.DEPTH_COMPONENT32F; + o.glDataType = cgl.gl.FLOAT; + o.glDataFormat = cgl.gl.DEPTH_COMPONENT; + } + } + else + { + console.log("unknown pixelformat ", pixelFormatStr); + } + + /// ////// + + if (pixelFormatStr.contains("32bit") || pixelFormatStr == Texture.PFORMATSTR_R11FG11FB10F) + { + if (cgl.glVersion == 2) cgl.enableExtension("EXT_color_buffer_float"); + if (cgl.glVersion == 2) cgl.enableExtension("EXT_float_blend"); + + cgl.enableExtension("OES_texture_float_linear"); // yes, i am sure, this is a webgl 1 and 2 ext + } + + + o.numColorChannels = 1; + if (pixelFormatStr.startsWith("R"))o.numColorChannels = 1; + if (pixelFormatStr.startsWith("RG"))o.numColorChannels = 2; + if (pixelFormatStr.startsWith("RGB"))o.numColorChannels = 3; + if (pixelFormatStr.startsWith("RGBA"))o.numColorChannels = 4; + + + // console.log(pixelFormatStr, this.name); + + if (!o.glDataType || !o.glInternalFormat || !o.glDataFormat) console.log("pixelformat wrong ?!", pixelFormatStr, o.glDataType, o.glInternalFormat, o.glDataFormat, this); + + return o; +}; + +/** + * set pixel size of texture + * @function setSize + * @memberof Texture + * @instance + * @param {Number} width + * @param {Number} height + */ +Texture.prototype.setSize = function (w, h) +{ + if (this._cgl.aborted) return; + if (w != w || w <= 0 || !w) w = DEFAULT_TEXTURE_SIZE; + if (h != h || h <= 0 || !h) h = DEFAULT_TEXTURE_SIZE; + + if (w > this._cgl.maxTexSize || h > this._cgl.maxTexSize) this._log.error("texture size too big! " + w + "x" + h + " / max: " + this._cgl.maxTexSize); + + w = Math.min(w, this._cgl.maxTexSize); + h = Math.min(h, this._cgl.maxTexSize); + + w = Math.floor(w); + h = Math.floor(h); + if (this.width == w && this.height == h) return; + + w = this._cgl.checkTextureSize(w); + h = this._cgl.checkTextureSize(h); + + this.width = w; + this.height = h; + this.deleted = false; + + this.setFormat(Texture.setUpGlPixelFormat(this._cgl, this.pixelFormat)); + + this.shortInfoString = this.getInfoOneLine();// w + "x" + h + ""; + + this._cgl.gl.bindTexture(this.texTarget, this.tex); + this._cgl.profileData.profileTextureResize++; + + const uarr = null; + + this._cgl.gl.texImage2D(this.texTarget, 0, this._glInternalFormat, w, h, 0, this._glDataFormat, this._glDataType, uarr); + + this._setFilter(); + + this.updateMipMap(); + + this._cgl.gl.bindTexture(this.texTarget, null); +}; + + +/** + * @function initFromData + * @memberof Texture + * @instance + * @description create texturem from rgb data + * @param {Array<Number>} data rgb color array [r,g,b,a,r,g,b,a,...] + * @param {Number} width + * @param {Number} height + * @param {Number} filter + * @param {Number} wrap + */ +Texture.prototype.initFromData = function (data, w, h, filter, wrap) +{ + this.filter = filter; + this.wrap = wrap; + if (filter == undefined) this.filter = Texture.FILTER_LINEAR; + if (wrap == undefined) this.wrap = Texture.WRAP_CLAMP_TO_EDGE; + this.width = w; + this.height = h; + this._fromData = true; + this.deleted = false; + + if (this.height > this._cgl.maxTexSize || this.width > this._cgl.maxTexSize) + { + const t = CGL.Texture.getTempTexture(this._cgl); + this.width = t.width; + this.height = t.height; + this.tex = t.tex; + this._log.error("[cgl_texture] texture size to big!!!", this.width, this.height, this._cgl.maxTexSize); + return; + } + + if (this.flip) this._cgl.gl.pixelStorei(this._cgl.gl.UNPACK_FLIP_Y_WEBGL, this.flip); + + this._cgl.gl.bindTexture(this.texTarget, this.tex); + + this.setFormat(Texture.setUpGlPixelFormat(this._cgl, this.pixelFormat)); + + this._cgl.gl.texImage2D(this.texTarget, 0, this._glInternalFormat, w, h, 0, this._glDataFormat, this._glDataType, data); + + this._setFilter(); + this.updateMipMap(); + + if (this.flip) this._cgl.gl.pixelStorei(this._cgl.gl.UNPACK_FLIP_Y_WEBGL, false); + this._cgl.gl.bindTexture(this.texTarget, null); +}; + +Texture.prototype.updateMipMap = function () +{ + if ((this._cgl.glVersion == 2 || this.isPowerOfTwo()) && this.filter == Texture.FILTER_MIPMAP) + { + this._cgl.gl.generateMipmap(this.texTarget); + this._cgl.profileData.profileGenMipMap++; + } +}; + +/** + * set texture data from an image/canvas object + * @function initTexture + * @memberof Texture + * @instance + * @param {Object} image + * @param {Number} filter + */ +Texture.prototype.initTexture = function (img, filter) +{ + this._cgl.printError("before initTexture"); + this._cgl.checkFrameStarted("texture inittexture"); + this._fromData = false; + + this._cgl.gl.pixelStorei(this._cgl.gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, this.unpackAlpha); + if (img.width || img.videoWidth) this.width = img.videoWidth || img.width; + if (img.height || img.videoHeight) this.height = img.videoHeight || img.height; + + if (filter !== undefined) this.filter = filter; // todo: can we remove this filter param? + + if (img.height > this._cgl.maxTexSize || img.width > this._cgl.maxTexSize) + { + const t = CGL.Texture.getTempTexture(this._cgl); + this.width = t.width; + this.height = t.height; + this.tex = t.tex; + this._log.error("[cgl_texture] texture size to big!!!", img.width, img.height, this._cgl.maxTexSize); + return; + } + + + // console.log("loaded texture", img.width, img.height); + + this._cgl.gl.bindTexture(this.texTarget, this.tex); + + this.deleted = false; + this.flipped = !this.flip; + if (this.flipped) this._cgl.gl.pixelStorei(this._cgl.gl.UNPACK_FLIP_Y_WEBGL, this.flipped); + + + this.setFormat(Texture.setUpGlPixelFormat(this._cgl, this.pixelFormat)); + + this._cgl.gl.texImage2D(this.texTarget, 0, this._glInternalFormat, this._glDataFormat, this._glDataType, img); + // this._cgl.gl.texImage2D(this.texTarget, 0, this._cgl.gl.RGBA, this._cgl.gl.RGBA, this._cgl.gl.UNSIGNED_BYTE, img); + + // if (this._cgl.printError("[cgl_texture] init " + this.name)); + + this._setFilter(); + this.updateMipMap(); + + // if (this._cgl.printError("[cgl_texture] init2")); + + this._cgl.gl.bindTexture(this.texTarget, null); + this._cgl.gl.pixelStorei(this._cgl.gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false); + if (this.flipped) this._cgl.gl.pixelStorei(this._cgl.gl.UNPACK_FLIP_Y_WEBGL, false); + + this.getInfoOneLine(); + this._cgl.printError("initTexture"); +}; + +/** + * delete texture. use this when texture is no longer needed + * @function delete + * @memberof Texture + * @instance + */ +Texture.prototype.dispose = +Texture.prototype.delete = function () +{ + if (this.loading) + { + // cant delete texture when still loading + // setTimeout(this.delete.bind(this), 50); + return; + } + + this.deleted = true; + this.width = 0; + this.height = 0; + this._cgl.profileData.profileTextureDelete++; + this._cgl.gl.deleteTexture(this.tex); + this.image = null; + + this.tex = null; +}; + +/** + * @function isPowerOfTwo + * @memberof Texture + * @instance + * @description return true if texture width and height are both power of two + * @return {Boolean} + */ +Texture.prototype.isPowerOfTwo = function () +{ + return Texture.isPowerOfTwo(this.width) && Texture.isPowerOfTwo(this.height); +}; + +Texture.prototype.printInfo = function () +{ + console.log(this.getInfo()); +}; + +Texture.prototype.getInfoReadable = function () +{ + const info = this.getInfo(); + let html = ""; + + info.name = info.name.substr(0, info.name.indexOf("?rnd=")); + + for (const i in info) + { + html += "* " + i + ": **" + info[i] + "**\n"; + } + + return html; +}; + +Texture.prototype.getInfoOneLine = function () +{ + let txt = "" + this.width + "x" + this.height; + txt += " "; + // if (this.textureType === CGL.Texture.TYPE_FLOAT) txt += " 32bit"; else txt += " 8bit"; + // if (this.textureType === CGL.Texture.TYPE_FLOAT) txt += " 32bit"; else txt += " 8bit"; + txt += this.pixelFormat; + + if (this.filter === CGL.Texture.FILTER_NEAREST) txt += " nearest"; + if (this.filter === CGL.Texture.FILTER_LINEAR) txt += " linear"; + if (this.filter === CGL.Texture.FILTER_MIPMAP) txt += " mipmap"; + + if (this.wrap === CGL.Texture.WRAP_CLAMP_TO_EDGE) txt += " clamp"; + if (this.wrap === CGL.Texture.WRAP_REPEAT) txt += " repeat"; + if (this.wrap === CGL.Texture.WRAP_MIRRORED_REPEAT) txt += " repeatmir"; + + this.shortInfoString = txt; + + return txt; +}; + +Texture.prototype.getInfoOneLineShort = function () +{ + let txt = "" + this.width + "x" + this.height; + // if (this.textureType === CGL.Texture.TYPE_FLOAT) txt += " 32bit"; else txt += " 8bit"; + txt += " "; + txt += this.pixelFormat; + + this.shortInfoString = txt; + + return txt; +}; + + +Texture.prototype.getInfo = function () +{ + return Texture.getTexInfo(this); +}; + + +Texture.prototype._setFilter = function () +{ + this._cgl.printError("before _setFilter"); + + if (!this._fromData) + { + this._cgl.gl.pixelStorei(this._cgl.gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, this.unpackAlpha); + } + + if (this.shadowMap) + { + this._cgl.gl.texParameteri(this._cgl.gl.TEXTURE_2D, this._cgl.gl.TEXTURE_COMPARE_MODE, this._cgl.gl.COMPARE_REF_TO_TEXTURE); + this._cgl.gl.texParameteri(this._cgl.gl.TEXTURE_2D, this._cgl.gl.TEXTURE_COMPARE_FUNC, this._cgl.gl.LEQUAL); + } + + if (this.textureType == Texture.TYPE_FLOAT && this.filter == Texture.FILTER_MIPMAP) + { + this.filter = Texture.FILTER_LINEAR; + this._log.stack("texture: HDR and mipmap filtering at the same time is not possible"); + } + + if (this._cgl.glVersion == 1 && !this.isPowerOfTwo()) + { + this._cgl.gl.texParameteri(this.texTarget, this._cgl.gl.TEXTURE_MAG_FILTER, this._cgl.gl.NEAREST); + this._cgl.gl.texParameteri(this.texTarget, this._cgl.gl.TEXTURE_MIN_FILTER, this._cgl.gl.NEAREST); + + this._cgl.gl.texParameteri(this.texTarget, this._cgl.gl.TEXTURE_WRAP_S, this._cgl.gl.CLAMP_TO_EDGE); + this._cgl.gl.texParameteri(this.texTarget, this._cgl.gl.TEXTURE_WRAP_T, this._cgl.gl.CLAMP_TO_EDGE); + + this.filter = Texture.FILTER_NEAREST; + this.wrap = Texture.WRAP_CLAMP_TO_EDGE; + } + else + { + if (this.wrap == Texture.WRAP_CLAMP_TO_EDGE) + { + this._cgl.gl.texParameteri(this.texTarget, this._cgl.gl.TEXTURE_WRAP_S, this._cgl.gl.CLAMP_TO_EDGE); + this._cgl.gl.texParameteri(this.texTarget, this._cgl.gl.TEXTURE_WRAP_T, this._cgl.gl.CLAMP_TO_EDGE); + } + else if (this.wrap == Texture.WRAP_REPEAT) + { + this._cgl.gl.texParameteri(this.texTarget, this._cgl.gl.TEXTURE_WRAP_S, this._cgl.gl.REPEAT); + this._cgl.gl.texParameteri(this.texTarget, this._cgl.gl.TEXTURE_WRAP_T, this._cgl.gl.REPEAT); + } + else if (this.wrap == Texture.WRAP_MIRRORED_REPEAT) + { + this._cgl.gl.texParameteri(this.texTarget, this._cgl.gl.TEXTURE_WRAP_S, this._cgl.gl.MIRRORED_REPEAT); + this._cgl.gl.texParameteri(this.texTarget, this._cgl.gl.TEXTURE_WRAP_T, this._cgl.gl.MIRRORED_REPEAT); + } + + if (this.filter == Texture.FILTER_NEAREST) + { + this._cgl.gl.texParameteri(this.texTarget, this._cgl.gl.TEXTURE_MAG_FILTER, this._cgl.gl.NEAREST); + this._cgl.gl.texParameteri(this.texTarget, this._cgl.gl.TEXTURE_MIN_FILTER, this._cgl.gl.NEAREST); + } + else if (this.filter == Texture.FILTER_LINEAR) + { + this._cgl.gl.texParameteri(this.texTarget, this._cgl.gl.TEXTURE_MIN_FILTER, this._cgl.gl.LINEAR); + this._cgl.gl.texParameteri(this.texTarget, this._cgl.gl.TEXTURE_MAG_FILTER, this._cgl.gl.LINEAR); + } + else if (this.filter == Texture.FILTER_MIPMAP) + { + this._cgl.gl.texParameteri(this.texTarget, this._cgl.gl.TEXTURE_MAG_FILTER, this._cgl.gl.LINEAR); + this._cgl.gl.texParameteri(this.texTarget, this._cgl.gl.TEXTURE_MIN_FILTER, this._cgl.gl.LINEAR_MIPMAP_LINEAR); + } + else + { + this._log.log("unknown texture filter!", this.filter); + throw new Error("unknown texture filter!" + this.filter); + } + + if (this.anisotropic) + { + const ext = this._cgl.enableExtension("EXT_texture_filter_anisotropic"); + + + + if (this._cgl.maxAnisotropic) + { + const aniso = Math.min(this._cgl.maxAnisotropic, this.anisotropic); + this._cgl.gl.texParameterf(this._cgl.gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, aniso); + } + } + } + this.getInfoOneLine(); + this._cgl.printError("_setFilter"); +}; + + +/** + * @function load + * @static + * @memberof Texture + * @description load an image from an url + * @param {Context} cgl + * @param {String} url + * @param {Function} onFinished + * @param {Object} options + * @return {Texture} + */ +Texture.load = function (cgl, url, finishedCallback, settings) +{ + if (!url) return finishedCallback({ "error": true }); + let loadingId = null; + if (!cgl.patch.loading.existByName(url)) loadingId = cgl.patch.loading.start("texture", url); + + const texture = new Texture(cgl); + texture.name = url; + + // texture.pixelFormat = Texture.PFORMATSTR_; + + if (cgl.patch.isEditorMode()) gui.jobs().start({ "id": "loadtexture" + loadingId, "title": "loading texture " + CABLES.basename(url) }); + + texture.image = new Image(); + texture.image.crossOrigin = "anonymous"; + texture.loading = true; + + if (settings && settings.hasOwnProperty("filter")) texture.filter = settings.filter; + if (settings && settings.hasOwnProperty("flip")) texture.flip = settings.flip; + if (settings && settings.hasOwnProperty("wrap")) texture.wrap = settings.wrap; + if (settings && settings.hasOwnProperty("anisotropic")) texture.anisotropic = settings.anisotropic; + if (settings && settings.hasOwnProperty("unpackAlpha")) texture.unpackAlpha = settings.unpackAlpha; + if (settings && settings.hasOwnProperty("pixelFormat")) texture.pixelFormat = settings.pixelFormat; + + texture.image.onabort = texture.image.onerror = (e) => + { + console.warn("[cgl.texture.load] error loading texture", url, e); + texture.loading = false; + if (loadingId) cgl.patch.loading.finished(loadingId); + const error = { "error": true }; + if (finishedCallback) finishedCallback(error, texture); + if (cgl.patch.isEditorMode()) gui.jobs().finish("loadtexture" + loadingId); + }; + + texture.image.onload = function (e) + { + cgl.addNextFrameOnceCallback(() => + { + texture.initTexture(texture.image); + if (loadingId) cgl.patch.loading.finished(loadingId); + texture.loading = false; + if (cgl.patch.isEditorMode()) gui.jobs().finish("loadtexture" + loadingId); + + if (finishedCallback) finishedCallback(null, texture); + }); + }; + texture.image.src = url; + + return texture; +}; + +/** + * @static + * @function getTempTexture + * @memberof Texture + * @description returns the default temporary texture (grey diagonal stipes) + * @param {Context} cgl + * @return {Texture} + */ +Texture.getTempTexture = function (cgl) +{ + if (!cgl) console.error("[getTempTexture] no cgl!"); + if (!cgl.tempTexture) cgl.tempTexture = Texture.getTemporaryTexture(cgl, 256, Texture.FILTER_LINEAR, Texture.REPEAT); + return cgl.tempTexture; +}; + +/** + * @static + * @function getErrorTexture + * @memberof Texture + * @description returns the default temporary texture (grey diagonal stipes) + * @param {Context} cgl + * @return {Texture} + */ +Texture.getErrorTexture = function (cgl) +{ + if (!cgl) console.error("[getTempTexture] no cgl!"); + if (!cgl.errorTexture) cgl.errorTexture = Texture.getTemporaryTexture(cgl, 256, Texture.FILTER_LINEAR, Texture.REPEAT, 1, 0.2, 0.2); + return cgl.errorTexture; +}; + + +/** + * @function getEmptyTexture + * @memberof Texture + * @instance + * @description returns a reference to a small empty (transparent) texture + * @return {Texture} + */ +Texture.getEmptyTexture = function (cgl, fp) +{ + if (fp) return Texture.getEmptyTextureFloat(cgl); + if (!cgl) console.error("[getEmptyTexture] no cgl!"); + if (cgl.tempTextureEmpty) return cgl.tempTextureEmpty; + + cgl.tempTextureEmpty = new Texture(cgl, { "name": "emptyTexture" }); + const data = new Uint8Array(8 * 8 * 4).fill(0); + for (let i = 0; i < 8 * 8 * 4; i += 4) data[i + 3] = 0; + + cgl.tempTextureEmpty.initFromData(data, 8, 8, Texture.FILTER_NEAREST, Texture.WRAP_REPEAT); + + return cgl.tempTextureEmpty; +}; + +/** + * @function getEmptyTextureFloat + * @memberof Texture + * @instance + * @description returns a reference to a small empty (transparent) 32bit texture + * @return {Texture} + */ +Texture.getEmptyTextureFloat = function (cgl) +{ + if (!cgl) console.error("[getEmptyTextureFloat] no cgl!"); + if (cgl.tempTextureEmptyFloat) return cgl.tempTextureEmptyFloat; + + cgl.tempTextureEmptyFloat = new Texture(cgl, { "name": "emptyTexture", "isFloatingPointTexture": true }); + const data = new Float32Array(8 * 8 * 4).fill(1); + for (let i = 0; i < 8 * 8 * 4; i += 4) data[i + 3] = 0; + + cgl.tempTextureEmptyFloat.initFromData(data, 8, 8, Texture.FILTER_NEAREST, Texture.WRAP_REPEAT); + + return cgl.tempTextureEmptyFloat; +}; + + +/** + * @function getRandomTexture + * @memberof Texture + * @static + * @description returns a reference to a random texture + * @return {Texture} + */ +Texture.getRandomTexture = function (cgl) +{ + if (!cgl) console.error("[getRandomTexture] no cgl!"); + if (cgl.randomTexture) return cgl.randomTexture; + + const size = 256; + const data = new Uint8Array(size * size * 4); + + for (let x = 0; x < size * size; x++) + { + data[x * 4 + 0] = Math.random() * 255; + data[x * 4 + 1] = Math.random() * 255; + data[x * 4 + 2] = Math.random() * 255; + data[x * 4 + 3] = 255; + } + + cgl.randomTexture = new Texture(cgl); + cgl.randomTexture.initFromData(data, size, size, Texture.FILTER_NEAREST, Texture.WRAP_REPEAT); + + return cgl.randomTexture; +}; + +/** + * @function getRandomFloatTexture + * @memberof Texture + * @static + * @description returns a reference to a texture containing random numbers between -1 and 1 + * @return {Texture} + */ +Texture.getRandomFloatTexture = function (cgl) +{ + if (!cgl) console.error("[getRandomTexture] no cgl!"); + if (cgl.getRandomFloatTexture) return cgl.getRandomFloatTexture; + + const size = 256; + const data = new Float32Array(size * size * 4); + + for (let x = 0; x < size * size; x++) + { + data[x * 4 + 0] = (Math.random() - 0.5) * 2.0; + data[x * 4 + 1] = (Math.random() - 0.5) * 2.0; + data[x * 4 + 2] = (Math.random() - 0.5) * 2.0; + data[x * 4 + 3] = 1; + } + + cgl.getRandomFloatTexture = new Texture(cgl, { "isFloatingPointTexture": true }); + cgl.getRandomFloatTexture.initFromData(data, size, size, Texture.FILTER_NEAREST, Texture.WRAP_REPEAT); + + return cgl.getRandomFloatTexture; +}; + +/** + * @function getBlackTexture + * @memberof Texture + * @static + * @description returns a reference to a black texture + * @return {Texture} + */ +Texture.getBlackTexture = function (cgl) +{ + if (!cgl) this._log.error("[getBlackTexture] no cgl!"); + if (cgl.blackTexture) return cgl.blackTexture; + + const size = 8; + const data = new Uint8Array(size * size * 4); + + for (let x = 0; x < size * size; x++) + { + data[x * 4 + 0] = data[x * 4 + 1] = data[x * 4 + 2] = 0; + data[x * 4 + 3] = 255; + } + + cgl.blackTexture = new Texture(cgl); + cgl.blackTexture.initFromData(data, size, size, Texture.FILTER_NEAREST, Texture.WRAP_REPEAT); + + return cgl.blackTexture; +}; + + +/** + * @function getEmptyCubemapTexture + * @memberof Texture + * @static + * @description returns an empty cubemap texture with rgba = [0, 0, 0, 0] + * @return {Texture} + */ +Texture.getEmptyCubemapTexture = function (cgl) +{ + const faces = [ + cgl.gl.TEXTURE_CUBE_MAP_POSITIVE_X, + cgl.gl.TEXTURE_CUBE_MAP_NEGATIVE_X, + cgl.gl.TEXTURE_CUBE_MAP_POSITIVE_Y, + cgl.gl.TEXTURE_CUBE_MAP_NEGATIVE_Y, + cgl.gl.TEXTURE_CUBE_MAP_POSITIVE_Z, + cgl.gl.TEXTURE_CUBE_MAP_NEGATIVE_Z + ]; + + const tex = cgl.gl.createTexture(); + const target = cgl.gl.TEXTURE_CUBE_MAP; + const filter = Texture.FILTER_NEAREST; + const wrap = Texture.WRAP_CLAMP_TO_EDGE; + const width = 8; + const height = 8; + + cgl.profileData.profileTextureNew++; + + + cgl.gl.bindTexture(target, tex); + cgl.profileData.profileTextureResize++; + + for (let i = 0; i < 6; i += 1) + { + const data = new Uint8Array(8 * 8 * 4); + + cgl.gl.texImage2D(faces[i], 0, cgl.gl.RGBA, 8, 8, 0, cgl.gl.RGBA, cgl.gl.UNSIGNED_BYTE, data); + cgl.gl.texParameteri(target, cgl.gl.TEXTURE_MAG_FILTER, cgl.gl.NEAREST); + cgl.gl.texParameteri(target, cgl.gl.TEXTURE_MIN_FILTER, cgl.gl.NEAREST); + + cgl.gl.texParameteri(target, cgl.gl.TEXTURE_WRAP_S, cgl.gl.CLAMP_TO_EDGE); + cgl.gl.texParameteri(target, cgl.gl.TEXTURE_WRAP_T, cgl.gl.CLAMP_TO_EDGE); + } + + + cgl.gl.bindTexture(target, null); + + return { + "id": CABLES.uuid(), + "tex": tex, + "cubemap": tex, + "width": width, + "height": height, + "filter": filter, + "wrap": wrap, + "unpackAlpha": true, + "flip": true, + "_fromData": true, + "name": "emptyCubemapTexture", + "anisotropic": 0, + }; +}; + +/** + * @static + * @function getTempGradientTexture + * @memberof Texture + * @description returns a gradient texture from black to white + * @param {Context} cgl + * @return {Texture} + */ +Texture.getTempGradientTexture = function (cgl) +{ + if (!cgl) console.error("[getTempGradientTexture] no cgl!"); + + if (cgl.tempTextureGradient) return cgl.tempTextureGradient; + const temptex = new Texture(cgl); + const size = 256; + const data = new Uint8Array(size * size * 4); // .fill(0); + + for (let y = 0; y < size; y++) + { + for (let x = 0; x < size; x++) + { + data[(x + y * size) * 4 + 0] = data[(x + y * size) * 4 + 1] = data[(x + y * size) * 4 + 2] = 255 - y; + data[(x + y * size) * 4 + 3] = 255; + } + } + + temptex.initFromData(data, size, size, Texture.FILTER_NEAREST, Texture.WRAP_REPEAT); + cgl.tempTextureGradient = temptex; + return temptex; +}; + +Texture.getTemporaryTexture = function (cgl, size, filter, wrap, r, g, b) +{ + if (r === undefined)r = 1; + if (g === undefined)g = 1; + if (b === undefined)b = 1; + const temptex = new Texture(cgl); + const arr = []; + for (let y = 0; y < size; y++) + { + for (let x = 0; x < size; x++) + { + if ((x + y) % 64 < 32) + { + arr.push((200 + (y / size) * 25 + (x / size) * 25) * r); + arr.push((200 + (y / size) * 25 + (x / size) * 25) * g); + arr.push((200 + (y / size) * 25 + (x / size) * 25) * b); + } + else + { + arr.push((40 + (y / size) * 25 + (x / size) * 25) * r); + arr.push((40 + (y / size) * 25 + (x / size) * 25) * g); + arr.push((40 + (y / size) * 25 + (x / size) * 25) * b); + } + arr.push(255); + } + } + + const data = new Uint8Array(arr); + temptex.initFromData(data, size, size, filter, wrap); + + return temptex; +}; + +/** + * @static + * @function createFromImage + * @memberof Texture + * @description create texturem from image data (e.g. image or canvas) + * @param {Context} cgl + * @param {Object} image + * @param {Object} options + */ +Texture.createFromImage = function (cgl, img, options) +{ + options = options || {}; + const texture = new Texture(cgl, options); + texture.flip = false; + texture.image = img; + texture.width = img.videoWidth || img.width || 8; + texture.height = img.videoHeight || img.height || 8; + if (options.hasOwnProperty("wrap"))texture.wrap = options.wrap; + + console.log("createFromImage", options); + texture.initTexture(img, options.filter); + + return texture; +}; + +// deprecated! +Texture.fromImage = function (cgl, img, filter, wrap) +{ + console.error("deprecated texture from image..."); + + const texture = new Texture(cgl); + texture.flip = false; + if (filter) texture.filter = filter; + if (wrap) texture.wrap = wrap; + texture.image = img; + texture.initTexture(img); + return texture; +}; + +/** + * @static + * @function isPowerOfTwo + * @memberof Texture + * @description returns true if x is power of two + * @param {Number} x + * @return {Boolean} + */ +Texture.isPowerOfTwo = function (x) +{ + return x == 1 || x == 2 || x == 4 || x == 8 || x == 16 || x == 32 || x == 64 || x == 128 || x == 256 || x == 512 || x == 1024 || x == 2048 || x == 4096 || x == 8192 || x == 16384; +}; + +Texture.getTexInfo = function (tex) +{ + const obj = {}; + + obj.name = tex.name; + obj["power of two"] = tex.isPowerOfTwo(); + obj.size = tex.width + " x " + tex.height; + + let targetString = tex.texTarget; + if (tex.texTarget == tex._cgl.gl.TEXTURE_2D) targetString = "TEXTURE_2D"; + obj.target = targetString; + + obj.unpackAlpha = tex.unpackAlpha; + + if (tex.cubemap)obj.cubemap = true; + + if (tex.textureType == Texture.TYPE_FLOAT) obj.textureType = "TYPE_FLOAT"; + if (tex.textureType == Texture.TYPE_HALF_FLOAT) obj.textureType = "TYPE_HALF_FLOAT"; + else if (tex.textureType == Texture.TYPE_DEPTH) obj.textureType = "TYPE_DEPTH"; + else if (tex.textureType == Texture.TYPE_DEFAULT) obj.textureType = "TYPE_DEFAULT"; + else obj.textureType = "UNKNOWN " + this.textureType; + + if (tex.wrap == Texture.WRAP_CLAMP_TO_EDGE) obj.wrap = "CLAMP_TO_EDGE"; + else if (tex.wrap == Texture.WRAP_REPEAT) obj.wrap = "WRAP_REPEAT"; + else if (tex.wrap == Texture.WRAP_MIRRORED_REPEAT) obj.wrap = "WRAP_MIRRORED_REPEAT"; + else obj.wrap = "UNKNOWN"; + + if (tex.filter == Texture.FILTER_NEAREST) obj.filter = "FILTER_NEAREST"; + else if (tex.filter == Texture.FILTER_LINEAR) obj.filter = "FILTER_LINEAR"; + else if (tex.filter == Texture.FILTER_MIPMAP) obj.filter = "FILTER_MIPMAP"; + else obj.filter = "UNKNOWN"; + + obj.pixelFormat = tex.pixelFormat || "unknown"; + + return obj; +}; + + +Texture.FILTER_NEAREST = 0; +Texture.FILTER_LINEAR = 1; +Texture.FILTER_MIPMAP = 2; + +Texture.WRAP_REPEAT = 0; +Texture.WRAP_MIRRORED_REPEAT = 1; +Texture.WRAP_CLAMP_TO_EDGE = 2; + +Texture.TYPE_DEFAULT = 0; +Texture.TYPE_DEPTH = 1; +Texture.TYPE_FLOAT = 2; + + +Texture.PFORMATSTR_RGB565 = "RGB 5/6/5bit ubyte"; + +Texture.PFORMATSTR_R8UB = "R 8bit ubyte"; +Texture.PFORMATSTR_RG8UB = "RG 8bit ubyte"; +Texture.PFORMATSTR_RGB8UB = "RGB 8bit ubyte"; +Texture.PFORMATSTR_RGBA8UB = "RGBA 8bit ubyte"; + +Texture.PFORMATSTR_SRGBA8 = "SRGBA 8bit ubyte"; + +Texture.PFORMATSTR_R11FG11FB10F = "RGB 11/11/10bit float"; + +Texture.PFORMATSTR_R16F = "R 16bit float"; +Texture.PFORMATSTR_RG16F = "RG 16bit float"; +Texture.PFORMATSTR_RGB16F = "RGB 16bit float"; +Texture.PFORMATSTR_RGBA16F = "RGBA 16bit float"; + + +Texture.PFORMATSTR_R32F = "R 32bit float"; +Texture.PFORMATSTR_RG32F = "RG 32bit float"; +Texture.PFORMATSTR_RGB32F = "RGB 32bit float"; +Texture.PFORMATSTR_RGBA32F = "RGBA 32bit float"; + +Texture.PFORMATSTR_DEPTH = "DEPTH"; + + +Texture.PIXELFORMATS = [ + + Texture.PFORMATSTR_RGB565, + + Texture.PFORMATSTR_R8UB, + Texture.PFORMATSTR_RG8UB, + Texture.PFORMATSTR_RGB8UB, + Texture.PFORMATSTR_RGBA8UB, + + Texture.PFORMATSTR_SRGBA8, + + Texture.PFORMATSTR_R11FG11FB10F, + Texture.PFORMATSTR_R16F, + Texture.PFORMATSTR_RG16F, + Texture.PFORMATSTR_RGBA16F, + + Texture.PFORMATSTR_R32F, + Texture.PFORMATSTR_RGBA32F + +]; + +Texture.isPixelFormatFloat = + (pxlfrmt) => + { + return (pxlfrmt || "").contains("float"); + }; + +Texture.isPixelFormatHalfFloat = + (pxlfrmt) => + { + return (pxlfrmt || "").contains("float") && (pxlfrmt || "").contains("16bit"); + }; + + + + + + +;// CONCATENATED MODULE: ./src/core/cg/cg_boundingbox.js + + +/** + * bounding box + * @class + * @external CGL + * @namespace BoundingBox + * @param {Geometry} geometry or bounding box + */ +class BoundingBox +{ + constructor(geom) + { + this._init(); + this._first = true; + this._wireMesh = null; + + if (geom) this.apply(geom); + } + + _init() + { + this._max = [-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE]; + this._min = [Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE]; + this._center = [0, 0, 0]; + this._size = [0, 0, 0]; + this._maxAxis = 0.0; + this._first = true; + } + + /** + * get biggest number of maxX,maxY,maxZ + * @type {Number} + */ + get maxAxis() { return this._maxAxis || 1; } + + /** + * size of bounding box + * @type {vec3} + */ + get size() { return this._size; } + + /** + * center of bounding box + * @type {vec3} + */ + get center() { return this._center; } + + /** + * center x + * @type {Number} + */ + get x() { return this._center[0]; } + + /** + * center y + * @type {Number} + */ + get y() { return this._center[1]; } + + /** + * center z + * @type {Number} + */ + get z() { return this._center[2]; } + + + /** + * minimum x + * @type {Number} + */ + get minX() { return this._min[0]; } + + /** + * minimum y + * @type {Number} + */ + get minY() { return this._min[1]; } + + /** + * minimum z + * @type {Number} + */ + get minZ() { return this._min[2]; } + + /** + * maximum x + * @type {Number} + */ + get maxX() { return this._max[0]; } + + /** + * maximum y + * @type {Number} + */ + get maxY() { return this._max[1]; } + + /** + * maximum z + * @type {Number} + */ + get maxZ() { return this._max[2]; } + + + apply(geom, mat) + { + if (!geom) + { + // console.warn("[boundingbox] no geom/vertices", geom); + return; + } + + if (geom instanceof BoundingBox) + { + const bb = geom; + + this.applyPos(bb.maxX, bb.maxY, bb.maxZ); + this.applyPos(bb.minX, bb.minY, bb.minZ); + } + else + { + for (let i = 0; i < geom.vertices.length; i += 3) + // if (geom.vertices[i] == geom.vertices[i] || geom.vertices[i] != null) + // { + // if(mat) + // { + this.applyPos(geom.vertices[i], geom.vertices[i + 1], geom.vertices[i + 2]); + // } + // else + // { + // this.applyPos(geom.vertices[i + 0],geom.vertices[i + 1],geom.vertices[i + 2]); + // } + // } + } + this.calcCenterSize(); + } + + /** + * returns a copy of the bounding box + * @function copy + * @memberof BoundingBox + * @instance + */ + copy() + { + return new BoundingBox(this); + } + + get changed() + { + return !(this._max[0] == -Number.MAX_VALUE && this._max[1] == -Number.MAX_VALUE && this._max[2] == -Number.MAX_VALUE); + } + + applyPos(x, y, z) + { + if (x == Number.MAX_VALUE || x == -Number.MAX_VALUE || + y == Number.MAX_VALUE || y == -Number.MAX_VALUE || + z == Number.MAX_VALUE || z == -Number.MAX_VALUE) return; + + if (!CABLES.UTILS.isNumeric(x) || !CABLES.UTILS.isNumeric(y) || !CABLES.UTILS.isNumeric(z)) return; + + if (this._first) + { + this._max[0] = x; + this._max[1] = y; + this._max[2] = z; + + this._min[0] = x; + this._min[1] = y; + this._min[2] = z; + this._first = false; + return; + } + + this._max[0] = Math.max(this._max[0], x); + this._max[1] = Math.max(this._max[1], y); + this._max[2] = Math.max(this._max[2], z); + + this._min[0] = Math.min(this._min[0], x); + this._min[1] = Math.min(this._min[1], y); + this._min[2] = Math.min(this._min[2], z); + } + + calcCenterSize() + { + if (this._first) return; + // this._size[0]=Math.abs(this._min[0])+Math.abs(this._max[0]); + // this._size[1]=Math.abs(this._min[1])+Math.abs(this._max[1]); + // this._size[2]=Math.abs(this._min[2])+Math.abs(this._max[2]); + this._size[0] = this._max[0] - this._min[0]; + this._size[1] = this._max[1] - this._min[1]; + this._size[2] = this._max[2] - this._min[2]; + + this._center[0] = (this._min[0] + this._max[0]) / 2; + this._center[1] = (this._min[1] + this._max[1]) / 2; + this._center[2] = (this._min[2] + this._max[2]) / 2; + + this._maxAxis = Math.max(this._size[2], Math.max(this._size[0], this._size[1])); + } + + mulMat4(m) + { + if (this._first) + { + this._max[0] = 0; + this._max[1] = 0; + this._max[2] = 0; + + this._min[0] = 0; + this._min[1] = 0; + this._min[2] = 0; + this._first = false; + } + vec3.transformMat4(this._max, this._max, m); + vec3.transformMat4(this._min, this._min, m); + this.calcCenterSize(); + } + + render(cgl, shader, op) + { + if (!this._wireMesh) this._wireMesh = new CGL.WireCube(cgl); + + // console.log("bounding box render!"); + cgl.pushModelMatrix(); + mat4.translate(cgl.mMatrix, cgl.mMatrix, this._center); + // this._wireMesh.render(cgl, this._size[0] / 2, this._size[1] / 2, this._size[2] / 2); + + if (CABLES.UI && op) + { + CABLES.UI.OverlayMeshes.drawCube(op, this._size[0] / 2, this._size[1] / 2, this._size[2] / 2); + } + + cgl.popModelMatrix(); + } +} + +;// CONCATENATED MODULE: ./src/core/cg/cg_geom.js +// import { vec2, vec3 } from "gl-matrix"; + + + + + +/** + * a geometry contains all information about a mesh, vertices, texturecoordinates etc. etc. + * @external CGL + * @namespace Geometry + * @param {String} name + * @class + * @example + * // create a triangle with all attributes + * const geom=new Geometry("triangle"), + * + * geom.vertices = [ + * 0.0, sizeH.get(), 0.0, + * -sizeW.get(), -sizeH.get(), 0.0, + * sizeW.get(), -sizeH.get(), 0.0 ]; + * + * geom.vertexNormals = [ + * 0.0, 0.0, 1.0, + * 0.0, 0.0, 1.0, + * 0.0, 0.0, 1.0 ]; + * + * geom.tangents = [ + * 1,0,0, + * 1,0,0, + * 1,0,0 ]; + * + * geom.biTangents = [ + * 0,1,0, + * 0,1,0, + * 0,1,0 ]; + * + * geom.texCoords = [ + * 0.5, 0.0, + * 1.0, 1.0, + * 0.0, 1.0, ]; + * + * geom.verticesIndices = [ + * 0, 1, 2 ]; + * + */ +const Geometry = function (name) +{ + this.name = name || "unknown"; + this._log = new Logger("cgl_geometry"); + + this.faceVertCount = 3; + this.glPrimitive = null; + this._attributes = {}; + + this._vertices = []; + this.verticesIndices = []; + + this.isGeometry = true; + + this.morphTargets = []; + + Object.defineProperty(this, "vertices", { + get() + { + return this._vertices; + }, + set(v) + { + this.setVertices(v); + }, + }); + + Object.defineProperty(this, "texCoords", { + get() + { + const att = this.getAttribute("texCoords"); + if (!att) return []; + return att.data; + }, + set(v) + { + this.setAttribute("texCoords", v, 2); + }, + }); + + Object.defineProperty(this, "vertexNormals", { + get() + { + const att = this.getAttribute("vertexNormals"); + if (!att) return []; + return att.data; + }, + set(v) + { + this.setAttribute("vertexNormals", v, 3); + }, + }); + + Object.defineProperty(this, "tangents", { + get() + { + const att = this.getAttribute("tangents"); + if (!att) return []; + return att.data; + }, + set(v) + { + this.setAttribute("tangents", v, 3); + }, + }); + + Object.defineProperty(this, "biTangents", { + get() + { + const att = this.getAttribute("biTangents"); + if (!att) return []; + return att.data; + }, + set(v) + { + this.setAttribute("biTangents", v, 3); + }, + }); + + Object.defineProperty(this, "vertexColors", { + get() + { + const att = this.getAttribute("vertexColors"); + if (!att) return []; + return att.data; + }, + set(v) + { + this.setAttribute("vertexColors", v, 4); + }, + }); +}; + +/** + * @function clear + * @memberof Geometry + * @instance + * @description clear all buffers/set them to length 0 + */ +Geometry.prototype.clear = function () +{ + this._vertices = new Float32Array([]); + this.verticesIndices = []; + this.texCoords = new Float32Array([]); + this.vertexNormals = new Float32Array([]); + this.tangents = []; + this.biTangents = []; + this._attributes = {}; +}; + + + +/** + * @function getAttributes + @memberof Geometry + * @instance + * @return {Array<Object>} returns array of attribute objects + */ +Geometry.prototype.getAttributes = function () +{ + return this._attributes; +}; + +/** + * @function getAttribute + * @memberof Geometry + * @instance + * @param {String} name + * @return {Object} + */ +Geometry.prototype.getAttribute = function (name) +{ + for (const i in this._attributes) + { + if (this._attributes[i].name == name) return this._attributes[i]; + } + return null; +}; + +/** + * @function setAttribute + * @description create an attribute + * @memberof Geometry + * @instance + * @param {String} name + * @param {Array} data + * @param {Number} itemsize + */ +Geometry.prototype.setAttribute = function (name, arr, itemSize) +{ + let attrType = ""; + if (!itemSize || itemSize > 4) + { + console.log("itemsize wrong?", itemSize, name); + this._log.stack("itemsize"); + + itemSize = 3; + } + + if (itemSize == 1) attrType = "float"; + else if (itemSize == 2) attrType = "vec2"; + else if (itemSize == 3) attrType = "vec3"; + else if (itemSize == 4) attrType = "vec4"; + + + const attr = { + "name": name, + "data": arr, + "itemSize": itemSize, + "type": attrType, + }; + + this._attributes[name] = attr; +}; + +Geometry.prototype.copyAttribute = function (name, newgeom) +{ + const attr = this.getAttribute(name); + newgeom.setAttribute(name, new Float32Array(attr.data), attr.itemSize); +}; + + +/** + * @function setVertices + * @memberof Geometry + * @instance + * @description set vertices + * @param {Array|Float32Array} data [x,y,z,x,y,z,...] + */ +Geometry.prototype.setVertices = function (arr) +{ + if (arr instanceof Float32Array) this._vertices = arr; + else this._vertices = new Float32Array(arr); +}; + +/** + * @function setTexCoords + * @memberof Geometry + * @instance + * @description set texcoords + * @param {Array|Float32Array} data [u,v,u,v,...] + */ +Geometry.prototype.setTexCoords = function (arr) +{ + if (arr instanceof Float32Array) this.texCoords = arr; + else this.texCoords = new Float32Array(arr); +}; + +// Geometry.prototype.testIndices = function () +// { +// var foundError = false; +// for (var i = 0; i < this.verticesIndices.length; i++) +// { +// if (this.verticesIndices[i * 3 + 0] >= this._vertices.length / 3 || this.verticesIndices[i * 3 + 1] >= this._vertices.length / 3 || this.verticesIndices[i * 3 + 2] >= this._vertices.length / 3) +// { +// foundError = true; +// console.log("index error!"); +// } +// } +// }; + +// deprecated +Geometry.prototype.calcNormals = function (smooth) +{ + const options = { "smooth": smooth }; + + + this.calculateNormals(options); +}; + +/** + * @function flipNormals + * @memberof Geometry + * @description flip normals + */ +Geometry.prototype.flipNormals = function (x, y, z) +{ + let vec = vec3.create(); + + if (x == undefined)x = 1; + if (y == undefined)y = 1; + if (z == undefined)z = 1; + + + for (let i = 0; i < this.vertexNormals.length; i += 3) + { + vec3.set(vec, + this.vertexNormals[i + 0], + this.vertexNormals[i + 1], + this.vertexNormals[i + 2]); + + vec[0] *= -x; + vec[1] *= -y; + vec[2] *= -z; + + vec3.normalize(vec, vec); + + this.vertexNormals[i + 0] = vec[0]; + this.vertexNormals[i + 1] = vec[1]; + this.vertexNormals[i + 2] = vec[2]; + } +}; + +Geometry.prototype.getNumTriangles = function () +{ + if (this.verticesIndices && this.verticesIndices.length) return this.verticesIndices.length / 3; + return this.vertices.length / 3; +}; + + +/** + * @function flipVertDir + * @memberof Geometry + * @description flip order of vertices in geom faces + */ +Geometry.prototype.flipVertDir = function () +{ + const newInd = []; + newInd.length = this.verticesIndices.length; + for (let i = 0; i < this.verticesIndices.length; i += 3) + { + newInd[i] = this.verticesIndices[i + 2]; + newInd[i + 1] = this.verticesIndices[i + 1]; + newInd[i + 2] = this.verticesIndices[i]; + } + this.verticesIndices = newInd; +}; + + +Geometry.prototype.setPointVertices = function (verts) +{ + if (verts.length % 3 !== 0) + { + this._log.error("SetPointVertices: Array must be multiple of three."); + return; + } + + if (!(verts instanceof Float32Array)) this.vertices = new Float32Array(verts); + else this.vertices = verts; + + if (!(this.texCoords instanceof Float32Array)) this.texCoords = new Float32Array((verts.length / 3) * 2); + + // this.texCoords.length=verts.length/3*2; + this.verticesIndices.length = verts.length / 3; + // this.verticesIndices=[]; + + for (let i = 0; i < verts.length / 3; i++) + { + this.verticesIndices[i] = i; + this.texCoords[i * 2] = 0; + this.texCoords[i * 2 + 1] = 0; + } +}; + +/** + * merge a different geometry into the this geometry + * @function merge + * @param {Geometry} geom + * @memberof Geometry + * @instance + */ +Geometry.prototype.merge = function (geom) +{ + if (!geom) return; + + if (this.isIndexed() != geom.isIndexed()) + { + if (this.isIndexed()) + { + this.unIndex(false, true); + } + if (geom.isIndexed()) + { + const g = geom.copy(); + g.unIndex(false, true); + geom = g; + } + } + + const oldIndizesLength = this.verticesIndices.length; + const vertLength = this._vertices.length / 3; + + this.verticesIndices.length += geom.verticesIndices.length; + for (let i = 0; i < geom.verticesIndices.length; i++) + this.verticesIndices[oldIndizesLength + i] = geom.verticesIndices[i] + vertLength; + + this.vertices = UTILS.float32Concat(this._vertices, geom.vertices); + this.texCoords = UTILS.float32Concat(this.texCoords, geom.texCoords); + this.vertexNormals = UTILS.float32Concat(this.vertexNormals, geom.vertexNormals); + this.tangents = UTILS.float32Concat(this.tangents, geom.tangents); + this.biTangents = UTILS.float32Concat(this.biTangents, geom.biTangents); +}; + +/** + * create a copy of the geometry + * @function copy + * @memberof Geometry + * @instance + */ +Geometry.prototype.copy = function () +{ + const geom = new Geometry(this.name + " copy"); + geom.faceVertCount = this.faceVertCount; + geom.glPrimitive = this.glPrimitive; + + geom.setVertices(this._vertices.slice(0)); + + if (this.verticesIndices) + { + geom.verticesIndices.length = this.verticesIndices.length; + for (let i = 0; i < this.verticesIndices.length; i++) geom.verticesIndices[i] = this.verticesIndices[i]; + } + + for (let i in this._attributes) this.copyAttribute(i, geom); + + geom.morphTargets.length = this.morphTargets.length; + for (let i = 0; i < this.morphTargets.length; i++) geom.morphTargets[i] = this.morphTargets[i]; + + return geom; +}; + +/** + * Calculaten normals + * @function calculateNormals + * @memberof Geometry + * @instance + */ +Geometry.prototype.calculateNormals = function (options) +{ + // todo: should check angle of normals to get edges https://community.khronos.org/t/calculating-accurate-vertex-normals/28152 + options = options || {}; + if (options.smooth === false) this.unIndex(); + + const u = vec3.create(); + const v = vec3.create(); + const n = vec3.create(); + + function calcNormal(triangle) + { + vec3.subtract(u, triangle[0], triangle[1]); + vec3.subtract(v, triangle[0], triangle[2]); + vec3.cross(n, u, v); + vec3.normalize(n, n); + + if (options && options.forceZUp) + { + if (n[2] < 0) + { + n[0] *= -1; + n[1] *= -1; + n[2] *= -1; + } + } + return n; + } + + this.getVertexVec = function (which) + { + const vec = [0, 0, 0]; + vec[0] = this.vertices[which * 3 + 0]; + vec[1] = this.vertices[which * 3 + 1]; + vec[2] = this.vertices[which * 3 + 2]; + return vec; + }; + + if (!(this.vertexNormals instanceof Float32Array) || this.vertexNormals.length != this.vertices.length) this.vertexNormals = new Float32Array(this.vertices.length); + + for (let i = 0; i < this.vertices.length; i++) + { + this.vertexNormals[i] = 0; + } + + if (!this.isIndexed()) + { + const norms = []; + for (let i = 0; i < this.vertices.length; i += 9) + { + const triangle = [[this.vertices[i + 0], this.vertices[i + 1], this.vertices[i + 2]], [this.vertices[i + 3], this.vertices[i + 4], this.vertices[i + 5]], [this.vertices[i + 6], this.vertices[i + 7], this.vertices[i + 8]]]; + const nn = calcNormal(triangle); + norms.push(nn[0], nn[1], nn[2], nn[0], nn[1], nn[2], nn[0], nn[1], nn[2]); + } + this.vertexNormals = norms; + } + else + { + const faceNormals = []; + + faceNormals.length = Math.floor(this.verticesIndices.length / 3); + + for (let i = 0; i < this.verticesIndices.length; i += 3) + { + const triangle = [this.getVertexVec(this.verticesIndices[i + 0]), this.getVertexVec(this.verticesIndices[i + 1]), this.getVertexVec(this.verticesIndices[i + 2])]; + + faceNormals[i / 3] = calcNormal(triangle); + + this.vertexNormals[this.verticesIndices[i + 0] * 3 + 0] += faceNormals[i / 3][0]; + this.vertexNormals[this.verticesIndices[i + 0] * 3 + 1] += faceNormals[i / 3][1]; + this.vertexNormals[this.verticesIndices[i + 0] * 3 + 2] += faceNormals[i / 3][2]; + + this.vertexNormals[this.verticesIndices[i + 1] * 3 + 0] += faceNormals[i / 3][0]; + this.vertexNormals[this.verticesIndices[i + 1] * 3 + 1] += faceNormals[i / 3][1]; + this.vertexNormals[this.verticesIndices[i + 1] * 3 + 2] += faceNormals[i / 3][2]; + + this.vertexNormals[this.verticesIndices[i + 2] * 3 + 0] += faceNormals[i / 3][0]; + this.vertexNormals[this.verticesIndices[i + 2] * 3 + 1] += faceNormals[i / 3][1]; + this.vertexNormals[this.verticesIndices[i + 2] * 3 + 2] += faceNormals[i / 3][2]; + } + + + for (let i = 0; i < this.verticesIndices.length; i += 3) // faces + { + for (let k = 0; k < 3; k++) // triangles + { + const vv = [this.vertexNormals[this.verticesIndices[i + k] * 3 + 0], this.vertexNormals[this.verticesIndices[i + k] * 3 + 1], this.vertexNormals[this.verticesIndices[i + k] * 3 + 2]]; + vec3.normalize(vv, vv); + this.vertexNormals[this.verticesIndices[i + k] * 3 + 0] = vv[0]; + this.vertexNormals[this.verticesIndices[i + k] * 3 + 1] = vv[1]; + this.vertexNormals[this.verticesIndices[i + k] * 3 + 2] = vv[2]; + } + } + } +}; + +/** + * Calculates tangents & bitangents with the help of uv-coordinates. Adapted from + * Lengyel, Eric. “Computing Tangent Space Basis Vectors for an Arbitrary Mesh”. + * Terathon Software 3D Graphics Library. + * https://fenix.tecnico.ulisboa.pt/downloadFile/845043405449073/Tangent%20Space%20Calculation.pdf + * + * @function calcTangentsBitangents + * @memberof Geometry + * @instance + */ +Geometry.prototype.calcTangentsBitangents = function () +{ + if (!this.vertices.length) + { + // this._log.error("Cannot calculate tangents/bitangents without vertices."); + return; + } + if (!this.vertexNormals.length) + { + // this._log.error("Cannot calculate tangents/bitangents without normals."); + return; + } + if (!this.texCoords.length) + { + // console.warn("No texcoords. Replacing with default values [0, 0]."); + const texCoordLength = (this.vertices.length / 3) * 2; + this.texCoords = new Float32Array(texCoordLength); + for (let i = 0; i < texCoordLength; i += 1) this.texCoords[i] = 0; + } + if (!this.verticesIndices || !this.verticesIndices.length) + { + // this._log.error("Cannot calculate tangents/bitangents without vertex indices."); + return; + } + // this code assumes that we have three indices per triangle + if (this.verticesIndices.length % 3 !== 0) + { + this._log.error("Vertex indices mismatch!"); + return; + } + + const triangleCount = this.verticesIndices.length / 3; + const vertexCount = this.vertices.length / 3; + + this.tangents = new Float32Array(this.vertexNormals.length); + this.biTangents = new Float32Array(this.vertexNormals.length); + + // temporary buffers + const tempVertices = []; + tempVertices.length = vertexCount * 2; + const v1 = vec3.create(); + const v2 = vec3.create(); + const v3 = vec3.create(); + + const w1 = vec2.create(); + const w2 = vec2.create(); + const w3 = vec2.create(); + + const sdir = vec3.create(); + const tdir = vec3.create(); + + // for details on calculation, see article referenced above + for (let tri = 0; tri < triangleCount; tri += 1) + { + // indices of the three vertices for a triangle + const i1 = this.verticesIndices[tri * 3]; + const i2 = this.verticesIndices[tri * 3 + 1]; + const i3 = this.verticesIndices[tri * 3 + 2]; + + // vertex position as vec3 + vec3.set(v1, this.vertices[i1 * 3], this.vertices[i1 * 3 + 1], this.vertices[i1 * 3 + 2]); + vec3.set(v2, this.vertices[i2 * 3], this.vertices[i2 * 3 + 1], this.vertices[i2 * 3 + 2]); + vec3.set(v3, this.vertices[i3 * 3], this.vertices[i3 * 3 + 1], this.vertices[i3 * 3 + 2]); + + // texture coordinate as vec2 + vec2.set(w1, this.texCoords[i1 * 2], this.texCoords[i1 * 2 + 1]); + vec2.set(w2, this.texCoords[i2 * 2], this.texCoords[i2 * 2 + 1]); + vec2.set(w3, this.texCoords[i3 * 2], this.texCoords[i3 * 2 + 1]); + + const x1 = v2[0] - v1[0]; + const x2 = v3[0] - v1[0]; + const y1 = v2[1] - v1[1]; + const y2 = v3[1] - v1[1]; + const z1 = v2[2] - v1[2]; + const z2 = v3[2] - v1[2]; + + const s1 = w2[0] - w1[0]; + const s2 = w3[0] - w1[0]; + const t1 = w2[1] - w1[1]; + const t2 = w3[1] - w1[1]; + + const r = 1.0 / (s1 * t2 - s2 * t1); + + vec3.set(sdir, (t2 * x1 - t1 * x2) * r, (t2 * y1 - t1 * y2) * r, (t2 * z1 - t1 * z2) * r); + vec3.set(tdir, (s1 * x2 - s2 * x1) * r, (s1 * y2 - s2 * y1) * r, (s1 * z2 - s2 * z1) * r); + + tempVertices[i1] = sdir; + tempVertices[i2] = sdir; + tempVertices[i3] = sdir; + + tempVertices[i1 + vertexCount] = tdir; + tempVertices[i2 + vertexCount] = tdir; + tempVertices[i3 + vertexCount] = tdir; + } + + const normal = vec3.create(); + const tempVert = vec3.create(); + const tan = vec3.create(); + const bitan = vec3.create(); + const temp1 = vec3.create(); + const temp2 = vec3.create(); + const crossPd = vec3.create(); + const normalized = vec3.create(); + + for (let vert = 0; vert < vertexCount; vert += 1) + { + // NOTE: some meshes don't have index 0 - n in their indexbuffer, if this is the case, skip calculation of this vertex + if (!tempVertices[vert]) continue; + + vec3.set(normal, this.vertexNormals[vert * 3], this.vertexNormals[vert * 3 + 1], this.vertexNormals[vert * 3 + 2]); + vec3.set(tempVert, tempVertices[vert][0], tempVertices[vert][1], tempVertices[vert][2]); + + // Gram-Schmidt orthagonalize + const _dp = vec3.dot(normal, tempVert); + vec3.scale(temp1, normal, _dp); + vec3.subtract(temp2, tempVert, temp1); + + vec3.normalize(normalized, temp2); + vec3.cross(crossPd, normal, tempVert); + + // const intermDot = vec3.dot(crossPd, tempVertices[vert + vertexCount]); + const w = 1.0;// intermDot < 0.0 ? -1.0 : 1.0; + + vec3.scale(tan, normalized, 1 / w); + vec3.cross(bitan, normal, tan); + + this.tangents[vert * 3 + 0] = tan[0]; + this.tangents[vert * 3 + 1] = tan[1]; + this.tangents[vert * 3 + 2] = tan[2]; + this.biTangents[vert * 3 + 0] = bitan[0]; + this.biTangents[vert * 3 + 1] = bitan[1]; + this.biTangents[vert * 3 + 2] = bitan[2]; + } +}; + +Geometry.prototype.isIndexed = function () +{ + if (this._vertices.length == 0) return true; + return this.verticesIndices.length != 0; +}; + +/** + * @function unIndex + * @memberof Geometry + * @instance + * @param {Boolean} + * @description remove all vertex indizes, vertices array will contain 3*XYZ for every triangle + */ +Geometry.prototype.unIndex = function (reIndex, dontCalcNormals) +{ + const newVerts = []; + const newIndizes = []; + let count = 0; + + for (let j in this._attributes) + { + const attr = this._attributes[j]; + let na = []; + + for (let i = 0; i < this.verticesIndices.length; i += 3) + { + for (let s = 0; s < 3; s++) + { + if (attr.itemSize == 3) + na.push( + attr.data[this.verticesIndices[i + s] * 3 + 0], + attr.data[this.verticesIndices[i + s] * 3 + 1], + attr.data[this.verticesIndices[i + s] * 3 + 2]); + else if (attr.itemSize == 4) + na.push( + attr.data[this.verticesIndices[i + s] * 4 + 0], + attr.data[this.verticesIndices[i + s] * 4 + 1], + attr.data[this.verticesIndices[i + s] * 4 + 2], + attr.data[this.verticesIndices[i + s] * 4 + 3]); + else if (attr.itemSize == 2) + na.push( + attr.data[this.verticesIndices[i + s] * 2 + 0], + attr.data[this.verticesIndices[i + s] * 2 + 1]); + else if (attr.itemSize == 1) + na.push( + attr.data[this.verticesIndices[i + s]]); + else console.log("unknown attr", attr); + } + } + this.setAttribute(attr.name, na, attr.itemSize); + } + + for (let i = 0; i < this.verticesIndices.length; i += 3) + { + newVerts.push( + this.vertices[this.verticesIndices[i + 0] * 3 + 0], + this.vertices[this.verticesIndices[i + 0] * 3 + 1], + this.vertices[this.verticesIndices[i + 0] * 3 + 2]); + + newIndizes.push(count); + count++; + + newVerts.push( + this.vertices[this.verticesIndices[i + 1] * 3 + 0], + this.vertices[this.verticesIndices[i + 1] * 3 + 1], + this.vertices[this.verticesIndices[i + 1] * 3 + 2]); + + newIndizes.push(count); + count++; + + newVerts.push( + this.vertices[this.verticesIndices[i + 2] * 3 + 0], + this.vertices[this.verticesIndices[i + 2] * 3 + 1], + this.vertices[this.verticesIndices[i + 2] * 3 + 2]); + + newIndizes.push(count); + count++; + } + + this.vertices = newVerts; + + this.verticesIndices = []; + if (reIndex) this.verticesIndices = newIndizes; + + if (!dontCalcNormals) this.calculateNormals(); +}; + +Geometry.prototype.calcBarycentric = function () +{ + let barycentrics = []; + barycentrics.length = this.vertices.length; + for (let i = 0; i < this.vertices.length; i++) barycentrics[i] = 0; + + let count = 0; + for (let i = 0; i < this.vertices.length; i += 3) + { + barycentrics[i + count] = 1; + count++; + if (count == 3) count = 0; + } + + this.setAttribute("attrBarycentric", barycentrics, 3); +}; + +Geometry.prototype.getBounds = function () +{ + return new BoundingBox(this); +}; + +Geometry.prototype.center = function (x, y, z) +{ + if (x === undefined) + { + x = true; + y = true; + z = true; + } + + let i = 0; + const bounds = this.getBounds(); + const offset = [bounds.minX + (bounds.maxX - bounds.minX) / 2, bounds.minY + (bounds.maxY - bounds.minY) / 2, bounds.minZ + (bounds.maxZ - bounds.minZ) / 2]; + + for (i = 0; i < this.vertices.length; i += 3) + { + if (this.vertices[i + 0] == this.vertices[i + 0]) + { + if (x) this.vertices[i + 0] -= offset[0]; + if (y) this.vertices[i + 1] -= offset[1]; + if (z) this.vertices[i + 2] -= offset[2]; + } + } + + return offset; +}; + +Geometry.prototype.mapTexCoords2d = function () +{ + const bounds = this.getBounds(); + const num = this.vertices.length / 3; + + this.texCoords = new Float32Array(num * 2); + + for (let i = 0; i < num; i++) + { + const vertX = this.vertices[i * 3 + 0]; + const vertY = this.vertices[i * 3 + 1]; + this.texCoords[i * 2 + 0] = vertX / (bounds.maxX - bounds.minX) + 0.5; + this.texCoords[i * 2 + 1] = 1.0 - vertY / (bounds.maxY - bounds.minY) + 0.5; + } +}; + + +Geometry.prototype.getInfoOneLine = function () +{ + let txt = ""; + if (this.faceVertCount == 3 && this.verticesIndices)txt += this.verticesIndices.length / 3; + else txt += 0; + + txt += " tris "; + + if (this.vertices)txt += this.vertices.length / 3; + else txt += 0; + + txt += " verts"; + + return txt; +}; + +Geometry.prototype.getInfo = function () +{ + const info = {}; + + if (this.faceVertCount == 3 && this.verticesIndices)info.numFaces = this.verticesIndices.length / 3; + else info.numFaces = 0; + + if (this.verticesIndices && this.verticesIndices.length)info.indices = this.verticesIndices.length; + + if (this.vertices)info.numVerts = this.vertices.length / 3; + else info.numVerts = 0; + + if (this.vertexNormals) info.numNormals = this.vertexNormals.length / 3; + else info.numNormals = 0; + + if (this.texCoords) info.numTexCoords = this.texCoords.length / 2; + else info.numTexCoords = 0; + + if (this.tangents) info.numTangents = this.tangents.length / 3; + else info.numTangents = 0; + + if (this.biTangents) info.numBiTangents = this.biTangents.length / 3; + else info.numBiTangents = 0; + + if (this.biTangents) info.numBiTangents = this.biTangents.length / 3; + else info.numBiTangents = 0; + + if (this.vertexColors) info.numVertexColors = this.vertexColors.length / 4; + else info.numVertexColors = 0; + + if (this.getAttributes()) info.numAttribs = Object.keys(this.getAttributes()).length; + else info.numAttribs = 0; + + info.isIndexed = this.isIndexed(); + + return info; +}; + +// ----------------- + +// TODO : move this into "old" circle op +Geometry.buildFromFaces = function (arr, name, optimize) +{ + const vertices = []; + const verticesIndices = []; + + for (let i = 0; i < arr.length; i += 3) + { + const a = arr[i + 0]; + const b = arr[i + 1]; + const c = arr[i + 2]; + const face = [-1, -1, -1]; + + if (optimize) + for (let iv = 0; iv < vertices.length; iv += 3) + { + if (vertices[iv + 0] == a[0] && vertices[iv + 1] == a[1] && vertices[iv + 2] == a[2]) face[0] = iv / 3; + if (vertices[iv + 0] == b[0] && vertices[iv + 1] == b[1] && vertices[iv + 2] == b[2]) face[1] = iv / 3; + if (vertices[iv + 0] == c[0] && vertices[iv + 1] == c[1] && vertices[iv + 2] == c[2]) face[2] = iv / 3; + } + + if (face[0] == -1) + { + vertices.push(a[0], a[1], a[2]); + face[0] = (vertices.length - 1) / 3; + } + + if (face[1] == -1) + { + vertices.push(b[0], b[1], b[2]); + face[1] = (vertices.length - 1) / 3; + } + + if (face[2] == -1) + { + vertices.push(c[0], c[1], c[2]); + face[2] = (vertices.length - 1) / 3; + } + + verticesIndices.push(parseInt(face[0], 10)); + verticesIndices.push(parseInt(face[1], 10)); + verticesIndices.push(parseInt(face[2], 10)); + } + + const geom = new Geometry(name); + geom.name = name; + geom.vertices = vertices; + geom.verticesIndices = verticesIndices; + + return geom; +}; + +// TODO: not needed anymore ?! move to deprecated ops? +Geometry.json2geom = function (jsonMesh) +{ + const geom = new Geometry("jsonMeshGeom"); + geom.verticesIndices = []; + + geom.vertices = jsonMesh.vertices || []; + geom.vertexNormals = jsonMesh.normals || []; + geom.vertexColors = jsonMesh.colors || []; + geom.tangents = jsonMesh.tangents || []; + geom.biTangents = jsonMesh.bitangents || []; + if (jsonMesh.texturecoords) geom.setTexCoords(jsonMesh.texturecoords[0]); + + if (jsonMesh.vertices_b64)geom.vertices = new Float32Array(b64decTypedArray(jsonMesh.vertices_b64)); + if (jsonMesh.normals_b64) geom.vertexNormals = new Float32Array(b64decTypedArray(jsonMesh.normals_b64)); + if (jsonMesh.tangents_b64) geom.tangents = new Float32Array(b64decTypedArray(jsonMesh.tangents_b64)); + if (jsonMesh.bitangents_b64) geom.biTangents = new Float32Array(b64decTypedArray(jsonMesh.bitangents_b64)); + if (jsonMesh.texturecoords_b64) geom.setTexCoords(new Float32Array(b64decTypedArray(jsonMesh.texturecoords_b64[0]))); + + if (jsonMesh.faces_b64) + { + geom.verticesIndices = new Uint32Array(b64decTypedArray(jsonMesh.faces_b64)); + } + else + { + geom.verticesIndices.length = jsonMesh.faces.length * 3; + for (let i = 0; i < jsonMesh.faces.length; i++) + { + geom.verticesIndices[i * 3] = jsonMesh.faces[i][0]; + geom.verticesIndices[i * 3 + 1] = jsonMesh.faces[i][1]; + geom.verticesIndices[i * 3 + 2] = jsonMesh.faces[i][2]; + } + } + + return geom; +}; + + + + +;// CONCATENATED MODULE: ./src/core/cgl/cgl_mesh_feedback.js +// view-source:http://toji.github.io/webgl2-particles-2/ + +function extendMeshWithFeedback(Mesh) +{ + Mesh.prototype.hasFeedbacks = function () + { + return this._feedBacks.length > 0; + }; + + Mesh.prototype.removeFeedbacks = function (shader) + { + if (!this._feedbacks) return; + this._feedbacks.length = 0; + this._feedBacksChanged = true; + }; + + Mesh.prototype.setAttributeFeedback = function () {}; + + Mesh.prototype.setFeedback = function (attrib, nameOut, initialArr) + { + let fb = { nameOut, }; + let found = false; + this.unBindFeedbacks(); + + for (let i = 0; i < this._feedBacks.length; i++) + { + if (this._feedBacks[i].nameOut == nameOut) + { + fb = this._feedBacks[i]; + + found = true; + } + } + + if (!found) this._feedBacksChanged = true; + + fb.initialArr = initialArr; + fb.attrib = attrib; + + // console.log("setfeedback"); + + if (fb.outBuffer) this._cgl.gl.deleteBuffer(fb.outBuffer); + // if(fb.attrib.buffer)this._cgl.gl.deleteBuffer(fb.attrib.buffer); + fb.outBuffer = this._cgl.gl.createBuffer(); + this._cgl.gl.bindBuffer(this._cgl.gl.ARRAY_BUFFER, fb.outBuffer); + this._cgl.gl.bufferData(this._cgl.gl.ARRAY_BUFFER, fb.initialArr, this._cgl.gl.STATIC_DRAW); + + this._cgl.gl.bindBuffer(this._cgl.gl.ARRAY_BUFFER, fb.attrib.buffer); + this._cgl.gl.bufferData(this._cgl.gl.ARRAY_BUFFER, fb.initialArr, this._cgl.gl.STATIC_DRAW); + + if (!found) this._feedBacks.push(fb); + + // console.log('initialArr',initialArr.length/3); + // console.log('vertices',fb.attrib.numItems); + // console.log('vertices',this._bufVertexAttrib.numItems); + + return fb; + }; + + Mesh.prototype.bindFeedback = function (attrib) + { + if (!this._feedBacks || this._feedBacks.length === 0) return; + if (this._transformFeedBackLoc == -1) this._transformFeedBackLoc = this._cgl.gl.createTransformFeedback(); + + this._cgl.gl.bindTransformFeedback(this._cgl.gl.TRANSFORM_FEEDBACK, this._transformFeedBackLoc); + + let found = false; + + for (let i = 0; i < this._feedBacks.length; i++) + { + const fb = this._feedBacks[i]; + + if (fb.attrib == attrib) + { + found = true; + // this._cgl.gl.bindBuffer(this._cgl.gl.ARRAY_BUFFER, fb.attrib.buffer); + // + // this._cgl.gl.vertexAttribPointer( + // fb.attrib.loc, + // fb.attrib.itemSize, + // fb.attrib.type, + // false, + // fb.attrib.itemSize*4, 0); + + this._cgl.gl.bindBufferBase(this._cgl.gl.TRANSFORM_FEEDBACK_BUFFER, i, fb.outBuffer); + } + } + + if (!found) + { + // console.log("ARTTRIB NOT FOUND",attrib.name); + } + }; + + Mesh.prototype.drawFeedbacks = function (shader, prim) + { + let i = 0; + + if (this._feedBacksChanged) + { + const names = []; + this._cgl.gl.bindTransformFeedback(this._cgl.gl.TRANSFORM_FEEDBACK, this._transformFeedBackLoc); + + for (i = 0; i < this._feedBacks.length; i++) names.push(this._feedBacks[i].nameOut); + shader.setFeedbackNames(names); + + console.log("feedbacknames", names); + + shader.compile(); + this._feedBacksChanged = false; + this._cgl.gl.bindTransformFeedback(this._cgl.gl.TRANSFORM_FEEDBACK, null); + console.log("changed finished"); + return; + } + + // + // for( i=0;i<this._feedBacks.length;i++) + // { + // var fb=this._feedBacks[i]; + // + // this._cgl.gl.bindBufferBase(this._cgl.gl.TRANSFORM_FEEDBACK_BUFFER, i, fb.outBuffer); + // } + + // draw + this._cgl.gl.beginTransformFeedback(this.glPrimitive); + this._cgl.gl.drawArrays(prim, 0, this._feedBacks[0].attrib.numItems); + + // unbind + this._cgl.gl.endTransformFeedback(); + + this.unBindFeedbacks(); + + this.feedBacksSwapBuffers(); + }; + + Mesh.prototype.unBindFeedbacks = function () + { + for (let i = 0; i < this._feedBacks.length; i++) + { + // this._cgl.gl.disableVertexAttribArray(this._feedBacks[i].attrib.loc); + this._cgl.gl.bindBufferBase(this._cgl.gl.TRANSFORM_FEEDBACK_BUFFER, i, null); + } + + this._cgl.gl.bindTransformFeedback(this._cgl.gl.TRANSFORM_FEEDBACK, null); + }; + + Mesh.prototype.feedBacksSwapBuffers = function () + { + for (let i = 0; i < this._feedBacks.length; i++) + { + const t = this._feedBacks[i].attrib.buffer; + this._feedBacks[i].attrib.buffer = this._feedBacks[i].outBuffer; + this._feedBacks[i].outBuffer = t; + } + }; +} + +;// CONCATENATED MODULE: ./src/core/cgl/cgl_mesh.js + + + + + +const MESH = {}; +MESH.lastMesh = null; + +/** + * webgl renderable 3d object + * @external CGL + * @namespace Mesh + * @hideconstructor + * @param {Context} cgl + * @param {Geometry} geometry + * @param {Number} [glPrimitive] + * @class + * @example + * const cgl=this._cgl + * const mesh=new CGL.Mesh(cgl, geometry); + * + * function render() + * { + * mesh.render(cgl.getShader()); + * } + */ +const Mesh = function (_cgl, __geom, _options) +{ + this._cgl = _cgl; + + let options = _options || {}; + if (CABLES.UTILS.isNumeric(options))options = { "glPrimitive": _options }; // old constructor fallback... + this._log = new Logger("cgl_mesh"); + this._bufVertexAttrib = null; + this._bufVerticesIndizes = this._cgl.gl.createBuffer(); + this._indexType = this._cgl.gl.UNSIGNED_SHORT; + this._attributes = []; + this._attribLocs = {}; + this._geom = null; + this._lastShader = null; + this._numInstances = 0; + this._glPrimitive = options.glPrimitive; + + this.opId = options.opId || ""; + this._preWireframeGeom = null; + this.addVertexNumbers = false; + this._name = "unknown"; + + this.feedBackAttributes = []; + this.setGeom(__geom); + + this._feedBacks = []; + this._feedBacksChanged = false; + this._transformFeedBackLoc = -1; + this._lastAttrUpdate = 0; + + this.memFreed = false; + + this._cgl.profileData.addHeavyEvent("mesh constructed", this._name); + + this._queryExt = null; + + Object.defineProperty(this, "numInstances", { + get() + { + return this._numInstances; + }, + set(v) + { + this.setNumInstances(v); + }, + }); +}; + +Mesh.prototype.freeMem = function () +{ + this.memFreed = true; + + for (let i = 0; i < this._attributes.length; i++) + { + this._attributes[i].floatArray = null; + } +}; + +/** + * @function updateVertices + * @memberof Mesh + * @instance + * @description update vertices only from a geometry + * @param {Geometry} geometry + */ +Mesh.prototype.updateVertices = function (geom) +{ + this.setAttribute(constants_CONSTANTS.SHADER.SHADERVAR_VERTEX_POSITION, geom.vertices, 3); + this._numVerts = geom.vertices.length / 3; +}; + +Mesh.prototype.setAttributePointer = function (attrName, name, stride, offset) +{ + for (let i = 0; i < this._attributes.length; i++) + { + if (this._attributes[i].name == attrName) + { + if (!this._attributes[i].pointer) this._attributes[i].pointer = []; + + this._attributes[i].pointer.push( + { + "loc": -1, + "name": name, + "stride": stride, + "offset": offset, + "instanced": attrName == constants_CONSTANTS.SHADER.SHADERVAR_INSTANCE_MMATRIX, + } + ); + } + } +}; + +Mesh.prototype.getAttribute = function (name) +{ + for (let i = 0; i < this._attributes.length; i++) if (this._attributes[i].name == name) return this._attributes[i]; +}; + +Mesh.prototype.setAttributeRange = function (attr, array, start, end) +{ + if (!attr) return; + if (!start && !end) return; + + if (!attr.name) + { + this._log.stack("no attrname?!"); + } + + this._cgl.gl.bindBuffer(this._cgl.gl.ARRAY_BUFFER, attr.buffer); + this._cgl.profileData.profileMeshAttributes += (end - start) || 0; + + this._cgl.profileData.profileSingleMeshAttribute[this._name] = this._cgl.profileData.profileSingleMeshAttribute[this._name] || 0; + this._cgl.profileData.profileSingleMeshAttribute[this._name] += (end - start) || 0; + + if (attr.numItems < array.length / attr.itemSize) + { + this._resizeAttr(array, attr); + } + + if (end >= array.length - 1) + { + this._log.log(this._cgl.canvas.id + " " + attr.name + " buffersubdata out of bounds ?", array.length, end, start, attr); + } + + if (this._cgl.glVersion == 1) this._cgl.gl.bufferSubData(this._cgl.gl.ARRAY_BUFFER, 0, array); // probably slow/ maybe create and array with only changed size ?? + else this._cgl.gl.bufferSubData(this._cgl.gl.ARRAY_BUFFER, start * 4, array, start, (end - start)); +}; + +Mesh.prototype._resizeAttr = function (array, attr) +{ + if (attr.buffer) + this._cgl.gl.deleteBuffer(attr.buffer); + + attr.buffer = this._cgl.gl.createBuffer(); + this._cgl.gl.bindBuffer(this._cgl.gl.ARRAY_BUFFER, attr.buffer); + this._bufferArray(array, attr); + attr.numItems = array.length / attr.itemSize;// numItems; +}; + + +Mesh.prototype._bufferArray = function (array, attr) +{ + let floatArray = attr.floatArray || null; + if (!array) return; + + + if (this._cgl.debugOneFrame) + { + console.log("_bufferArray", array.length, attr.name); // eslint-disable-line + } + + if (!(array instanceof Float32Array)) + { + if (attr && floatArray && floatArray.length == array.length) + { + floatArray.set(array); + // floatArray = floatArray; + } + else + { + floatArray = new Float32Array(array); + + if (this._cgl.debugOneFrame) + { + console.log("_bufferArray create new float32array", array.length, attr.name); // eslint-disable-line + } + + if (array.length > 10000) + { + this._cgl.profileData.profileNonTypedAttrib++; + this._cgl.profileData.profileNonTypedAttribNames = "(" + this._name + ":" + attr.name + ")"; + } + } + } + else floatArray = array; + + attr.arrayLength = floatArray.length; + attr.floatArray = null;// floatArray; + + this._cgl.gl.bufferData(this._cgl.gl.ARRAY_BUFFER, floatArray, this._cgl.gl.DYNAMIC_DRAW); +}; + +/** + * @function setAttribute + * @description update attribute + * @memberof Mesh + * @instance + * @param {String} attribute name + * @param {Array} data + * @param {Number} itemSize + * @param {Object} options + */ +Mesh.prototype.addAttribute = Mesh.prototype.updateAttribute = Mesh.prototype.setAttribute = function (name, array, itemSize, options) +{ + if (!array) + { + this._log.error("mesh addAttribute - no array given! " + name); + throw new Error(); + } + let cb = null; + let instanced = false; + let i = 0; + const numItems = array.length / itemSize; + + this._cgl.profileData.profileMeshAttributes += numItems || 0; + + if (typeof options == "function") + { + cb = options; + } + + if (typeof options == "object") + { + if (options.cb) cb = options.cb; + if (options.instanced) instanced = options.instanced; + } + + if (name == constants_CONSTANTS.SHADER.SHADERVAR_INSTANCE_MMATRIX) instanced = true; + + + for (i = 0; i < this._attributes.length; i++) + { + const attr = this._attributes[i]; + if (attr.name == name) + { + if (attr.numItems === numItems) + { + } + else + { + // this._log.log("wrong buffer size", this._geom.name, attr.name, attr.numItems, numItems); + this._resizeAttr(array, attr); + } + + this._cgl.gl.bindBuffer(this._cgl.gl.ARRAY_BUFFER, attr.buffer); + this._bufferArray(array, attr); + + return attr; + } + } + + // create new buffer... + + const buffer = this._cgl.gl.createBuffer(); + + this._cgl.gl.bindBuffer(this._cgl.gl.ARRAY_BUFFER, buffer); + // this._cgl.gl.bufferData(this._cgl.gl.ARRAY_BUFFER, floatArray, this._cgl.gl.DYNAMIC_DRAW); + + let type = this._cgl.gl.FLOAT; + if (options && options.type) type = options.type; + const attr = { + "buffer": buffer, + "name": name, + "cb": cb, + "itemSize": itemSize, + "numItems": numItems, + "startItem": 0, + "instanced": instanced, + "type": type + }; + + this._bufferArray(array, attr); + + if (name == constants_CONSTANTS.SHADER.SHADERVAR_VERTEX_POSITION) this._bufVertexAttrib = attr; + this._attributes.push(attr); + this._attribLocs = {}; + + return attr; +}; + +Mesh.prototype.getAttributes = function () +{ + return this._attributes; +}; + +/** + * @function updateTexCoords + * @description update texture coordinates only from a geometry + * @memberof Mesh + * @instance + * @param {Geometry} geometry + */ +Mesh.prototype.updateTexCoords = function (geom) +{ + if (geom.texCoords && geom.texCoords.length > 0) + { + this.setAttribute(constants_CONSTANTS.SHADER.SHADERVAR_VERTEX_TEXCOORD, geom.texCoords, 2); + } + else + { + const tcBuff = new Float32Array(Math.round((geom.vertices.length / 3) * 2)); + this.setAttribute(constants_CONSTANTS.SHADER.SHADERVAR_VERTEX_TEXCOORD, tcBuff, 2); + } +}; + + +/** + * @function updateNormals + * @description update normals only from a geometry + * @memberof Mesh + * @instance + * @param {Geometry} geometry + */ +Mesh.prototype.updateNormals = function (geom) +{ + if (geom.vertexNormals && geom.vertexNormals.length > 0) + { + this.setAttribute(constants_CONSTANTS.SHADER.SHADERVAR_VERTEX_NORMAL, geom.vertexNormals, 3); + } + else + { + const tcBuff = new Float32Array(Math.round((geom.vertices.length))); + this.setAttribute(constants_CONSTANTS.SHADER.SHADERVAR_VERTEX_NORMAL, tcBuff, 3); + } +}; + + +Mesh.prototype._setVertexNumbers = function (arr) +{ + if (!this._verticesNumbers || this._verticesNumbers.length != this._numVerts || arr) + { + if (arr) this._verticesNumbers = arr; + else + { + this._verticesNumbers = new Float32Array(this._numVerts); + for (let i = 0; i < this._numVerts; i++) this._verticesNumbers[i] = i; + } + + this.setAttribute(constants_CONSTANTS.SHADER.SHADERVAR_VERTEX_NUMBER, this._verticesNumbers, 1, (attr, geom, shader) => + { + if (!shader.uniformNumVertices) shader.uniformNumVertices = new Uniform(shader, "f", "numVertices", this._numVerts); + shader.uniformNumVertices.setValue(this._numVerts); + + // console.log("this._numVerts", this._numVerts, attr, shader.uniformNumVertices); + }); + } +}; + +/** + * @function setVertexIndices + * @description update vertex indices / faces + * @memberof Mesh + * @instance + * @param {array} vertIndices + */ +Mesh.prototype.setVertexIndices = function (vertIndices) +{ + if (!this._bufVerticesIndizes) + { + this._log.warn("no bufVerticesIndizes: " + this._name); + return; + } + if (vertIndices.length > 0) + { + if (vertIndices instanceof Float32Array) this._log.warn("vertIndices float32Array: " + this._name); + + for (let i = 0; i < vertIndices.length; i++) + { + if (vertIndices[i] >= this._numVerts) + { + this._log.warn("invalid index in " + this._name, i, vertIndices[i]); + return; + } + } + + this._cgl.gl.bindBuffer(this._cgl.gl.ELEMENT_ARRAY_BUFFER, this._bufVerticesIndizes); + + // todo cache this ? + // if(!this.vertIndicesTyped || this.vertIndicesTyped.length!=this._geom.verticesIndices.length) + + if (vertIndices.length > 65535) + { + this.vertIndicesTyped = new Uint32Array(vertIndices); + this._indexType = this._cgl.gl.UNSIGNED_INT; + } + else + if (vertIndices instanceof Uint32Array) + { + this.vertIndicesTyped = vertIndices; + this._indexType = this._cgl.gl.UNSIGNED_INT; + } + else + if (!(vertIndices instanceof Uint16Array)) + { + this.vertIndicesTyped = new Uint16Array(vertIndices); + this._indexType = this._cgl.gl.UNSIGNED_SHORT; + } + else this.vertIndicesTyped = vertIndices; + + this._cgl.gl.bufferData(this._cgl.gl.ELEMENT_ARRAY_BUFFER, this.vertIndicesTyped, this._cgl.gl.DYNAMIC_DRAW); + this._bufVerticesIndizes.itemSize = 1; + this._bufVerticesIndizes.numItems = vertIndices.length; + } + else this._bufVerticesIndizes.numItems = 0; +}; + +/** + * @function setGeom + * @memberof Mesh + * @instance + * @description set geometry for mesh + * @param {Geometry} geometry + */ +Mesh.prototype.setGeom = function (geom, removeRef) +{ + this._geom = geom; + if (geom.glPrimitive != null) this._glPrimitive = geom.glPrimitive; + if (this._geom && this._geom.name) this._name = "mesh " + this._geom.name; + + MESH.lastMesh = null; + this._cgl.profileData.profileMeshSetGeom++; + + this._disposeAttributes(); + + this.updateVertices(this._geom); + this.setVertexIndices(this._geom.verticesIndices); + + if (this.addVertexNumbers) this._setVertexNumbers(); + + const geomAttribs = this._geom.getAttributes(); + + const attribAssoc = { + "texCoords": constants_CONSTANTS.SHADER.SHADERVAR_VERTEX_TEXCOORD, + "vertexNormals": constants_CONSTANTS.SHADER.SHADERVAR_VERTEX_NORMAL, + "vertexColors": constants_CONSTANTS.SHADER.SHADERVAR_VERTEX_COLOR, + "tangents": "attrTangent", + "biTangents": "attrBiTangent", + }; + + for (const index in geomAttribs) + if (geomAttribs[index].data && geomAttribs[index].data.length) + this.setAttribute(attribAssoc[index] || index, geomAttribs[index].data, geomAttribs[index].itemSize); + + + if (removeRef) + { + this._geom = null; + } +}; + +Mesh.prototype._preBind = function (shader) +{ + for (let i = 0; i < this._attributes.length; i++) + if (this._attributes[i].cb) + this._attributes[i].cb(this._attributes[i], this._geom, shader); +}; + +Mesh.prototype._checkAttrLengths = function () +{ + if (this.memFreed) return; + // check length + for (let i = 0; i < this._attributes.length; i++) + { + if (this._attributes[i].arrayLength / this._attributes[i].itemSize < this._attributes[0].arrayLength / this._attributes[0].itemSize) + { + let name = "unknown"; + if (this._geom)name = this._geom.name; + // this._log.warn( + // name + ": " + this._attributes[i].name + + // " wrong attr length. is:", this._attributes[i].arrayLength / this._attributes[i].itemSize, + // " should be:", this._attributes[0].arrayLength / this._attributes[0].itemSize, + // ); + } + } +}; + +Mesh.prototype._bind = function (shader) +{ + if (!shader.isValid()) return; + + let attrLocs = []; + if (this._attribLocs[shader.id]) attrLocs = this._attribLocs[shader.id]; + else this._attribLocs[shader.id] = attrLocs; + + this._lastShader = shader; + if (shader.lastCompile > this._lastAttrUpdate || attrLocs.length != this._attributes.length) + { + this._lastAttrUpdate = shader.lastCompile; + for (let i = 0; i < this._attributes.length; i++) attrLocs[i] = -1; + } + + for (let i = 0; i < this._attributes.length; i++) + { + const attribute = this._attributes[i]; + if (attrLocs[i] == -1) + { + if (attribute._attrLocationLastShaderTime != shader.lastCompile) + { + attribute._attrLocationLastShaderTime = shader.lastCompile; + attrLocs[i] = this._cgl.glGetAttribLocation(shader.getProgram(), attribute.name); + // this._log.log('attribloc',attribute.name,attrLocs[i]); + this._cgl.profileData.profileAttrLoc++; + } + } + + if (attrLocs[i] != -1) + { + this._cgl.gl.enableVertexAttribArray(attrLocs[i]); + this._cgl.gl.bindBuffer(this._cgl.gl.ARRAY_BUFFER, attribute.buffer); + + if (attribute.instanced) + { + // todo: easier way to fill mat4 attribs... + if (attribute.itemSize <= 4) + { + if (!attribute.itemSize || attribute.itemSize == 0) this._log.warn("instanced attrib itemsize error", this._geom.name, attribute); + + this._cgl.gl.vertexAttribPointer(attrLocs[i], attribute.itemSize, attribute.type, false, attribute.itemSize * 4, 0); + this._cgl.gl.vertexAttribDivisor(attrLocs[i], 1); + } + else if (attribute.itemSize == 16) + { + const stride = 16 * 4; + + this._cgl.gl.vertexAttribPointer(attrLocs[i], 4, attribute.type, false, stride, 0); + this._cgl.gl.enableVertexAttribArray(attrLocs[i] + 1); + this._cgl.gl.vertexAttribPointer(attrLocs[i] + 1, 4, attribute.type, false, stride, 4 * 4 * 1); + this._cgl.gl.enableVertexAttribArray(attrLocs[i] + 2); + this._cgl.gl.vertexAttribPointer(attrLocs[i] + 2, 4, attribute.type, false, stride, 4 * 4 * 2); + this._cgl.gl.enableVertexAttribArray(attrLocs[i] + 3); + this._cgl.gl.vertexAttribPointer(attrLocs[i] + 3, 4, attribute.type, false, stride, 4 * 4 * 3); + + this._cgl.gl.vertexAttribDivisor(attrLocs[i], 1); + this._cgl.gl.vertexAttribDivisor(attrLocs[i] + 1, 1); + this._cgl.gl.vertexAttribDivisor(attrLocs[i] + 2, 1); + this._cgl.gl.vertexAttribDivisor(attrLocs[i] + 3, 1); + } + else + { + this._log.warn("unknown instance attrib size", attribute.name); + } + } + else + { + if (!attribute.itemSize || attribute.itemSize == 0) this._log.warn("attrib itemsize error", this._name, attribute); + this._cgl.gl.vertexAttribPointer(attrLocs[i], attribute.itemSize, attribute.type, false, attribute.itemSize * 4, 0); + + if (attribute.pointer) + { + for (let ip = 0; ip < attribute.pointer.length; ip++) + { + const pointer = attribute.pointer[ip]; + + if (pointer.loc == -1) + pointer.loc = this._cgl.glGetAttribLocation(shader.getProgram(), pointer.name); + + this._cgl.profileData.profileAttrLoc++; + + this._cgl.gl.enableVertexAttribArray(pointer.loc); + this._cgl.gl.vertexAttribPointer(pointer.loc, attribute.itemSize, attribute.type, false, pointer.stride, pointer.offset); + } + } + this.bindFeedback(attribute); + } + } + } + + if (this._bufVerticesIndizes && this._bufVerticesIndizes.numItems !== 0) this._cgl.gl.bindBuffer(this._cgl.gl.ELEMENT_ARRAY_BUFFER, this._bufVerticesIndizes); +}; + +Mesh.prototype.unBind = function () +{ + const shader = this._lastShader; + this._lastShader = null; + if (!shader) return; + + let attrLocs = []; + if (this._attribLocs[shader.id]) attrLocs = this._attribLocs[shader.id]; + else this._attribLocs[shader.id] = attrLocs; + + MESH.lastMesh = null; + + for (let i = 0; i < this._attributes.length; i++) + { + if (this._attributes[i].instanced) + { + // todo: easier way to fill mat4 attribs... + if (this._attributes[i].itemSize <= 4) + { + if (attrLocs[i] != -1) this._cgl.gl.vertexAttribDivisor(attrLocs[i], 0); + if (attrLocs[i] >= 0) this._cgl.gl.disableVertexAttribArray(attrLocs[i]); + } + else + { + this._cgl.gl.vertexAttribDivisor(attrLocs[i], 0); + this._cgl.gl.vertexAttribDivisor(attrLocs[i] + 1, 0); + this._cgl.gl.vertexAttribDivisor(attrLocs[i] + 2, 0); + this._cgl.gl.vertexAttribDivisor(attrLocs[i] + 3, 0); + this._cgl.gl.disableVertexAttribArray(attrLocs[i] + 1); + this._cgl.gl.disableVertexAttribArray(attrLocs[i] + 2); + this._cgl.gl.disableVertexAttribArray(attrLocs[i] + 3); + } + } + + if (attrLocs[i] != -1) this._cgl.gl.disableVertexAttribArray(attrLocs[i]); + } +}; + +Mesh.prototype.meshChanged = function () +{ + return this._cgl.lastMesh && this._cgl.lastMesh != this; +}; + +Mesh.prototype.printDebug = function (shader) +{ + console.log("--attributes"); + for (let i = 0; i < this._attributes.length; i++) + { + console.log("attribute " + i + " " + this._attributes[i].name); + } +}; + +Mesh.prototype.setNumVertices = function (num) +{ + this._bufVertexAttrib.numItems = num; +}; + +Mesh.prototype.getNumVertices = function () +{ + return this._bufVertexAttrib.numItems; +}; + + +/** + * @function render + * @memberof Mesh + * @instance + * @description draw mesh to screen + * @param {Shader} shader + */ +Mesh.prototype.render = function (shader) +{ + // TODO: enable/disablevertex only if the mesh has changed... think drawing 10000x the same mesh + + if (!shader || !shader.isValid() || this._cgl.aborted) return; + + this._checkAttrLengths(); + + if (this._geom) + { + if (this._preWireframeGeom && !shader.wireframe && !this._geom.isIndexed()) + { + this.setGeom(this._preWireframeGeom); + this._preWireframeGeom = null; + // console.log("remove prewireframe geom"); + } + + if (shader.wireframe) + { + let changed = false; + + if (this._geom.isIndexed()) + { + if (!this._preWireframeGeom) + { + this._preWireframeGeom = this._geom; + this._geom = this._geom.copy(); + } + + this._geom.unIndex(); + changed = true; + } + + if (!this._geom.getAttribute("attrBarycentric")) + { + if (!this._preWireframeGeom) + { + this._preWireframeGeom = this._geom; + this._geom = this._geom.copy(); + } + changed = true; + + this._geom.calcBarycentric(); + } + if (changed) this.setGeom(this._geom); + } + // if (shader.wireframe) + // console.log(shader.wireframe, this._geom.isIndexed()); + } + + let needsBind = false; + if (MESH.lastMesh != this) + { + if (MESH.lastMesh) MESH.lastMesh.unBind(); + needsBind = true; + } + + + // var needsBind=false; + // { + // needsBind=true; + // } + if (needsBind) this._preBind(shader); + + if (!shader.bind()) return; + + // if(needsBind) + this._bind(shader); + if (this.addVertexNumbers) this._setVertexNumbers(); + + MESH.lastMesh = this; + + let prim = this._cgl.gl.TRIANGLES; + if (this._glPrimitive !== undefined) prim = this._glPrimitive; + if (shader.glPrimitive !== null) prim = shader.glPrimitive; + + let elementDiv = 1; + let doQuery = this._cgl.profileData.doProfileGlQuery; + let queryStarted = false; + if (doQuery) + { + let id = this._name + " - " + shader.getName() + " #" + shader.id; + if (this._numInstances) id += " instanced " + this._numInstances + "x"; + + let queryProfilerData = this._cgl.profileData.glQueryData[id]; + + if (!queryProfilerData) queryProfilerData = { "id": id, "num": 0 }; + + if (shader.opId)queryProfilerData.shaderOp = shader.opId; + if (this.opId)queryProfilerData.meshOp = this.opId; + + this._cgl.profileData.glQueryData[id] = queryProfilerData; + + if (!this._queryExt && this._queryExt !== false) this._queryExt = this._cgl.enableExtension("EXT_disjoint_timer_query_webgl2") || false; + if (this._queryExt) + { + if (queryProfilerData._drawQuery) + { + const available = this._cgl.gl.getQueryParameter(queryProfilerData._drawQuery, this._cgl.gl.QUERY_RESULT_AVAILABLE); + if (available) + { + const elapsedNanos = this._cgl.gl.getQueryParameter(queryProfilerData._drawQuery, this._cgl.gl.QUERY_RESULT); + const currentTimeGPU = elapsedNanos / 1000000; + + queryProfilerData._times = queryProfilerData._times || 0; + queryProfilerData._times += currentTimeGPU; + queryProfilerData._numcount++; + queryProfilerData.when = performance.now(); + queryProfilerData._drawQuery = null; + queryProfilerData.queryStarted = false; + } + } + + if (!queryProfilerData.queryStarted) + { + queryProfilerData._drawQuery = this._cgl.gl.createQuery(); + this._cgl.gl.beginQuery(this._queryExt.TIME_ELAPSED_EXT, queryProfilerData._drawQuery); + queryStarted = queryProfilerData.queryStarted = true; + } + } + } + + + if (this.hasFeedbacks()) + { + this.drawFeedbacks(shader, prim); + } + else if (!this._bufVerticesIndizes || this._bufVerticesIndizes.numItems === 0) + { + // for (let i = 0; i < this._attributes.length; i++) + // { + // if (this._attributes[i].arrayLength / this._attributes[i].itemSize != this._bufVertexAttrib.floatArray.length / 3) + // { + // this._log.warn("attrib buffer length wrong! ", this._attributes[i].name, this._attributes[i].arrayLength / this._attributes[i].itemSize, this._bufVertexAttrib.floatArray.length / 3, this._attributes[i].itemSize); + // // this._log.log(this); + // // debugger; + // return; + // } + // } + + + if (prim == this._cgl.gl.TRIANGLES)elementDiv = 3; + if (this._numInstances === 0) this._cgl.gl.drawArrays(prim, this._bufVertexAttrib.startItem, this._bufVertexAttrib.numItems - this._bufVertexAttrib.startItem); + else this._cgl.gl.drawArraysInstanced(prim, this._bufVertexAttrib.startItem, this._bufVertexAttrib.numItems, this._numInstances); + } + else + { + if (prim == this._cgl.gl.TRIANGLES)elementDiv = 3; + if (this._numInstances === 0) + { + // console.log("la", this._bufVerticesIndizes.numItems); + + this._cgl.gl.drawElements(prim, this._bufVerticesIndizes.numItems, this._indexType, 0); + } + else + { + this._cgl.gl.drawElementsInstanced(prim, this._bufVerticesIndizes.numItems, this._indexType, 0, this._numInstances); + } + } + + if (this._cgl.debugOneFrame && this._cgl.gl.getError() != this._cgl.gl.NO_ERROR) + { + this._log.error("mesh draw gl error"); + this._log.error("mesh", this); + this._log.error("shader", shader); + + const attribNames = []; + for (let i = 0; i < this._cgl.gl.getProgramParameter(shader.getProgram(), this._cgl.gl.ACTIVE_ATTRIBUTES); i++) + { + const name = this._cgl.gl.getActiveAttrib(shader.getProgram(), i).name; + this._log.error("attrib ", name); + } + } + + this._cgl.profileData.profileMeshNumElements += (this._bufVertexAttrib.numItems / elementDiv) * (this._numInstances || 1); + this._cgl.profileData.profileMeshDraw++; + + if (doQuery && queryStarted) + { + this._cgl.gl.endQuery(this._queryExt.TIME_ELAPSED_EXT); + } + + this._cgl.printError("mesh render " + this._name); + + this.unBind(); +}; + +Mesh.prototype.setNumInstances = function (n) +{ + n = Math.max(0, n); + if (this._numInstances != n) + { + this._numInstances = n; + const indexArr = new Float32Array(n); + for (let i = 0; i < n; i++) indexArr[i] = i; + this.setAttribute(constants_CONSTANTS.SHADER.SHADERVAR_INSTANCE_INDEX, indexArr, 1, { "instanced": true }); + } +}; + +Mesh.prototype._disposeAttributes = function () +{ + if (!this._attributes) return; + + for (let i = 0; i < this._attributes.length; i++) + { + if (this._attributes[i].buffer) + { + this._cgl.gl.deleteBuffer(this._attributes[i].buffer); + this._attributes[i].buffer = null; + } + } + this._attributes.length = 0; +}; + +Mesh.prototype.dispose = function () +{ + if (this._bufVertexAttrib && this._bufVertexAttrib.buffer) this._cgl.gl.deleteBuffer(this._bufVertexAttrib.buffer); + if (this._bufVerticesIndizes) this._cgl.gl.deleteBuffer(this._bufVerticesIndizes); + this._bufVerticesIndizes = null; + + this._disposeAttributes(); +}; + +extendMeshWithFeedback(Mesh); + + + +;// CONCATENATED MODULE: ./src/core/cgl/cgl_simplerect.js + + + + +const MESHES = {}; + +MESHES.getSimpleRect = function (cgl, name) +{ + const geom = new Geometry(name); + + geom.vertices = [1.0, 1.0, 0.0, -1.0, 1.0, 0.0, 1.0, -1.0, 0.0, -1.0, -1.0, 0.0]; + geom.texCoords = [1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0]; + geom.verticesIndices = [0, 1, 2, 2, 1, 3]; + geom.vertexNormals = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]; + + return new Mesh(cgl, geom); +}; + + +MESHES.getSimpleCube = function (cgl, name) +{ + const geom = new Geometry(name); + geom.vertices = [-1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1]; + geom.setTexCoords([0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0,]); + geom.verticesIndices = [0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23]; + geom.vertexNormals = new Float32Array([0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0]); + geom.tangents = new Float32Array([0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1]); + geom.biTangents = new Float32Array([-1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1]); + + return new Mesh(cgl, geom); +}; + + + + +;// CONCATENATED MODULE: ./src/core/cgl/cgl_textureeffect.js + + + + +const TextureEffect = function (cgl, options) +{ + this._cgl = cgl; + this._log = new Logger("cgl_TextureEffect"); + + if (!cgl.TextureEffectMesh) this.createMesh(); + + this._textureSource = null; + this._options = options; + this.name = options.name || "unknown"; + + // TODO: do we still need the options ? + // var opts=options || + // { + // isFloatingPointTexture:false, + // filter:CGL.Texture.FILTER_LINEAR + // }; + // if(options && options.fp)opts.isFloatingPointTexture=true; + + this.imgCompVer = 0; + this.aspectRatio = 1; + this._textureTarget = null; // new CGL.Texture(this._cgl,opts); + this._frameBuf = this._cgl.gl.createFramebuffer(); + this._frameBuf2 = this._cgl.gl.createFramebuffer(); + this._renderbuffer = this._cgl.gl.createRenderbuffer(); + this._renderbuffer2 = this._cgl.gl.createRenderbuffer(); + this.switched = false; + this.depth = false; +}; + +TextureEffect.prototype.dispose = function () +{ + if (this._renderbuffer) this._cgl.gl.deleteRenderbuffer(this._renderbuffer); + if (this._frameBuf) this._cgl.gl.deleteFramebuffer(this._frameBuf); + if (this._renderbuffer2) this._cgl.gl.deleteRenderbuffer(this._renderbuffer2); + if (this._frameBuf2) this._cgl.gl.deleteFramebuffer(this._frameBuf2); +}; + +TextureEffect.prototype.getWidth = function () +{ + return this._textureSource.width; +}; + +TextureEffect.prototype.getHeight = function () +{ + return this._textureSource.height; +}; + +TextureEffect.prototype.setSourceTexture = function (tex) +{ + if (tex === null) + { + this._textureSource = new Texture(this._cgl); + this._textureSource.setSize(16, 16); + } + else + { + this._textureSource = tex; + } + + if (!this._textureSource.compareSettings(this._textureTarget)) + { + if (this._textureTarget) this._textureTarget.delete(); + + this._textureTarget = this._textureSource.clone(); + + this._cgl.profileData.profileEffectBuffercreate++; + + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, this._frameBuf); + + this._cgl.gl.bindRenderbuffer(this._cgl.gl.RENDERBUFFER, this._renderbuffer); + + // if(tex.textureType==CGL.Texture.TYPE_FLOAT) this._cgl.gl.renderbufferStorage(this._cgl.gl.RENDERBUFFER,this._cgl.gl.RGBA32F, this._textureSource.width,this._textureSource.height); + // else this._cgl.gl.renderbufferStorage(this._cgl.gl.RENDERBUFFER,this._cgl.gl.RGBA8, this._textureSource.width,this._textureSource.height); + + if (this.depth) this._cgl.gl.renderbufferStorage(this._cgl.gl.RENDERBUFFER, this._cgl.gl.DEPTH_COMPONENT16, this._textureSource.width, this._textureSource.height); + this._cgl.gl.framebufferTexture2D(this._cgl.gl.FRAMEBUFFER, this._cgl.gl.COLOR_ATTACHMENT0, this._cgl.gl.TEXTURE_2D, this._textureTarget.tex, 0); + if (this.depth) this._cgl.gl.framebufferRenderbuffer(this._cgl.gl.FRAMEBUFFER, this._cgl.gl.DEPTH_ATTACHMENT, this._cgl.gl.RENDERBUFFER, this._renderbuffer); + + // this._cgl.gl.framebufferTexture2D(this._cgl.gl.FRAMEBUFFER, this._cgl.gl.COLOR_ATTACHMENT0, this._cgl.gl.TEXTURE_2D, this._textureTarget.tex, 0); + + this._cgl.gl.bindTexture(this._cgl.gl.TEXTURE_2D, null); + this._cgl.gl.bindRenderbuffer(this._cgl.gl.RENDERBUFFER, null); + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, null); + + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, this._frameBuf2); + + this._cgl.gl.bindRenderbuffer(this._cgl.gl.RENDERBUFFER, this._renderbuffer2); + + // if(tex.textureType==CGL.Texture.TYPE_FLOAT) this._cgl.gl.renderbufferStorage(this._cgl.gl.RENDERBUFFER,this._cgl.gl.RGBA32F, this._textureSource.width,this._textureSource.height); + // else this._cgl.gl.renderbufferStorage(this._cgl.gl.RENDERBUFFER,this._cgl.gl.RGBA8, this._textureSource.width,this._textureSource.height); + + if (this.depth) this._cgl.gl.renderbufferStorage(this._cgl.gl.RENDERBUFFER, this._cgl.gl.DEPTH_COMPONENT16, this._textureSource.width, this._textureSource.height); + this._cgl.gl.framebufferTexture2D(this._cgl.gl.FRAMEBUFFER, this._cgl.gl.COLOR_ATTACHMENT0, this._cgl.gl.TEXTURE_2D, this._textureSource.tex, 0); + + if (this.depth) this._cgl.gl.framebufferRenderbuffer(this._cgl.gl.FRAMEBUFFER, this._cgl.gl.DEPTH_ATTACHMENT, this._cgl.gl.RENDERBUFFER, this._renderbuffer2); + + // this._cgl.gl.framebufferTexture2D(this._cgl.gl.FRAMEBUFFER, this._cgl.gl.COLOR_ATTACHMENT0, this._cgl.gl.TEXTURE_2D, this._textureSource.tex, 0); + + this._cgl.gl.bindTexture(this._cgl.gl.TEXTURE_2D, null); + this._cgl.gl.bindRenderbuffer(this._cgl.gl.RENDERBUFFER, null); + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, null); + } + + this.aspectRatio = this._textureSource.width / this._textureSource.height; +}; +TextureEffect.prototype.continueEffect = function () +{ + this._cgl.pushDepthTest(false); + this._cgl.pushModelMatrix(); + this._cgl.pushPMatrix(); + // todo why two pushs? + + + + this._cgl.pushViewPort(0, 0, this.getCurrentTargetTexture().width, this.getCurrentTargetTexture().height); + + + + mat4.perspective(this._cgl.pMatrix, 45, this.getCurrentTargetTexture().width / this.getCurrentTargetTexture().height, 0.1, 1100.0); // todo: why? + + this._cgl.pushPMatrix(); + mat4.identity(this._cgl.pMatrix); + + this._cgl.pushViewMatrix(); + mat4.identity(this._cgl.vMatrix); + + this._cgl.pushModelMatrix(); + mat4.identity(this._cgl.mMatrix); +}; + + +TextureEffect.prototype.startEffect = function (bgTex) +{ + if (!this._textureTarget) + { + this._log.warn("effect has no target"); + return; + } + + this.switched = false; + + this.continueEffect(); + + if (bgTex) + { + this._bgTex = bgTex; + } + this._countEffects = 0; +}; + +TextureEffect.prototype.endEffect = function () +{ + this._cgl.popDepthTest(); + this._cgl.popModelMatrix(); + + this._cgl.popPMatrix(); + this._cgl.popModelMatrix(); + this._cgl.popViewMatrix(); + + this._cgl.popPMatrix(); + this._cgl.popViewPort(); +}; + +TextureEffect.prototype.bind = function () +{ + if (this._textureSource === null) + { + this._log.warn("no base texture set!"); + return; + } + + if (!this.switched) + { + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, this._frameBuf); + this._cgl.pushGlFrameBuffer(this._frameBuf); + } + else + { + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, this._frameBuf2); + this._cgl.pushGlFrameBuffer(this._frameBuf2); + } +}; + +TextureEffect.prototype.finish = function () +{ + if (this._textureSource === null) + { + this._log.warn("no base texture set!"); + return; + } + + this._cgl.TextureEffectMesh.render(this._cgl.getShader()); + + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, this._cgl.popGlFrameBuffer()); + + this._cgl.profileData.profileTextureEffect++; + + if (this._textureTarget.filter == Texture.FILTER_MIPMAP) + { + if (!this.switched) + { + this._cgl.gl.bindTexture(this._cgl.gl.TEXTURE_2D, this._textureTarget.tex); + this._textureTarget.updateMipMap(); + } + else + { + this._cgl.gl.bindTexture(this._cgl.gl.TEXTURE_2D, this._textureSource.tex); + this._textureSource.updateMipMap(); + } + + this._cgl.gl.bindTexture(this._cgl.gl.TEXTURE_2D, null); + } + + this.switched = !this.switched; + this._countEffects++; +}; + +TextureEffect.prototype.getCurrentTargetTexture = function () +{ + if (this.switched) return this._textureSource; + return this._textureTarget; +}; + +TextureEffect.prototype.getCurrentSourceTexture = function () +{ + if (this._countEffects == 0 && this._bgTex) return this._bgTex; + + if (this.switched) return this._textureTarget; + return this._textureSource; +}; + +TextureEffect.prototype.delete = function () +{ + if (this._textureTarget) this._textureTarget.delete(); + if (this._textureSource) this._textureSource.delete(); + this._cgl.gl.deleteRenderbuffer(this._renderbuffer); + this._cgl.gl.deleteFramebuffer(this._frameBuf); +}; + +TextureEffect.prototype.createMesh = function () +{ + this._cgl.TextureEffectMesh = MESHES.getSimpleRect(this._cgl, "texEffectRect"); +}; + +// --------------------------------------------------------------------------------- + +TextureEffect.checkOpNotInTextureEffect = function (op) +{ + if (!op.patch.cgl) return true; + if (op.uiAttribs.error && !op.patch.cgl.currentTextureEffect) + { + op.setUiError("textureeffect", null); + return true; + } + if (!op.patch.cgl.currentTextureEffect) return true; + + if (op.patch.cgl.currentTextureEffect && !op.uiAttribs.error) + { + op.setUiError("textureeffect", "This op can not be a child of a ImageCompose/texture effect! imagecompose should only have textureeffect childs.", 0); + return false; + } + + if (op.patch.cgl.currentTextureEffect) return false; + return true; +}; + +TextureEffect.checkOpInEffect = function (op, minver) +{ + minver = minver || 0; + + if (op.patch.cgl.currentTextureEffect) + { + if (op.uiAttribs.uierrors && op.patch.cgl.currentTextureEffect.imgCompVer >= minver) + { + op.setUiError("texeffect", null); + return true; + } + + if (minver && op.patch.cgl.currentTextureEffect.imgCompVer < minver) + { + op.setUiError("texeffect", "This op must be a child of an ImageCompose op with version >=" + minver + " <span class=\"button-small\" onclick=\"gui.patchView.downGradeOp('" + op.id + "','" + op.name + "')\">Downgrade</span> to previous version", 1); + } + } + + if (op.patch.cgl.currentTextureEffect) return true; + + if (!op.patch.cgl.currentTextureEffect && (!op.uiAttribs.uierrors || op.uiAttribs.uierrors.length == 0)) + { + op.setUiError("texeffect", "This op must be a child of an ImageCompose op! More infos <a href=\"https://docs.cables.gl/image_composition/image_composition.html\" target=\"_blank\">here</a>. ", 1); + return false; + } + + if (!op.patch.cgl.currentTextureEffect) return false; + return true; +}; + +TextureEffect.getBlendCode = function (ver) +{ + let src = "".endl() + + "vec3 _blend(vec3 base,vec3 blend)".endl() + + "{".endl() + + " vec3 colNew=blend;".endl() + + " #ifdef BM_MULTIPLY".endl() + + " colNew=base*blend;".endl() + + " #endif".endl() + + " #ifdef BM_MULTIPLY_INV".endl() + + " colNew=base* vec3(1.0)-blend;".endl() + + " #endif".endl() + + " #ifdef BM_AVERAGE".endl() + + " colNew=((base + blend) / 2.0);".endl() + + " #endif".endl() + + " #ifdef BM_ADD".endl() + + " colNew=min(base + blend, vec3(1.0));".endl() + + " #endif".endl() + + " #ifdef BM_SUBTRACT_ONE".endl() + + " colNew=max(base + blend - vec3(1.0), vec3(0.0));".endl() + + " #endif".endl() + + + " #ifdef BM_SUBTRACT".endl() + + " colNew=base - blend;".endl() + + " #endif".endl() + + + " #ifdef BM_DIFFERENCE".endl() + + " colNew=abs(base - blend);".endl() + + " #endif".endl() + + " #ifdef BM_NEGATION".endl() + + " colNew=(vec3(1.0) - abs(vec3(1.0) - base - blend));".endl() + + " #endif".endl() + + " #ifdef BM_EXCLUSION".endl() + + " colNew=(base + blend - 2.0 * base * blend);".endl() + + " #endif".endl() + + " #ifdef BM_LIGHTEN".endl() + + " colNew=max(blend, base);".endl() + + " #endif".endl() + + " #ifdef BM_DARKEN".endl() + + " colNew=min(blend, base);".endl() + + " #endif".endl() + + " #ifdef BM_OVERLAY".endl() + + " #define BlendOverlayf(base, blend) (base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)))" + // .endl()+' #define BlendOverlay(base, blend) Blend(base, blend, BlendOverlayf)' + // .endl()+' colNew=Blend(base, blend, BlendOverlayf);' + .endl() + + " colNew=vec3(BlendOverlayf(base.r, blend.r),BlendOverlayf(base.g, blend.g),BlendOverlayf(base.b, blend.b));".endl() + + " #endif".endl() + + " #ifdef BM_SCREEN".endl() + + " #define BlendScreenf(base, blend) (1.0 - ((1.0 - base) * (1.0 - blend)))" + // .endl()+' #define BlendScreen(base, blend) Blend(base, blend, BlendScreenf)' + // .endl()+' colNew=Blend(base, blend, BlendScreenf);' + .endl() + + " colNew=vec3(BlendScreenf(base.r, blend.r),BlendScreenf(base.g, blend.g),BlendScreenf(base.b, blend.b));".endl() + + " #endif".endl() + + " #ifdef BM_SOFTLIGHT".endl() + + " #define BlendSoftLightf(base, blend) ((blend < 0.5) ? (2.0 * base * blend + base * base * (1.0 - 2.0 * blend)) : (sqrt(base) * (2.0 * blend - 1.0) + 2.0 * base * (1.0 - blend)))" + // .endl()+' #define BlendSoftLight(base, blend) Blend(base, blend, BlendSoftLightf)' + // .endl()+' colNew=Blend(base, blend, BlendSoftLightf);' + .endl() + + " colNew=vec3(BlendSoftLightf(base.r, blend.r),BlendSoftLightf(base.g, blend.g),BlendSoftLightf(base.b, blend.b));".endl() + + " #endif".endl() + + " #ifdef BM_HARDLIGHT".endl() + + " #define BlendOverlayf(base, blend) (base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)))" + // .endl()+' #define BlendOverlay(base, blend) Blend(base, blend, BlendOverlayf)' + // .endl()+' colNew=Blend(blend, base, BlendOverlayf);' + .endl() + + " colNew=vec3(BlendOverlayf(base.r, blend.r),BlendOverlayf(base.g, blend.g),BlendOverlayf(base.b, blend.b));".endl() + + " #endif".endl() + + " #ifdef BM_COLORDODGE".endl() + + " #define BlendColorDodgef(base, blend) ((blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0))" + // .endl()+' colNew=Blend(base, blend, BlendColorDodgef);' + .endl() + + " colNew=vec3(BlendColorDodgef(base.r, blend.r),BlendColorDodgef(base.g, blend.g),BlendColorDodgef(base.b, blend.b));".endl() + + " #endif".endl() + + " #ifdef BM_COLORBURN".endl() + + " #define BlendColorBurnf(base, blend) ((blend == 0.0) ? blend : max((1.0 - ((1.0 - base) / blend)), 0.0))" + // .endl()+' colNew=Blend(base, blend, BlendColorBurnf);' + .endl() + + " colNew=vec3(BlendColorBurnf(base.r, blend.r),BlendColorBurnf(base.g, blend.g),BlendColorBurnf(base.b, blend.b));".endl() + + " #endif".endl() + + + + + + + + + + + + " return colNew;".endl() + + "}".endl(); + + if (!ver) + src += "vec4 cgl_blend(vec4 oldColor,vec4 newColor,float amount)".endl() + + "{".endl() + + "vec4 col=vec4( _blend(oldColor.rgb,newColor.rgb) ,1.0);".endl() + + "col=vec4( mix( col.rgb, oldColor.rgb ,1.0-oldColor.a*amount),1.0);".endl() + + "return col;".endl() + + "}".endl(); + + if (ver >= 3) + src += "vec4 cgl_blendPixel(vec4 base,vec4 col,float amount)".endl() + + "{".endl() + + + "#ifdef BM_MATH_ADD".endl() + + " return vec4(base.rgb+col.rgb*amount,1.0);".endl() + + "#endif".endl() + + + "#ifdef BM_MATH_SUB".endl() + + " return vec4(base.rgb-col.rgb*amount,1.0);".endl() + + "#endif".endl() + + + "#ifdef BM_MATH_MUL".endl() + + " return vec4(base.rgb*col.rgb*amount,1.0);".endl() + + "#endif".endl() + + + "#ifdef BM_MATH_DIV".endl() + + " return vec4(base.rgb/col.rgb*amount,1.0);".endl() + + "#endif".endl() + + + + "#ifndef BM_MATH".endl() + + "vec3 colNew=_blend(base.rgb,col.rgb);".endl() + + + "float newA=clamp(base.a+(col.a*amount),0.,1.);".endl() + + + "#ifdef BM_ALPHAMASKED".endl() + + "newA=base.a;".endl() + + "#endif".endl() + + + "return vec4(".endl() + + "mix(colNew,base.rgb,1.0-(amount*col.a)),".endl() + + "newA);".endl() + + + "#endif".endl() + + "}".endl(); + + return src; +}; + +TextureEffect.onChangeBlendSelect = function (shader, blendName, maskAlpha = false) +{ + blendName = String(blendName); + shader.toggleDefine("BM_NORMAL", blendName == "normal"); + shader.toggleDefine("BM_MULTIPLY", blendName == "multiply"); + shader.toggleDefine("BM_MULTIPLY_INV", blendName == "multiply invert"); + shader.toggleDefine("BM_AVERAGE", blendName == "average"); + shader.toggleDefine("BM_ADD", blendName == "add"); + shader.toggleDefine("BM_SUBTRACT_ONE", blendName == "subtract one"); + shader.toggleDefine("BM_SUBTRACT", blendName == "subtract"); + shader.toggleDefine("BM_DIFFERENCE", blendName == "difference"); + shader.toggleDefine("BM_NEGATION", blendName == "negation"); + shader.toggleDefine("BM_EXCLUSION", blendName == "exclusion"); + shader.toggleDefine("BM_LIGHTEN", blendName == "lighten"); + shader.toggleDefine("BM_DARKEN", blendName == "darken"); + shader.toggleDefine("BM_OVERLAY", blendName == "overlay"); + shader.toggleDefine("BM_SCREEN", blendName == "screen"); + shader.toggleDefine("BM_SOFTLIGHT", blendName == "softlight"); + shader.toggleDefine("BM_HARDLIGHT", blendName == "hardlight"); + shader.toggleDefine("BM_COLORDODGE", blendName == "color dodge"); + shader.toggleDefine("BM_COLORBURN", blendName == "color burn"); + + shader.toggleDefine("BM_MATH_ADD", blendName == "Math Add"); + shader.toggleDefine("BM_MATH_SUB", blendName == "Math Subtract"); + shader.toggleDefine("BM_MATH_MUL", blendName == "Math Multiply"); + shader.toggleDefine("BM_MATH_DIV", blendName == "Math Divide"); + + shader.toggleDefine("BM_MATH", blendName.indexOf("Math ") == 0); + + + shader.toggleDefine("BM_ALPHAMASKED", maskAlpha); +}; + +TextureEffect.AddBlendSelect = function (op, name, defaultMode) +{ + const p = op.inValueSelect(name || "Blend Mode", [ + "normal", "lighten", "darken", "multiply", "multiply invert", "average", "add", "subtract", "difference", "negation", "exclusion", "overlay", "screen", "color dodge", "color burn", "softlight", "hardlight", "subtract one", + "Math Add", + "Math Subtract", + "Math Multiply", + "Math Divide", + + ], defaultMode || "normal"); + return p; +}; + +TextureEffect.AddBlendAlphaMask = function (op, name, defaultMode) +{ + const p = op.inSwitch(name || "Alpha Mask", ["Off", "On"], defaultMode || "Off"); + return p; +}; + +TextureEffect.setupBlending = function (op, shader, blendPort, amountPort, alphaMaskPort) +{ + const onChange = () => + { + let maskAlpha = false; + if (alphaMaskPort) maskAlpha = alphaMaskPort.get() == "On"; + TextureEffect.onChangeBlendSelect(shader, blendPort.get(), maskAlpha); + + let str = blendPort.get(); + if (str == "normal") str = null; + else if (str == "multiply") str = "mul"; + else if (str == "multiply invert") str = "mulinv"; + else if (str == "lighten") str = "light"; + else if (str == "darken") str = "darken"; + else if (str == "average") str = "avg"; + else if (str == "subtract one") str = "sub one"; + else if (str == "subtract") str = "sub"; + else if (str == "difference") str = "diff"; + else if (str == "negation") str = "neg"; + else if (str == "exclusion") str = "exc"; + else if (str == "overlay") str = "ovl"; + else if (str == "color dodge") str = "dodge"; + else if (str == "color burn") str = "burn"; + else if (str == "softlight") str = "soft"; + else if (str == "hardlight") str = "hard"; + else if (str == "Math Add") str = "+"; + else if (str == "Math Subtract") str = "-"; + else if (str == "Math Multiply") str = "*"; + else if (str == "Math Divide") str = "/"; + + op.setUiAttrib({ "extendTitle": str }); + }; + op.setPortGroup("Blending", [blendPort, amountPort, alphaMaskPort]); + + let maskAlpha = false; + + blendPort.onChange = onChange; + if (alphaMaskPort) + { + alphaMaskPort.onChange = onChange; + maskAlpha = alphaMaskPort.get() == "On"; + } + + TextureEffect.onChangeBlendSelect(shader, blendPort.get(), maskAlpha); +}; + + + +;// CONCATENATED MODULE: ./src/core/cgl/cgl_shader_lib.js + + + + +const ShaderLibMods = { + "CGL.BLENDMODES": function () + { + this.name = "blendmodes"; + this.srcHeadFrag = TextureEffect.getBlendCode(); + }, + "CGL.BLENDMODES3": function () + { + this.name = "blendmodes3"; + this.srcHeadFrag = TextureEffect.getBlendCode(3); + }, + + "CGL.LUMINANCE": function () + { + this.name = "luminance"; + this.srcHeadFrag = "".endl() + + "float cgl_luminance(vec3 c)".endl() + + "{".endl() + + " return dot(vec3(0.2126,0.7152,0.0722),c);".endl() + + "}".endl(); + }, + + + // quite good random numbers, but somehow don't work in ANGLE + "CGL.RANDOM_OLD": function () + { + this.name = "randomNumber"; + this.srcHeadFrag = "".endl() + + "float cgl_random(vec2 co)".endl() + + "{".endl() + + " return fract(sin(dot(co.xy ,vec2(12.9898,4.1414))) * 432758.5453);".endl() + + "}".endl() + + "vec3 cgl_random3(vec2 co)".endl() + + "{".endl() + + " return vec3( cgl_random(co),cgl_random(co+0.5711),cgl_random(co+1.5711));".endl() + + "}"; + }, + + + // low quality generative ranodm numbers + "CGL.RANDOM_LOW": function () + { + this.name = "randomNumber"; + this.srcHeadFrag = "".endl() + + "float cgl_random(vec2 co)".endl() + + "{".endl() + + " return fract(sin(dot(co.xy ,vec2(12.9898,4.1414))) * 358.5453);".endl() + + "}".endl() + + "vec3 cgl_random3(vec2 co)".endl() + + "{".endl() + + " return vec3( cgl_random(co),cgl_random(co+0.5711),cgl_random(co+1.5711));".endl() + + "}"; + }, + + // texture based random numbers + "CGL.RANDOM_TEX": function () + { + this.name = "randomNumbertex"; + this.srcHeadFrag = "".endl() + + "UNI sampler2D CGLRNDTEX;".endl() + + "float cgl_random(vec2 co)".endl() + + "{".endl() + + " return texture(CGLRNDTEX,co*5711.0).r;".endl() + + "}".endl() + + "vec3 cgl_random3(vec2 co)".endl() + + "{".endl() + + " return texture(CGLRNDTEX,co*5711.0).rgb;".endl() + + "}"; + + this.initUniforms = function (shader) + { + return [new Uniform(shader, "t", "CGLRNDTEX", 7)]; + }; + + this.onBind = function (cgl, shader) + { + Texture.getRandomTexture(cgl); + cgl.setTexture(7, Texture.getRandomTexture(cgl).tex); + }; + }, +}; + + + +;// CONCATENATED MODULE: ./src/core/cgl/cgl_utils.js +/** @namespace CGL */ + +/** + * multiply to get radians from degree, e.g. `360 * CGL.DEG2RAD` + * @const {Number} + * @memberof CGL + * @static + */ +const cgl_utils_DEG2RAD = Math.PI / 180.0; + +/** + * to get degrees from radians, e.g. `3.14 * CGL.RAD2DEG` + * @const {number} + * @memberof CGL + */ +const cgl_utils_RAD2DEG = 180.0 / Math.PI; + +const onLoadingAssetsFinished = null; // deprecated / remove later + +/** + * get normalized mouse wheel delta (including browser specific adjustment) + * @function getWheelDelta + * @static + * @memberof CGL + * @param {MouseEvent} event + * @return {Number} normalized delta + */ +const isWindows = window.navigator.userAgent.contains("Windows"); +const getWheelDelta_ = function (event) +{ + let normalized; + if (event.wheelDelta) + { + // chrome + normalized = (event.wheelDelta % 120) - 0 == -0 ? event.wheelDelta / 120 : event.wheelDelta / 30; + normalized *= -1.5; + if (isWindows) normalized *= 2; + } + else + { + // firefox + let d = event.deltaY; + if (event.shiftKey) d = event.deltaX; + const rawAmmount = d || event.detail; + normalized = -(rawAmmount % 3 ? rawAmmount * 10 : rawAmmount / 3); + normalized *= -3; + } + + if (normalized > 20) normalized = 20; + if (normalized < -20) normalized = -20; + + return normalized; +}; + +const getWheelSpeed = getWheelDelta_; +const getWheelDelta = getWheelDelta_; + +// from https://github.com/lodash/lodash/blob/master/escape.js + +const htmlEscapes = { + "&": "&", + "<": "<", + ">": ">", + "\"": """, + "'": "'", +}; + +/** Used to match HTML entities and HTML characters. */ +const reUnescapedHtml = /[&<>"']/g; +const reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + +/* eslint-disable */ +const escapeHTML = function(string) +{ + return string && reHasUnescapedHtml.test(string) ? + string.replace(reUnescapedHtml, function(chr) { return htmlEscapes[chr]; }) + : string || ""; +} +/* eslint-enable */ + +;// CONCATENATED MODULE: ./src/core/cgl/cgl_shader_default_glsl.vert +/* harmony default export */ const cgl_shader_default_glsl = ("{{MODULES_HEAD}}\nIN vec3 vPosition; //!@\nIN vec2 attrTexCoord;\nIN vec3 attrVertNormal;\nIN vec3 attrTangent,attrBiTangent;\n\nIN float attrVertIndex;\n\nOUT vec2 texCoord;\nOUT vec3 norm;\nUNI mat4 projMatrix;\nUNI mat4 viewMatrix;\nUNI mat4 modelMatrix;\n\nvoid main()\n{\n texCoord=attrTexCoord;\n norm=attrVertNormal;\n vec4 pos=vec4(vPosition, 1.0);\n vec3 tangent=attrTangent;\n vec3 bitangent=attrBiTangent;\n mat4 mMatrix=modelMatrix;\n gl_PointSize=10.0;\n\n {{MODULE_VERTEX_POSITION}}\n\n mat4 modelViewMatrix=viewMatrix*mMatrix;\n {{MODULE_VERTEX_MOVELVIEW}}\n\n gl_Position = projMatrix * modelViewMatrix * pos;\n}\n"); +;// CONCATENATED MODULE: ./src/core/cgl/cgl_shader.js + + + + + +// import { CGL } from "./index.js"; + + + +// --------------------------------------------------------------------------- + + +/* + +proposal default shader variable names: + +attrVertex - currently: vPosition +attrVertexIndex - currently: attrVertIndex +attrTexCoord +attrInstMat - currently: instMat +attrVertColor +attrTangent +attrBiTangent + +uProjMatrix - currently: projMatrix +uModelMatrix - currently: modelMatrix +uNormalMatrix - currently: normalMatrix +uCamPosition - currently: camPos + +*/ + + +// --------------------------------------------------------------------------- + +let materialIdCounter = 0; + +/** + * @class + * @external CGL + * @namespace Shader + * @hideconstructor + * @example + * var shader=new CGL.Shader(cgl,'MinimalMaterial'); + * shader.setSource(attachments.shader_vert,attachments.shader_frag); + */ +const Shader = function (_cgl, _name, _op) +{ + if (!_cgl) throw new Error("shader constructed without cgl " + _name); + + this._log = new Logger("cgl_shader"); + this._cgl = _cgl; + + if (!_name) this._log.stack("no shader name given"); + this._name = _name || "unknown"; + + if (_op) this.opId = _op.id; + this.glslVersion = 0; + if (_cgl.glVersion > 1) this.glslVersion = 300; + + this._materialId = ++materialIdCounter; + + this.id = simpleId(); + this._isValid = true; + this._program = null; + this._uniforms = []; + this._drawBuffers = [true]; + this._defines = []; + this._needsRecompile = true; + this._compileReason = "initial"; + + this.ignoreMissingUniforms = false; + this._projMatrixUniform = null; + this._mvMatrixUniform = null; + this._mMatrixUniform = null; + this._vMatrixUniform = null; + this._camPosUniform = null; + this._normalMatrixUniform = null; + this._inverseViewMatrixUniform = null; + + this._attrVertexPos = -1; + this.precision = _cgl.patch.config.glslPrecision || "highp"; + + this._pMatrixState = -1; + this._vMatrixState = -1; + + this._countMissingUniforms = 0; + this._modGroupCount = 0; // not needed anymore... + this._feedBackNames = []; + this._attributes = []; + + this.glPrimitive = null; + this.offScreenPass = false; + this._extensions = []; + this.srcVert = this.getDefaultVertexShader(); + this.srcFrag = this.getDefaultFragmentShader(); + this.lastCompile = 0; + + this._moduleNames = []; + this._modules = []; + this._moduleNumId = 0; + + this._libs = []; + this._structNames = []; + this._structUniformNames = []; + this._textureStackUni = []; + this._textureStackTex = []; + this._textureStackType = []; + this._textureStackTexCgl = []; + + this._tempNormalMatrix = mat4.create(); + this._tempCamPosMatrix = mat4.create(); + this._tempInverseViewMatrix = mat4.create(); + this._tempInverseProjMatrix = mat4.create(); + + this.setModules(["MODULE_VERTEX_POSITION", "MODULE_COLOR", "MODULE_BEGIN_FRAG", "MODULE_VERTEX_MOVELVIEW"]); +}; + +Shader.prototype.isValid = function () +{ + return this._isValid; +}; + +Shader.prototype.getCgl = function () +{ + return this._cgl; +}; + +Shader.prototype.getName = function () +{ + return this._name; +}; + +/** + * enable an extension for the shader + * @function enableExtension + * @memberof Shader + * @instance + * @param name extension name + */ +Shader.prototype.enableExtension = function (name) +{ + this.setWhyCompile("enable extension " + name); + this._needsRecompile = true; + this._extensions.push(name); +}; + +Shader.prototype.getAttrVertexPos = function () +{ + return this._attrVertexPos; +}; + +Shader.prototype.hasTextureUniforms = function () +{ + for (let i = 0; i < this._uniforms.length; i++) + if (this._uniforms[i].getType() == "t") return true; + return false; +}; + +Shader.prototype.setWhyCompile = function (why) +{ + this._compileReason = why; +}; + +/** + * copy all uniform values from another shader + * @function copyUniforms + * @memberof Shader + * @instance + * @param shader uniform values will be copied from this shader + */ +Shader.prototype.copyUniformValues = function (origShader) +{ + // console.log(origShader._uniforms); + for (let i = 0; i < origShader._uniforms.length; i++) + { + if (!this._uniforms[i]) + { + this._log.log("unknown uniform?!"); + continue; + } + + // this._log.log(origShader._uniforms[i].getName()); + // this.getUniform(origShader._uniforms[i].) + // this._uniforms[i].set(origShader._uniforms[i].getValue()); + + + // if (origShader._uniforms[i].getName().contains("pathPoints")) + // console.log("copyUniformValues", origShader._uniforms[i].getName(), origShader._uniforms[i].getValue()); + + this.getUniform(origShader._uniforms[i].getName()).set(origShader._uniforms[i].getValue()); + } + + this.popTextures(); + for (let i = 0; i < origShader._textureStackUni.length; i++) + { + this._textureStackUni[i] = origShader._textureStackUni[i]; + this._textureStackTex[i] = origShader._textureStackTex[i]; + this._textureStackType[i] = origShader._textureStackType[i]; + this._textureStackTexCgl[i] = origShader._textureStackTexCgl[i]; + } + + // this._textureStackUni = []; + // this._textureStackTex = []; + // this._textureStackType = []; + // this._textureStackTexCgl = []; +}; + +/** + * copy current shader + * @function copy + * @memberof Shader + * @instance + * @returns newShader + */ +Shader.prototype.copy = function () +{ + const shader = new Shader(this._cgl, this._name + " copy"); + shader.setSource(this.srcVert, this.srcFrag); + + shader._modules = JSON.parse(JSON.stringify(this._modules)); + shader._defines = JSON.parse(JSON.stringify(this._defines)); + + shader._modGroupCount = this._modGroupCount; + shader._moduleNames = this._moduleNames; + shader.glPrimitive = this.glPrimitive; + shader.offScreenPass = this.offScreenPass; + shader._extensions = this._extensions; + shader.wireframe = this.wireframe; + shader._attributes = this._attributes; + + for (let i = 0; i < this._uniforms.length; i++) + { + const u = this._uniforms[i].copy(shader); + u.resetLoc(); + } + + this.setWhyCompile("copy"); + shader._needsRecompile = true; + return shader; +}; + + +/** + * set shader source code + * @function setSource + * @memberof Shader + * @instance + * @param {String} srcVert + * @param {String} srcFrag + */ +Shader.prototype.setSource = function (srcVert, srcFrag) +{ + this.srcVert = srcVert; + this.srcFrag = srcFrag; + this.setWhyCompile("Source changed"); + this._needsRecompile = true; + this._isValid = true; +}; + +Shader.prototype._addLibs = function (src) +{ + for (const id in ShaderLibMods) + { + if (src.contains(id)) + { + const lib = new ShaderLibMods[id](); + src = src.replace("{{" + id + "}}", lib.srcHeadFrag); + this._libs.push(lib); + if (lib.initUniforms)lib.initUniforms(this); + } + } + + return src; +}; + +Shader.prototype.createStructUniforms = function () +{ + // * create structs + let structStrFrag = ""; + let structStrVert = ""; // TODO: not used yet + + this._structNames = []; + // * reset the arrays holding the value each recompile so we don't skip structs + // * key value mapping so the same struct can be added twice (two times the same modifier) + this._injectedStringsFrag = {}; + this._injectedStringsVert = {}; + + this._structUniformNamesIndicesFrag = []; + this._structUniformNamesIndicesVert = []; + + for (let i = 0; i < this._uniforms.length; i++) + { + // * only add uniforms to struct that are a member of a struct + if (this._uniforms[i].isStructMember()) + { + const injectionString = "{{INJECTION_POINT_STRUCT_" + this._uniforms[i]._structName + "}}"; + + // * check if struct is not already part of shader + if (!this._structNames.includes(this._uniforms[i]._structName)) + { + // * create struct definition with placeholder string to inject + const structDefinition = "struct " + + this._uniforms[i]._structName + " {".endl() + + injectionString + + "};".endl().endl(); + + if (this._uniforms[i].getShaderType() === "both" || this._uniforms[i].getShaderType() === "frag") + structStrFrag = structStrFrag.concat(structDefinition); + + if (this._uniforms[i].getShaderType() === "both" || this._uniforms[i].getShaderType() === "vert") + structStrVert = structStrVert.concat(structDefinition); + + this._structNames.push(this._uniforms[i]._structName); + this._injectedStringsFrag[this._uniforms[i]._structName] = []; + this._injectedStringsVert[this._uniforms[i]._structName] = []; + } + + // * create member & comment + let comment = ""; + if (this._uniforms[i].comment) comment = " // " + this._uniforms[i].comment; + + let stringToInsert = ""; + if (this._uniforms[i].getGlslTypeString() == undefined)stringToInsert += "//"; + stringToInsert += " " + this._uniforms[i].getGlslTypeString() + + " " + this._uniforms[i]._propertyName + ";" + + comment; + + if (this._uniforms[i].getShaderType() === "both") + { + // * inject member before {injectionString} + if ( + !this._injectedStringsFrag[this._uniforms[i]._structName].contains(stringToInsert) + && !this._injectedStringsVert[this._uniforms[i]._structName].contains(stringToInsert)) + { + const insertionIndexFrag = structStrFrag.lastIndexOf(injectionString); + const insertionIndexVert = structStrVert.lastIndexOf(injectionString); + + structStrFrag = + structStrFrag.slice(0, insertionIndexFrag) + + stringToInsert + structStrFrag.slice(insertionIndexFrag - 1); + + structStrVert = + structStrVert.slice(0, insertionIndexVert) + + stringToInsert + structStrVert.slice(insertionIndexVert - 1); + + this._injectedStringsFrag[this._uniforms[i]._structName].push(stringToInsert); + this._injectedStringsVert[this._uniforms[i]._structName].push(stringToInsert); + } + + if (!this._structUniformNamesIndicesFrag.includes(i)) this._structUniformNamesIndicesFrag.push(i); + if (!this._structUniformNamesIndicesVert.includes(i)) this._structUniformNamesIndicesVert.push(i); + } + else if (this._uniforms[i].getShaderType() === "frag") + { + // * inject member before {injectionString} + if (!this._injectedStringsFrag[this._uniforms[i]._structName].includes(stringToInsert)) // + { + const insertionIndexFrag = structStrFrag.lastIndexOf(injectionString); + + structStrFrag = + structStrFrag.slice(0, insertionIndexFrag) + + stringToInsert + structStrFrag.slice(insertionIndexFrag - 1); + + this._injectedStringsFrag[this._uniforms[i]._structName].push(stringToInsert); + } + + if (!this._structUniformNamesIndicesFrag.includes(i)) this._structUniformNamesIndicesFrag.push(i); + } + else if (this._uniforms[i].getShaderType() === "vert") + { + // * inject member before {injectionString} + if (!this._injectedStringsVert[this._uniforms[i]._structName].includes(stringToInsert)) + { + const insertionIndexVert = structStrVert.lastIndexOf(injectionString); + + structStrVert = + structStrVert.slice(0, insertionIndexVert) + + stringToInsert + structStrVert.slice(insertionIndexVert - 1); + + this._injectedStringsVert[this._uniforms[i]._structName].push(stringToInsert); + } + + if (!this._structUniformNamesIndicesVert.includes(i)) this._structUniformNamesIndicesVert.push(i); + } + } + } + + // * dedupe injected uni declarations + this._uniDeclarationsFrag = []; + this._uniDeclarationsVert = []; + + // * remove struct injection points and add uniform in fragment + for (let i = 0; i < this._structUniformNamesIndicesFrag.length; i += 1) + { + const index = this._structUniformNamesIndicesFrag[i]; + const uniDeclarationString = "UNI " + this._uniforms[index]._structName + " " + this._uniforms[index]._structUniformName + ";".endl(); + + if (!this._uniDeclarationsFrag.includes(uniDeclarationString)) + { + const injectionString = "{{INJECTION_POINT_STRUCT_" + this._uniforms[index]._structName + "}}"; + + structStrFrag = structStrFrag.replace(injectionString, ""); + structStrFrag += uniDeclarationString; + + this._uniDeclarationsFrag.push(uniDeclarationString); + } + } + + // * remove struct injection points and add uniform in vertex + for (let i = 0; i < this._structUniformNamesIndicesVert.length; i += 1) + { + const index = this._structUniformNamesIndicesVert[i]; + const uniDeclarationString = "UNI " + this._uniforms[index]._structName + " " + this._uniforms[index]._structUniformName + ";".endl(); + + if (!this._uniDeclarationsVert.includes(uniDeclarationString)) + { + const injectionString = "{{INJECTION_POINT_STRUCT_" + this._uniforms[index]._structName + "}}"; + + structStrVert = structStrVert.replace(injectionString, ""); + structStrVert += uniDeclarationString; + this._uniDeclarationsVert.push(uniDeclarationString); + } + } + + return [structStrVert, structStrFrag]; +}; + +Shader.prototype._getAttrSrc = function (attr, firstLevel) +{ + const r = {}; + if (attr.name && attr.type) + { + r.srcHeadVert = ""; + if (!firstLevel) r.srcHeadVert += "#ifndef ATTRIB_" + attr.name.endl(); + r.srcHeadVert += "#define ATTRIB_" + attr.name.endl(); + r.srcHeadVert += "IN " + attr.type + " " + attr.name + ";".endl(); + if (!firstLevel) r.srcHeadVert += "#endif".endl(); + + if (attr.nameFrag) + { + r.srcHeadVert += ""; + if (!firstLevel) r.srcHeadVert += "#ifndef ATTRIB_" + attr.nameFrag.endl(); + r.srcHeadVert += "#define ATTRIB_" + attr.nameFrag.endl(); + r.srcHeadVert += "OUT " + attr.type + " " + attr.nameFrag + ";".endl(); + if (!firstLevel) r.srcHeadVert += "#endif".endl(); + + r.srcVert = "".endl() + attr.nameFrag + "=" + attr.name + ";"; + + r.srcHeadFrag = ""; + if (!firstLevel) r.srcHeadFrag += "#ifndef ATTRIB_" + attr.nameFrag.endl(); + r.srcHeadFrag += "#define ATTRIB_" + attr.nameFrag.endl(); + r.srcHeadFrag += "IN " + attr.type + " " + attr.nameFrag + ";".endl(); + if (!firstLevel) r.srcHeadFrag += "#endif".endl(); + } + } + return r; +}; + +Shader.prototype.compile = function () +{ + if (this._cgl.aborted) return; + const startTime = performance.now(); + + + + this._cgl.profileData.profileShaderCompiles++; + this._cgl.profileData.profileShaderCompileName = this._name + " [" + this._compileReason + "]"; + + let extensionString = ""; + if (this._extensions) + for (let i = 0; i < this._extensions.length; i++) + extensionString += "#extension " + this._extensions[i] + " : enable".endl(); + + let definesStr = ""; + if (this._defines.length) definesStr = "\n// cgl generated".endl(); + for (let i = 0; i < this._defines.length; i++) + definesStr += "#define " + this._defines[i][0] + " " + this._defines[i][1] + "".endl(); + + const structStrings = this.createStructUniforms(); + this._cgl.profileData.addHeavyEvent("shader compile", this._name + " [" + this._compileReason + "]"); + this._compileReason = ""; + + + + if (this._uniforms) + { + // * we create an array of the uniform names to check our indices & an array to save them + const uniNames = this._uniforms.map((uni) => { return uni._name; }); + const indicesToRemove = []; + + // * we go through our uniforms and check if the same name is contained somewhere further in the array + // * if so, we add the current index to be removed later + for (let i = 0; i < this._uniforms.length; i++) + { + const uni = this._uniforms[i]; + const nextIndex = uniNames.indexOf(uni._name, i + 1); + if (nextIndex > -1) indicesToRemove.push(i); + } + + // * after that, we go through the uniforms backwards (so we keep the order) and remove the indices + // * also, we reset the locations of all the other valid uniforms + for (let j = this._uniforms.length - 1; j >= 0; j -= 1) + { + if (indicesToRemove.includes(j)) this._uniforms.splice(j, 1); + else this._uniforms[j].resetLoc(); + } + } + + this._cgl.printError("uniform resets"); + + if (this.hasTextureUniforms()) definesStr += "#define HAS_TEXTURES".endl(); + + let vs = ""; + let fs = ""; + + if (!this.srcFrag) + { + this._log.error("[cgl shader] has no fragment source!", this); + this.srcVert = this.getDefaultVertexShader(); + this.srcFrag = this.getDefaultFragmentShader(); + // return; + } + + if (this.glslVersion == 300) + { + vs = "#version 300 es" + .endl() + "// " + .endl() + "// vertex shader " + this._name + .endl() + "// " + .endl() + "precision " + this.precision + " float;" + .endl() + "precision " + this.precision + " sampler2D;" + .endl() + "" + .endl() + "#define WEBGL2" + .endl() + "#define texture2D texture" + .endl() + "#define UNI uniform" + .endl() + "#define IN in" + .endl() + "#define OUT out" + .endl(); + + fs = "#version 300 es" + .endl() + "// " + .endl() + "// fragment shader " + this._name + .endl() + "// " + .endl() + "precision " + this.precision + " float;" + .endl() + "precision " + this.precision + " sampler2D;" + .endl() + "" + .endl() + "#define WEBGL2" + .endl() + "#define texture2D texture" + .endl() + "#define IN in" + .endl() + "#define OUT out" + .endl() + "#define UNI uniform" + .endl() + "{{DRAWBUFFER}}" + + .endl(); + } + else + { + fs = "" + .endl() + "// " + .endl() + "// fragment shader " + this._name + .endl() + "// " + .endl() + "#define WEBGL1" + .endl() + "#define texture texture2D" + .endl() + "#define outColor gl_FragColor" + .endl() + "#define IN varying" + .endl() + "#define UNI uniform" + .endl(); + + vs = "" + .endl() + "// " + .endl() + "// vertex shader " + this._name + .endl() + "// " + .endl() + "#define WEBGL1" + .endl() + "#define texture texture2D" + .endl() + "#define OUT varying" + .endl() + "#define IN attribute" + .endl() + "#define UNI uniform" + .endl(); + } + + let uniformsStrVert = "\n// cgl generated".endl(); + let uniformsStrFrag = "\n// cgl generated".endl(); + + + fs += "\n// active mods: --------------- "; + vs += "\n// active mods: --------------- "; + + let foundModsFrag = false; + let foundModsVert = false; + for (let i = 0; i < this._moduleNames.length; i++) + { + for (let j = 0; j < this._modules.length; j++) + { + if (this._modules[j].name == this._moduleNames[i]) + { + if (this._modules[j].srcBodyFrag || this._modules[j].srcHeadFrag) + { + foundModsFrag = true; + fs += "\n// " + i + "." + j + ". " + this._modules[j].title + " (" + this._modules[j].name + ")"; + } + if (this._modules[j].srcBodyVert || this._modules[j].srcHeadVert) + { + vs += "\n// " + i + "." + j + ". " + this._modules[j].title + " (" + this._modules[j].name + ")"; + foundModsVert = true; + } + } + } + } + if (!foundModsVert)fs += "\n// no mods used..."; + if (!foundModsFrag)fs += "\n// no mods used..."; + fs += "\n"; + vs += "\n"; + + for (let i = 0; i < this._uniforms.length; i++) + { + if (this._uniforms[i].shaderType && !this._uniforms[i].isStructMember()) + { + let uniStr = ""; + if (!this._uniforms[i].getGlslTypeString())uniStr += "// "; + uniStr += "UNI " + this._uniforms[i].getGlslTypeString() + " " + this._uniforms[i].getName(); + let comment = ""; + if (this._uniforms[i].comment) comment = " // " + this._uniforms[i].comment; + + if (this._uniforms[i].shaderType == "vert" || this._uniforms[i].shaderType == "both") + if (!this.srcVert.contains(uniStr) && !this.srcVert.contains("uniform " + this._uniforms[i].getGlslTypeString() + " " + this._uniforms[i].getName())) + uniformsStrVert += uniStr + ";" + comment.endl(); + + if (this._uniforms[i].shaderType == "frag" || this._uniforms[i].shaderType == "both") + if (!this.srcFrag.contains(uniStr) && !this.srcFrag.contains("uniform " + this._uniforms[i].getGlslTypeString() + " " + this._uniforms[i].getName())) + uniformsStrFrag += uniStr + ";" + comment.endl(); + } + } + + + let countUniFrag = 0; + let countUniVert = 0; + for (let i = 0; i < this._uniforms.length; i++) + { + if (this._uniforms[i].shaderType && !this._uniforms[i].isStructMember()) + { + if (this._uniforms[i].shaderType == "vert" || this._uniforms[i].shaderType == "both") countUniVert++; + if (this._uniforms[i].shaderType == "frag" || this._uniforms[i].shaderType == "both") countUniFrag++; + } + } + if (countUniFrag >= this._cgl.maxUniformsFrag) this._log.warn("[cgl_shader] num uniforms frag: " + countUniFrag + " / " + this._cgl.maxUniformsFrag); + if (countUniVert >= this._cgl.maxUniformsVert) this._log.warn("[cgl_shader] num uniforms vert: " + countUniVert + " / " + this._cgl.maxUniformsVert); + + + if (!fs.contains("precision")) fs = "precision " + this.precision + " float;".endl() + fs; + if (!vs.contains("precision")) vs = "precision " + this.precision + " float;".endl() + vs; + if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) + { + fs += "#define MOBILE".endl(); + vs += "#define MOBILE".endl(); + } + vs = extensionString + vs + definesStr + structStrings[0] + uniformsStrVert + "\n// -- \n" + this.srcVert; + fs = extensionString + fs + definesStr + structStrings[1] + uniformsStrFrag + "\n// -- \n" + this.srcFrag; + + + let srcHeadVert = ""; + let srcHeadFrag = ""; + + this._modules.sort(function (a, b) + { + return a.group - b.group; + }); + + this._modules.sort(function (a, b) + { + return a.priority || 0 - b.priority || 0; + }); + + + let addedAttribs = false; + + for (let i = 0; i < this._moduleNames.length; i++) + { + let srcVert = ""; + let srcFrag = ""; + + if (!addedAttribs) + { + addedAttribs = true; + + for (let k = 0; k < this._attributes.length; k++) + { + const r = this._getAttrSrc(this._attributes[k], true); + if (r.srcHeadVert)srcHeadVert += r.srcHeadVert; + if (r.srcVert)srcVert += r.srcVert; + if (r.srcHeadFrag)srcHeadFrag += r.srcHeadFrag; + } + } + + for (let j = 0; j < this._modules.length; j++) + { + const mod = this._modules[j]; + if (mod.name == this._moduleNames[i]) + { + srcHeadVert += "\n//---- MOD: group:" + mod.group + ": idx:" + j + " - prfx:" + mod.prefix + " - " + mod.title + " ------\n"; + srcHeadFrag += "\n//---- MOD: group:" + mod.group + ": idx:" + j + " - prfx:" + mod.prefix + " - " + mod.title + " ------\n"; + + srcVert += "\n\n//---- MOD: " + mod.title + " / " + mod.priority + " ------\n"; + srcFrag += "\n\n//---- MOD: " + mod.title + " / " + mod.priority + " ------\n"; + + if (mod.attributes) + for (let k = 0; k < mod.attributes.length; k++) + { + const r = this._getAttrSrc(mod.attributes[k], false); + if (r.srcHeadVert)srcHeadVert += r.srcHeadVert; + if (r.srcVert)srcVert += r.srcVert; + if (r.srcHeadFrag)srcHeadFrag += r.srcHeadFrag; + } + + srcHeadVert += mod.srcHeadVert || ""; + srcHeadFrag += mod.srcHeadFrag || ""; + srcVert += mod.srcBodyVert || ""; + srcFrag += mod.srcBodyFrag || ""; + + srcHeadVert += "\n//---- end mod ------\n"; + srcHeadFrag += "\n//---- end mod ------\n"; + + srcVert += "\n//---- end mod ------\n"; + srcFrag += "\n//---- end mod ------\n"; + + srcVert = srcVert.replace(/{{mod}}/g, mod.prefix); + srcFrag = srcFrag.replace(/{{mod}}/g, mod.prefix); + srcHeadVert = srcHeadVert.replace(/{{mod}}/g, mod.prefix); + srcHeadFrag = srcHeadFrag.replace(/{{mod}}/g, mod.prefix); + + srcVert = srcVert.replace(/MOD_/g, mod.prefix); + srcFrag = srcFrag.replace(/MOD_/g, mod.prefix); + srcHeadVert = srcHeadVert.replace(/MOD_/g, mod.prefix); + srcHeadFrag = srcHeadFrag.replace(/MOD_/g, mod.prefix); + } + } + + + vs = vs.replace("{{" + this._moduleNames[i] + "}}", srcVert); + fs = fs.replace("{{" + this._moduleNames[i] + "}}", srcFrag); + } + vs = vs.replace("{{MODULES_HEAD}}", srcHeadVert); + fs = fs.replace("{{MODULES_HEAD}}", srcHeadFrag); + + + vs = this._addLibs(vs); + fs = this._addLibs(fs); + + + // SETUP draw buffers / multi texture render targets + + let drawBufferStr = ""; + for (let i = 0; i < 16; i++) + if (fs.contains("outColor" + i)) this._drawBuffers[i] = true; + + if (this._drawBuffers.length == 1) + { + drawBufferStr = "out vec4 outColor;".endl(); + drawBufferStr += "#define gl_FragColor outColor".endl(); + } + else + { + drawBufferStr += "#define MULTI_COLORTARGETS".endl(); + drawBufferStr += "vec4 outColor;".endl(); + + let count = 0; + for (let i = 0; i < this._drawBuffers.length; i++) + { + if (count == 0) drawBufferStr += "#define gl_FragColor outColor" + i + "".endl(); + drawBufferStr += "layout(location = " + i + ") out vec4 outColor" + i + ";".endl(); + count++; + } + } + + fs = fs.replace("{{DRAWBUFFER}}", drawBufferStr); + // ////// + + + if (!this._program) + { + this._program = this._createProgram(vs, fs); + } + else + { + // this.vshader=createShader(vs, gl.VERTEX_SHADER, this.vshader ); + // this.fshader=createShader(fs, gl.FRAGMENT_SHADER, this.fshader ); + // linkProgram(program); + this._program = this._createProgram(vs, fs); + + this._projMatrixUniform = null; + + for (let i = 0; i < this._uniforms.length; i++) this._uniforms[i].resetLoc(); + } + + this.finalShaderFrag = fs; + this.finalShaderVert = vs; + + + MESH.lastMesh = null; + MESH.lastShader = null; + + this._countMissingUniforms = 0; + this._needsRecompile = false; + this.lastCompile = now(); + + // this._cgl.printError("shader compile"); + + this._cgl.profileData.shaderCompileTime += performance.now() - startTime; +}; + +Shader.hasChanged = function () +{ + return this._needsRecompile; +}; + + +Shader.prototype.bind = function () +{ + if (!this._isValid || this._cgl.aborted) return; + + MESH.lastShader = this; + + if (!this._program || this._needsRecompile) this.compile(); + if (!this._isValid) return; + + if (!this._projMatrixUniform && !this.ignoreMissingUniforms) + { + this._countMissingUniforms++; + // if (this._countMissingUniforms == 10)console.log("stopping getlocation of missing uniforms...", this._name); + if (this._countMissingUniforms < 10) + { + this._projMatrixUniform = this._cgl.gl.getUniformLocation(this._program, constants_CONSTANTS.SHADER.SHADERVAR_UNI_PROJMAT); + this._attrVertexPos = this._cgl.glGetAttribLocation(this._program, constants_CONSTANTS.SHADER.SHADERVAR_VERTEX_POSITION); + this._mvMatrixUniform = this._cgl.gl.getUniformLocation(this._program, "mvMatrix"); + this._vMatrixUniform = this._cgl.gl.getUniformLocation(this._program, constants_CONSTANTS.SHADER.SHADERVAR_UNI_VIEWMAT); + this._mMatrixUniform = this._cgl.gl.getUniformLocation(this._program, constants_CONSTANTS.SHADER.SHADERVAR_UNI_MODELMAT); + this._camPosUniform = this._cgl.gl.getUniformLocation(this._program, constants_CONSTANTS.SHADER.SHADERVAR_UNI_VIEWPOS); + this._normalMatrixUniform = this._cgl.gl.getUniformLocation(this._program, constants_CONSTANTS.SHADER.SHADERVAR_UNI_NORMALMAT); + this._inverseViewMatrixUniform = this._cgl.gl.getUniformLocation(this._program, constants_CONSTANTS.SHADER.SHADERVAR_UNI_INVVIEWMAT); + this._inverseProjMatrixUniform = this._cgl.gl.getUniformLocation(this._program, constants_CONSTANTS.SHADER.SHADERVAR_UNI_INVPROJMAT); + this._materialIdUniform = this._cgl.gl.getUniformLocation(this._program, constants_CONSTANTS.SHADER.SHADERVAR_UNI_MATERIALID); + this._objectIdUniform = this._cgl.gl.getUniformLocation(this._program, constants_CONSTANTS.SHADER.SHADERVAR_UNI_OBJECTID); + + for (let i = 0; i < this._uniforms.length; i++) this._uniforms[i].needsUpdate = true; + } + } + + + if (this._cgl.currentProgram != this._program) + { + this._cgl.profileData.profileShaderBinds++; + this._cgl.gl.useProgram(this._program); + this._cgl.currentProgram = this._program; + } + + for (let i = 0; i < this._uniforms.length; i++) + if (this._uniforms[i].needsUpdate) this._uniforms[i].updateValue(); + + if (this._pMatrixState != this._cgl.getProjectionMatrixStateCount()) + { + this._pMatrixState = this._cgl.getProjectionMatrixStateCount(); + this._cgl.gl.uniformMatrix4fv(this._projMatrixUniform, false, this._cgl.pMatrix); + this._cgl.profileData.profileMVPMatrixCount++; + } + + if (this._objectIdUniform) + this._cgl.gl.uniform1f(this._objectIdUniform, ++this._cgl.frameStore.objectIdCounter); + + if (this._materialIdUniform) + this._cgl.gl.uniform1f(this._materialIdUniform, this._materialId); + + if (this._vMatrixUniform) + { + if (this._vMatrixState != this._cgl.getViewMatrixStateCount()) + { + this._cgl.gl.uniformMatrix4fv(this._vMatrixUniform, false, this._cgl.vMatrix); + this._cgl.profileData.profileMVPMatrixCount++; + this._vMatrixState = this._cgl.getViewMatrixStateCount(); + + if (this._inverseViewMatrixUniform) + { + mat4.invert(this._tempInverseViewMatrix, this._cgl.vMatrix); + this._cgl.gl.uniformMatrix4fv(this._inverseViewMatrixUniform, false, this._tempInverseViewMatrix); + this._cgl.profileData.profileMVPMatrixCount++; + } + if (this._inverseProjMatrixUniform) + { + mat4.invert(this._tempInverseProjMatrix, this._cgl.pMatrix); + this._cgl.gl.uniformMatrix4fv(this._inverseProjMatrixUniform, false, this._tempInverseProjMatrix); + this._cgl.profileData.profileMVPMatrixCount++; + } + } + this._cgl.gl.uniformMatrix4fv(this._mMatrixUniform, false, this._cgl.mMatrix); + this._cgl.profileData.profileMVPMatrixCount++; + + if (this._camPosUniform) + { + mat4.invert(this._tempCamPosMatrix, this._cgl.vMatrix); + this._cgl.gl.uniform3f(this._camPosUniform, this._tempCamPosMatrix[12], this._tempCamPosMatrix[13], this._tempCamPosMatrix[14]); + this._cgl.profileData.profileMVPMatrixCount++; + } + } + else + { + // mvmatrix deprecated.... + const tempmv = mat4.create(); + + mat4.mul(tempmv, this._cgl.vMatrix, this._cgl.mMatrix); + this._cgl.gl.uniformMatrix4fv(this._mvMatrixUniform, false, tempmv); + this._cgl.profileData.profileMVPMatrixCount++; + } + + if (this._normalMatrixUniform) + { + // mat4.mul(this._tempNormalMatrix, this._cgl.vMatrix, this._cgl.mMatrix); + mat4.invert(this._tempNormalMatrix, this._cgl.mMatrix); + mat4.transpose(this._tempNormalMatrix, this._tempNormalMatrix); + + this._cgl.gl.uniformMatrix4fv(this._normalMatrixUniform, false, this._tempNormalMatrix); + this._cgl.profileData.profileMVPMatrixCount++; + } + + for (let i = 0; i < this._libs.length; i++) + { + if (this._libs[i].onBind) this._libs[i].onBind.bind(this._libs[i])(this._cgl, this); + } + + this._bindTextures(); + + return this._isValid; +}; + +Shader.prototype.unBind = function () +{ +}; + +/** + * easily enable/disable a define without a value + * @function toggleDefine + * @memberof Shader + * @instance + * @param {name} name + * @param {any} value or port + */ +Shader.prototype.toggleDefine = function (name, enabled) +{ + if (enabled && typeof (enabled) == "object" && enabled.addEventListener) // port + { + if (enabled.changeListener)enabled.removeEventListener(enabled.changeListener); + + enabled.onToggleDefine = (v) => + { + this.toggleDefine(name, v); + }; + + enabled.changeListener = enabled.on("change", enabled.onToggleDefine); + enabled = enabled.get(); + } + + if (enabled) this.define(name); + else this.removeDefine(name); +}; + +/** + * add a define to a shader, e.g. #define DO_THIS_THAT 1 + * @function define + * @memberof Shader + * @instance + * @param {String} name + * @param {Any} value (can be empty) + */ +Shader.prototype.define = function (name, value) +{ + if (value === null || value === undefined) value = ""; + + if (typeof (value) == "object") // port + { + value.removeEventListener("change", value.onDefineChange); + value.onDefineChange = (v) => + { + this.define(name, v); + }; + value.on("change", value.onDefineChange); + + value = value.get(); + } + + + for (let i = 0; i < this._defines.length; i++) + { + if (this._defines[i][0] == name && this._defines[i][1] == value) return; + if (this._defines[i][0] == name) + { + this._defines[i][1] = value; + this.setWhyCompile("define " + name + " " + value); + + this._needsRecompile = true; + return; + } + } + this.setWhyCompile("define " + name + " " + value); + this._needsRecompile = true; + this._defines.push([name, value]); +}; + +Shader.prototype.getDefines = function () +{ + return this._defines; +}; + +Shader.prototype.getDefine = function (name) +{ + for (let i = 0; i < this._defines.length; i++) + if (this._defines[i][0] == name) return this._defines[i][1]; + return null; +}; + +/** + * return true if shader has define + * @function hasDefine + * @memberof Shader + * @instance + * @param {String} name + * @return {Boolean} + */ +Shader.prototype.hasDefine = function (name) +{ + for (let i = 0; i < this._defines.length; i++) + if (this._defines[i][0] == name) return true; +}; + +/** + * remove a define from a shader + * @param {name} name + * @function removeDefine + * @memberof Shader + * @instance + */ +Shader.prototype.removeDefine = function (name) +{ + for (let i = 0; i < this._defines.length; i++) + { + if (this._defines[i][0] == name) + { + this._defines.splice(i, 1); + this._needsRecompile = true; + + this.setWhyCompile("define removed:" + name); + + return; + } + } +}; + +/** + * remove a module from shader + * @function removeModule + * @memberof Shader + * @instance + * @param {shaderModule} module the module to be removed + */ +Shader.prototype.removeModule = function (mod) +{ + for (let i = 0; i < this._modules.length; i++) + { + if (mod && mod.id) + { + if (this._modules[i].id == mod.id || !this._modules[i]) + { + let found = true; + while (found) + { + found = false; + for (let j = 0; j < this._uniforms.length; j++) + { + if (this._uniforms[j].getName().startsWith(mod.prefix)) + { + this._uniforms.splice(j, 1); + found = true; + continue; + } + } + } + + this._needsRecompile = true; + this.setWhyCompile("remove module " + mod.title); + this._modules.splice(i, 1); + break; + } + } + } +}; + + +Shader.prototype.getNumModules = function () +{ + return this._modules.length; +}; + + +Shader.prototype.getCurrentModules = function () { return this._modules; }; + + +/** + * add a module + * @function addModule + * @memberof Shader + * @instance + * @param {shaderModule} module the module to be added + * @param {shaderModule} [sibling] sibling module, new module will share the same group + */ +Shader.prototype.addModule = function (mod, sibling) +{ + if (this.hasModule(mod.id)) return; + if (!mod.id) mod.id = CABLES.simpleId(); + if (!mod.numId) mod.numId = this._moduleNumId; + if (!mod.num)mod.num = this._modules.length; + if (sibling && !sibling.group) sibling.group = simpleId(); + + if (!mod.group) + if (sibling) mod.group = sibling.group; + else mod.group = simpleId(); + + mod.prefix = "mod" + mod.group + "_"; + this._modules.push(mod); + + this._needsRecompile = true; + this.setWhyCompile("add module " + mod.title); + this._moduleNumId++; + + return mod; +}; + +Shader.prototype.hasModule = function (modId) +{ + for (let i = 0; i < this._modules.length; i++) + { + if (this._modules[i].id == modId) return true; + } + return false; +}; + +Shader.prototype.setModules = function (names) +{ + this._moduleNames = names; +}; + +Shader.prototype.dispose = function () +{ + this._cgl.gl.deleteProgram(this._program); +}; + +Shader.prototype.needsRecompile = function () +{ + return this._needsRecompile; +}; + +Shader.prototype.setDrawBuffers = function (arr) +{ + console.log("useless drawbuffers...?!"); + // if (this._drawBuffers.length !== arr.length) + // { + // this._drawBuffers = arr; + // this._needsRecompile = true; + // this.setWhyCompile("setDrawBuffers"); + // return; + // } + // for (let i = 0; i < arr.length; i++) + // { + // if (arr[i] !== this._drawBuffers[i]) + // { + // this._drawBuffers = arr; + // this._needsRecompile = true; + // this.setWhyCompile("setDrawBuffers"); + // return; + // } + // } +}; + +Shader.prototype.getUniforms = function () +{ + return this._uniforms; +}; + +Shader.prototype.getUniform = function (name) +{ + for (let i = 0; i < this._uniforms.length; i++) + if (this._uniforms[i].getName() == name) + return this._uniforms[i]; + return null; +}; + +Shader.prototype.removeAllUniforms = function () +{ + this._uniforms = []; + // for (let i = 0; i < this._uniforms.length; i++) + // this.removeUniform(this._uniforms[i].name); +}; + +Shader.prototype.removeUniform = function (name) +{ + for (let i = 0; i < this._uniforms.length; i++) + { + if (this._uniforms[i].getName() == name) + { + this._uniforms.splice(i, 1); + } + } + this._needsRecompile = true; + this.setWhyCompile("remove uniform " + name); +}; + + +Shader.prototype._addUniform = function (uni) +{ + this._uniforms.push(uni); + this.setWhyCompile("add uniform " + name); + this._needsRecompile = true; +}; + +/** + * add a uniform to the fragment shader + * @param {String} type ['f','t', etc] + * @param {String} name + * @param {any} value or port + * @memberof Shader + * @instance + * @function addUniformFrag + * @returns {CGL.Uniform} + */ +Shader.prototype.addUniformFrag = function (type, name, valueOrPort, p2, p3, p4) +{ + const uni = new CGL.Uniform(this, type, name, valueOrPort, p2, p3, p4); + uni.shaderType = "frag"; + return uni; +}; + +/** + * add a uniform to the vertex shader + * @param {String} type ['f','t', etc] + * @param {String} name + * @param {any} value or port + * @memberof Shader + * @instance + * @function addUniformVert + * @returns {CGL.Uniform} + */ +Shader.prototype.addUniformVert = function (type, name, valueOrPort, p2, p3, p4) +{ + const uni = new CGL.Uniform(this, type, name, valueOrPort, p2, p3, p4); + uni.shaderType = "vert"; + return uni; +}; +/** + * add a uniform to both shaders + * @param {String} type ['f','t', etc] + * @param {String} name + * @param {any} value or port + * @memberof Shader + * @instance + * @function addUniformBoth + * @returns {CGL.Uniform} + */ +Shader.prototype.addUniformBoth = function (type, name, valueOrPort, p2, p3, p4) +{ + const uni = new CGL.Uniform(this, type, name, valueOrPort, p2, p3, p4); + uni.shaderType = "both"; + return uni; +}; + +/** + * add a struct & its uniforms to the fragment shader + * @param {String} structName name of the struct, i.e.: LightStruct + * @param {String} uniformName name of the struct uniform in the shader, i.e.: lightUni + * @param {Array} members array of objects containing the struct members. see example for structure + + * @memberof Shader + * @instance + * @function addUniformStructFrag + * @returns {Object} + * @example + * const shader = new CGL.Shader(cgl, 'MinimalMaterial'); + * shader.setSource(attachments.shader_vert, attachments.shader_frag); + * shader.addUniformStructFrag("Light", "uniformLight", [ + * { "type": "3f", "name": "position", "v1": null }, + * { "type": "4f", "name": "color", "v1": inR, v2: inG, v3: inB, v4: inAlpha } + * ]); + */ +Shader.prototype.addUniformStructFrag = function (structName, uniformName, members) +{ + const uniforms = {}; + + if (!members) return uniforms; + + for (let i = 0; i < members.length; i += 1) + { + const member = members[i]; + if (!this.hasUniform(uniformName + "." + member.name)) + { + const uni = new CGL.Uniform(this, member.type, uniformName + "." + member.name, member.v1, member.v2, member.v3, member.v4, uniformName, structName, member.name); + uni.shaderType = "frag"; + uniforms[uniformName + "." + member.name] = uni; + } + } + + return uniforms; +}; + +/** + * add a struct & its uniforms to the vertex shader + * @param {String} structName name of the struct, i.e.: LightStruct + * @param {String} uniformName name of the struct uniform in the shader, i.e.: lightUni + * @param {Array} members array of objects containing the struct members. see example for structure + + * @memberof Shader + * @instance + * @function addUniformStructVert + * @returns {CGL.Uniform} + * @example + * const shader = new CGL.Shader(cgl, 'MinimalMaterial'); + * shader.setSource(attachments.shader_vert, attachments.shader_frag); + * shader.addUniformStructVert("Light", "uniformLight", [ + * { "type": "3f", "name": "position", "v1": null }, + * { "type": "4f", "name": "color", "v1": inR, v2: inG, v3: inB, v4: inAlpha } + * ]); + */ +Shader.prototype.addUniformStructVert = function (structName, uniformName, members) +{ + const uniforms = {}; + + if (!members) return uniforms; + + for (let i = 0; i < members.length; i += 1) + { + const member = members[i]; + if (!this.hasUniform(uniformName + "." + member.name)) + { + const uni = new CGL.Uniform(this, member.type, uniformName + "." + member.name, member.v1, member.v2, member.v3, member.v4, uniformName, structName, member.name); + uni.shaderType = "vert"; + uniforms[uniformName + "." + member.name] = uni; + } + } + + return uniforms; +}; + +/** + * add a struct & its uniforms to the both shaders. PLEASE NOTE: it is not possible to add the same struct to both shaders when it contains ANY integer members. + * @param {String} structName name of the struct, i.e.: LightStruct + * @param {String} uniformName name of the struct uniform in the shader, i.e.: lightUni + * @param {Array} members array of objects containing the struct members. see example for structure + + * @memberof Shader + * @instance + * @function addUniformStructBoth + * @returns {Object} + * @example + * const shader = new CGL.Shader(cgl, 'MinimalMaterial'); + * shader.setSource(attachments.shader_vert, attachments.shader_frag); + * shader.addUniformStructBoth("Light", "uniformLight", [ + * { "type": "3f", "name": "position", "v1": null }, + * { "type": "4f", "name": "color", "v1": inR, v2: inG, v3: inB, v4: inAlpha } + * ]); + */ +Shader.prototype.addUniformStructBoth = function (structName, uniformName, members) +{ + const uniforms = {}; + + if (!members) return uniforms; + + for (let i = 0; i < members.length; i += 1) + { + const member = members[i]; + if ((member.type === "2i" || member.type === "i" || member.type === "3i")) + this._log.error("Adding an integer struct member to both shaders can potentially error. Please use different structs for each shader. Error occured in struct:", structName, " with member:", member.name, " of type:", member.type, "."); + if (!this.hasUniform(uniformName + "." + member.name)) + { + const uni = new CGL.Uniform(this, member.type, uniformName + "." + member.name, member.v1, member.v2, member.v3, member.v4, uniformName, structName, member.name); + uni.shaderType = "both"; + uniforms[uniformName + "." + member.name] = uni; + } + } + + return uniforms; +}; + +Shader.prototype.hasUniform = function (name) +{ + for (let i = 0; i < this._uniforms.length; i++) + { + if (this._uniforms[i].getName() == name) return true; + } + return false; +}; + +Shader.prototype._createProgram = function (vstr, fstr) +{ + this._cgl.printError("before _createprogram"); + + const program = this._cgl.gl.createProgram(); + + this.vshader = Shader.createShader(this._cgl, vstr, this._cgl.gl.VERTEX_SHADER, this); + this.fshader = Shader.createShader(this._cgl, fstr, this._cgl.gl.FRAGMENT_SHADER, this); + + + if (this.vshader && this.fshader) + { + this._cgl.gl.attachShader(program, this.vshader); + this._cgl.gl.attachShader(program, this.fshader); + + this._linkProgram(program, vstr, fstr); + } + else + { + this._isValid = false; + this._cgl.printError("shader _createProgram"); + console.log("could not link shaderprogram"); + return null; + } + + this._cgl.printError("shader _createProgram"); + return program; +}; + +Shader.prototype.hasErrors = function () +{ + return this._hasErrors; +}; + +Shader.prototype._linkProgram = function (program, vstr, fstr) +{ + this._cgl.printError("before _linkprogram"); + + if (this._feedBackNames.length > 0) + { + this._cgl.gl.transformFeedbackVaryings(program, this._feedBackNames, this._cgl.gl.SEPARATE_ATTRIBS); + // INTERLEAVED_ATTRIBS + // SEPARATE_ATTRIBS + } + + this._cgl.gl.linkProgram(program); + this._cgl.printError("gl.linkprogram"); + this._isValid = true; + + this._hasErrors = false; + + if (this._cgl.patch.config.glValidateShader !== false) + { + this._cgl.gl.validateProgram(program); + + if (!this._cgl.gl.getProgramParameter(program, this._cgl.gl.VALIDATE_STATUS)) + { + // validation failed + console.log("shaderprogram validation failed..."); + console.log(this._name + " programinfo: ", this._cgl.gl.getProgramInfoLog(program)); + } + + if (!this._cgl.gl.getProgramParameter(program, this._cgl.gl.LINK_STATUS)) + { + this._hasErrors = true; + this._log.warn(this._cgl.gl.getShaderInfoLog(this.fshader) || "empty shader infolog"); + this._log.warn(this._cgl.gl.getShaderInfoLog(this.vshader) || "empty shader infolog"); + this._log.error(this._name + " shader linking fail..."); + + console.log(this._name + " programinfo: ", this._cgl.gl.getProgramInfoLog(program)); + + console.log("--------------------------------------"); + console.log(this); + console.log("--------------------------------------"); + this._isValid = false; + + this._name = "errorshader"; + this.setSource(Shader.getDefaultVertexShader(), Shader.getErrorFragmentShader()); + this._cgl.printError("shader link err"); + } + } +}; + +Shader.prototype.getProgram = function () +{ + return this._program; +}; + +Shader.prototype.setFeedbackNames = function (names) +{ + this.setWhyCompile("setFeedbackNames"); + this._needsRecompile = true; + this._feedBackNames = names; +}; + +Shader.prototype.getDefaultVertexShader = Shader.getDefaultVertexShader = function () +{ + return cgl_shader_default_glsl; +}; + +Shader.prototype.getDefaultFragmentShader = Shader.getDefaultFragmentShader = function (r, g, b) +{ + if (r == undefined) + { + r = 0.5; + g = 0.5; + b = 0.5; + } + return "" + .endl() + "IN vec2 texCoord;" + .endl() + "{{MODULES_HEAD}}" + .endl() + "void main()" + .endl() + "{" + .endl() + " vec4 col=vec4(" + r + "," + g + "," + b + ",1.0);" + .endl() + " {{MODULE_COLOR}}" + .endl() + " outColor = col;" + .endl() + "}"; +}; + +/** + * adds attribute definition to shader header without colliding with other shader modules... + * when attrFrag is defined, vertex shader will output this attribute to the fragment shader + * @function + * @memberof Shader + * @instance + * @param {Object} attribObject {type:x,name:x,[nameFrag:x]} + * @return {Object} + */ +Shader.prototype.addAttribute = function (attr) +{ + for (let i = 0; i < this._attributes.length; i++) + { + if (this._attributes[i].name == attr.name && this._attributes[i].nameFrag == attr.nameFrag) return; + } + this._attributes.push(attr); + this._needsRecompile = true; + this.setWhyCompile("addAttribute"); +}; + +Shader.prototype.bindTextures = +Shader.prototype._bindTextures = function () +{ + if (this._textureStackTex.length > this._cgl.maxTextureUnits) + { + this._log.warn("[shader._bindTextures] too many textures bound", this._textureStackTex.length + "/" + this._cgl.maxTextureUnits); + } + + // for (let i = this._textureStackTex.length + 1; i < this._cgl.maxTextureUnits; i++) this._cgl.setTexture(i, null); + + for (let i = 0; i < this._textureStackTex.length; i++) + { + // console.log(this._textureStackTex.length, i); + if (!this._textureStackTex[i] && !this._textureStackTexCgl[i]) + { + this._log.warn("no texture for pushtexture", this._name); + } + else + { + let t = this._textureStackTex[i]; + if (this._textureStackTexCgl[i]) + { + t = this._textureStackTexCgl[i].tex || CGL.Texture.getEmptyTexture(this._cgl).tex; + } + + let bindOk = true; + + if (!this._textureStackUni[i]) + { + // throw(new Error('no uniform given to texturestack')); + this._log.warn("no uniform for pushtexture", this._name); + bindOk = this._cgl.setTexture(i, t, this._textureStackType[i]); + } + else + { + this._textureStackUni[i].setValue(i); + bindOk = this._cgl.setTexture(i, t, this._textureStackType[i]); + + // console.log(bindOk, i, t, this._textureStackType[i]); + } + if (!bindOk) console.warn("tex bind failed", this.getName(), this._textureStackUni[i]); + } + } +}; + +Shader.prototype.setUniformTexture = function (uni, tex) +{ + tex = tex || CGL.Texture.getTempTexture(this._cgl); + for (let i = 0; i < this._textureStackUni.length; i++) + if (this._textureStackUni[i] == uni) + { + const old = this._textureStackTex[i] || this._textureStackTexCgl[i]; + if (tex.hasOwnProperty("tex")) + { + this._textureStackTexCgl[i] = tex; + this._textureStackTex[i] = null; + } + else + { + this._textureStackTexCgl[i] = null; + this._textureStackTex[i] = tex; + } + + // this._textureStackTex[i] = tex; + // this._cgl.setTexture(i, tex, this._textureStackType[i]); + return old; + } + return null; +}; + +/** + * push a texture on the stack. those textures will be bound when binding the shader. texture slots are automatically set + * @param {uniform} texture uniform + * @param {texture} texture + * @param {type} texture type, can be ignored when TEXTURE_2D + * @function pushTexture + * @memberof Shader + * @instance + */ +Shader.prototype.pushTexture = function (uniform, t, type) +{ + if (!uniform) + { + console.log("no uniform given to texturestack", uniform); + return; + } + if (!t) + { + return; + } + if (!t.hasOwnProperty("tex") && !(t instanceof WebGLTexture)) + { + this._log.warn(new Error("invalid texture").stack); + + this._log.warn("[cgl_shader] invalid texture...", t); + return; + } + + this._textureStackUni.push(uniform); + + if (t.hasOwnProperty("tex")) + { + this._textureStackTexCgl.push(t); + this._textureStackTex.push(null); + } + else + { + this._textureStackTexCgl.push(null); + this._textureStackTex.push(t); + } + + this._textureStackType.push(type); +}; + +/** + * pop last texture + * @function popTexture + * @memberof Shader + * @instance + */ +Shader.prototype.popTexture = function () +{ + this._textureStackUni.pop(); + this._textureStackTex.pop(); + this._textureStackTexCgl.pop(); + this._textureStackType.pop(); +}; + +/** + * pop all textures + * @function popTextures + * @memberof Shader + * @instance + */ +Shader.prototype.popTextures = function () +{ + this._textureStackTex.length = + this._textureStackTexCgl.length = + this._textureStackType.length = + this._textureStackUni.length = 0; +}; + +Shader.prototype.getMaterialId = function () +{ + return this._materialId; +}; + +Shader.prototype.getInfo = function () +{ + const info = {}; + info.name = this._name; + // info.modules = JSON.parse(JSON.stringify(this._modules)); + // info.defines = JSON.parse(JSON.stringify(this._defines)); + info.defines = this.getDefines(); + info.hasErrors = this.hasErrors(); + + return info; +}; + +// -------------------------- + +Shader.getErrorFragmentShader = function () +{ + return "" + .endl() + "void main()" + .endl() + "{" + .endl() + " float g=mod((gl_FragCoord.y+gl_FragCoord.x),50.0)/50.0;" + .endl() + " g= step(0.1,g);" + .endl() + " outColor = vec4( g+0.5, 0.0, 0.0, 1.0);" + .endl() + "}"; +}; + +Shader.createShader = function (cgl, str, type, cglShader) +{ + if (cgl.aborted) return; + + // cgl.printError("[Shader.createShader] ", cglShader._name); + + function getBadLines(infoLog) + { + const basLines = []; + const lines = infoLog.split("\n"); + for (const i in lines) + { + const divide = lines[i].split(":"); + if (parseInt(divide[2], 10)) basLines.push(parseInt(divide[2], 10)); + } + return basLines; + } + + + const shader = cgl.gl.createShader(type); + cgl.gl.shaderSource(shader, str); + cgl.gl.compileShader(shader); + + if (!cgl.gl.getShaderParameter(shader, cgl.gl.COMPILE_STATUS)) + { + let infoLog = cgl.gl.getShaderInfoLog(shader); + if (!infoLog) + { + console.warn("empty shader info log", this._name); + return; + } + + console.log("compile status: "); + + const badLines = getBadLines(infoLog); + let htmlWarning = "<pre style=\"margin-bottom:0px;\"><code class=\"shaderErrorCode language-glsl\" style=\"padding-bottom:0px;max-height: initial;max-width: initial;\">"; + const lines = str.match(/^.*((\r\n|\n|\r)|$)/gm); + + if (!cgl.aborted && infoLog) + { + if (type == cgl.gl.VERTEX_SHADER) console.log("VERTEX_SHADER"); + if (type == cgl.gl.FRAGMENT_SHADER) console.log("FRAGMENT_SHADER"); + + for (const i in lines) + { + const j = parseInt(i, 10) + 1; + const line = j + ": " + lines[i]; + console.log(line); + + let isBadLine = false; + for (const bj in badLines) + if (badLines[bj] == j) isBadLine = true; + + if (isBadLine) + { + htmlWarning += "</code></pre>"; + // htmlWarning += "<span class=\"shaderErrorCode error\">"; + htmlWarning += "<pre style=\"margin:0\"><code class=\"language-glsl\" style=\"background-color:#660000;padding-top:0px;padding-bottom:0px\">"; + } + htmlWarning += escapeHTML(line); + + if (isBadLine) + { + htmlWarning += "</code></pre>"; + htmlWarning += "<pre style=\"margin:0\"><code class=\"language-glsl\" style=\";padding-top:0px;padding-bottom:0px\">"; + } + } + } + + console.warn(infoLog); + + infoLog = infoLog.replace(/\n/g, "<br/>"); + if (cgl.patch.isEditorMode())console.log("Shader error ", cglShader._name, infoLog, this); + + htmlWarning = infoLog + "<br/>" + htmlWarning + "<br/><br/>"; + htmlWarning += "</code></pre>"; + + cgl.patch.emitEvent("criticalError", { "title": "Shader error " + cglShader._name, "text": htmlWarning, "exception": { "message": infoLog } }); + + // this._name = "errorshader"; + cglShader.setSource(Shader.getDefaultVertexShader(), Shader.getErrorFragmentShader()); + } + else + { + // console.log(name+' shader compiled...'); + } + // cgl.printError("shader create2"); + return shader; +}; + + + + +;// CONCATENATED MODULE: ./src/core/cgl/cgl_profiledata.js +class ProfileData +{ + constructor(cgl) + { + this._cgl = cgl; + this._lastTime = 0; + this.pause = false; + this.profileUniformCount = 0; + this.profileShaderBinds = 0; + this.profileUniformCount = 0; + this.profileShaderCompiles = 0; + this.profileVideosPlaying = 0; + this.profileMVPMatrixCount = 0; + this.profileEffectBuffercreate = 0; + this.profileShaderGetUniform = 0; + this.profileFrameBuffercreate = 0; + this.profileMeshSetGeom = 0; + this.profileTextureNew = 0; + this.profileGenMipMap = 0; + this.profileOnAnimFrameOps = 0; + + this.profileFencedPixelRead = 0; + this.profileMainloopMs = 0; + this.profileMeshDraw = 0; + this.profileTextureEffect = 0; + this.profileTexPreviews = 0; + this.shaderCompileTime = 0; + this.profileMeshNumElements = 0; + this.profileMeshAttributes = 0; + this.profileSingleMeshAttribute = []; + this.heavyEvents = []; + + this.doProfileGlQuery = false; + this.glQueryData = {}; + } + + clear() + { + this.profileSingleMeshAttribute = {}; + this.profileMeshAttributes = 0; + this.profileUniformCount = 0; + this.profileShaderGetUniform = 0; + this.profileShaderCompiles = 0; + this.profileShaderBinds = 0; + this.profileTextureResize = 0; + this.profileFrameBuffercreate = 0; + this.profileEffectBuffercreate = 0; + this.profileTextureDelete = 0; + this.profileMeshSetGeom = 0; + this.profileVideosPlaying = 0; + this.profileMVPMatrixCount = 0; + this.profileNonTypedAttrib = 0; + this.profileNonTypedAttribNames = ""; + this.profileTextureNew = 0; + this.profileGenMipMap = 0; + this.profileFramebuffer = 0; + this.profileMeshDraw = 0; + this.profileTextureEffect = 0; + this.profileTexPreviews = 0; + this.profileMeshNumElements = 0; + this.profileFencedPixelRead = 0; + } + + clearGlQuery() + { + for (let i in this.glQueryData) + { + if (!this.glQueryData[i].lastClear || performance.now() - this.glQueryData[i].lastClear > 1000) + { + this.glQueryData[i].time = this.glQueryData[i]._times / this.glQueryData[i]._numcount; + this.glQueryData[i].num = this.glQueryData[i]._numcount; + + this.glQueryData[i]._times = 0; + this.glQueryData[i]._numcount = 0; + this.glQueryData[i].lastClear = performance.now(); + } + } + } + + addHeavyEvent(event, name, info) + { + const e = { "event": event, "name": name, "info": info, "date": performance.now() }; + this.heavyEvents.push(e); + this._cgl.emitEvent("heavyEvent", e); + } +} + + + + +;// CONCATENATED MODULE: ../shared/client/src/helper.js +class Helper +{ + constructor() + { + this._simpleIdCounter = 0; + } + + uuid() + { + let d = new Date().getTime(); + return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => + { + const r = (d + Math.random() * 16) % 16 | 0; + d = Math.floor(d / 16); + return (c === "x" ? r : (r & 0x3) | 0x8).toString(16); + }); + } + + isNumeric(n) + { + return !isNaN(parseFloat(n)) && isFinite(n); + } + + /** + * generate a simple ID + * @function simpleId + * @memberof Utils + * @return {Number} new id + * @static + */ + simpleId() + { + this._simpleIdCounter++; + return this._simpleIdCounter; + } +} +/* harmony default export */ const helper = (new Helper()); + +;// CONCATENATED MODULE: ../shared/client/src/eventtarget.js + + + +class Events +{ + constructor() + { + this._log = new Logger("eventtarget"); + this._eventCallbacks = {}; + this._logName = ""; + this._logEvents = false; + this._listeners = {}; + + this.on = this.addEventListener; + this.off = this.removeEventListener; + } + + addEventListener(which, cb, idPrefix) + { + const event = + { + "id": (idPrefix || "") + helper.simpleId(), + "name": which, + "cb": cb, + }; + if (!this._eventCallbacks[which]) this._eventCallbacks[which] = [event]; + else this._eventCallbacks[which].push(event); + + this._listeners[event.id] = event; + + return event.id; + } + + hasEventListener(which, cb) + { + if (which && !cb) + { + // check by id + return !!this._listeners[which]; + } + else + { + this._log.warn("old eventtarget function haseventlistener!"); + if (which && cb) + { + if (this._eventCallbacks[which]) + { + const idx = this._eventCallbacks[which].indexOf(cb); + return idx !== -1; + } + } + } + } + + hasListenerForEventName(eventName) + { + return this._eventCallbacks[eventName] && this._eventCallbacks[eventName].length > 0; + } + + removeEventListener(which, cb) + { + if (which === null || which === undefined) return; + + if (!cb) // new style, remove by id, not by name/callback + { + const event = this._listeners[which]; + if (!event) + { + this._log.log("could not find event..."); + return; + } + + let found = true; + while (found) + { + found = false; + let index = -1; + for (let i = 0; i < this._eventCallbacks[event.name].length; i++) + { + if (this._eventCallbacks[event.name][i].id.indexOf(which) === 0) // this._eventCallbacks[event.name][i].id == which || + { + found = true; + index = i; + } + } + + if (index !== -1) + { + this._eventCallbacks[event.name].splice(index, 1); + delete this._listeners[which]; + } + } + + return; + } + + this._log.info("[eventtaget] ", "old function signature: removeEventListener! use listener id"); + this._log.log((new Error()).stack); + + let index = null; + for (let i = 0; i < this._eventCallbacks[which].length; i++) + if (this._eventCallbacks[which][i].cb === cb) + index = i; + + if (index !== null) + { + delete this._eventCallbacks[index]; + } + else this._log.warn("removeEventListener not found " + which); + } + + logEvents(enabled, name) + { + this._logEvents = enabled; + this._logName = name; + } + + emitEvent(which, param1, param2, param3, param4, param5, param6) + { + if (this._logEvents) this._log.log("[event] ", this._logName, which, this._eventCallbacks); + + if (this._eventCallbacks[which]) + { + for (let i = 0; i < this._eventCallbacks[which].length; i++) + { + if (this._eventCallbacks[which][i]) + { + this._eventCallbacks[which][i].cb(param1, param2, param3, param4, param5, param6); + } + } + } + else + { + if (this._logEvents) this._log.log("[event] has no event callback", which, this._eventCallbacks); + } + } +} + + +;// CONCATENATED MODULE: ./src/core/cg/cg_canvas.js +class CgCanvas +{ + constructor(options) + { + if (!options) + { + console.error("CgCanvas no options"); + } + else + { + this._canvasEle = options.canvasEle; + } + + if (!options.cg)console.error("CgCanvas options has no cg"); + if (!options.canvasEle)console.error("CgCanvas options has no canvasEle"); + + this._cg = options.cg; + this.pixelDensity = 1; + this.canvasWidth = this.canvasEle.clientWidth; + this.canvasHeight = this.canvasEle.clientHeight; + + this._oldWidthRp = -1; + this._oldHeightRp = -1; + + this.setSize(this.canvasWidth, this.canvasHeight); + } + + get canvasEle() { return this._canvasEle; } + + + setSize(w, h, ignorestyle) + { + if (this._oldWidthRp != w * this.pixelDensity || this._oldHeightRp != h * this.pixelDensity) + { + this._oldWidthRp = this.canvasEle.width = w * this.pixelDensity; + this._oldHeightRp = this.canvasEle.height = h * this.pixelDensity; + + if (!ignorestyle) + { + this.canvasEle.style.width = w + "px"; + this.canvasEle.style.height = h + "px"; + } + + this.updateSize(); + + this._cg.emitEvent("resize"); + } + } + + updateSize() + { + this.canvasEle.width = this.canvasWidth = this.canvasEle.clientWidth * this.pixelDensity; + this.canvasEle.height = this.canvasHeight = this.canvasEle.clientHeight * this.pixelDensity; + } + + dispose() + { + this._canvasEle.remove(); + this._canvasEle = null; + } +} + + + +;// CONCATENATED MODULE: ./src/core/cg/cg_matrixstack.js + +const MatrixStack = function () +{ + this._arr = [mat4.create()]; + this._index = 0; + this.stateCounter = 0; +}; + +MatrixStack.prototype.push = function (m) +{ + this._index++; + this.stateCounter++; + + if (this._index == this._arr.length) + { + const copy = mat4.create(); + this._arr.push(copy); + } + + mat4.copy(this._arr[this._index], m || this._arr[this._index - 1]); + + return this._arr[this._index]; +}; + +MatrixStack.prototype.pop = function () +{ + this.stateCounter++; + + this._index--; + if (this._index < 0) this._index = 0; + + return this._arr[this._index]; +}; + +MatrixStack.prototype.length = function () +{ + return this._index; +}; + + + +;// CONCATENATED MODULE: ./src/core/cg/cg_state.js + + + + + +// const CGState () +class CGState extends Events +{ + constructor(_patch) + { + super(); + // this.canvas = null; + + this.fpsCounter = new CABLES.CG.FpsCounter(); + this._identView = vec3.create(); + this._ident = vec3.create(); + vec3.set(this._identView, 0, 0, -2); + vec3.set(this._ident, 0, 0, 0); + + this.patch = _patch; + + + + this.DEPTH_COMPARE_FUNC_NEVER = 0; + this.DEPTH_COMPARE_FUNC_LESS = 1; + this.DEPTH_COMPARE_FUNC_EQUAL = 2; + this.DEPTH_COMPARE_FUNC_LESSEQUAL = 3; + this.DEPTH_COMPARE_FUNC_GREATER = 4; + this.DEPTH_COMPARE_FUNC_NOTEQUAL = 5; + this.DEPTH_COMPARE_FUNC_GREATEREQUAL = 6; + this.DEPTH_COMPARE_FUNC_ALWAYS = 7; + + + /** + * Current projection matrix + * @memberof Context + * @instance + * @type {mat4} + */ + this.pMatrix = mat4.create(); + + /** + * Current model matrix + * @memberof Context + * @instance + * @type {mat4} + */ + this.mMatrix = mat4.create(); + + /** + * Current view matrix + * @memberof Context + * @instance + * @type {mat4} + */ + this.vMatrix = mat4.create(); + this._textureslots = []; + + this._pMatrixStack = new MatrixStack(); + this._mMatrixStack = new MatrixStack(); + this._vMatrixStack = new MatrixStack(); + + this.canvasScale = 1; + + mat4.identity(this.mMatrix); + mat4.identity(this.vMatrix); + + + window.matchMedia("screen and (min-resolution: 2dppx)") + .addEventListener("change", (e) => + { + this.emitEvent("resize"); + }); + } + + get canvasWidth() + { + return this.cgCanvas.canvasWidth; + } + + get canvasHeight() + { + return this.cgCanvas.canvasHeight; + } + + set pixelDensity(p) + { + if (this.cgCanvas.pixelDensity != p) + { + this.cgCanvas.pixelDensity = p; + this.cgCanvas.updateSize(); + this.emitEvent("resize"); + } + } + + get pixelDensity() + { + return this.cgCanvas.pixelDensity; + } + + + getGApiName() + { + return ["WebGL", "WebGPU"][this.gApi]; + } + + get canvas() + { + return this.cgCanvas.canvasEle; + } + + setCanvas(canvEle) + { + if (this.cgCanvas && canvEle == this.cgCanvas.canvasEle) return; + if (typeof canvEle === "string") canvEle = document.getElementById(canvEle); + + this.cgCanvas = new CgCanvas({ "canvasEle": canvEle, "cg": this }); + + if (this._setCanvas) this._setCanvas(canvEle); + + this.updateSize(); + } + + updateSize() + { + this.cgCanvas.updateSize(); + } + + setSize(w, h, ignorestyle) + { + this.cgCanvas.setSize(w, h, ignorestyle); + } + + _resizeToWindowSize() + { + this.setSize(window.innerWidth, window.innerHeight); + this.updateSize(); + } + + _resizeToParentSize() + { + const p = this.canvas.parentElement; + if (!p) + { + this._log.error("cables: can not resize to container element"); + return; + } + this.setSize(p.clientWidth, p.clientHeight); + + this.updateSize(); + } + + setAutoResize(parent) + { + window.removeEventListener("resize", this._resizeToWindowSize.bind(this)); + window.removeEventListener("resize", this._resizeToParentSize.bind(this)); + + if (parent == "window") + { + window.addEventListener("resize", this._resizeToWindowSize.bind(this)); + window.addEventListener("orientationchange", this._resizeToWindowSize.bind(this)); + this._resizeToWindowSize(); + } + if (parent == "parent") + { + window.addEventListener("resize", this._resizeToParentSize.bind(this)); + this._resizeToParentSize(); + } + } + + + /** + * push a matrix to the projection matrix stack + * @function pushPMatrix + * @memberof Context + * @instance + * @param {mat4} projectionmatrix + */ + pushPMatrix() + { + this.pMatrix = this._pMatrixStack.push(this.pMatrix); + } + + /** + * pop projection matrix stack + * @function popPMatrix + * @memberof Context + * @instance + * @returns {mat4} current projectionmatrix + */ + popPMatrix() + { + this.pMatrix = this._pMatrixStack.pop(); + return this.pMatrix; + } + + getProjectionMatrixStateCount() + { + return this._pMatrixStack.stateCounter; + } + + /** + * push a matrix to the model matrix stack + * @function pushModelMatrix + * @memberof Context + * @instance + * @param {mat4} modelmatrix + * @example + * // see source code of translate op: + * cgl.pushModelMatrix(); + * mat4.translate(cgl.mMatrix,cgl.mMatrix, vec); + * trigger.trigger(); + * cgl.popModelMatrix(); + */ + pushModelMatrix() + { + this.mMatrix = this._mMatrixStack.push(this.mMatrix); + } + + /** + * pop model matrix stack + * @function popModelMatrix + * @memberof Context + * @instance + * @returns {mat4} current modelmatrix + */ + popModelMatrix() + { + // todo: DEPRECATE + // if (this._mMatrixStack.length === 0) throw "Invalid modelview popMatrix!"; + this.mMatrix = this._mMatrixStack.pop(); + return this.mMatrix; + } + + /** + * get model matrix + * @function modelMatrix + * @memberof Context + * @instance + * @returns {mat4} current modelmatrix + */ + modelMatrix() + { + return this.mMatrix; + } + + + /** + * push a matrix to the view matrix stack + * @function pushviewMatrix + * @memberof Context + * @instance + * @param {mat4} viewmatrix + */ + pushViewMatrix() + { + this.vMatrix = this._vMatrixStack.push(this.vMatrix); + } + + /** + * pop view matrix stack + * @function popViewMatrix + * @memberof Context + * @instance + * @returns {mat4} current viewmatrix + * @function + */ + popViewMatrix() + { + this.vMatrix = this._vMatrixStack.pop(); + } + + getViewMatrixStateCount() + { + return this._vMatrixStack.stateCounter; + } + + _startMatrixStacks(identTranslate, identTranslateView) + { + identTranslate = identTranslate || this._ident; + identTranslateView = identTranslateView || this._identView; + + mat4.perspective(this.pMatrix, 45, this.canvasWidth / this.canvasHeight, 0.1, 1000.0); + + mat4.identity(this.mMatrix); + mat4.identity(this.vMatrix); + mat4.translate(this.mMatrix, this.mMatrix, identTranslate); + mat4.translate(this.vMatrix, this.vMatrix, identTranslateView); + + this.pushPMatrix(); + this.pushModelMatrix(); + this.pushViewMatrix(); + } + + _endMatrixStacks() + { + this.popViewMatrix(); + this.popModelMatrix(); + this.popPMatrix(); + } + + dispose() + { + this.aborted = true; + if (this.cgCanvas) this.cgCanvas.dispose(); + if (this._dispose) this._dispose(); + } +} + + + + + +;// CONCATENATED MODULE: ./src/core/cg/sg_fpscounter.js + + +class FpsCounter extends Events +{ + constructor() + { + super(); + this._timeStartFrame = 0; + this._timeStartSecond = 0; + this._fpsCounter = 0; + this._msCounter = 0; + this._frameCount = 0; + + this.stats = { "ms": 0, "fps": 0 }; + } + + get frameCount() + { + return this._frameCount; + } + + startFrame() + { + this._timeStartFrame = CABLES.now(); + } + + endFrame() + { + this._frameCount++; + this._fpsCounter++; + + const timeFrame = CABLES.now() - this._timeStartFrame; + this._msCounter += timeFrame; + + if (CABLES.now() - this._timeStartSecond > 1000) + { + this.endSecond(); + } + } + + endSecond() + { + this.stats.fps = this._fpsCounter; + this.stats.ms = Math.round(this._msCounter / this._fpsCounter * 100) / 100; + + this.emitEvent("performance", this.stats); + + // reset + this._fpsCounter = 0; + this._msCounter = 0; + this._timeStartSecond = CABLES.now(); + } +} + +;// CONCATENATED MODULE: ./src/core/cg/cg_constants.js + + + + + +const CG = { + + "GAPI_WEBGL": 0, + "GAPI_WEBGPU": 1, + + "DEPTH_COMPARE_NEVER": 0, + "DEPTH_COMPARE_LESS": 1, + "DEPTH_COMPARE_EQUAL": 2, + "DEPTH_COMPARE_LESSEQUAL": 3, + "DEPTH_COMPARE_GREATER": 4, + "DEPTH_COMPARE_NOTEQUAL": 5, + "DEPTH_COMPARE_GREATEREQUAL": 6, + "DEPTH_COMPARE_ALWAYS": 7, + + "CULL_NONE": 0, + "CULL_BACK": 1, + "CULL_FRONT": 2, + "CULL_BOTH": 3, + + + "Geometry": Geometry, + "BoundingBox": BoundingBox, + "FpsCounter": FpsCounter, + + "CgCanvas": CgCanvas +}; + + + + +;// CONCATENATED MODULE: ./src/core/cgl/cgl_state.js + + + + + + + + +/** + * cables gl context/state manager + * @external CGL + * @namespace Context + * @class + * @hideconstructor + */ +// const Context(_patch) +class Context extends CGState +{ + constructor(_patch) + { + super(_patch); + // EventTarget.apply(this); + // CGState.apply(this); + + this.gApi = CG.GAPI_WEBGL; + this.aborted = false; + + this.pushMvMatrix = this.pushModelMatrix; // deprecated and wrong... still used?? + this.popMvMatrix = this.popmMatrix = this.popModelMatrix;// deprecated and wrong... still used?? + + this.profileData = new ProfileData(this); + this._log = new Logger("cgl_context"); + this._viewPort = [0, 0, 0, 0]; + this.glVersion = 0; + this.glUseHalfFloatTex = false; + this.clearCanvasTransparent = true; + this.clearCanvasDepth = true; + this.debugOneFrame = false; + this.checkGlErrors = false; // true is slow // false should be default... + this.maxTextureUnits = 0; + this.maxVaryingVectors = 0; + this.currentProgram = null; + this._hadStackError = false; + this.glSlowRenderer = false; + this._isSafariCrap = false; + + this.temporaryTexture = null; + this.frameStore = {}; + this._onetimeCallbacks = []; + this.gl = null; + + this._cursor = "auto"; + this._currentCursor = ""; + + this._viewPortStack = []; + this._glFrameBufferStack = []; + this._frameBufferStack = []; + this._shaderStack = []; + this._stackDepthTest = []; + this.mainloopOp = null; + + this._simpleShader = new Shader(this, "simpleshader"); + this._simpleShader.setModules(["MODULE_VERTEX_POSITION", "MODULE_COLOR", "MODULE_BEGIN_FRAG", "MODULE_VERTEX_MOVELVIEW"]); + this._simpleShader.setSource(Shader.getDefaultVertexShader(), Shader.getDefaultFragmentShader()); + + this._currentShader = this._simpleShader; + + + this._oldCanvasWidth = -1; + this._oldCanvasHeight = -1; + this._enabledExtensions = {}; + } + + // set pixelDensity(p) + // { + // this._pixelDensity = p; + // } + + // get pixelDensity() + // { + // return this._pixelDensity; + // } + + + + get viewPort() + { + if (this._viewPortStack.length > 3) + { + const l = this._viewPortStack.length; + + return [ + this._viewPortStack[l - 4], + this._viewPortStack[l - 3], + this._viewPortStack[l - 2], + this._viewPortStack[l - 1] + ]; + } + else + { + // workaround pre viewport stack times / or+and initial value... + + return this._viewPort; + } + } + + + + get mvMatrix() // deprecate + { + return this.mMatrix; + } + + set mvMatrix(m) // deprecate + { + this.mMatrix = m; + } + + + exitError(msgId, msg) + { + console.log(msgId, msg); + this.patch.exitError(msgId, msg); + this.aborted = true; + } + + + _setCanvas(canv) + { + if (!canv) + { + this._log.stack("_setCanvas undef"); + } + + if (!this.patch.config.canvas) this.patch.config.canvas = {}; + if (!this.patch.config.canvas.hasOwnProperty("preserveDrawingBuffer")) this.patch.config.canvas.preserveDrawingBuffer = false; + if (!this.patch.config.canvas.hasOwnProperty("premultipliedAlpha")) this.patch.config.canvas.premultipliedAlpha = false; + if (!this.patch.config.canvas.hasOwnProperty("alpha")) this.patch.config.canvas.alpha = false; + + this.patch.config.canvas.stencil = true; + + if (this.patch.config.hasOwnProperty("clearCanvasColor")) this.clearCanvasTransparent = this.patch.config.clearCanvasColor; + if (this.patch.config.hasOwnProperty("clearCanvasDepth")) this.clearCanvasDepth = this.patch.config.clearCanvasDepth; + + // safari stuff.......... + if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent) && (navigator.userAgent.match(/iPhone/i))) + { + this._isSafariCrap = true; + this.glUseHalfFloatTex = true; + } + + if (!this.patch.config.canvas.forceWebGl1) this.gl = canv.getContext("webgl2", this.patch.config.canvas); + + + if (!this.gl || this.gl.isContextLost()) + { + this.aborted = true; + this.exitError("NO_WEBGL", "sorry, could not initialize WebGL. Please check if your Browser supports WebGL or try to restart your browser."); + return; + } + + if (this.gl.getParameter(this.gl.VERSION) != "WebGL 1.0") + { + this.glVersion = 2; + } + else + { + this.gl = canv.getContext("webgl", this.patch.config.canvas) || canv.getContext("experimental-webgl", this.patch.config.canvas); + this.glVersion = 1; + + // safari + // if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent) && (navigator.userAgent.match(/iPhone/i))) + // { + // this.glUseHalfFloatTex = true; + // } + + // ios + if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) + { + if (!this.patch.config.canvas.hasOwnProperty("powerPreference")) this.patch.config.canvas.powerPreference = "high-performance"; + } + + this.enableExtension("OES_standard_derivatives"); + // this.enableExtension("GL_OES_standard_derivatives"); + const instancingExt = this.enableExtension("ANGLE_instanced_arrays") || this.gl; + if (instancingExt.vertexAttribDivisorANGLE) + { + this.gl.vertexAttribDivisor = instancingExt.vertexAttribDivisorANGLE.bind(instancingExt); + this.gl.drawElementsInstanced = instancingExt.drawElementsInstancedANGLE.bind(instancingExt); + } + } + + const dbgRenderInfo = this.enableExtension("WEBGL_debug_renderer_info"); + if (dbgRenderInfo) + { + this.glRenderer = this.gl.getParameter(dbgRenderInfo.UNMASKED_RENDERER_WEBGL); + if (this.glRenderer === "Google SwiftShader") this.glSlowRenderer = true; + } + + this.canvas.addEventListener("webglcontextlost", (event) => + { + if (this.aborted) return console.log("[cgl_state] aborted context lost... can be ignored..."); + this._log.error("canvas lost...", event); + this.emitEvent("webglcontextlost"); + this.aborted = true; + }); + + + this.maxAnisotropic = 0; + if (this.enableExtension("EXT_texture_filter_anisotropic")) + this.maxAnisotropic = this.gl.getParameter(this.enableExtension("EXT_texture_filter_anisotropic").MAX_TEXTURE_MAX_ANISOTROPY_EXT); + + + this.maxVaryingVectors = this.gl.getParameter(this.gl.MAX_VARYING_VECTORS); + this.maxTextureUnits = this.gl.getParameter(this.gl.MAX_TEXTURE_IMAGE_UNITS); + this.maxTexSize = this.gl.getParameter(this.gl.MAX_TEXTURE_SIZE); + this.maxUniformsFrag = this.gl.getParameter(this.gl.MAX_FRAGMENT_UNIFORM_VECTORS); + this.maxUniformsVert = this.gl.getParameter(this.gl.MAX_VERTEX_UNIFORM_VECTORS); + this.maxSamples = 0; + if (this.gl.MAX_SAMPLES) this.maxSamples = this.gl.getParameter(this.gl.MAX_SAMPLES); + + if (this.glVersion == 1) + { + this.enableExtension("OES_standard_derivatives"); + const instancingExt = this.enableExtension("ANGLE_instanced_arrays") || this.gl; + + if (instancingExt.vertexAttribDivisorANGLE) + { + this.gl.vertexAttribDivisor = instancingExt.vertexAttribDivisorANGLE.bind(instancingExt); + this.gl.drawElementsInstanced = instancingExt.drawElementsInstancedANGLE.bind(instancingExt); + } + } + + this.DEPTH_FUNCS = [ + this.gl.NEVER, + this.gl.ALWAYS, + this.gl.LESS, + this.gl.LEQUAL, + this.gl.GREATER, + this.gl.GEQUAL, + this.gl.EQUAL, + this.gl.NOTEQUAL + ]; + this.CULL_MODES = [ + null, + this.gl.BACK, + this.gl.FRONT, + this.gl.FRONT_AND_BACK + ]; + } + + getInfo() + { + return { + "glVersion": this.glVersion, + "glRenderer": this.glRenderer, + "glUseHalfFloatTex": this.glUseHalfFloatTex, + "maxVaryingVectors": this.maxVaryingVectors, + "maxTextureUnits": this.maxTextureUnits, + "maxTexSize": this.maxTexSize, + "maxUniformsFrag": this.maxUniformsFrag, + "maxUniformsVert": this.maxUniformsVert, + "maxSamples": this.maxSamples + }; + } + + + + + + /** + * @function popViewPort + * @memberof Context + * @instance + * @description pop viewPort stack + */ + + + popViewPort() + { + this._viewPortStack.pop(); + this._viewPortStack.pop(); + this._viewPortStack.pop(); + this._viewPortStack.pop(); + + if (this._viewPortStack.length == 0) + { + this.setViewPort(0, 0, this.canvasWidth, this.canvasHeight); + // this.gl.viewport(this._viewPort[0], this._viewPort[1], this._viewPort[2], this._viewPort[3]); + // this.setViewPort(this._viewPort[0], this._viewPort[1], this._viewPort[2], this._viewPort[3]); + } + else + { + // this.viewPort = [this._viewPortStack[this._viewPort.length - 4], this._viewPortStack[this._viewPort.length - 3], this._viewPortStack[this._viewPort.length - 2], this._viewPortStack[this._viewPort.length - 1]]; + // this.gl.viewport(this._viewPortStack[this._viewPort.length - 4], this._viewPortStack[this._viewPort.length - 3], this._viewPortStack[this._viewPort.length - 2], this._viewPortStack[this._viewPort.length - 1]); + this.setViewPort(this._viewPortStack[this._viewPort.length - 4], this._viewPortStack[this._viewPort.length - 3], this._viewPortStack[this._viewPort.length - 2], this._viewPortStack[this._viewPort.length - 1]); + } + } + + /** + * @function pushViewPort + * @memberof Context + * @instance + * @description push a new viewport onto stack + * @param {Number} x + * @param {Number} y + * @param {Number} w + * @param {Number} h + */ + + pushViewPort(x, y, w, h) + { + this._viewPortStack.push(x, y, w, h); + this.setViewPort(x, y, w, h); + } + + + // old + getViewPort() + { + return this._viewPort; + } + + // old + resetViewPort() + { + this.gl.viewport(this._viewPort[0], this._viewPort[1], this._viewPort[2], this._viewPort[3]); + } + + // old + setViewPort(x, y, w, h) + { + this._viewPort[0] = Math.round(x); + this._viewPort[1] = Math.round(y); + this._viewPort[2] = Math.round(w); + this._viewPort[3] = Math.round(h); + this.gl.viewport(this._viewPort[0], this._viewPort[1], this._viewPort[2], this._viewPort[3]); + } + + + screenShot(cb, doScreenshotClearAlpha, mimeType, quality) + { + if (doScreenshotClearAlpha) + { + this.gl.clearColor(1, 1, 1, 1); + this.gl.colorMask(false, false, false, true); + this.gl.clear(this.gl.COLOR_BUFFER_BIT); + this.gl.colorMask(true, true, true, true); + } + + if (this.canvas && this.canvas.toBlob) + { + this.canvas.toBlob((blob) => + { + if (cb) cb(blob); + else this._log.log("no screenshot callback..."); + }, mimeType, quality); + } + } + + endFrame() + { + if (this.patch.isEditorMode()) CABLES.GL_MARKER.drawMarkerLayer(this); + + this.setPreviousShader(); + + if (this._vMatrixStack.length() > 0) this.logStackError("view matrix stack length !=0 at end of rendering..."); + if (this._mMatrixStack.length() > 0) this.logStackError("mvmatrix stack length !=0 at end of rendering..."); + if (this._pMatrixStack.length() > 0) this.logStackError("pmatrix stack length !=0 at end of rendering..."); + if (this._glFrameBufferStack.length > 0) this.logStackError("glFrameBuffer stack length !=0 at end of rendering..."); + if (this._stackDepthTest.length > 0) this.logStackError("depthtest stack length !=0 at end of rendering..."); + if (this._stackDepthWrite.length > 0) this.logStackError("depthwrite stack length !=0 at end of rendering..."); + if (this._stackDepthFunc.length > 0) this.logStackError("depthfunc stack length !=0 at end of rendering..."); + if (this._stackBlend.length > 0) this.logStackError("blend stack length !=0 at end of rendering..."); + if (this._stackBlendMode.length > 0) this.logStackError("blendMode stack length !=0 at end of rendering..."); + if (this._shaderStack.length > 0) this.logStackError("this._shaderStack length !=0 at end of rendering..."); + if (this._stackCullFace.length > 0) this.logStackError("this._stackCullFace length !=0 at end of rendering..."); + if (this._stackCullFaceFacing.length > 0) this.logStackError("this._stackCullFaceFacing length !=0 at end of rendering..."); + if (this._viewPortStack.length > 0) this.logStackError("viewport stack length !=0 at end of rendering..."); + + this._frameStarted = false; + + if (this._oldCanvasWidth != this.canvasWidth || this._oldCanvasHeight != this.canvasHeight) + { + this._oldCanvasWidth = this.canvasWidth; + this._oldCanvasHeight = this.canvasHeight; + this.emitEvent("resize"); + } + + if (this._cursor != this._currentCursor) + { + this._currentCursor = this.canvas.style.cursor = this._cursor; + } + + this.emitEvent("endframe"); + + this.fpsCounter.endFrame(); + } + + logStackError(str) + { + if (!this._hadStackError) + { + this._hadStackError = true; + this._log.warn("[" + this.canvas.id + "]: ", str); + } + } + + // shader stack + getShader() + { + if (this._currentShader) if (!this.frameStore || ((this.frameStore.renderOffscreen === true) == this._currentShader.offScreenPass) === true) return this._currentShader; + + for (let i = this._shaderStack.length - 1; i >= 0; i--) if (this._shaderStack[i]) if (this.frameStore.renderOffscreen == this._shaderStack[i].offScreenPass) return this._shaderStack[i]; + } + + getDefaultShader() + { + return this._simpleShader; + } + + /** + * push a shader to the shader stack + * @function pushShader + * @memberof Context + * @instance + * @param {Object} shader + * @function + */ + + pushShader(shader) + { + if (this.frameStore.forceShaderMods) + { + for (let i = 0; i < this.frameStore.forceShaderMods.length; i++) + { + // if (!currentShader.forcedMod && currentShader != this.frameStore.forceShaderMods[i]) + // { + // currentShader.forcedMod = this.frameStore.forceShaderMods[i]; + shader = this.frameStore.forceShaderMods[i].bind(shader, false); + // } + // return currentShader; + // if (this.frameStore.forceShaderMods[i].currentShader() && shader != this.frameStore.forceShaderMods[i].currentShader().shader) + } + } + + this._shaderStack.push(shader); + this._currentShader = shader; + } + + + /** + * pop current used shader from shader stack + * @function popShader + * @memberof Context + * @instance + * @function + */ + setPreviousShader() + { + if (this.frameStore.forceShaderMods) + { + for (let i = 0; i < this.frameStore.forceShaderMods.length; i++) + { + // const a = + this.frameStore.forceShaderMods[i].unbind(false); + // if (a) return; + // this.popShader(); + } + } + + if (this._shaderStack.length === 0) throw new Error("Invalid shader stack pop!"); + this._shaderStack.pop(); + this._currentShader = this._shaderStack[this._shaderStack.length - 1]; + } + + /** + * push a framebuffer to the framebuffer stack + * @function pushGlFrameBuffer + * @memberof Context + * @instance + * @param {Object} framebuffer + * @function + */ + pushGlFrameBuffer(fb) + { + this._glFrameBufferStack.push(fb); + } + + /** + * pop framebuffer stack + * @function popGlFrameBuffer + * @memberof Context + * @instance + * @returns {Object} current framebuffer or null + */ + popGlFrameBuffer() + { + if (this._glFrameBufferStack.length == 0) return null; + this._glFrameBufferStack.pop(); + return this._glFrameBufferStack[this._glFrameBufferStack.length - 1]; + } + + /** + * get current framebuffer + * @function getCurrentFrameBuffer + * @memberof Context + * @instance + * @returns {Object} current framebuffer or null + */ + getCurrentGlFrameBuffer() + { + if (this._glFrameBufferStack.length === 0) return null; + return this._glFrameBufferStack[this._glFrameBufferStack.length - 1]; + } + + /** + * push a framebuffer to the framebuffer stack + * @function pushGlFrameBuffer + * @memberof Context + * @instance + * @param {Framebuffer} framebuffer + */ + pushFrameBuffer(fb) + { + this._frameBufferStack.push(fb); + } + + /** + * pop framebuffer stack + * @function popFrameBuffer + * @memberof Context + * @instance + * @returns {Framebuffer} current framebuffer or null + */ + popFrameBuffer() + { + if (this._frameBufferStack.length == 0) return null; + this._frameBufferStack.pop(); + return this._frameBufferStack[this._frameBufferStack.length - 1]; + } + + /** + * get current framebuffer + * @function getCurrentFrameBuffer + * @memberof Context + * @instance + * @returns {Framebuffer} current framebuffer or null + */ + getCurrentFrameBuffer() + { + if (this._frameBufferStack.length === 0) return null; + return this._frameBufferStack[this._frameBufferStack.length - 1]; + } + + + renderStart(cgl, identTranslate, identTranslateView) + { + this.fpsCounter.startFrame(); + this.pushDepthTest(true); + this.pushDepthWrite(true); + this.pushDepthFunc(cgl.gl.LEQUAL); + this.pushCullFaceFacing(cgl.gl.BACK); + this.pushCullFace(false); + + // if (this.clearCanvasTransparent) + // { + // cgl.gl.clearColor(0, 0, 0, 0); + // cgl.gl.clear(cgl.gl.COLOR_BUFFER_BIT); + // } + // if (this.clearCanvasDepth) cgl.gl.clear(cgl.gl.DEPTH_BUFFER_BIT); + + cgl.setViewPort(0, 0, cgl.canvasWidth, cgl.canvasHeight); + + this._startMatrixStacks(identTranslate, identTranslateView); + + cgl.pushBlendMode(constants_CONSTANTS.BLEND_MODES.BLEND_NORMAL, false); + + for (let i = 0; i < this._textureslots.length; i++) this._textureslots[i] = null; + + this.pushShader(this._simpleShader); + + this._frameStarted = true; + + if (this._onetimeCallbacks.length > 0) + { + for (let i = 0; i < this._onetimeCallbacks.length; i++) this._onetimeCallbacks[i](); + this._onetimeCallbacks.length = 0; + } + + for (let i = 0; i < this._textureslots.length; i++) + { + this.gl.activeTexture(this.gl.TEXTURE0 + i); + this.gl.bindTexture(this.gl.TEXTURE_2D, null); + this._textureslots[i] = null; + } + + this.emitEvent("beginFrame"); + } + + renderEnd(cgl) + { + this._endMatrixStacks(); + + this.popDepthTest(); + this.popDepthWrite(); + this.popDepthFunc(); + this.popCullFaceFacing(); + this.popCullFace(); + this.popBlend(); + this.popBlendMode(); + + cgl.endFrame(); + + this.emitEvent("endFrame"); + } + + getTexture(slot) + { + return this._textureslots[slot]; + } + + hasFrameStarted() + { + return this._frameStarted; + } + + /** + * log warning to console if the rendering of one frame has not been started / handy to check for async problems + * @function checkFrameStarted + * @memberof Context + * @instance + */ + checkFrameStarted(string) + { + if (!this._frameStarted) + { + this._log.warn("frame not started " + string); + this.patch.printTriggerStack(); + } + } + + + setTexture(slot, t, type) + { + this.checkFrameStarted("cgl setTexture"); + + if (t === null) t = CGL.Texture.getEmptyTexture(this).tex; + + // if (!this.gl.isTexture(t)) + // { + // console.log("not a texture!!!!"); return false; + // t = CGL.Texture.getEmptyTexture(this).tex; + // } + + // if (!this.gl.isTexture(t)) + // { + // t = CGL.Texture.getErrorTexture(this).tex; + // // this._log.stack("not a texture!!!!"); + // // return false; + // } + + + if (this._textureslots[slot] != t) + { + this.gl.activeTexture(this.gl.TEXTURE0 + slot); + this.gl.bindTexture(type || this.gl.TEXTURE_2D, t); + this._textureslots[slot] = t; + } + + + return true; + } + + fullScreen() + { + if (this.canvas.requestFullscreen) this.canvas.requestFullscreen(); + else if (this.canvas.mozRequestFullScreen) this.canvas.mozRequestFullScreen(); + else if (this.canvas.webkitRequestFullscreen) this.canvas.webkitRequestFullscreen(); + else if (this.canvas.msRequestFullscreen) this.canvas.msRequestFullscreen(); + } + + + printError(str) + { + if (!this.checkGlErrors) return; + let found = false; + let error = this.gl.getError(); + + if (error != this.gl.NO_ERROR) + { + let errStr = ""; + if (error == this.gl.OUT_OF_MEMORY) errStr = "OUT_OF_MEMORY"; + if (error == this.gl.INVALID_ENUM) errStr = "INVALID_ENUM"; + if (error == this.gl.INVALID_OPERATION) errStr = "INVALID_OPERATION"; + if (error == this.gl.INVALID_FRAMEBUFFER_OPERATION) errStr = "INVALID_FRAMEBUFFER_OPERATION"; + if (error == this.gl.INVALID_VALUE) errStr = "INVALID_VALUE"; + if (error == this.gl.CONTEXT_LOST_WEBGL) + { + this.aborted = true; + errStr = "CONTEXT_LOST_WEBGL"; + } + if (error == this.gl.NO_ERROR) errStr = "NO_ERROR"; + + found = true; + + + this._log.warn("gl error [" + this.canvas.id + "]: ", str, error, errStr); + + if (this.canvas.id.contains("glGuiCanvas")) + if (!this._loggedGlError) + { + this.patch.printTriggerStack(); + this._log.stack("glerror"); + this._loggedGlError = true; + } + } + error = this.gl.getError(); + + return found; + } + + saveScreenshot(filename, cb, pw, ph, noclearalpha) + { + this.patch.renderOneFrame(); + + let w = this.canvas.clientWidth * this.pixelDensity; + let h = this.canvas.clientHeight * this.pixelDensity; + + if (pw) + { + this.canvas.width = pw; + w = pw; + } + if (ph) + { + this.canvas.height = ph; + h = ph; + } + + function padLeft(nr, n, str) + { + return Array(n - String(nr).length + 1).join(str || "0") + nr; + } + + const d = new Date(); + + const dateStr = "".concat(String(d.getFullYear()) + String(d.getMonth() + 1) + String(d.getDate()), "_").concat(padLeft(d.getHours(), 2)).concat(padLeft(d.getMinutes(), 2)).concat(padLeft(d.getSeconds(), 2)); + + if (!filename) filename = "cables_" + dateStr + ".png"; + else filename += ".png"; + + this.patch.cgl.screenShot(function (blob) + { + this.canvas.width = w; + this.canvas.height = h; + + if (blob) + { + const anchor = document.createElement("a"); + + anchor.download = filename; + anchor.href = URL.createObjectURL(blob); + + setTimeout(function () + { + anchor.click(); + if (cb) cb(blob); + }, 100); + } + else + { + this._log.log("screenshot: no blob"); + } + }.bind(this), noclearalpha); + } + + _dispose() + { + this._simpleShader.dispose(); + this.gl = null; + } +} + + +Context.prototype.popShader = Context.prototype.setPreviousShader; +Context.prototype.setShader = Context.prototype.pushShader; + +/** + * execute the callback next frame, once + * @function addNextFrameOnceCallback + * @memberof Context + * @instance + * @param {function} callback + */ +Context.prototype.addNextFrameOnceCallback = function (cb) +{ + if (cb) this._onetimeCallbacks.push(cb); +}; + +// state depthtest + +/** + * push depth testing enabled state + * @function pushDepthTest + * @param {Boolean} enabled + * @memberof Context + * @instance + */ +Context.prototype._stackDepthTest = []; +Context.prototype.pushDepthTest = function (b) +{ + this._stackDepthTest.push(b); + if (!b) this.gl.disable(this.gl.DEPTH_TEST); + else this.gl.enable(this.gl.DEPTH_TEST); +}; +/** + * current state of depth testing + * @function stateCullFace + * @returns {Boolean} enabled + * @memberof Context + * @instance + */ +Context.prototype.stateDepthTest = function () +{ + return this._stackDepthTest[this._stackDepthTest.length - 1]; +}; + +/** + * pop depth testing state + * @function popCullFace + * @memberof Context + * @instance + */ +Context.prototype.popDepthTest = function () +{ + this._stackDepthTest.pop(); + + if (!this._stackDepthTest[this._stackDepthTest.length - 1]) this.gl.disable(this.gl.DEPTH_TEST); + else this.gl.enable(this.gl.DEPTH_TEST); +}; + +// -------------------------------------- +// state depthwrite + +/** + * push depth write enabled state + * @function pushDepthTest + * @param {Boolean} enabled + * @memberof Context + * @instance + */ +Context.prototype._stackDepthWrite = []; +Context.prototype.pushDepthWrite = function (b) +{ + b = b || false; + this._stackDepthWrite.push(b); + this.gl.depthMask(b); +}; + +/** + * current state of depth writing + * @function stateCullFace + * @returns {Boolean} enabled + * @memberof Context + * @instance + */ +Context.prototype.stateDepthWrite = function () +{ + return this._stackDepthWrite[this._stackDepthWrite.length - 1]; +}; + +/** + * pop depth writing state + * @function popCullFace + * @memberof Context + * @instance + */ +Context.prototype.popDepthWrite = function () +{ + this._stackDepthWrite.pop(); + this.gl.depthMask(this._stackDepthWrite[this._stackDepthWrite.length - 1] || false); +}; + + +// -------------------------------------- +// state CullFace + +/** + * push face culling face enabled state + * @function pushCullFaceFacing + * @param {Boolean} enabled + * @memberof Context + * @instance + */ +Context.prototype._stackCullFace = []; +Context.prototype.pushCullFace = function (b) +{ + this._stackCullFace.push(b); + + if (b) this.gl.enable(this.gl.CULL_FACE); + else this.gl.disable(this.gl.CULL_FACE); +}; + +/** + * current state of face culling + * @function stateCullFace + * @returns {Boolean} enabled + * @memberof Context + * @instance + */ +Context.prototype.stateCullFace = function () +{ + return this._stackCullFace[this._stackCullFace.length - 1]; +}; + +/** + * pop face culling enabled state + * @function popCullFace + * @memberof Context + * @instance + */ +Context.prototype.popCullFace = function () +{ + this._stackCullFace.pop(); + + if (this._stackCullFace[this._stackCullFace.length - 1]) this.gl.enable(this.gl.CULL_FACE); + else this.gl.disable(this.gl.CULL_FACE); +}; + + +// -------------------------------------- +// state CullFace Facing + + +/** + * push face culling face side + * @function pushCullFaceFacing + * @param {Number} cgl.gl.FRONT_AND_BACK, cgl.gl.BACK or cgl.gl.FRONT + * @memberof Context + * @instance + */ +Context.prototype._stackCullFaceFacing = []; +Context.prototype.pushCullFaceFacing = function (b) +{ + this._stackCullFaceFacing.push(b); + this.gl.cullFace(this._stackCullFaceFacing[this._stackCullFaceFacing.length - 1]); +}; + +/** + * current state of face culling side + * @function stateCullFaceFacing + * @returns {Boolean} enabled + * @memberof Context + * @instance + */ +Context.prototype.stateCullFaceFacing = function () +{ + return this._stackCullFaceFacing[this._stackCullFaceFacing.length - 1]; +}; + +/** + * pop face culling face side + * @function popCullFaceFacing + * @memberof Context + * @instance + */ +Context.prototype.popCullFaceFacing = function () +{ + this._stackCullFaceFacing.pop(); + if (this._stackCullFaceFacing.length > 0) this.gl.cullFace(this._stackCullFaceFacing[this._stackCullFaceFacing.length - 1]); +}; + + +// -------------------------------------- +// state depthfunc + +Context.prototype._stackDepthFunc = []; + +/** + * enable / disable depth testing + * like `gl.depthFunc(boolean);` + * @function pushDepthFunc + * @memberof Context + * @instance + * @param {Boolean} depthtesting + */ +Context.prototype.pushDepthFunc = function (f) +{ + this._stackDepthFunc.push(f); + this.gl.depthFunc(f); +}; + +/** + * current state of blend + * @function stateDepthFunc + * @memberof Context + * @instance + * @returns {Boolean} depth testing enabled/disabled + */ +Context.prototype.stateDepthFunc = function () +{ + if (this._stackDepthFunc.length > 0) return this._stackDepthFunc[this._stackDepthFunc.length - 1]; + return false; +}; + +/** + * pop depth testing and set the previous state + * @function popDepthFunc + * @memberof Context + * @instance + */ +Context.prototype.popDepthFunc = function () +{ + this._stackDepthFunc.pop(); + if (this._stackDepthFunc.length > 0) this.gl.depthFunc(this._stackDepthFunc[this._stackDepthFunc.length - 1]); +}; + +// -------------------------------------- +// state blending + +Context.prototype._stackBlend = []; + +/** + * enable / disable blend + * like gl.enable(gl.BLEND); / gl.disable(gl.BLEND); + * @function pushBlend + * @memberof Context + * @instance + * @param {Boolean} blending + */ +Context.prototype.pushBlend = function (b) +{ + this._stackBlend.push(b); + if (!b) this.gl.disable(this.gl.BLEND); + else this.gl.enable(this.gl.BLEND); +}; + +/** + * pop blend state and set the previous state + * @function popBlend + * @memberof Context + * @instance + */ +Context.prototype.popBlend = function () +{ + this._stackBlend.pop(); + + if (!this._stackBlend[this._stackBlend.length - 1]) this.gl.disable(this.gl.BLEND); + else this.gl.enable(this.gl.BLEND); +}; + +/** + * current state of blend + * @function stateBlend + * @returns {boolean} blending enabled/disabled + * @memberof Context + * @instance + */ +Context.prototype.stateBlend = function () +{ + return this._stackBlend[this._stackBlend.length - 1]; +}; + +const BLENDS = { + "BLEND_NONE": 0, + "BLEND_NORMAL": 1, + "BLEND_ADD": 2, + "BLEND_SUB": 3, + "BLEND_MUL": 4, +}; + +Context.prototype._stackBlendMode = []; +Context.prototype._stackBlendModePremul = []; + +/** + * push and switch to predefined blendmode (CONSTANTS.BLEND_MODES.BLEND_NONE,CONSTANTS.BLEND_MODES.BLEND_NORMAL,CONSTANTS.BLEND_MODES.BLEND_ADD,CONSTANTS.BLEND_MODES.BLEND_SUB,CONSTANTS.BLEND_MODES.BLEND_MUL) + * @function pushBlendMode + * @memberof Context + * @instance + * @param {Number} blendmode + * @param {Boolean} premultiplied mode + */ +Context.prototype.pushBlendMode = function (blendMode, premul) +{ + this._stackBlendMode.push(blendMode); + this._stackBlendModePremul.push(premul); + + const n = this._stackBlendMode.length - 1; + + this.pushBlend(this._stackBlendMode[n] !== constants_CONSTANTS.BLEND_MODES.BLEND_NONE); + this._setBlendMode(this._stackBlendMode[n], this._stackBlendModePremul[n]); +}; + +/** + * pop predefined blendmode / switch back to previous blendmode + * @function popBlendMode + * @memberof Context + * @instance + */ +Context.prototype.popBlendMode = function () +{ + this._stackBlendMode.pop(); + this._stackBlendModePremul.pop(); + + const n = this._stackBlendMode.length - 1; + + this.popBlend(this._stackBlendMode[n] !== constants_CONSTANTS.BLEND_MODES.BLEND_NONE); + + if (n >= 0) this._setBlendMode(this._stackBlendMode[n], this._stackBlendModePremul[n]); +}; + + +// -------------------------------------- +// state stencil + +Context.prototype._stackStencil = []; + +/** + * enable / disable stencil testing + +* @function pushStencil + * @memberof Context + * @instance + * @param {Boolean} enable + */ +Context.prototype.pushStencil = function (b) +{ + this._stackStencil.push(b); + if (!b) this.gl.disable(this.gl.STENCIL_TEST); + else this.gl.enable(this.gl.STENCIL_TEST); +}; + +/** + * pop stencil test state and set the previous state + * @function popStencil + * @memberof Context + * @instance + */ +Context.prototype.popStencil = function () +{ + this._stackStencil.pop(); + + if (!this._stackStencil[this._stackStencil.length - 1]) this.gl.disable(this.gl.STENCIL_TEST); + else this.gl.enable(this.gl.STENCIL_TEST); +}; + +// -------------------------------------- + + +Context.prototype.glGetAttribLocation = function (prog, name) +{ + const l = this.gl.getAttribLocation(prog, name); + // if (l == -1) + // { + // this._log.warn("get attr loc -1 ", name); + // } + return l; +}; + + +/** + * should an op now draw helpermeshes + * @function shouldDrawHelpers + * @memberof Context + * @instance + */ +Context.prototype.shouldDrawHelpers = function (op) +{ + if (this.frameStore.shadowPass) return false; + if (!op.patch.isEditorMode()) return false; + + // const fb = this.getCurrentFrameBuffer(); + // if (fb && fb.getWidth) + // { + // const fbshould = this.canvasWidth / this.canvasHeight == fb.getWidth() / fb.getHeight(); + // if (!fbshould) return false; + // } + + return gui.shouldDrawOverlay;// || (CABLES.UI.renderHelperCurrent && op.isCurrentUiOp()); +}; + +Context.prototype._setBlendMode = function (blendMode, premul) +{ + const gl = this.gl; + + if (blendMode == constants_CONSTANTS.BLEND_MODES.BLEND_NONE) + { + // this.gl.disable(this.gl.BLEND); + } + else if (blendMode == constants_CONSTANTS.BLEND_MODES.BLEND_ADD) + { + if (premul) + { + gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD); + gl.blendFuncSeparate(gl.ONE, gl.ONE, gl.ONE, gl.ONE); + } + else + { + gl.blendEquation(gl.FUNC_ADD); + gl.blendFunc(gl.SRC_ALPHA, gl.ONE); + } + } + else if (blendMode == constants_CONSTANTS.BLEND_MODES.BLEND_SUB) + { + if (premul) + { + gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD); + gl.blendFuncSeparate(gl.ZERO, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendEquation(gl.FUNC_ADD); + gl.blendFunc(gl.ZERO, gl.ONE_MINUS_SRC_COLOR); + } + } + else if (blendMode == constants_CONSTANTS.BLEND_MODES.BLEND_MUL) + { + if (premul) + { + gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD); + gl.blendFuncSeparate(gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA); + } + else + { + gl.blendEquation(gl.FUNC_ADD); + gl.blendFunc(gl.ZERO, gl.SRC_COLOR); + } + } + else if (blendMode == constants_CONSTANTS.BLEND_MODES.BLEND_NORMAL) + { + if (premul) + { + gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD); + gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD); + gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + } + else + { + this._log.log("setblendmode: unknown blendmode"); + } +}; + +Context.prototype.createMesh = function (geom, options) +{ + if (CABLES.UTILS.isNumeric(options))options = { "glPrimitive": options }; // old constructor fallback... + return new CGL.Mesh(this, geom, options); +}; + + +/** + * set cursor + * @function setCursor + * @memberof Context + * @instance + * @param {String} css cursor string + */ +Context.prototype.setCursor = function (str) +{ + this._cursor = str; +}; + +/** + * enable a webgl extension + * @function enableExtension + * @memberof Context + * @instance + * @param {String} extension name + * @returns {Object} extension object or null + */ +Context.prototype.enableExtension = function (name) +{ + if (!this.gl) return null; + // const start = performance.now(); + + if (this._enabledExtensions.hasOwnProperty(name)) + { + return this._enabledExtensions[name]; + } + + const o = this.gl.getExtension(name); + this._enabledExtensions[name] = o; + + if (!o) + this._log.warn("[cgl_state] extension not available " + name); + else + this._log.log("enabled extension", name); + + return o; +}; + +Context.prototype.checkTextureSize = function (x) +{ + x = x || 1; + x = Math.floor(x); + x = Math.min(x, this.maxTexSize); + x = Math.max(x, 1); + return x; +}; + + + + + +;// CONCATENATED MODULE: ./src/core/core_variable.js + + +/** + * @type {Object} + * @name Variable + * @param {String} name + * @param {String|Number} value + * @memberof Patch + * @constructor + */ +class PatchVariable extends Events +{ + constructor(name, val, type) + { + super(); + this._name = name; + this.type = type; + this.setValue(val); + } + + /** + * keeping this for backwards compatibility in older + * exports before using eventtarget + * + * @param cb + */ + addListener(cb) + { + this.on("change", cb, "var"); + } + + /** + * @function Variable.getValue + * @memberof Variable + * @returns {String|Number|Boolean} + */ + + getValue() + { + return this._v; + } + + /** + * @function getName + * @memberof Variable + * @instance + * @returns {String|Number|Boolean} + * @function + */ + getName() + { + return this._name; + } + + /** + * @function setValue + * @memberof Variable + * @instance + * @returns {String|Number|Boolean} + * @function + */ + setValue(v) + { + this._v = v; + this.emitEvent("change", v, this); + } +} + +/* harmony default export */ const core_variable = (PatchVariable); + +;// CONCATENATED MODULE: ./src/core/core_patch.js + + + + + + + + + + + + + +/** + * Patch class, contains all operators,values,links etc. manages loading and running of the whole patch + * + * see {@link PatchConfig} + * + * @external CABLES + * @namespace Patch + * @hideconstructor + * @param {PatchConfig} config The configuration object. + * @class + * @example + * CABLES.patch=new CABLES.Patch( + * { + * patch:pStr, + * glCanvasId:'glcanvas', + * glCanvasResizeToWindow:true, + * canvas:{powerPreference:"high-performance"}, + * prefixAssetPath:'/assets/', + * prefixJsPath:'/js/', + * onError:function(e){console.log(e);} + * glslPrecision:'highp' + * }); + */ + +const Patch = function (cfg) +{ + EventTarget.apply(this); + + this._log = new Logger("core_patch"); + this.ops = []; + this.settings = {}; + this.config = cfg || + { + "glCanvasResizeToWindow": false, + "prefixAssetPath": "", + "prefixJsPath": "", + "silent": true, + "onError": null, + "onFinishedLoading": null, + "onFirstFrameRendered": null, + "onPatchLoaded": null, + "fpsLimit": 0, + }; + this.timer = new Timer(); + this.freeTimer = new Timer(); + this.animFrameOps = []; + this.animFrameCallbacks = []; + this.gui = false; + CABLES.logSilent = this.silent = true; + this.profiler = null; + this.aborted = false; + this._crashedOps = []; + this._renderOneFrame = false; + this._animReq = null; + this._opIdCache = {}; + this._triggerStack = []; + this.storeObjNames = false; // remove after may release + + this.loading = new LoadingStatus(this); + + this._volumeListeners = []; + this._paused = false; + this._frameNum = 0; + this.instancing = new Instancing(); + this.onOneFrameRendered = null; + this.namedTriggers = {}; + + this._origData = null; + this._frameNext = 0; + this._frameInterval = 0; + this._lastFrameTime = 0; + this._frameWasdelayed = true; + this.frameStore = {}; + this.deSerialized = false; + this.reqAnimTimeStamp = 0; + + this.cgCanvas = null; + + if (!(function () { return !this; }())) console.log("not in strict mode: core patch"); + + this._isLocal = document.location.href.indexOf("file:") === 0; + + if (this.config.hasOwnProperty("silent")) this.silent = CABLES.logSilent = this.config.silent; + if (!this.config.hasOwnProperty("doRequestAnimation")) this.config.doRequestAnimation = true; + + if (!this.config.prefixAssetPath) this.config.prefixAssetPath = ""; + if (!this.config.prefixJsPath) this.config.prefixJsPath = ""; + if (!this.config.masterVolume) this.config.masterVolume = 1.0; + + this._variables = {}; + this._variableListeners = []; + this.vars = {}; + if (cfg && cfg.vars) this.vars = cfg.vars; // vars is old! + + this.cgl = new Context(this); + this.cgp = null; + + this._subpatchOpCache = {}; + + this.cgl.setCanvas(this.config.glCanvasId || this.config.glCanvas || "glcanvas"); + if (this.config.glCanvasResizeToWindow === true) this.cgl.setAutoResize("window"); + if (this.config.glCanvasResizeToParent === true) this.cgl.setAutoResize("parent"); + this.loading.setOnFinishedLoading(this.config.onFinishedLoading); + + if (this.cgl.aborted) this.aborted = true; + if (this.cgl.silent) this.silent = true; + + this.freeTimer.play(); + this.exec(); + + if (!this.aborted) + { + if (this.config.patch) + { + this.deSerialize(this.config.patch); + } + else if (this.config.patchFile) + { + ajax( + this.config.patchFile, + (err, _data) => + { + const data = JSON.parse(_data); + if (err) + { + const txt = ""; + this._log.error("err", err); + this._log.error("data", data); + this._log.error("data", data.msg); + return; + } + this.deSerialize(data); + } + ); + } + this.timer.play(); + } + + console.log("made with https://cables.gl"); // eslint-disable-line +}; + +Patch.prototype.isPlaying = function () +{ + return !this._paused; +}; + +Patch.prototype.isRenderingOneFrame = function () +{ + return this._renderOneFrame; +}; + + +Patch.prototype.renderOneFrame = function () +{ + this._paused = true; + this._renderOneFrame = true; + this.exec(); + this._renderOneFrame = false; +}; + +/** + * current number of frames per second + * @function getFPS + * @memberof Patch + * @instance + * @return {Number} fps + */ +Patch.prototype.getFPS = function () +{ + console.log("deprecated getfps"); + return 0; +}; + +/** + * returns true if patch is opened in editor/gui mode + * @function isEditorMode + * @memberof Patch + * @instance + * @return {Boolean} editor mode + */ +Patch.prototype.isEditorMode = function () +{ + return this.config.editorMode === true; +}; + +/** + * pauses patch execution + * @function pause + * @memberof Patch + * @instance + */ +Patch.prototype.pause = function () +{ + cancelAnimationFrame(this._animReq); + this.emitEvent("pause"); + this._animReq = null; + this._paused = true; + this.freeTimer.pause(); +}; + +/** + * resumes patch execution + * @function resume + * @memberof Patch + * @instance + */ +Patch.prototype.resume = function () +{ + if (this._paused) + { + cancelAnimationFrame(this._animReq); + this._paused = false; + this.freeTimer.play(); + this.emitEvent("resume"); + this.exec(); + } +}; + +/** + * set volume [0-1] + * @function setVolume + * @param {Number} volume + * @memberof Patch + * @instance + */ +Patch.prototype.setVolume = function (v) +{ + this.config.masterVolume = v; + for (let i = 0; i < this._volumeListeners.length; i++) this._volumeListeners[i].onMasterVolumeChanged(v); +}; + + +/** + * get asset path + * @function getAssetPath + * @memberof Patch + * @instance + */ +Patch.prototype.getAssetPath = function (patchId = null) +{ + if (this.isEditorMode()) + { + let id = patchId || gui.project()._id; + return "/assets/" + id + "/"; + } + else if (document.location.href.indexOf("cables.gl") > 0 || document.location.href.indexOf("cables.local") > 0) + { + const parts = document.location.pathname.split("/"); + let id = patchId || parts[parts.length - 1]; + return "/assets/" + id + "/"; + } + else if (this.config.hasOwnProperty("assetPath")) + { + return this.config.assetPath; + } + else + { + return "assets/"; + } +}; + +/** + * get js path + * @function getJsPath + * @memberof Patch + * @instance + */ +Patch.prototype.getJsPath = function () +{ + if (this.config.hasOwnProperty("jsPath")) + { + return this.config.jsPath; + } + else + { + return "js/"; + } +}; + +/** + * get url/filepath for a filename + * this uses prefixAssetpath in exported patches + * @function getFilePath + * @memberof Patch + * @instance + * @param {String} filename + * @return {String} url + */ +Patch.prototype.getFilePath = function (filename) +{ + if (!filename) return filename; + filename = String(filename); + if (filename.indexOf("https:") === 0 || filename.indexOf("http:") === 0) return filename; + if (filename.indexOf("data:") === 0) return filename; + if (filename.indexOf("file:") === 0) return filename; + + filename = filename.replace("//", "/"); + return this.config.prefixAssetPath + filename + (this.config.suffixAssetPath || ""); +}; + +Patch.prototype.clear = function () +{ + this.emitEvent("patchClearStart"); + this.cgl.TextureEffectMesh = null; + this.animFrameOps.length = 0; + this.timer = new Timer(); + while (this.ops.length > 0) this.deleteOp(this.ops[0].id); + + this._opIdCache = {}; + this.emitEvent("patchClearEnd"); +}; + +Patch.getOpClass = function (objName) +{ + const parts = objName.split("."); + let opObj = null; + + try + { + if (parts.length == 2) opObj = window[parts[0]][parts[1]]; + else if (parts.length == 3) opObj = window[parts[0]][parts[1]][parts[2]]; + else if (parts.length == 4) opObj = window[parts[0]][parts[1]][parts[2]][parts[3]]; + else if (parts.length == 5) opObj = window[parts[0]][parts[1]][parts[2]][parts[3]][parts[4]]; + else if (parts.length == 6) opObj = window[parts[0]][parts[1]][parts[2]][parts[3]][parts[4]][parts[5]]; + else if (parts.length == 7) opObj = window[parts[0]][parts[1]][parts[2]][parts[3]][parts[4]][parts[5]][parts[6]]; + else if (parts.length == 8) opObj = window[parts[0]][parts[1]][parts[2]][parts[3]][parts[4]][parts[5]][parts[6]][parts[7]]; + else if (parts.length == 9) opObj = window[parts[0]][parts[1]][parts[2]][parts[3]][parts[4]][parts[5]][parts[6]][parts[7]][parts[8]]; + else if (parts.length == 10) opObj = window[parts[0]][parts[1]][parts[2]][parts[3]][parts[4]][parts[5]][parts[6]][parts[7]][parts[8]][parts[9]]; + return opObj; + } + catch (e) + { + return null; + } +}; + +Patch.prototype.createOp = function (identifier, id, opName = null) +{ + let op = null; + let objName = ""; + + try + { + if (!identifier) + { + console.error("createop identifier false", identifier); + console.log((new Error()).stack); + return; + } + if (identifier.indexOf("Ops.") === -1) + { + // this should be a uuid, not a namespace + // creating ops by id should be the default way from now on! + const opId = identifier; + + + + if (CABLES.OPS[opId]) + { + objName = CABLES.OPS[opId].objName; + op = new CABLES.OPS[opId].f(this, objName, id, opId); + op.opId = opId; + } + else + { + if (opName) + { + identifier = opName; + console.log("could not find op by id: " + opId); + } + else + { + throw new Error("could not find op by id: " + opId, { "cause": "opId:" + opId }); + } + } + } + + if (!op) + { + // fallback: create by objname! + objName = identifier; + const parts = identifier.split("."); + const opObj = Patch.getOpClass(objName); + + if (!opObj) + { + this.emitEvent("criticalError", { "title": "unknown op" + objName, "text": "unknown op: " + objName }); + + this._log.error("unknown op: " + objName); + throw new Error("unknown op: " + objName); + } + else + { + if (parts.length == 2) op = new window[parts[0]][parts[1]](this, objName, id); + else if (parts.length == 3) op = new window[parts[0]][parts[1]][parts[2]](this, objName, id); + else if (parts.length == 4) op = new window[parts[0]][parts[1]][parts[2]][parts[3]](this, objName, id); + else if (parts.length == 5) op = new window[parts[0]][parts[1]][parts[2]][parts[3]][parts[4]](this, objName, id); + else if (parts.length == 6) op = new window[parts[0]][parts[1]][parts[2]][parts[3]][parts[4]][parts[5]](this, objName, id); + else if (parts.length == 7) op = new window[parts[0]][parts[1]][parts[2]][parts[3]][parts[4]][parts[5]][parts[6]](this, objName, id); + else if (parts.length == 8) op = new window[parts[0]][parts[1]][parts[2]][parts[3]][parts[4]][parts[5]][parts[6]][parts[7]](this, objName, id); + else if (parts.length == 9) op = new window[parts[0]][parts[1]][parts[2]][parts[3]][parts[4]][parts[5]][parts[6]][parts[7]][parts[8]](this, objName, id); + else if (parts.length == 10) op = new window[parts[0]][parts[1]][parts[2]][parts[3]][parts[4]][parts[5]][parts[6]][parts[7]][parts[8]][parts[9]](this, objName, id); + else console.log("parts.length", parts.length); + } + + if (op) + { + op.opId = null; + for (const i in CABLES.OPS) + { + if (CABLES.OPS[i].objName == objName) op.opId = i; + } + } + } + } + catch (e) + { + this._crashedOps.push(objName); + + this.emitEvent("exceptionOp", e, objName, op); + + if (!this.isEditorMode()) + { + this._log.error(e); + this._log.error("[instancing error] " + objName, e); + + if (CABLES.api) CABLES.api.sendErrorReport(e); + this.exitError("INSTANCE_ERR", "Instancing Error 1" + objName, e); + throw new Error("instancing error 1" + objName); + } + } + + if (op) + { + op._objName = objName; + op.patch = this; + } + else + { + this._log.log("no op was created!?", identifier, id); + } + return op; +}; + +/** + * create a new op in patch + * @function addOp + * @memberof Patch + * @instance + * @param {String} opIdentifier, uuid or name, e.g. Ops.Math.Sum + * @param {Object} uiAttribs Attributes + * @param {String} id + * @param {boolean} fromDeserialize + * @param {String} opName, e.g. Ops.Math.Sum + * @example + * // add invisible op + * patch.addOp('Ops.Math.Sum', { showUiAttribs: false }); + */ +Patch.prototype.addOp = function (opIdentifier, uiAttribs, id, fromDeserialize, opName) +{ + const op = this.createOp(opIdentifier, id, opName); + + if (op) + { + uiAttribs = uiAttribs || {}; + if (uiAttribs.hasOwnProperty("errors")) delete uiAttribs.errors; + if (uiAttribs.hasOwnProperty("error")) delete uiAttribs.error; + uiAttribs.subPatch = uiAttribs.subPatch || 0; + + op.setUiAttribs(uiAttribs); + if (op.onCreate) op.onCreate(); + + if (op.hasOwnProperty("onAnimFrame")) this.addOnAnimFrame(op); + if (op.hasOwnProperty("onMasterVolumeChanged")) this._volumeListeners.push(op); + + if (this._opIdCache[op.id]) + { + console.log("opid with id " + op.id + " already exists in patch!"); + this.deleteOp(op.id); // strange with subpatch ops: why is this needed, somehow ops get added twice ???..... + // return; + } + + this.ops.push(op); + this._opIdCache[op.id] = op; + + if (this._subPatchCacheAdd) this._subPatchCacheAdd(uiAttribs.subPatch, op); + this.emitEvent("onOpAdd", op, fromDeserialize); + + if (op.init) op.init(); + + op.emitEvent("init", fromDeserialize); + } + else + { + this._log.error("addop: no op....."); + } + + return op; +}; + +Patch.prototype.addOnAnimFrame = function (op) +{ + for (let i = 0; i < this.animFrameOps.length; i++) if (this.animFrameOps[i] == op) { return; } + + this.animFrameOps.push(op); +}; + +Patch.prototype.removeOnAnimFrame = function (op) +{ + for (let i = 0; i < this.animFrameOps.length; i++) + { + if (this.animFrameOps[i] == op) + { + this.animFrameOps.splice(i, 1); + return; + } + } +}; + +Patch.prototype.addOnAnimFrameCallback = function (cb) +{ + this.animFrameCallbacks.push(cb); +}; + +Patch.prototype.removeOnAnimCallback = function (cb) +{ + for (let i = 0; i < this.animFrameCallbacks.length; i++) + { + if (this.animFrameCallbacks[i] == cb) + { + this.animFrameCallbacks.splice(i, 1); + return; + } + } +}; + +Patch.prototype.deleteOp = function (opid, tryRelink, reloadingOp) +{ + let found = false; + for (const i in this.ops) + { + if (this.ops[i].id == opid) + { + const op = this.ops[i]; + let reLinkP1 = null; + let reLinkP2 = null; + + if (op) + { + found = true; + if (tryRelink) + { + if (op.portsIn.length > 0 && op.portsIn[0].isLinked() && (op.portsOut.length > 0 && op.portsOut[0].isLinked())) + { + if (op.portsIn[0].getType() == op.portsOut[0].getType() && op.portsIn[0].links[0]) + { + reLinkP1 = op.portsIn[0].links[0].getOtherPort(op.portsIn[0]); + reLinkP2 = op.portsOut[0].links[0].getOtherPort(op.portsOut[0]); + } + } + } + + const opToDelete = this.ops[i]; + opToDelete.removeLinks(); + + if (this.onDelete) + { + // todo: remove + console.log("deprecated this.onDelete", this.onDelete); + this.onDelete(opToDelete); + } + + this.ops.splice(i, 1); + opToDelete.emitEvent("delete", opToDelete); + this.emitEvent("onOpDelete", opToDelete, reloadingOp); + + if (this.clearSubPatchCache) this.clearSubPatchCache(opToDelete.uiAttribs.subPatch); + + if (opToDelete.onDelete) opToDelete.onDelete(reloadingOp); + opToDelete.cleanUp(); + + if (reLinkP1 !== null && reLinkP2 !== null) + { + this.link(reLinkP1.op, reLinkP1.getName(), reLinkP2.op, reLinkP2.getName()); + } + + delete this._opIdCache[opid]; + break; + } + } + } + + if (!found) console.log("core patch deleteop: not found...", opid); +}; + +Patch.prototype.getFrameNum = function () +{ + return this._frameNum; +}; + +Patch.prototype.emitOnAnimFrameEvent = function (time, delta) +{ + time = time || this.timer.getTime(); + + for (let i = 0; i < this.animFrameCallbacks.length; ++i) + if (this.animFrameCallbacks[i]) + this.animFrameCallbacks[i](time, this._frameNum, delta); + + for (let i = 0; i < this.animFrameOps.length; ++i) + if (this.animFrameOps[i].onAnimFrame) + this.animFrameOps[i].onAnimFrame(time, this._frameNum, delta); +}; + +Patch.prototype.renderFrame = function (timestamp) +{ + this.timer.update(this.reqAnimTimeStamp); + this.freeTimer.update(this.reqAnimTimeStamp); + const time = this.timer.getTime(); + const startTime = performance.now(); + this.cgl.frameStartTime = this.timer.getTime(); + + const delta = timestamp - this.reqAnimTimeStamp || timestamp; + + this.emitOnAnimFrameEvent(null, delta); + + this.cgl.profileData.profileFrameDelta = delta; + this.reqAnimTimeStamp = timestamp; + this.cgl.profileData.profileOnAnimFrameOps = performance.now() - startTime; + + this.emitEvent("onRenderFrame", time); + + this._frameNum++; + if (this._frameNum == 1) + { + if (this.config.onFirstFrameRendered) this.config.onFirstFrameRendered(); + } +}; + +Patch.prototype.exec = function (timestamp) +{ + if (!this._renderOneFrame && (this._paused || this.aborted)) return; + this.emitEvent("reqAnimFrame"); + cancelAnimationFrame(this._animReq); + + this.config.fpsLimit = this.config.fpsLimit || 0; + if (this.config.fpsLimit) + { + this._frameInterval = 1000 / this.config.fpsLimit; + } + + const now = CABLES.now(); + const frameDelta = now - this._frameNext; + + if (this.isEditorMode()) + { + if (!this._renderOneFrame) + { + if (now - this._lastFrameTime >= 500 && this._lastFrameTime !== 0 && !this._frameWasdelayed) + { + this._lastFrameTime = 0; + setTimeout(this.exec.bind(this), 500); + this.emitEvent("renderDelayStart"); + this._frameWasdelayed = true; + return; + } + } + } + + if (this._renderOneFrame || this.config.fpsLimit === 0 || frameDelta > this._frameInterval || this._frameWasdelayed) + { + this.renderFrame(timestamp); + + if (this._frameInterval) this._frameNext = now - (frameDelta % this._frameInterval); + } + + if (this._frameWasdelayed) + { + this.emitEvent("renderDelayEnd"); + this._frameWasdelayed = false; + } + + if (this._renderOneFrame) + { + if (this.onOneFrameRendered) this.onOneFrameRendered(); // todo remove everywhere and use propper event... + this.emitEvent("renderedOneFrame"); + this._renderOneFrame = false; + } + + + if (this.config.doRequestAnimation) this._animReq = this.cgl.canvas.ownerDocument.defaultView.requestAnimationFrame(this.exec.bind(this)); +}; + +/** + * link two ops/ports + * @function link + * @memberof Patch + * @instance + * @param {Op} op1 + * @param {String} portName1 + * @param {Op} op2 + * @param {String} portName2 + */ +Patch.prototype.link = function (op1, port1Name, op2, port2Name, lowerCase, fromDeserialize) +{ + if (!op1) + { + console.warn("link: op1 is null "); + return; + } + if (!op2) + { + console.warn("link: op2 is null"); + return; + } + + const port1 = op1.getPort(port1Name, lowerCase); + const port2 = op2.getPort(port2Name, lowerCase); + + if (!port1) + { + console.warn("port1 not found! " + port1Name + "(" + op1.objName + ")"); + return; + } + + if (!port2) + { + console.warn("port2 not found! " + port2Name + " of " + op2.name + "(" + op2.objName + ")", op2); + return; + } + + if (!port1.shouldLink(port1, port2) || !port2.shouldLink(port1, port2)) + { + return false; + } + + if (Link.canLink(port1, port2)) + { + const link = new Link(this); + link.link(port1, port2); + + this.emitEvent("onLink", port1, port2, link, fromDeserialize); + return link; + } +}; + +Patch.prototype.serialize = function (options) +{ + const obj = {}; + + options = options || {}; + obj.ops = []; + obj.settings = this.settings; + for (const i in this.ops) + { + const op = this.ops[i]; + obj.ops.push(op.getSerialized()); + } + + cleanJson(obj); + + if (options.asObject) return obj; + return JSON.stringify(obj); +}; + +Patch.prototype.getOpsByRefId = function (refId) +{ + const perf = CABLES.UI.uiProfiler.start("[corepatchetend] getOpsByRefId"); + const refOps = []; + const ops = gui.corePatch().ops; + for (let i = 0; i < ops.length; i++) + if (ops[i].storage && ops[i].storage.ref == refId) refOps.push(ops[i]); + perf.finish(); + return refOps; +}; + + +Patch.prototype.getOpById = function (opid) +{ + return this._opIdCache[opid]; +}; + +Patch.prototype.getOpsByName = function (name) +{ + // TODO: is this still needed ? unclear behaviour.... + const arr = []; + for (const i in this.ops) + if (this.ops[i].name == name) arr.push(this.ops[i]); + return arr; +}; + +Patch.prototype.getOpsByObjName = function (name) +{ + const arr = []; + for (const i in this.ops) + if (this.ops[i].objName == name) arr.push(this.ops[i]); + return arr; +}; + +Patch.prototype.getOpsByOpId = function (opid) +{ + const arr = []; + for (const i in this.ops) + if (this.ops[i].opId == opid) arr.push(this.ops[i]); + return arr; +}; + +Patch.prototype.loadLib = function (which) +{ + ajaxSync( + "/ui/libs/" + which + ".js", + (err, res) => + { + const se = document.createElement("script"); + se.type = "text/javascript"; + se.text = res; + document.getElementsByTagName("head")[0].appendChild(se); + }, + "GET", + ); + // open and send a synchronous request + // xhrObj.open('GET', '/ui/libs/'+which+'.js', false); + // xhrObj.send(''); + // add the returned content to a newly created script tag +}; + + +Patch.prototype.getSubPatchOp = function (patchId, objName) +{ + for (const i in this.ops) + if (this.ops[i].uiAttribs && this.ops[i].uiAttribs.subPatch == patchId && this.ops[i].objName == objName) + return this.ops[i]; + return false; +}; + +Patch.prototype._addLink = function (opinid, opoutid, inName, outName) +{ + return this.link(this.getOpById(opinid), inName, this.getOpById(opoutid), outName, false, true); +}; + +Patch.prototype.deSerialize = function (obj, options) +{ + options = options || { "genIds": false, "createRef": false }; + if (this.aborted) return; + const newOps = []; + const loadingId = this.loading.start("core", "deserialize"); + + this.namespace = obj.namespace || ""; + this.name = obj.name || ""; + + if (typeof obj === "string") obj = JSON.parse(obj); + + this.settings = obj.settings; + + this.emitEvent("patchLoadStart"); + + if (window.logStartup)logStartup("add " + obj.ops.length + " ops... "); + + const addedOps = []; + // add ops... + for (let iop = 0; iop < obj.ops.length; iop++) + { + const start = CABLES.now(); + const opData = obj.ops[iop]; + let op = null; + + try + { + if (opData.opId) op = this.addOp(opData.opId, opData.uiAttribs, opData.id, true, opData.objName); + else op = this.addOp(opData.objName, opData.uiAttribs, opData.id, true); + } + catch (e) + { + console.log("[instancing error] op data:", opData, e); + throw new Error("could not create op by id: <b>" + (opData.objName || opData.opId) + "</b> (" + opData.id + ")"); + } + + if (op) + { + addedOps.push(op); + if (options.genIds) op.id = shortId(); + op.portsInData = opData.portsIn; + op._origData = JSON.parse(JSON.stringify(opData)); + op.storage = opData.storage; + // if (opData.hasOwnProperty("disabled"))op.setEnabled(!opData.disabled); + + for (const ipi in opData.portsIn) + { + const objPort = opData.portsIn[ipi]; + if (objPort && objPort.hasOwnProperty("name")) + { + // console.log("load poirt data,objPort", objPort.name, objPort); + const port = op.getPort(objPort.name); + + if (port && (port.uiAttribs.display == "bool" || port.uiAttribs.type == "bool") && !isNaN(objPort.value)) objPort.value = objPort.value == true ? 1 : 0; + if (port && objPort.value !== undefined && port.type != CONSTANTS.OP.OP_PORT_TYPE_TEXTURE) port.set(objPort.value); + + if (port) + { + port.deSerializeSettings(objPort); + } + else + { + console.log("preserve", objPort.name, objPort.value); + op.preservedPortValues = op.preservedPortValues || {}; + op.preservedPortValues[objPort.name] = objPort.value; + } + } + } + + for (const ipo in opData.portsOut) + { + const objPort = opData.portsOut[ipo]; + if (objPort && objPort.hasOwnProperty("name")) + { + const port2 = op.getPort(objPort.name); + if (port2 && port2.type != CONSTANTS.OP.OP_PORT_TYPE_TEXTURE && objPort.hasOwnProperty("value")) + port2.set(obj.ops[iop].portsOut[ipo].value); + + if (port2 && objPort.expose) port2.setUiAttribs({ "expose": true }); + } + } + newOps.push(op); + } + + const timeused = Math.round(100 * (CABLES.now() - start)) / 100; + if (!this.silent && timeused > 5) console.log("long op init ", obj.ops[iop].objName, timeused); + } + if (window.logStartup)logStartup("add ops done"); + + for (const i in this.ops) + { + if (this.ops[i].onLoadedValueSet) + { + this.ops[i].onLoadedValueSet(this.ops[i]._origData); + this.ops[i].onLoadedValueSet = null; + this.ops[i]._origData = null; + } + this.ops[i].emitEvent("loadedValueSet"); + } + + if (window.logStartup)logStartup("creating links"); + + if (options.opsCreated)options.opsCreated(addedOps); + // create links... + if (obj.ops) + { + for (let iop = 0; iop < obj.ops.length; iop++) + { + if (obj.ops[iop].portsIn) + { + for (let ipi2 = 0; ipi2 < obj.ops[iop].portsIn.length; ipi2++) + { + if (obj.ops[iop].portsIn[ipi2] && obj.ops[iop].portsIn[ipi2].links) + { + for (let ili = 0; ili < obj.ops[iop].portsIn[ipi2].links.length; ili++) + { + const l = this._addLink( + obj.ops[iop].portsIn[ipi2].links[ili].objIn, + obj.ops[iop].portsIn[ipi2].links[ili].objOut, + obj.ops[iop].portsIn[ipi2].links[ili].portIn, + obj.ops[iop].portsIn[ipi2].links[ili].portOut); + + console.log("aaaa", l); + + + // const took = performance.now - startTime; + // if (took > 100)console.log(obj().ops[iop].portsIn[ipi2].links[ili].objIn, obj.ops[iop].portsIn[ipi2].links[ili].objOut, took); + } + } + } + } + if (obj.ops[iop].portsOut) + for (let ipi2 = 0; ipi2 < obj.ops[iop].portsOut.length; ipi2++) + if (obj.ops[iop].portsOut[ipi2] && obj.ops[iop].portsOut[ipi2].links) + { + for (let ili = 0; ili < obj.ops[iop].portsOut[ipi2].links.length; ili++) + { + if (obj.ops[iop].portsOut[ipi2].links[ili]) + { + if (obj.ops[iop].portsOut[ipi2].links[ili].subOpRef) + { + // lost link + const outOp = this.getOpById(obj.ops[iop].portsOut[ipi2].links[ili].objOut); + let dstOp = null; + let theSubPatch = 0; + + for (let i = 0; i < this.ops.length; i++) + { + if ( + this.ops[i].storage && + this.ops[i].storage.ref == obj.ops[iop].portsOut[ipi2].links[ili].subOpRef && + outOp.uiAttribs.subPatch == this.ops[i].uiAttribs.subPatch + ) + { + theSubPatch = this.ops[i].patchId.get(); + break; + } + } + + for (let i = 0; i < this.ops.length; i++) + { + if ( + this.ops[i].storage && + this.ops[i].storage.ref == obj.ops[iop].portsOut[ipi2].links[ili].refOp && + this.ops[i].uiAttribs.subPatch == theSubPatch) + { + dstOp = this.ops[i]; + break; + } + } + + if (!dstOp) this._log.warn("could not find op for lost link"); + else + { + const l = this._addLink( + dstOp.id, + obj.ops[iop].portsOut[ipi2].links[ili].objOut, + + obj.ops[iop].portsOut[ipi2].links[ili].portIn, + obj.ops[iop].portsOut[ipi2].links[ili].portOut); + } + } + else + { + const l = this._addLink(obj.ops[iop].portsOut[ipi2].links[ili].objIn, obj.ops[iop].portsOut[ipi2].links[ili].objOut, obj.ops[iop].portsOut[ipi2].links[ili].portIn, obj.ops[iop].portsOut[ipi2].links[ili].portOut); + + if (!l) + { + const op1 = this.getOpById(obj.ops[iop].portsOut[ipi2].links[ili].objIn); + const op2 = this.getOpById(obj.ops[iop].portsOut[ipi2].links[ili].objOut); + + if (!op1)console.log("could not find link op1"); + if (!op2)console.log("could not find link op2"); + + const p1Name = obj.ops[iop].portsOut[ipi2].links[ili].portIn; + + if (op1 && !op1.getPort(p1Name)) + { + console.log("PRESERVE port 1 not found", p1Name); + + op1.preservedPortLinks[p1Name] = op1.preservedPortLinks[p1Name] || []; + op1.preservedPortLinks[p1Name].push(obj.ops[iop].portsOut[ipi2].links[ili]); + } + + const p2Name = obj.ops[iop].portsOut[ipi2].links[ili].portOut; + if (op2 && !op2.getPort(p2Name)) + { + console.log("PRESERVE port 2 not found", obj.ops[iop].portsOut[ipi2].links[ili].portOut); + op2.preservedPortLinks[p1Name] = op2.preservedPortLinks[p1Name] || []; + op2.preservedPortLinks[p1Name].push(obj.ops[iop].portsOut[ipi2].links[ili]); + } + } + } + } + } + } + } + } + + if (window.logStartup)logStartup("calling ops onloaded"); + + for (const i in this.ops) + { + if (this.ops[i].onLoaded) + { + // TODO: deprecate!!! + this.ops[i].onLoaded(); + this.ops[i].onLoaded = null; + } + } + + if (window.logStartup)logStartup("initializing ops..."); + for (const i in this.ops) + { + if (this.ops[i].init) + { + this.ops[i].init(); + this.ops[i].init = null; + } + } + + if (window.logStartup)logStartup("initializing vars..."); + + if (this.config.variables) + for (const varName in this.config.variables) + this.setVarValue(varName, this.config.variables[varName]); + + if (window.logStartup)logStartup("initializing var ports"); + + for (const i in this.ops) + { + this.ops[i].initVarPorts(); + delete this.ops[i].uiAttribs.pasted; + } + + setTimeout(() => { this.loading.finished(loadingId); }, 100); + + if (window.logStartup)logStartup("calling onPatchLoaded/patchLoadEnd"); + + if (this.config.onPatchLoaded) this.config.onPatchLoaded(this); + + this.deSerialized = true; + this.emitEvent("patchLoadEnd", newOps, obj, options.genIds); +}; + +Patch.prototype.profile = function (enable) +{ + this.profiler = new Profiler(this); + for (const i in this.ops) + { + this.ops[i].profile(enable); + } +}; + +// ---------------------- + +/** + * set variable value + * @function setVariable + * @memberof Patch + * @instance + * @param {String} name of variable + * @param {Number|String|Boolean} value + */ +Patch.prototype.setVariable = function (name, val) +{ + // if (this._variables.hasOwnProperty(name)) + if (this._variables[name] !== undefined) + { + this._variables[name].setValue(val); + } + else + { + console.log("variable " + name + " not found!"); + } +}; + +Patch.prototype._sortVars = function () +{ + if (!this.isEditorMode()) return; + const ordered = {}; + Object.keys(this._variables).sort( + (a, b) => + { return a.localeCompare(b, "en", { "sensitivity": "base" }); } + ).forEach((key) => + { + ordered[key] = this._variables[key]; + }); + this._variables = ordered; +}; + +/** + * has variable + * @function hasVariable + * @memberof Patch + * @instance + * @param {String} name of variable + */ +Patch.prototype.hasVar = function (name) +{ + return this._variables[name] !== undefined; + + // return this._variables.hasOwnProperty(name); +}; + +// used internally +Patch.prototype.setVarValue = function (name, val, type) +{ + if (this.hasVar(name)) + { + this._variables[name].setValue(val); + } + else + { + this._variables[name] = new core_variable(name, val, type); + this._sortVars(); + this.emitEvent("variablesChanged"); + } + return this._variables[name]; +}; +// old? +Patch.prototype.getVarValue = function (name, val) +{ + if (this._variables.hasOwnProperty(name)) return this._variables[name].getValue(); +}; + +/** + * @function getVar + * @memberof Patch + * @instance + * @param {String} name + * @return {Variable} variable + */ +Patch.prototype.getVar = function (name) +{ + if (this._variables.hasOwnProperty(name)) return this._variables[name]; +}; + + +Patch.prototype.deleteVar = function (name) +{ + for (let i = 0; i < this.ops.length; i++) + for (let j = 0; j < this.ops[i].portsIn.length; j++) + if (this.ops[i].portsIn[j].getVariableName() == name) + this.ops[i].portsIn[j].setVariable(null); + + delete this._variables[name]; + this.emitEvent("variableDeleted", name); + this.emitEvent("variablesChanged"); +}; + +/** + * @function getVars + * @memberof Patch + * @instance + * @return {Array<Variable>} variables + * @function + */ +Patch.prototype.getVars = function (t) +{ + if (t === undefined) return this._variables; + + const vars = []; + if (t == CABLES.OP_PORT_TYPE_STRING) t = "string"; + if (t == CABLES.OP_PORT_TYPE_VALUE) t = "number"; + if (t == CABLES.OP_PORT_TYPE_ARRAY) t = "array"; + if (t == CABLES.OP_PORT_TYPE_OBJECT) t = "object"; + + for (const i in this._variables) + { + if (!this._variables[i].type || this._variables[i].type == t) vars.push(this._variables[i]); + } + return vars; +}; + +/** + * @function exitError + * @memberof Patch + * @instance + * @description cancel patch execution and quit showing an errormessage + * @function + */ +Patch.prototype.exitError = function (errorId, errorMessage, ex) +{ + this.aborted = true; + + if (this && this.config && this.config.onError) + { + this.config.onError(errorId, errorMessage); + } + else + { + if (!this.isEditorMode()) + { + const newDiv = document.createElement("div"); + + const rect = this.cgl.canvas.getBoundingClientRect(); + + newDiv.setAttribute("style", "position:absolute;border:5px solid red;padding:15px;background-color:black;color:white;font-family:monospace;"); + newDiv.style.top = rect.top + "px"; + newDiv.style.left = rect.left + "px"; + let str = "cables - An error occured:<br/>"; + str += "[" + errorId + "] - " + errorMessage; + if (ex)str += "<br/>Exception: " + ex.message; + newDiv.innerHTML = str; + + const pe = this.cgl.canvas.parentElement; + + while (pe.hasChildNodes()) pe.removeChild(pe.lastChild); + + document.body.appendChild(newDiv); + } + } +}; + +/** + * @function preRenderOps + * @memberof Patch + * @instance + * @description invoke pre rendering of ops + * @function + */ +Patch.prototype.preRenderOps = function () +{ + this._log.log("prerendering..."); + + for (let i = 0; i < this.ops.length; i++) + { + if (this.ops[i].preRender) + { + this.ops[i].preRender(); + this._log.log("prerender " + this.ops[i].objName); + } + } +}; + +/** + * @function dispose + * @memberof Patch + * @instance + * @description stop, dispose and cleanup patch + */ +Patch.prototype.dispose = function () +{ + this.pause(); + this.clear(); + this.cgl.dispose(); +}; + +Patch.prototype.pushTriggerStack = function (p) +{ + this._triggerStack.push(p); +}; + +Patch.prototype.popTriggerStack = function () +{ + this._triggerStack.pop(); +}; + +Patch.prototype.printTriggerStack = function () +{ + if (this._triggerStack.length == 0) + { + // console.log("stack length", this._triggerStack.length); // eslint-disable-line + return; + } + console.groupCollapsed( // eslint-disable-line + "trigger port stack " + this._triggerStack[this._triggerStack.length - 1].op.name + "." + this._triggerStack[this._triggerStack.length - 1].name, + ); + + const rows = []; + for (let i = 0; i < this._triggerStack.length; i++) + { + rows.push(i + ". " + this._triggerStack[i].op.name + " " + this._triggerStack[i].name); + } + + console.table(rows); // eslint-disable-line + console.groupEnd(); // eslint-disable-line +}; + +/** + * returns document object of the patch could be != global document object when opening canvas ina popout window + * @function getDocument + * @memberof Patch + * @instance + * @return {Object} document + */ +Patch.prototype.getDocument = function () +{ + return this.cgl.canvas.ownerDocument; +}; + +Patch.replaceOpIds = function (json, options) +{ + const opids = {}; + for (const i in json.ops) + { + opids[json.ops[i].id] = json.ops[i]; + } + + for (const j in json.ops) + { + for (const k in json.ops[j].portsOut) + { + const links = json.ops[j].portsOut[k].links; + if (links) + { + let l = links.length; + + while (l--) + { + if (links[l] && (!opids[links[l].objIn] || !opids[links[l].objOut])) + { + if (!options.doNotUnlinkLostLinks) + { + links.splice(l, 1); + } + else + { + if (options.fixLostLinks) + { + // console.log("lost link...?", links[l]); + const op = gui.corePatch().getOpById(links[l].objIn); + if (!op) console.log("op not found!"); + else + { + const outerOp = gui.patchView.getSubPatchOuterOp(op.uiAttribs.subPatch); + if (outerOp) + { + op.storage = op.storage || {}; + op.storage.ref = op.storage.ref || CABLES.shortId(); + links[l].refOp = op.storage.ref; + links[l].subOpRef = outerOp.storage.ref; + } + } + } + } + } + } + } + } + } + + + + for (const i in json.ops) + { + const op = json.ops[i]; + const oldId = op.id; + let newId = CABLES.shortId(); + + if (options.prefixHash) newId = prefixedHash(options.prefixHash + oldId); + + else if (options.prefixId) newId = options.prefixId + oldId; + else if (options.refAsId) // when saving json + { + if (op.storage && op.storage.ref) + { + newId = op.storage.ref; + delete op.storage.ref; + } + else + { + op.storage = op.storage || {}; + op.storage.ref = newId = CABLES.shortId(); + } + } + + const newID = op.id = newId; + + if (options.oldIdAsRef) // when loading json + { + op.storage = op.storage || {}; + op.storage.ref = oldId; + } + + for (const j in json.ops) + { + if (json.ops[j].portsIn) + for (const k in json.ops[j].portsIn) + { + if (json.ops[j].portsIn[k].links) + { + let l = json.ops[j].portsIn[k].links.length; + + while (l--) if (json.ops[j].portsIn[k].links[l] === null) json.ops[j].portsIn[k].links.splice(l, 1); + + for (l in json.ops[j].portsIn[k].links) + { + if (json.ops[j].portsIn[k].links[l].objIn === oldId) json.ops[j].portsIn[k].links[l].objIn = newID; + if (json.ops[j].portsIn[k].links[l].objOut === oldId) json.ops[j].portsIn[k].links[l].objOut = newID; + } + } + } + + if (json.ops[j].portsOut) + for (const k in json.ops[j].portsOut) + { + if (json.ops[j].portsOut[k].links) + { + let l = json.ops[j].portsOut[k].links.length; + + while (l--) if (json.ops[j].portsOut[k].links[l] === null) json.ops[j].portsOut[k].links.splice(l, 1); + + for (l in json.ops[j].portsOut[k].links) + { + if (json.ops[j].portsOut[k].links[l].objIn === oldId) json.ops[j].portsOut[k].links[l].objIn = newID; + if (json.ops[j].portsOut[k].links[l].objOut === oldId) json.ops[j].portsOut[k].links[l].objOut = newID; + } + } + } + } + } + + // set correct subpatch + const subpatchIds = []; + const fixedSubPatches = []; + + for (let i = 0; i < json.ops.length; i++) + { + // if (CABLES.Op.isSubPatchOpName(json.ops[i].objName)) + if (json.ops[i].storage && json.ops[i].storage.subPatchVer) + { + for (const k in json.ops[i].portsIn) + { + if (json.ops[i].portsIn[k].name === "patchId") + { + let newId = shortId(); + + if (options.prefixHash) newId = prefixedHash(options.prefixHash + json.ops[i].portsIn[k].value); + + const oldSubPatchId = json.ops[i].portsIn[k].value; + const newSubPatchId = json.ops[i].portsIn[k].value = newId; + + subpatchIds.push(newSubPatchId); + + for (let j = 0; j < json.ops.length; j++) + { + // op has no uiAttribs in export, we don't care about subpatches in export though + if (json.ops[j].uiAttribs) + { + if (json.ops[j].uiAttribs.subPatch === oldSubPatchId) + { + json.ops[j].uiAttribs.subPatch = newSubPatchId; + fixedSubPatches.push(json.ops[j].id); + } + } + } + } + } + } + } + + for (const kk in json.ops) + { + let found = false; + for (let j = 0; j < fixedSubPatches.length; j++) + { + if (json.ops[kk].id === fixedSubPatches[j]) + { + found = true; + break; + } + } + // op has no uiAttribs in export, we don't care about subpatches in export though + if (!found && json.ops[kk].uiAttribs && options.parentSubPatchId != null) + json.ops[kk].uiAttribs.subPatch = options.parentSubPatchId; + } + + return json; +}; + +/** + * remove an eventlistener + * @instance + * @function addEventListener + * @param {String} name of event + * @param {function} callback + */ + +/** + * remove an eventlistener + * @instance + * @function removeEventListener + * @param {String} name of event + * @param {function} callback + */ + +/** + * op added to patch event + * @event onOpAdd + * + * @memberof Patch + * @type {Object} + * @property {Op} op new op + */ + +/** + * op deleted from patch + * @event onOpDelete + * @memberof Patch + * @type {Object} + * @property {Op} op that will be deleted + */ + +/** + * link event - two ports will be linked + * @event onLink + * @memberof Patch + * @type {Object} + * @property {Port} port1 + * @property {Port} port2 + */ + +/** + * unlink event - a link was deleted + * @event onUnLink + * @memberof Patch + * @type {Object} + */ + +/** + * variables has been changed / a variable has been added to the patch + * @event variablesChanged + * @memberof Patch + * @type {Object} + * @property {Port} port1 + * @property {Port} port2 + */ + +/** + * configuration object for loading a patch + * @typedef {Object} PatchConfig + * @hideconstructor + * @property {String} [prefixAssetPath=''] prefix for path to assets + * @property {String} [assetPath=''] path to assets + * @property {String} [jsPath=''] path to javascript files + * @property {String} [glCanvasId='glcanvas'] dom element id of canvas element + * @property {Function} [onError=null] called when an error occurs + * @property {Function} [onFinishedLoading=null] called when patch finished loading all assets + * @property {Function} [onFirstFrameRendered=null] called when patch rendered it's first frame + * @property {Boolean} [glCanvasResizeToWindow=false] resize canvas automatically to window size + * @property {Boolean} [doRequestAnimation=true] do requestAnimationFrame set to false if you want to trigger exec() from outside (only do if you know what you are doing) + * @property {Boolean} [clearCanvasColor=true] clear canvas in transparent color every frame + * @property {Boolean} [clearCanvasDepth=true] clear depth every frame + * @property {Boolean} [glValidateShader=true] enable/disable validation of shaders * + * @property {Boolean} [silent=false] + * @property {Number} [fpsLimit=0] 0 for maximum possible frames per second + * @property {String} [glslPrecision='mediump'] default precision for glsl shader + * + */ + +/* harmony default export */ const core_patch = (Patch); + + +;// CONCATENATED MODULE: ./src/core/embedding.js + + + +const EMBED = {}; + +/** + * add patch into html element (will create canvas and set size to fill containerElement) + * @name CABLES.EMBED#addPatch + * @param {object|string} containerElement dom element or id of element + * @param {options} patch options + * @function + */ +EMBED.addPatch = function (_element, options) +{ + let el = _element; + let id = generateUUID(); + if (typeof _element == "string") + { + id = _element; + el = document.getElementById(id); + + if (!el) + { + console.error(id + " Polyshape Container Element not found!"); + return; + } + } + + const canvEl = document.createElement("canvas"); + canvEl.id = "glcanvas_" + id; + canvEl.width = el.clientWidth; + canvEl.height = el.clientHeight; + + window.addEventListener( + "resize", + function () + { + this.setAttribute("width", el.clientWidth); + this.height = el.clientHeight; + }.bind(canvEl), + ); + + el.appendChild(canvEl); + + options = options || {}; + options.glCanvasId = canvEl.id; + + if (!options.onError) + { + options.onError = function (err) + { + console.error(err); + }; + } + + CABLES.patch = new core_patch(options); + return canvEl; +}; + + + +;// CONCATENATED MODULE: ./src/core/webaudio.js +/** @namespace WEBAUDIO */ + + + +const WEBAUDIO = {}; + +WEBAUDIO.toneJsInitialized = false; + +/* + * External JSDoc definitions + */ + +/** + * Part of the Web Audio API, the AudioBuffer interface represents a short audio asset residing in memory. + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer} + */ + +/** + * Part of the Web Audio API, the AudioNode interface is a generic interface for representing an audio processing module. + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioNode} + */ + +/** + * The AudioContext interface represents an audio-processing graph built from audio modules linked together + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioContext} + */ + +/** + * Checks if a global audio context has been created and creates + * it if necessary. This audio context can be used for native Web Audio as well as Tone.js ops. + * Associates the audio context with Tone.js if it is being used + * @param {CABLES.Op} op - The operator which needs the Audio Context + */ +WEBAUDIO.createAudioContext = function (op) +{ + window.AudioContext = window.AudioContext || window.webkitAudioContext; + if (window.AudioContext) + { + if (!window.audioContext) + { + window.audioContext = new AudioContext(); + } + // check if tone.js lib is being used + if (window.Tone && !WEBAUDIO.toneJsInitialized) + { + // set current audio context in tone.js + Tone.setContext(window.audioContext); + WEBAUDIO.toneJsInitialized = true; + } + } + else + { + op.patch.config.onError("NO_WEBAUDIO", "Web Audio is not supported in this browser."); + return; + } + return window.audioContext; +}; + +/** + * Returns the audio context. + * Before `createAudioContext` must have been called at least once. + * It most cases you should use `createAudioContext`, which just returns the audio context + * when it has been created already. + */ +WEBAUDIO.getAudioContext = function () +{ + return window.audioContext; +}; + +/** + * Creates an audio in port for the op with name `portName` + * When disconnected it will disconnect the previous connected audio node + * from the op's audio node. + * @param {CABLES.Op} op - The operator to create the audio port in + * @param {string} portName - The name of the port + * @param {AudioNode} audioNode - The audionode incoming connections should connect to + * @param {number} [inputChannelIndex=0] - If the audio node has multiple inputs, this is the index of the input channel to connect to + * @returns {CABLES.Port|undefined} - The newly created audio in port or `undefined` if there was an error + */ +WEBAUDIO.createAudioInPort = function (op, portName, audioNode, inputChannelIndex) +{ + if (!op || !portName || !audioNode) + { + const msg = "ERROR: createAudioInPort needs three parameters, op, portName and audioNode"; + op.log(msg); + throw new Error(msg); + // return; + } + if (!inputChannelIndex) + { + inputChannelIndex = 0; + } + op.webAudio = op.webAudio || {}; + op.webAudio.audioInPorts = op.webAudio.audioInPorts || []; + const port = op.inObject(portName); + port.webAudio = {}; + port.webAudio.previousAudioInNode = null; + port.webAudio.audioNode = audioNode; + + op.webAudio.audioInPorts[portName] = port; + + port.onChange = function () + { + const audioInNode = port.get(); + // when port disconnected, disconnect audio nodes + if (!audioInNode) + { + if (port.webAudio.previousAudioInNode) + { + try + { + if (port.webAudio.previousAudioInNode.disconnect) port.webAudio.previousAudioInNode.disconnect(port.webAudio.audioNode, 0, inputChannelIndex); + op.setUiError("audioCtx", null); + } + catch (e) + { + try + { + port.webAudio.previousAudioInNode.disconnect(port.webAudio.audioNode); + } + catch (er) + { + op.log( + "Disconnecting audio node with in/out port index, as well as without in/out-port-index did not work ", + e, + ); + if (e.printStackTrace) + { + e.printStackTrace(); + } + throw e; + } + } + } + } + else + { + try + { + if (audioInNode.connect) + { + audioInNode.connect(port.webAudio.audioNode, 0, inputChannelIndex); + op.setUiError("audioCtx", null); + } + else op.setUiError("audioCtx", "The passed input is not an audio context. Please make sure you connect an audio context to the input.", 2); + } + catch (e) + { + op.log("Error: Failed to connect web audio node!", e); + op.log("port.webAudio.audioNode", port.webAudio.audioNode); + op.log("audioInNode: ", audioInNode); + op.log("inputChannelIndex:", inputChannelIndex); + op.log("audioInNode.connect: ", audioInNode.connect); + throw e; + } + } + port.webAudio.previousAudioInNode = audioInNode; + }; + // TODO: Maybe add subtype to audio-node-object? + return port; +}; + +/** + * Sometimes it is necessary to replace a node of a port, if so all + * connections to this node must be disconnected and connections to the new + * node must be made. + * Can be used for both Audio ports as well as AudioParam ports + * if used with an AudioParam pass e.g. `synth.frequency` as newNode + * @param {CABLES.Port} port - The port where the audio node needs to be replaced + */ +WEBAUDIO.replaceNodeInPort = function (port, oldNode, newNode) +{ + const connectedNode = port.webAudio.previousAudioInNode; + // check if connected + if (connectedNode && connectedNode.disconnect) + { + try + { + connectedNode.disconnect(oldNode); + } + catch (e) + { + if (e.printStackTrace) + { + e.printStackTrace(); + } + throw new Error("replaceNodeInPort: Could not disconnect old audio node. " + e.name + " " + e.message); + } + port.webAudio.audioNode = newNode; + try + { + connectedNode.connect(newNode); + } + catch (e) + { + if (e.printStackTrace) + { + e.printStackTrace(); + } + throw new Error("replaceNodeInPort: Could not connect to new node. " + e.name + " " + e.message); + } + } +}; + +/** + * Creates an audio out port which takes care of (dis-)connecting on it’s own + * @param {CABLES.op} op - The op to create an audio out port for + * @param {string} portName - The name of the port to be created + * @param {AudioNode} audioNode - The audio node to link to the port + * @returns {(CABLES.Port|undefined)} - The newly created audio out port or `undefined` if there was an error + */ +WEBAUDIO.createAudioOutPort = function (op, portName, audioNode) +{ + if (!op || !portName || !audioNode) + { + const msg = "ERROR: createAudioOutPort needs three parameters, op, portName and audioNode"; + op.log(msg); + throw new Error(msg); + } + + const port = op.outObject(portName); + // TODO: Maybe add subtype to audio-node-object? + port.set(audioNode); + return port; +}; + +/** + * Creates an audio param in port for the op with name portName. + * The port accepts other audio nodes as signals as well as values (numbers) + * When the port is disconnected it will disconnect the previous connected audio node + * from the op's audio node and restore the number value set before. + * @param {CABLES.Op} op - The operator to create an audio param input port for + * @param {string} portName - The name of the port to create + * @returns {(CABLES.Port|undefined)} - The newly created port, which takes care of (dis-)connecting on its own, or `undefined` if there was an error + */ +WEBAUDIO.createAudioParamInPort = function (op, portName, audioNode, options, defaultValue) +{ + if (!op || !portName || !audioNode) + { + op.log("ERROR: createAudioParamInPort needs three parameters, op, portName and audioNode"); + if (op && op.name) op.log("opname: ", op.name); + op.log("portName", portName); + op.log("audioNode: ", audioNode); + return; + } + op.webAudio = op.webAudio || {}; + op.webAudio.audioInPorts = op.webAudio.audioInPorts || []; + // var port = op.inObject(portName); + const port = op.inDynamic( + portName, + [CONSTANTS.OP.OP_PORT_TYPE_VALUE, CONSTANTS.OP.OP_PORT_TYPE_OBJECT], + options, + defaultValue, + ); + port.webAudio = {}; + port.webAudio.previousAudioInNode = null; + port.webAudio.audioNode = audioNode; + + op.webAudio.audioInPorts[portName] = port; + + // port.onLinkChanged = function() { + // op.log("onLinkChanged"); + // if(port.isLinked()) { + // + // if(port.links[0].portOut.type === CABLES.CONSTANTS.OP.OP_PORT_TYPE_) { // value + // + // } else if(port.links[0].portOut.type === CABLES.CONSTANTS.OP.OP_PORT_TYPE_OBJECT) { // object + // + // } + // } else { // unlinked + // + // } + // }; + + port.onChange = function () + { + const audioInNode = port.get(); + const node = port.webAudio.audioNode; + const audioCtx = WEBAUDIO.getAudioContext(); + + if (audioInNode != undefined) + { + if (typeof audioInNode === "object" && audioInNode.connect) + { + try + { + audioInNode.connect(node); + } + catch (e) + { + op.log("Could not connect audio node: ", e); + if (e.printStackTrace) + { + e.printStackTrace(); + } + throw e; + } + port.webAudio.previousAudioInNode = audioInNode; + } + else + { + // tone.js audio param + if (node._param && node._param.minValue && node._param.maxValue) + { + if (audioInNode >= node._param.minValue && audioInNode <= node._param.maxValue) + { + try + { + if (node.setValueAtTime) + { + node.setValueAtTime(audioInNode, audioCtx.currentTime); + } + else + { + node.value = audioInNode; + } + } + catch (e) + { + op.log("Possible AudioParam problem with tone.js op: ", e); + if (e.printStackTrace) + { + e.printStackTrace(); + } + throw e; + } + } + else + { + op.log("Warning: The value for an audio parameter is out of range!"); + } + } // native Web Audio param + else if (node.minValue && node.maxValue) + { + if (audioInNode >= node.minValue && audioInNode <= node.maxValue) + { + try + { + if (node.setValueAtTime) + { + node.setValueAtTime(audioInNode, audioCtx.currentTime); + } + else + { + node.value = audioInNode; + } + } + catch (e) + { + op.log( + "AudioParam has minValue / maxValue defined, and value is in range, but setting the value failed! ", + e, + ); + if (e.printStackTrace) + { + e.printStackTrace(); + } + throw e; + } + } + else + { + op.log("Warning: The value for an audio parameter is out of range!"); + } + } // no min-max values, try anyway + else + { + try + { + if (node.setValueAtTime) + { + node.setValueAtTime(audioInNode, audioCtx.currentTime); + } + else + { + node.value = audioInNode; + } + } + catch (e) + { + op.log("Possible AudioParam problem (without minValue / maxValue): ", e); + if (e.printStackTrace) + { + e.printStackTrace(); + } + throw e; + } + } + + if (port.webAudio.previousAudioInNode && port.webAudio.previousAudioInNode.disconnect) + { + try + { + port.webAudio.previousAudioInNode.disconnect(node); + } + catch (e) + { + op.log("Could not disconnect previous audio node: ", e); + throw e; + } + port.webAudio.previousAudioInNode = undefined; + } + } + } + else + { + // disconnected + if (port.webAudio.previousAudioInNode) + { + } + } + }; + return port; +}; + + +/** + * Loads an audio file and updates the loading indicators when cables is run in the editor. + * @param {CABLES.Patch} patch - The cables patch, when called from inside an op this is `op.patch` + * @param {string} url - The url of the audio file to load + * @param {loadAudioFileFinishedCallback} onFinished - The callback to be called when the loading is finished, passes the AudioBuffer + * @param {loadAudioFileErrorCallback} onError - The callback when there was an error loading the file, the rror message is passed + * @see {@link https://developer.mozilla.org/de/docs/Web/API/AudioContext/decodeAudioData} + */ +WEBAUDIO.loadAudioFile = function (patch, url, onFinished, onError, loadingTask) +{ + const audioContext = WEBAUDIO.createAudioContext(); + + let loadingId = null; + if (loadingTask || loadingTask === undefined) + { + loadingId = patch.loading.start("audio", url); + if (patch.isEditorMode()) gui.jobs().start({ "id": "loadaudio" + loadingId, "title": " loading audio (" + url + ")" }); + } + const request = new XMLHttpRequest(); + if (!url) + { + return; + } + request.open("GET", url, true); + request.responseType = "arraybuffer"; + // TODO: maybe crossorigin stuff needed? + // Decode asynchronously + request.onload = function () + { + patch.loading.finished(loadingId); + if (patch.isEditorMode()) gui.jobs().finish("loadaudio" + loadingId); + audioContext.decodeAudioData(request.response, onFinished, onError); + }; + request.send(); +}; + +/** + * Checks if the passed time is a valid time to be used in any of the Tone.js ops. + * @param {(string|number)} t - The time to check + * @returns {boolean} - True if time is valid, false if not + */ +WEBAUDIO.isValidToneTime = function (t) +{ + try + { + const time = new Tone.Time(t); + } + catch (e) + { + return false; + } + return true; +}; + +/** + * Checks if the passed note is a valid note to be used with Tone.js + * @param {string} note - The note to be checked, e.g. `"C4"` + * @returns {boolean} - True if the note is a valid note, false otherwise + */ +WEBAUDIO.isValidToneNote = function (note) +{ + try + { + Tone.Frequency(note); + } + catch (e) + { + return false; + } + return true; +}; + + + +;// CONCATENATED MODULE: ./src/core/sessionvar.js +// todo: old... remove this from ops... + +const Variable = function () +{ + let value = null; + const changedCallbacks = []; + + this.onChanged = function (f) + { + changedCallbacks.push(f); + }; + + this.getValue = function () + { + return value; + }; + + this.setValue = function (v) + { + value = v; + this.emitChanged(); + }; + + this.emitChanged = function () + { + for (let i = 0; i < changedCallbacks.length; i++) + { + changedCallbacks[i](); + } + }; +}; + + + +;// CONCATENATED MODULE: ./src/core/banchprofiler.js +class Branch +{ + constructor(name) + { + this.name = name; + this.dur = 0; + this._startTime = 0; + this.childs = []; + } + + start() + { + this._startTime = performance.now(); + } + + end() + { + this.dur = performance.now() - this._startTime; + } + + push(name) + { + const b = new Branch(name); + this.childs.push(b); + b.start(); + return b; + } + + print(level) + { + level = level || 0; + + let str = ""; + for (let i = 0; i < level; i++) str += " "; + + for (let i = 0; i < this.childs.length; i++) + { + this.childs[i].print(level + 1); + } + } +} + +// ////////////////////////////////////////// + +class BranchStack +{ + constructor() + { + } + + start() + { + this.root = new Branch("Root"); + this.root.start(); + + this.current = this.root; + } + + push(name) + { + if (!this.current) this.start(); + + const prev = this.current; + this.current = this.current.push(name); + this.current.prev = prev; + this.current.start(); + return this.current; + } + + pop() + { + if (!this.current) return; + this.current.end(); + this.current = this.current.prev; + } + + finish() + { + this.current.end(); + this.root.print(); + this.current = null; + } +} + + + + +;// CONCATENATED MODULE: ./src/core/cgp/cgp_uniform.js + + +class cgp_uniform_Uniform extends cg_uniform +{ + constructor(__shader, __type, __name, _value, _port2, _port3, _port4, _structUniformName, _structName, _propertyName) + { + super(__shader, __type, __name, _value, _port2, _port3, _port4, _structUniformName, _structName, _propertyName); + this._loc = -1; + this._cgl = __shader._cgl; + } + + + updateValueF() { } + + setValueF(v) + { + this.needsUpdate = true; + this._value = v; + } + + updateValue2F() { } + + setValue2F(v) + { + this.needsUpdate = true; + this._value = v; + } + + updateValue3F() { } + + setValue3F(v) + { + this.needsUpdate = true; + this._value = v; + } + + updateValue4F() { } + + setValue4F(v) + { + this.needsUpdate = true; + this._value = v; + } + + getSizeBytes() + { + if (this._type == "f") return 1 * 4; + if (this._type == "i") return 1 * 4; + if (this._type == "2i") return 2 * 4; + if (this._type == "2f") return 2 * 4; + if (this._type == "3f") return 3 * 4; + if (this._type == "4f") return 4 * 4; + if (this._type == "m4") return 4 * 4 * 4; + + this._log.warn("unknown type getSizeBytes"); + // if (this._type == "t") return "sampler2D"; + // if (this._type == "tc") return "samplerCube"; + // if (this._type == "b") return "bool"; + + // if (t == "3f[]") return null; // ignore this for now... + // if (t == "m4[]") return null; // ignore this for now... + // if (t == "f[]") return null; // ignore this for now... + } +} + +;// CONCATENATED MODULE: ./src/core/cgp/cgp_shader.js + + + + +class cgp_shader_Shader +{ + constructor(_cgp, _name) + { + if (!_cgp) throw new Error("shader constructed without cgp " + _name); + this._log = new Logger("cgp_shader"); + this._cgp = _cgp; + this._name = _name; + this._uniforms = []; + + if (!_name) this._log.stack("no shader name given"); + this._name = _name || "unknown"; + this.id = simpleId(); + this._isValid = true; + this._compileReason = ""; + this.shaderModule = null; + this._needsRecompile = true; + + this._src = ""; + } + + get isValid() + { + return this._isValid; + } + + get uniforms() + { + return this._uniforms; + } + + getName() + { + return this._name; + } + + setWhyCompile(why) + { + this._compileReason = why; + } + + setSource(src) + { + this._src = src; + this.setWhyCompile("Source changed"); + this._needsRecompile = true; + } + + compile() + { + this._isValid = true; + console.log("compiling shader...", this._compileReason); + this._cgp.pushErrorScope(); + this.shaderModule = this._cgp.device.createShaderModule({ "code": this._src }); + this._cgp.popErrorScope("cgp_shader " + this._name, this.error.bind(this)); + this._needsRecompile = false; + } + + error(e) + { + this._isValid = false; + } + + + bind() + { + let sizes = {}; + for (let i = 0; i < this._uniforms.length; i++) + { + // console.log(this._uniforms[i]); + } + + if (this._needsRecompile) this.compile(); + } + + /** + * add a uniform to the fragment shader + * @param {String} type ['f','t', etc] + * @param {String} name + * @param {any} value or port + * @memberof Shader + * @instance + * @function addUniformFrag + * @returns {Uniform} + */ + addUniformFrag(type, name, valueOrPort, p2, p3, p4) + { + const uni = new cgp_uniform_Uniform(this, type, name, valueOrPort, p2, p3, p4); + uni.shaderType = "frag"; + return uni; + } + + /** + * add a uniform to the vertex shader + * @param {String} type ['f','t', etc] + * @param {String} name + * @param {any} value or port + * @memberof Shader + * @instance + * @function addUniformVert + * @returns {Uniform} + */ + addUniformVert(type, name, valueOrPort, p2, p3, p4) + { + const uni = new cgp_uniform_Uniform(this, type, name, valueOrPort, p2, p3, p4); + uni.shaderType = "vert"; + return uni; + } + + /** + * add a uniform to all shader programs + * @param {String} type ['f','t', etc] + * @param {String} name + * @param {any} value or port + * @memberof Shader + * @instance + * @function addUniform + * @returns {Uniform} + */ + addUniform(type, name, valueOrPort, p2, p3, p4) + { + const uni = new cgp_uniform_Uniform(this, type, name, valueOrPort, p2, p3, p4); + uni.shaderType = "both"; + return uni; + } + + + _addUniform(uni) + { + this._uniforms.push(uni); + this.setWhyCompile("add uniform " + name); + this._needsRecompile = true; + } +} + +;// CONCATENATED MODULE: ./src/core/cgp/cgl_shader_default.wgsl +/* harmony default export */ const cgl_shader_default = ("struct VSUniforms\n{\n modelMatrix: mat4x4<f32>,\n viewMatrix: mat4x4<f32>,\n projMatrix: mat4x4<f32>,\n};\n\nstruct FSUniforms\n{\n color:vec4<f32>\n};\n\n@group(0) @binding(0) var<uniform> vsUniforms: VSUniforms;\n@group(0) @binding(1) var<uniform> fsUniforms: FSUniforms;\n\nstruct MyVSInput\n{\n @location(0) position: vec3<f32>,\n @location(1) normal: vec3<f32>,\n @location(2) texcoord: vec2<f32>,\n};\n\nstruct MyVSOutput\n{\n @builtin(position) position: vec4<f32>,\n @location(0) normal: vec3<f32>,\n @location(1) texcoord: vec2<f32>,\n};\n\n@vertex\nfn myVSMain(v: MyVSInput) -> MyVSOutput\n{\n var vsOut: MyVSOutput;\n var pos =vec4<f32>(v.position, 1.0);\n\n var mvMatrix=vsUniforms.viewMatrix * vsUniforms.modelMatrix;\n vsOut.position = vsUniforms.projMatrix * mvMatrix * pos;\n\n vsOut.normal = v.normal;\n vsOut.texcoord = v.texcoord;\n return vsOut;\n}\n\n@fragment\nfn myFSMain(v: MyVSOutput) -> @location(0) vec4<f32>\n{\n return fsUniforms.color+vec4<f32>(.5,.5,.5,1.0);\n}\n\n"); +;// CONCATENATED MODULE: ./src/core/cgp/cgp_state.js + + + + + +// https://github.com/greggman/webgpu-utils +// https://developer.chrome.com/blog/from-webgl-to-webgpu/ +// https://gpuweb.github.io/gpuweb/explainer/ + + +/** + * cables webgpu context/state manager + * @external CGP + * @namespace Context + * @class + * @hideconstructor + */ +// const Context = function (_patch) +class WebGpuContext extends CGState +{ + constructor(_patch) + { + super(); + + this.patch = _patch; + + this.gApi = CG.GAPI_WEBGPU; + this._viewport = [0, 0, 256, 256]; + this._shaderStack = []; + this._simpleShader = null; + + this._stackCullFaceFacing = []; + this._stackDepthTest = []; + this._stackCullFace = []; + this._stackDepthFunc = []; + this._stackDepthWrite = []; + + this.DEPTH_FUNCS = [ + "never", + "always", + "less", + "less-equal", + "greater", + "greater-equal", + "equal", + "not-equal" + ]; + + this.CULL_MODES = [ + "none", + "back", + "front", + "none" // both does not exist in webgpu + ]; + } + + + /// //////////////////// + + getViewPort() + { + return [0, 0, this.canvasWidth, this.canvasHeight]; + } + + renderStart(cgp, identTranslate, identTranslateView) + { + if (!this._simpleShader) + { + this._simpleShader = new cgp_shader_Shader(this, "simple default shader"); + this._simpleShader.setSource(cgl_shader_default); + this._simpleShader.addUniformFrag("4f", "color", 1, 1, 0, 1); + } + + this.fpsCounter.startFrame(); + + this._startMatrixStacks(identTranslate, identTranslateView); + this.setViewPort(0, 0, this.canvasWidth, this.canvasHeight); + + this.pushShader(this._simpleShader); + this.pushDepthTest(true); + this.pushDepthWrite(true); + this.pushDepthFunc("less-equal"); + + this.emitEvent("beginFrame"); + } + + renderEnd() + { + this._endMatrixStacks(); + + this.popShader(); + this.popDepthFunc(); + this.popDepthWrite(); + this.popDepthTest(); + + this.emitEvent("endFrame"); + this.fpsCounter.endFrame(); + } + + + setViewPort(x, y, w, h) + { + this._viewport = [x, y, w, h]; + } + + /** + * @function getViewPort + * @memberof Context + * @instance + * @description get current gl viewport + * @returns {Array} array [x,y,w,h] + */ + getViewPort() + { + return this._viewPort; + } + + + createMesh(geom, glPrimitive) + { + return new CGP.Mesh(this, geom, glPrimitive); + } + + getShader() + { + return {}; + } + + /** + * push a shader to the shader stack + * @function pushShader + * @memberof Context + * @instance + * @param {Object} shader + * @function + */ + pushShader(shader) + { + this._shaderStack.push(shader); + // currentShader = shader; + } + + /** + * pop current used shader from shader stack + * @function popShader + * @memberof Context + * @instance + * @function + */ + popShader() + { + if (this._shaderStack.length === 0) throw new Error("Invalid shader stack pop!"); + this._shaderStack.pop(); + // currentShader = this._shaderStack[this._shaderStack.length - 1]; + } + + getShader() + { + return this._shaderStack[this._shaderStack.length - 1]; + // if (currentShader) if (!this.frameStore || ((this.frameStore.renderOffscreen === true) == currentShader.offScreenPass) === true) return currentShader; + // for (let i = this._shaderStack.length - 1; i >= 0; i--) if (this._shaderStack[i]) if (this.frameStore.renderOffscreen == this._shaderStack[i].offScreenPass) return this._shaderStack[i]; + } + + pushErrorScope() + { + this.device.pushErrorScope("validation"); + } + + popErrorScope(name, cb) + { + this.device.popErrorScope().then((error) => + { + if (error) + { + this.patch.emitEvent("criticalError", { "title": "WebGPU error \"" + name + "\"", "codeText": error.message }); + // if (this.patch.isEditorMode())console.log("WebGPU error " + this._name, error.message); + + console.warn("[cgp]", name, error.message, error, cb); + if (cb)cb(error); + } + }); + } + + /** + * push depth testing enabled state + * @function pushDepthTest + * @param {Boolean} enabled + * @memberof Context + * @instance + */ + + pushDepthTest(b) + { + this._stackDepthTest.push(b); + } + + /** + * current state of depth testing + * @function stateDepthTest + * @returns {Boolean} enabled + * @memberof Context + * @instance + */ + stateDepthTest() + { + return this._stackDepthTest[this._stackDepthTest.length - 1]; + } + + /** + * pop depth testing state + * @function popDepthTest + * @memberof Context + * @instance + */ + popDepthTest() + { + this._stackDepthTest.pop(); + } + + // -------------------------------------- + // state depthwrite + + /** + * push depth write enabled state + * @function pushDepthTest + * @param {Boolean} enabled + * @memberof Context + * @instance + */ + + pushDepthWrite(b) + { + b = b || false; + this._stackDepthWrite.push(b); + } + + /** + * current state of depth writing + * @function stateCullFace + * @returns {Boolean} enabled + * @memberof Context + * @instance + */ + stateDepthWrite() + { + return this._stackDepthWrite[this._stackDepthWrite.length - 1]; + } + + /** + * pop depth writing state + * @function popCullFace + * @memberof Context + * @instance + */ + popDepthWrite() + { + this._stackDepthWrite.pop(); + } + + + // -------------------------------------- + // state depthfunc + + + /** + * @function pushDepthFunc + * @memberof Context + * @instance + * @param {string} depth compare func + */ + pushDepthFunc(f) + { + this._stackDepthFunc.push(f); + } + + /** + * @function stateDepthFunc + * @memberof Context + * @instance + * @returns {string} + */ + stateDepthFunc() + { + if (this._stackDepthFunc.length > 0) return this._stackDepthFunc[this._stackDepthFunc.length - 1]; + return false; + } + + /** + * pop depth compare func + * @function popDepthFunc + * @memberof Context + * @instance + */ + popDepthFunc() + { + this._stackDepthFunc.pop(); + } + + + + // -------------------------------------- + // state CullFace + + /** + * push face culling face enabled state + * @function pushCullFaceFacing + * @param {Boolean} enabled + * @memberof Context + * @instance + */ + pushCullFace(b) + { + this._stackCullFace.push(b); + } + + /** + * current state of face culling + * @function stateCullFace + * @returns {Boolean} enabled + * @memberof Context + * @instance + */ + stateCullFace() + { + return this._stackCullFace[this._stackCullFace.length - 1]; + } + + /** + * pop face culling enabled state + * @function popCullFace + * @memberof Context + * @instance + */ + popCullFace() + { + this._stackCullFace.pop(); + } + + + // -------------------------------------- + // state CullFace Facing + + + /** + * push face culling face side + * @function pushCullFaceFacing + * @memberof Context + * @instance + */ + + pushCullFaceFacing(b) + { + this._stackCullFaceFacing.push(b); + } + + /** + * current state of face culling side + * @function stateCullFaceFacing + * @returns {Boolean} enabled + * @memberof Context + * @instance + */ + stateCullFaceFacing() + { + return this._stackCullFaceFacing[this._stackCullFaceFacing.length - 1]; + } + + /** + * pop face culling face side + * @function popCullFaceFacing + * @memberof Context + * @instance + */ + popCullFaceFacing() + { + this._stackCullFaceFacing.pop(); + } +} + + +;// CONCATENATED MODULE: ./src/core/cgp/cgp_uniformbuffer.js +class UniformBuffer +{ + constructor(shader, shaderType) + { + this._shaderType = shaderType; // frag, vert... + this._shader = shader; + this._cgp = shader._cgp; + + this._gpuBuffer = null; + this._values = null; + + this._sizeBytes = 0; + this.update(); + } + + update() + { + this._sizeBytes = 0; + + for (let i = 0; i < this._shader.uniforms.length; i++) + { + const uni = this._shader.uniforms[i]; + + if (this._shaderType == uni.shaderType) + this._sizeBytes += uni.getSizeBytes(); + } + + this._gpuBuffer = this._cgp.device.createBuffer( + { + "size": this._sizeBytes, + "usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST, + }); + + + this._values = new Float32Array(this._sizeBytes / 4); + this.updateUniformValues(); + } + + updateUniformValues() + { + let count = 0; + for (let i = 0; i < this._shader.uniforms.length; i++) + { + const uni = this._shader.uniforms[i]; + if (uni.shaderType == this._shaderType) + { + if (uni.getSizeBytes() / 4 > 1) + { + for (let j = 0; j < uni.getValue().length; j++) + { + this._values[count] = uni.getValue()[j]; + count++; + } + } + else + { + this._values[count] = uni.getValue(); + count++; + } + } + } + + + this._cgp.device.queue.writeBuffer( + this._gpuBuffer, + 0, + this._values.buffer, + this._values.byteOffset, + this._values.byteLength + ); + } +} + +;// CONCATENATED MODULE: ./src/core/cgp/cgp_pipeline.js + + + +class Pipeline +{ + constructor(_cgp, _name) + { + if (!_cgp) throw new Error("Pipeline constructed without cgp " + _name); + this._cgp = _cgp; + this._isValid = true; + + this._pipeCfg = null; + this._renderPipeline = null; + + this._fsUniformBuffer = null; + this._vsUniformBuffer = null; + + this._old = {}; + + + this.DEPTH_COMPARE_FUNCS_STRINGS = [ + "never", + "less", + "equal", + "lessequal", + "greater", + "notequal", + "greaterequal", + "always"]; + } + + get isValid() { return this._isValid; } + + setPipeline(shader, mesh) + { + if (!mesh || !shader) + { + console.log("pipeline unknown shader/mesh"); + return; + } + + let needsRebuild = + !this._renderPipeline || + !this._pipeCfg || + this._old.mesh != mesh || + this._old.shader != shader || + mesh.needsPipelineUpdate || + shader.needsPipelineUpdate; + + if (this._pipeCfg) + { + if (this._pipeCfg.depthStencil.depthWriteEnabled != this._cgp.stateDepthWrite()) + { + needsRebuild = true; + this._pipeCfg.depthStencil.depthWriteEnabled = this._cgp.stateDepthWrite(); + } + + if (this._cgp.stateDepthTest() === false) + { + if (this._pipeCfg.depthStencil.depthCompare != "never") + { + this._pipeCfg.depthStencil.depthCompare = "never"; + needsRebuild = true; + } + } + else + if (this._pipeCfg.depthStencil.depthCompare != this._cgp.stateDepthFunc()) + { + needsRebuild = true; + this._pipeCfg.depthStencil.depthCompare = this._cgp.stateDepthFunc(); + } + + + if (this._cgp.stateCullFace() === false) + { + if (this._pipeCfg.primitive.cullMode != "none") + { + needsRebuild = true; + this._pipeCfg.primitive.cullMode = "none"; + } + } + else + { + needsRebuild = true; + this._pipeCfg.primitive.cullMode = this._cgp.stateCullFaceFacing(); + } + } + + if (needsRebuild) + { + if (!this._pipeCfg || this._old.shader != shader) this._pipeCfg = this.getPiplelineObject(shader, mesh); + + this._old.shader = shader; + this._old.mesh = mesh; + + + // try + // { + this._renderPipeline = this._cgp.device.createRenderPipeline(this._pipeCfg); + // } + // catch (e) + // { + // console.error(e.message); + // } + + this._bindUniforms(shader); + } + + if (this._renderPipeline && this._isValid) + { + mat4.copy(this._matModel, this._cgp.mMatrix); + mat4.copy(this._matView, this._cgp.vMatrix); + mat4.copy(this._matProj, this._cgp.pMatrix); + + this._cgp.device.queue.writeBuffer( + this._vsUniformBuffer, + 0, + this._vsUniformValues.buffer, + this._vsUniformValues.byteOffset, + this._vsUniformValues.byteLength + ); + + this._uniBufFrag.updateUniformValues(); + + this._cgp.passEncoder.setPipeline(this._renderPipeline); + this._cgp.passEncoder.setBindGroup(0, this._bindGroup); + // this._pipeline = this._cgp.device.createRenderPipeline(this._pipeCfg); + } + } + + getPiplelineObject(shader, mesh) + { + const pipeCfg = { + "layout": "auto", + "vertex": { + "module": shader.shaderModule, + "entryPoint": "myVSMain", + "buffers": [ + // position + { + "arrayStride": 3 * 4, // 3 floats, 4 bytes each + "attributes": [ + { "shaderLocation": 0, "offset": 0, "format": "float32x3" }, + ], + }, + // normals + { + "arrayStride": 3 * 4, // 3 floats, 4 bytes each + "attributes": [ + { "shaderLocation": 1, "offset": 0, "format": "float32x3" }, + ], + }, + // texcoords + { + "arrayStride": 2 * 4, // 2 floats, 4 bytes each + "attributes": [ + { "shaderLocation": 2, "offset": 0, "format": "float32x2", }, + ], + }, + ], + }, + "fragment": { + "module": shader.shaderModule, + "entryPoint": "myFSMain", + "targets": [ + { "format": this._cgp.presentationFormat }, + ], + }, + "primitive": { + "topology": "triangle-list", + "cullMode": "back", // back/none/front + + // "point-list", + // "line-list", + // "line-strip", + // "triangle-list", + // "triangle-strip" + }, + "depthStencil": { + "depthWriteEnabled": true, + "depthCompare": "less", + "format": "depth24plus", + }, + + }; + + return pipeCfg; + } + + + _bindUniforms(shader) + { + this._cgp.pushErrorScope(); + + + const counts = { }; + + this._uniBufFrag = new UniformBuffer(shader, "frag"); + + // for (let i = 0; i < shader.uniforms.length; i++) + // { + // const uni = shader.uniforms[i]; + // const type = uni.shaderType; + // counts[type] = counts[type] || 0; + + + // counts[type] += uni.getSizeBytes(); + // } + // console.log(counts, counts.frag); + + + const vUniformBufferSize = 3 * 16 * 4; // 2 mat4s * 16 floats per mat * 4 bytes per float + // const fUniformBufferSize = counts.frag;// 2 * 3 * 4; // 1 vec3 * 3 floats per vec3 * 4 bytes per float + + this._vsUniformBuffer = this._cgp.device.createBuffer({ + "size": vUniformBufferSize, + "usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST, + }); + + // this._fsUniformBuffer = this._cgp.device.createBuffer({ + // "size": fUniformBufferSize, + // "usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST, + // }); + + // this._fsUniformValues = new Float32Array(counts.frag / 4); + + this._vsUniformValues = new Float32Array(vUniformBufferSize / 4); + + this._matModel = this._vsUniformValues.subarray(0, 16); + this._matView = this._vsUniformValues.subarray(16, 32); + this._matProj = this._vsUniformValues.subarray(32, 48); + + + // this._fsUniformValues[1] = 1.0; + // this._fsUniformValues[0] = 1.0; + // const lightDirection = this._fsUniformValues.subarray(0, 3); + + // console.log("pipeline bindgrouplayout ", pipeline.getBindGroupLayout(0)); + + this._bindGroup = this._cgp.device.createBindGroup( + { + "layout": this._renderPipeline.getBindGroupLayout(0), + "entries": [ + { "binding": 0, "resource": { "buffer": this._vsUniformBuffer } }, + { "binding": 1, "resource": { "buffer": this._uniBufFrag._gpuBuffer } } + // { binding: 2, resource: sampler }, + // { binding: 3, resource: tex.createView() }, + ], + }); + + this._cgp.device.queue.writeBuffer( + this._vsUniformBuffer, + 0, + this._vsUniformValues.buffer, + this._vsUniformValues.byteOffset, + this._vsUniformValues.byteLength + ); + + this._uniBufFrag.updateUniformValues(); + this._cgp.popErrorScope("cgp_pipeline end", (e) => + { + this._isValid = false; + }); + } +} + +;// CONCATENATED MODULE: ./src/core/cgp/cgp_mesh.js + + + +class cgp_mesh_Mesh +{ + constructor(_cgp, __geom) + { + this._log = new Logger("cgl_mesh"); + this._cgp = _cgp; + this._geom = null; + this.numIndex = 0; + + this._pipe = new Pipeline(this._cgp); + + this._numNonIndexed = 0; + this._positionBuffer = null; + this._bufVerticesIndizes = null; + this._attributes = []; + + this._needsPipelineUpdate = false; + + if (__geom) this.setGeom(__geom); + } + + _createBuffer(device, data, usage) + { + const buffer = device.createBuffer({ + "size": data.byteLength, + "usage": usage, + "mappedAtCreation": true, + }); + const dst = new data.constructor(buffer.getMappedRange()); + dst.set(data); + buffer.unmap(); + return buffer; + } + + /** + * @function setGeom + * @memberof Mesh + * @instance + * @description set geometry for mesh + * @param {Geometry} geometry + */ + setGeom(geom, removeRef) + { + this._needsPipelineUpdate = true; + this._geom = geom; + this._disposeAttributes(); + + this._positionBuffer = this._createBuffer(this._cgp.device, new Float32Array(geom.vertices), GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST); + + let vi = geom.verticesIndices; + if (!geom.isIndexed()) vi = Array.from(Array(geom.vertices.length / 3).keys()); + this._numIndices = vi.length; + this._indicesBuffer = this._createBuffer(this._cgp.device, new Uint32Array(vi), GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST); + + if (geom.texCoords && geom.texCoords.length) this.setAttribute("texCoords", geom.texCoords, 2); + if (geom.vertexNormals && geom.vertexNormals.length) this.setAttribute("normals", geom.vertexNormals, 3); + } + + + _disposeAttributes() + { + this._needsPipelineUpdate = true; + for (let i = 0; i < this._attributes.length; i++) + { + this._attributes[i].buffer.destroy(); + } + this._attributes.length = 0; + } + + dispose() + { + this._disposeAttributes(); + } + + /** + * @function setAttribute + * @description update attribute + * @memberof Mesh + * @instance + * @param {String} attribute name + * @param {Array} data + * @param {Number} itemSize + * @param {Object} options + */ + setAttribute(name, array, itemSize, options) + { + if (!array) + { + this._log.error("mesh addAttribute - no array given! " + name); + throw new Error(); + } + + for (let i = 0; i < this._attributes.length; i++) + { + const attr = this._attributes[i]; + if (attr.name == name) + { + // if (attr.numItems === numItems) + // { + // } + // else + // { + // // this._log.log("wrong buffer size", this._geom.name, attr.name, attr.numItems, numItems); + // this._resizeAttr(array, attr); + // } + // normalBuffer = this._createBuffer(this._cgp.device, new Float32Array(geom.vertexNormals), GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST); + + // this._cgl.gl.bindBuffer(this._cgl.gl.ARRAY_BUFFER, attr.buffer); + // this._bufferArray(array, attr); + + return attr; + } + } + + const buffer = this._createBuffer(this._cgp.device, new Float32Array(array), GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST); + + const attr = { + "buffer": buffer, + "name": name, + // "cb": cb, + // "itemSize": itemSize, + // "numItems": numItems, + // "startItem": 0, + // "instanced": instanced, + // "type": type + }; + this._attributes.push(attr); + + return attr; + } + + // setPipeline() + // { + + // this._cgp.passEncoder.setPipeline(this._pipe.getPiplelineObject(this._cgp.getShader(),this)); + + + // } + + render() + { + if (!this._positionBuffer) return; + + // this.setPipeline(); + + const shader = this._cgp.getShader(); + if (shader)shader.bind(); + + if (!this._cgp.getShader() || !this._cgp.getShader().isValid) + { + // console.log("invalid"); + return; + } + + this._pipe.setPipeline(this._cgp.getShader(), this); + + if (!this._pipe.isValid) + { + // console.log("invalid"); + return; + } + + + this._cgp.passEncoder.setVertexBuffer(0, this._positionBuffer); + for (let i = 0; i < this._attributes.length; i++) + { + this._cgp.passEncoder.setVertexBuffer(i + 1, this._attributes[i].buffer); + } + + this._cgp.passEncoder.setIndexBuffer(this._indicesBuffer, "uint32"); + + if (this._numNonIndexed) + this._cgp.passEncoder.draw(this._numIndices); + else + this._cgp.passEncoder.drawIndexed(this._numIndices); + + // if (shader)shader.unbind(); + } +} + +;// CONCATENATED MODULE: ./src/core/cgp/cgp_texture.js + + +class cgp_texture_Texture +{ + constructor(_cgp, options) + { + if (!_cgp) throw new Error("no cgp"); + this._log = new Logger("cgp_texture"); + this._cgp = _cgp; + this.id = CABLES.uuid(); + + options = options || {}; + + this.name = options.name || "unknown"; + } + + /** + * set texture data from an image/canvas object + * @function initTexture + * @memberof Texture + * @instance + * @param {Object} image + * @param {Number} filter + */ + initTexture(img, filter) + { + this.width = img.width; + this.height = img.height; + + this.textureType = "rgba8unorm"; + + const textureDescriptor = { + // Unlike in WebGL, the size of our texture must be set at texture creation time. + // This means we have to wait until the image is loaded to create the texture, since we won't + // know the size until then. + "size": { "width": img.width, "height": img.height }, + "format": this.textureType, + "usage": GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST + }; + const texture = this._cgp.device.createTexture(textureDescriptor); + + this._cgp.device.queue.copyExternalImageToTexture({ "source": img }, { "texture": texture }, textureDescriptor.size); + + return texture; + } + + getInfo() + { + const tex = this; + const obj = {}; + + obj.name = tex.name; + obj.size = tex.width + " x " + tex.height; + + obj.textureType = tex.textureType; + + return obj; + } +} + + +/** + * @function load + * @static + * @memberof Texture + * @description load an image from an url + * @param {Context} cgl + * @param {String} url + * @param {Function} onFinished + * @param {Object} options + * @return {Texture} + */ +cgp_texture_Texture.load = function (cgp, url, onFinished, settings) +{ + fetch(url).then((response) => + { + response.blob().then((blob) => + { + createImageBitmap(blob).then((imgBitmap) => + { + const texture = new cgp_texture_Texture(cgp, { "name": url }); + texture.initTexture(imgBitmap); + if (onFinished)onFinished(texture); + else console.log("Texture.load no onFinished callback"); + }); + }); + }); +}; + +;// CONCATENATED MODULE: ./src/core/cgp/index.js + + + + + + +const cgp_CGP = { + "Context": WebGpuContext, + "Shader": cgp_shader_Shader, + "Mesh": cgp_mesh_Mesh, + "Pipeline": Pipeline, + "Texture": cgp_texture_Texture, +}; + +window.CGP = cgp_CGP; + + + + +;// CONCATENATED MODULE: ./src/core/cgl/cgl_framebuffer.js + + + +// todo: convert to prototyped... + +/** + * a framebuffer + * @external CGL + * @namespace Framebuffer + * @constructor + * @param {Context} cgl + * @param {Number} width + * @param {Number} height + * @param {Object} [options] + */ +const Framebuffer = function (_cgl, _w, _h, options) +{ + const cgl = _cgl; + this._log = new Logger("Framebuffer"); + this.valid = true; + + let depthTextureExt = cgl.gl.DEPTH_TEXTURE; + if (!depthTextureExt) depthTextureExt = cgl.enableExtension("WEBGL_depth_texture"); + if (!depthTextureExt) depthTextureExt = cgl.enableExtension("WEBKIT_WEBGL_depth_texture"); + if (!depthTextureExt) depthTextureExt = cgl.enableExtension("MOZ_WEBGL_depth_texture"); + + if (!depthTextureExt) + { + cgl.exitError("NO_DEPTH_TEXTURE", "no depth texture support"); + // return; + } + + let width = _w || 512; + let height = _h || 512; + + options = options || { + "isFloatingPointTexture": false, + }; + + if (!options.hasOwnProperty("clear")) options.clear = true; + if (!options.hasOwnProperty("filter")) options.filter = Texture.FILTER_LINEAR; + + const texture = new Texture(cgl, { + "isFloatingPointTexture": options.isFloatingPointTexture, + "filter": options.filter, + "wrap": options.wrap || Texture.CLAMP_TO_EDGE + }); + + let textureDepth = null; + if (depthTextureExt) + { + textureDepth = new Texture(cgl, { + "isDepthTexture": true, + }); + } + this._options = options; + + const frameBuf = cgl.gl.createFramebuffer(); + const depthBuffer = cgl.gl.createRenderbuffer(); + + this.getWidth = function () + { + return width; + }; + this.getHeight = function () + { + return height; + }; + + /** + * get native gl framebuffer + * @function getGlFrameBuffer + * @memberof Framebuffer + * @returns {Object} framebuffer + */ + this.getGlFrameBuffer = function () + { + return frameBuf; + }; + + /** + * get depth renderbuffer + * @function getDepthRenderBuffer + * @memberof Framebuffer + * @returns {Object} renderbuffer + */ + this.getDepthRenderBuffer = function () + { + return depthBuffer; + }; + + /** + * get color texture + * @function getTextureColor + * @memberof Framebuffer + * @returns {Texture} rgba texture + */ + this.getTextureColor = function () + { + return texture; + }; + + /** + * get depth texture + * @function getTextureDepth + * @memberof Framebuffer + * @returns {Texture} depth texture + */ + this.getTextureDepth = function () + { + return textureDepth; + }; + + this.setFilter = function (f) + { + texture.filter = f; + texture.setSize(width, height); + }; + + this.setSize = function (w, h) + { + if (w < 2) w = 2; + if (h < 2) h = 2; + + width = Math.ceil(w); + height = Math.ceil(h); + + cgl.profileData.profileFrameBuffercreate++; + + cgl.gl.bindFramebuffer(cgl.gl.FRAMEBUFFER, frameBuf); + cgl.gl.bindRenderbuffer(cgl.gl.RENDERBUFFER, depthBuffer); + + texture.setSize(width, height); + if (textureDepth) textureDepth.setSize(width, height); + + // if(depthTextureExt) cgl.gl.renderbufferStorage(cgl.gl.RENDERBUFFER, cgl.gl.DEPTH_COMPONENT16, width,height); + if (depthTextureExt) cgl.gl.renderbufferStorage(cgl.gl.RENDERBUFFER, cgl.gl.DEPTH_COMPONENT16, width, height); + + cgl.gl.framebufferTexture2D(cgl.gl.FRAMEBUFFER, cgl.gl.COLOR_ATTACHMENT0, cgl.gl.TEXTURE_2D, texture.tex, 0); + + if (depthTextureExt) + { + cgl.gl.framebufferRenderbuffer(cgl.gl.FRAMEBUFFER, cgl.gl.DEPTH_ATTACHMENT, cgl.gl.RENDERBUFFER, depthBuffer); + cgl.gl.framebufferTexture2D( + cgl.gl.FRAMEBUFFER, + cgl.gl.DEPTH_ATTACHMENT, // safari needs DEPTH_ATTACHMENT NOT DEPTH_ATTACHMENT16 + // cgl.gl.DEPTH_COMPONENT16, + cgl.gl.TEXTURE_2D, + textureDepth.tex, + 0, + ); + } + + if (!cgl.gl.isFramebuffer(frameBuf)) throw new Error("Invalid framebuffer"); + const status = cgl.gl.checkFramebufferStatus(cgl.gl.FRAMEBUFFER); + + switch (status) + { + case cgl.gl.FRAMEBUFFER_COMPLETE: + break; + case cgl.gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT: + this._log.warn("FRAMEBUFFER_INCOMPLETE_ATTACHMENT...", width, height, texture.tex, depthBuffer); + this.valid = false; + throw new Error("Incomplete framebuffer: FRAMEBUFFER_INCOMPLETE_ATTACHMENT"); + case cgl.gl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: + this._log.warn("FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"); + this.valid = false; + throw new Error("Incomplete framebuffer: FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"); + case cgl.gl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS: + this._log.warn("FRAMEBUFFER_INCOMPLETE_DIMENSIONS"); + this.valid = false; + throw new Error("Incomplete framebuffer: FRAMEBUFFER_INCOMPLETE_DIMENSIONS"); + case cgl.gl.FRAMEBUFFER_UNSUPPORTED: + this._log.warn("FRAMEBUFFER_UNSUPPORTED"); + this.valid = false; + throw new Error("Incomplete framebuffer: FRAMEBUFFER_UNSUPPORTED"); + case 0x8CDB: + this._log.warn("Incomplete: FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER from ext. Or Safari/iOS undefined behaviour."); + this.valid = false; + break; + default: + this._log.warn("incomplete framebuffer", status); + this.valid = false; + throw new Error("Incomplete framebuffer: " + status); + // throw("Incomplete framebuffer: " + status); + } + + cgl.gl.bindTexture(cgl.gl.TEXTURE_2D, null); + cgl.gl.bindRenderbuffer(cgl.gl.RENDERBUFFER, null); + cgl.gl.bindFramebuffer(cgl.gl.FRAMEBUFFER, null); + }; + + this.renderStart = function () + { + cgl.pushModelMatrix(); + cgl.gl.bindFramebuffer(cgl.gl.FRAMEBUFFER, frameBuf); + cgl.pushGlFrameBuffer(frameBuf); + cgl.pushFrameBuffer(this); + + cgl.pushPMatrix(); + cgl.gl.viewport(0, 0, width, height); + + if (this._options.clear) + { + cgl.gl.clearColor(0, 0, 0, 0); + cgl.gl.clear(cgl.gl.COLOR_BUFFER_BIT | cgl.gl.DEPTH_BUFFER_BIT); + } + }; + + this.renderEnd = function () + { + cgl.popPMatrix(); + cgl.gl.bindFramebuffer(cgl.gl.FRAMEBUFFER, cgl.popGlFrameBuffer()); + cgl.popFrameBuffer(); + + cgl.popModelMatrix(); + cgl.resetViewPort(); + }; + + + this.delete = function () + { + texture.delete(); + this.valid = false; + if (textureDepth) textureDepth.delete(); + cgl.gl.deleteRenderbuffer(depthBuffer); + cgl.gl.deleteFramebuffer(frameBuf); + }; + + this.dispose = this.delete; + + this.setSize(width, height); +}; + + + +;// CONCATENATED MODULE: ./src/core/cgl/cgl_framebuffer2.js +// * see framebuffer1 + + + + + + +const Framebuffer2 = function (cgl, w, h, options) +{ + if (cgl.glVersion == 1) return console.log("framebuffer2 used on webgl1"); + this._log = new Logger("cgl_framebuffer2"); + this.Framebuffer2DrawTargetsDefault = null; + this.Framebuffer2BlittingFramebuffer = null; + this.Framebuffer2FinalFramebuffer = null; + this._cgl = cgl; + + this._cgl.printError("before framebuffer2 constructor"); + + this._width = 0; + this._height = 0; + this.valid = true; + + this._depthRenderbuffer = null; + this._frameBuffer = null; + this._textureFrameBuffer = null; + this._colorRenderbuffers = []; + this._drawTargetArray = []; + this._disposed = false; + + if (!this.Framebuffer2BlittingFramebuffer) this.Framebuffer2BlittingFramebuffer = cgl.gl.createFramebuffer(); + if (!this.Framebuffer2FinalFramebuffer) this.Framebuffer2FinalFramebuffer = cgl.gl.createFramebuffer(); + + if (!this.Framebuffer2DrawTargetsDefault) this.Framebuffer2DrawTargetsDefault = [cgl.gl.COLOR_ATTACHMENT0]; + + this._options = options || { + "isFloatingPointTexture": false, + }; + + // this._cgl.printError("fb2 before"); + + this.name = this._options.name || "unknown"; + + this._cgl.profileData.addHeavyEvent("framebuffer create", this.name); + + if (!this._options.hasOwnProperty("numRenderBuffers")) this._options.numRenderBuffers = 1; + if (!this._options.hasOwnProperty("depth")) this._options.depth = true; + if (!this._options.hasOwnProperty("clear")) this._options.clear = true; + if (!this._options.hasOwnProperty("multisampling")) + { + this._options.multisampling = false; + this._options.multisamplingSamples = 0; + } + + if (this._options.multisamplingSamples) + { + if (this._cgl.glSlowRenderer) this._options.multisamplingSamples = 0; + if (!this._cgl.gl.MAX_SAMPLES) this._options.multisamplingSamples = 0; + else this._options.multisamplingSamples = Math.min(this._cgl.maxSamples, this._options.multisamplingSamples); + } + + if (!this._options.hasOwnProperty("filter")) this._options.filter = Texture.FILTER_LINEAR; + if (!this._options.hasOwnProperty("wrap")) this._options.wrap = Texture.WRAP_REPEAT; + + this._numRenderBuffers = this._options.numRenderBuffers; + this._colorTextures = []; + + this.clearColors = []; + for (let i = 0; i < this._numRenderBuffers; i++) this.clearColors.push([0, 0, 0, 1]); + + + if (!options.pixelFormat) + { + if (options.isFloatingPointTexture) this._options.pixelFormat = Texture.PFORMATSTR_RGBA32F; + else this._options.pixelFormat = Texture.PFORMATSTR_RGBA8UB; + } + + + for (let i = 0; i < this._numRenderBuffers; i++) + { + this._colorTextures[i] = new Texture(cgl, { + "name": "fb2 " + this.name + " " + i, + "isFloatingPointTexture": this._options.isFloatingPointTexture, + "anisotropic": this._options.anisotropic || 0, + "pixelFormat": this._options.pixelFormat, + "filter": this._options.filter, + "wrap": this._options.wrap, + }); + } + + + + let fil = Texture.FILTER_NEAREST; + if (this._options.shadowMap) fil = Texture.FILTER_LINEAR; + + const defaultTexSize = 512; + + if (this._options.depth) + { + this._textureDepth = new Texture(cgl, + { + "name": "fb2 depth " + this.name, + "isDepthTexture": true, + "filter": fil, + "shadowMap": this._options.shadowMap || false, + "width": w || defaultTexSize, + "height": h || defaultTexSize, + }); + } + + if (cgl.aborted) return; + + this.setSize(w || defaultTexSize, h || defaultTexSize); + + this._cgl.printError("framebuffer2 constructor"); +}; + +Framebuffer2.prototype.getWidth = function () +{ + return this._width; +}; +Framebuffer2.prototype.getHeight = function () +{ + return this._height; +}; + +Framebuffer2.prototype.getGlFrameBuffer = function () +{ + return this._frameBuffer; +}; + +Framebuffer2.prototype.getDepthRenderBuffer = function () +{ + return this._depthRenderbuffer; +}; + +Framebuffer2.prototype.getTextureColor = function () +{ + return this._colorTextures[0]; +}; + +Framebuffer2.prototype.getTextureColorNum = function (i) +{ + return this._colorTextures[i]; +}; + +Framebuffer2.prototype.getTextureDepth = function () +{ + return this._textureDepth; +}; + +Framebuffer2.prototype.setFilter = function (f) +{ + for (let i = 0; i < this._numRenderBuffers; i++) + { + this._colorTextures[i].filter = f; + this._colorTextures[i].setSize(this._width, this._height); + } +}; + +Framebuffer2.prototype.delete = Framebuffer2.prototype.dispose = function () +{ + this._disposed = true; + let i = 0; + for (i = 0; i < this._numRenderBuffers; i++) this._colorTextures[i].delete(); + // this._texture.delete(); + if (this._textureDepth) this._textureDepth.delete(); + for (i = 0; i < this._numRenderBuffers; i++) this._cgl.gl.deleteRenderbuffer(this._colorRenderbuffers[i]); + this._cgl.gl.deleteRenderbuffer(this._depthRenderbuffer); + this._cgl.gl.deleteFramebuffer(this._frameBuffer); + this._cgl.gl.deleteFramebuffer(this._textureFrameBuffer); +}; + +Framebuffer2.prototype.setSize = function (w, h) +{ + if (this._disposed) return this._log.warn("disposed framebuffer setsize..."); + this._cgl.profileData.addHeavyEvent("framebuffer resize", this.name); + + let i = 0; + + this._width = this._cgl.checkTextureSize(w); + this._height = this._cgl.checkTextureSize(h); + + this._cgl.profileData.profileFrameBuffercreate++; + + if (this._frameBuffer) + { + for (i = 0; i < this._numRenderBuffers; i++) this._cgl.gl.deleteRenderbuffer(this._colorRenderbuffers[i]); + // this._cgl.gl.deleteRenderbuffer(this._colorRenderbuffer); + this._cgl.gl.deleteRenderbuffer(this._depthRenderbuffer); + this._cgl.gl.deleteFramebuffer(this._frameBuffer); + this._cgl.gl.deleteFramebuffer(this._textureFrameBuffer); + } + + this._frameBuffer = this._cgl.gl.createFramebuffer(); + this._textureFrameBuffer = this._cgl.gl.createFramebuffer(); + + const depth = this._options.depth; + + for (i = 0; i < this._numRenderBuffers; i++) + { + this._colorTextures[i].setSize(this._width, this._height); + } + + + + for (i = 0; i < this._numRenderBuffers; i++) + { + const renderBuffer = this._cgl.gl.createRenderbuffer(); + + // color renderbuffer + + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, this._frameBuffer); + this._cgl.gl.bindRenderbuffer(this._cgl.gl.RENDERBUFFER, renderBuffer); + + const info = Texture.setUpGlPixelFormat(this._cgl, this._options.pixelFormat); + let internFormat = info.glInternalFormat; + + // if (this._options.isFloatingPointTexture) + // { + if (CGL.Texture.isPixelFormatHalfFloat(info.pixelFormat)) + { + if (!this._cgl.enableExtension("OES_texture_float_linear")) + { + this._options.filter = Texture.FILTER_NEAREST; + this.setFilter(this._options.filter); + } + } + else if (CGL.Texture.isPixelFormatFloat(info.pixelFormat)) + { + if (!this._cgl.enableExtension("OES_texture_float_linear")) + { + console.log("no linear pixelformat,using nearest"); + this._options.filter = Texture.FILTER_NEAREST; + this.setFilter(this._options.filter); + } + } + // else if (info.pixelFormat == Texture.PFORMATSTR_RGBA32F || info.pixelFormat == Texture.PFORMATSTR_R11FG11FB10F + // else if (info.pixelFormat == Texture.PFORMATSTR_RGBA32F || info.pixelFormat == Texture.PFORMATSTR_R11FG11FB10F + // else if (info.pixelFormat == Texture.PFORMATSTR_RG16F) + // { + // const extcb = this._cgl.enableExtension("EXT_color_buffer_float"); + + // if (!this._cgl.enableExtension("OES_texture_float_linear")) + // { + // console.log("no linear pixelformat,switching to nearest"); + // this._options.filter = Texture.FILTER_NEAREST; + // this.setFilter(this._options.filter); + // } + // } + // } + + if (this._options.multisampling && this._options.multisamplingSamples) + { + this._cgl.gl.renderbufferStorageMultisample(this._cgl.gl.RENDERBUFFER, this._options.multisamplingSamples, internFormat, this._width, this._height); + } + else + { + this._cgl.gl.renderbufferStorage(this._cgl.gl.RENDERBUFFER, internFormat, this._width, this._height); + } + + + + this._cgl.gl.framebufferRenderbuffer(this._cgl.gl.FRAMEBUFFER, this._cgl.gl.COLOR_ATTACHMENT0 + i, this._cgl.gl.RENDERBUFFER, renderBuffer); + this._colorRenderbuffers[i] = renderBuffer; + } + + // this._cgl.gl.bindFramebuffer(this._cgl.gl.DRAW_FRAMEBUFFER, this._textureFrameBuffer); + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, this._textureFrameBuffer); + + for (i = 0; i < this._numRenderBuffers; i++) + { + this._cgl.gl.framebufferTexture2D(this._cgl.gl.FRAMEBUFFER, this._cgl.gl.COLOR_ATTACHMENT0 + i, this._cgl.gl.TEXTURE_2D, this._colorTextures[i].tex, 0); + } + + if (this._options.depth) + { + this._cgl.gl.framebufferTexture2D(this._cgl.gl.FRAMEBUFFER, this._cgl.gl.DEPTH_ATTACHMENT, this._cgl.gl.TEXTURE_2D, this._textureDepth.tex, 0); + } + + // depth renderbuffer + + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, this._frameBuffer); + + + let depthType = this._cgl.gl.DEPTH_COMPONENT32F; + + if (this._cgl.glSlowRenderer) depthType = this._cgl.gl.DEPTH_COMPONENT16; + if (depth) + { + this._textureDepth.setSize(this._width, this._height); + this._depthRenderbuffer = this._cgl.gl.createRenderbuffer(); + + this._cgl.gl.bindRenderbuffer(this._cgl.gl.RENDERBUFFER, this._depthRenderbuffer); + if (this._options.isFloatingPointTexture) + { + if (this._options.multisampling) this._cgl.gl.renderbufferStorageMultisample(this._cgl.gl.RENDERBUFFER, this._options.multisamplingSamples, depthType, this._width, this._height); + else this._cgl.gl.renderbufferStorage(this._cgl.gl.RENDERBUFFER, depthType, this._width, this._height); + } + else if (this._options.multisampling) + { + this._cgl.gl.renderbufferStorageMultisample(this._cgl.gl.RENDERBUFFER, this._options.multisamplingSamples, depthType, this._width, this._height); + // this._cgl.gl.renderbufferStorage(this._cgl.gl.RENDERBUFFER,depthType, this._width, this._height); + } + else + { + this._cgl.gl.renderbufferStorage(this._cgl.gl.RENDERBUFFER, depthType, this._width, this._height); + } + + this._cgl.gl.framebufferRenderbuffer(this._cgl.gl.FRAMEBUFFER, this._cgl.gl.DEPTH_ATTACHMENT, this._cgl.gl.RENDERBUFFER, this._depthRenderbuffer); + } + + // this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, null); + // this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, this._textureFrameBuffer); + + this._drawTargetArray.length = 0; + for (i = 0; i < this._numRenderBuffers; i++) this._drawTargetArray.push(this._cgl.gl.COLOR_ATTACHMENT0 + i); + + // this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, null); + + + if (!this._cgl.gl.isFramebuffer(this._textureFrameBuffer)) this._log.warn("invalid framebuffer");// throw new Error("Invalid framebuffer"); + const status = this._cgl.gl.checkFramebufferStatus(this._cgl.gl.FRAMEBUFFER); + + if (status != this._cgl.gl.FRAMEBUFFER_COMPLETE) + { + this._log.error("framebuffer incomplete: " + this.name, this); + console.log("options", this._options); + + switch (status) + { + case this._cgl.gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT: + this._log.warn("FRAMEBUFFER_INCOMPLETE_ATTACHMENT...", this); + throw new Error("Incomplete framebuffer: FRAMEBUFFER_INCOMPLETE_ATTACHMENT"); + case this._cgl.gl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: + this._log.warn("FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"); + throw new Error("Incomplete framebuffer: FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"); + case this._cgl.gl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS: + this._log.warn("FRAMEBUFFER_INCOMPLETE_DIMENSIONS"); + throw new Error("Incomplete framebuffer: FRAMEBUFFER_INCOMPLETE_DIMENSIONS"); + case this._cgl.gl.FRAMEBUFFER_UNSUPPORTED: + this._log.warn("FRAMEBUFFER_UNSUPPORTED"); + throw new Error("Incomplete framebuffer: FRAMEBUFFER_UNSUPPORTED"); + default: + this.valid = false; + this._log.warn("incomplete framebuffer", status, this._frameBuffer); + this._cgl.printError(); + this._cgl.exitError("Framebuffer incomplete..."); + + this._frameBuffer = null; + // debugger; + throw new Error("Incomplete framebuffer: " + status); + + // throw("Incomplete framebuffer: " + status); + } + } + + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, null); + this._cgl.gl.bindRenderbuffer(this._cgl.gl.RENDERBUFFER, null); + + // this._cgl.printError("fb setsize"); +}; + +Framebuffer2.prototype.renderStart = function () +{ + if (this._disposed) return this._log.warn("disposed framebuffer renderStart..."); + this._cgl.checkFrameStarted("fb2 renderstart"); + this._cgl.pushModelMatrix(); // needed ?? + + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, this._frameBuffer); + this._cgl.pushGlFrameBuffer(this._frameBuffer); + this._cgl.pushFrameBuffer(this); + + this._cgl.pushPMatrix(); + this._cgl.pushViewPort(0, 0, this._width, this._height); + + this._cgl.gl.drawBuffers(this._drawTargetArray); + + if (this._options.clear) + { + this._cgl.gl.clearColor(0, 0, 0, 0); + this._cgl.gl.clear(this._cgl.gl.COLOR_BUFFER_BIT | this._cgl.gl.DEPTH_BUFFER_BIT); + } +}; + +Framebuffer2.prototype.clear = function () +{ + if (this._numRenderBuffers <= 1) + { + this._cgl.gl.bindFramebuffer(this._cgl.gl.READ_FRAMEBUFFER, this._frameBuffer); + this._cgl.gl.bindFramebuffer(this._cgl.gl.DRAW_FRAMEBUFFER, this._textureFrameBuffer); + } + else this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, this._frameBuffer); + + this._cgl.gl.drawBuffers(this._drawTargetArray); + + for (let i = 0; i < this._numRenderBuffers; i++) + { + this._cgl.gl.framebufferTexture2D(this._cgl.gl.FRAMEBUFFER, this._cgl.gl.COLOR_ATTACHMENT0 + i, this._cgl.gl.TEXTURE_2D, this._colorTextures[i].tex, 0); + this._cgl.gl.clearBufferfv(this._cgl.gl.COLOR, i, this.clearColors[i]); + } + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, null); +}; + +Framebuffer2.prototype.renderEnd = function () +{ + if (this._disposed) return this._log.warn("disposed framebuffer renderEnd..."); + this._cgl.popPMatrix(); + + this._cgl.profileData.profileFramebuffer++; + + + if (this._numRenderBuffers <= 1) + { + this._cgl.gl.bindFramebuffer(this._cgl.gl.READ_FRAMEBUFFER, this._frameBuffer); + this._cgl.gl.bindFramebuffer(this._cgl.gl.DRAW_FRAMEBUFFER, this._textureFrameBuffer); + + // const a = this._cgl.gl.getFramebufferAttachmentParameter(this._cgl.gl.FRAMEBUFFER, this._cgl.gl.COLOR_ATTACHMENT0, this._cgl.gl.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING); + // if (a == this._cgl.gl.SRGB)console.log("SRGB", this._cgl.gl.SRGB); + // else if (a == this._cgl.gl.LINEAR)console.log("LINEAR", this._cgl.gl.LINEAR); + + + this._cgl.gl.clearBufferfv(this._cgl.gl.COLOR, 0, [0.0, 0.0, 0.0, 1.0]); + this._cgl.gl.blitFramebuffer(0, 0, this._width, this._height, 0, 0, this._width, this._height, this._cgl.gl.COLOR_BUFFER_BIT | this._cgl.gl.DEPTH_BUFFER_BIT, this._cgl.gl.NEAREST); + } + else + { + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, this.Framebuffer2BlittingFramebuffer); + this._cgl.gl.framebufferRenderbuffer(this._cgl.gl.FRAMEBUFFER, this._cgl.gl.DEPTH_ATTACHMENT, this._cgl.gl.RENDERBUFFER, this._depthRenderbuffer); + + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, this.Framebuffer2FinalFramebuffer); + this._cgl.gl.framebufferTexture2D(this._cgl.gl.FRAMEBUFFER, this._cgl.gl.DEPTH_ATTACHMENT, this._cgl.gl.TEXTURE_2D, this._textureDepth.tex, 0); + + // console.log("fb this._numRenderBuffers", this._numRenderBuffers); + for (let i = 0; i < this._numRenderBuffers; i++) + { + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, this.Framebuffer2BlittingFramebuffer); + this._cgl.gl.framebufferRenderbuffer(this._cgl.gl.FRAMEBUFFER, this._cgl.gl.COLOR_ATTACHMENT0, this._cgl.gl.RENDERBUFFER, this._colorRenderbuffers[i]); + + + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, this.Framebuffer2FinalFramebuffer); + this._cgl.gl.framebufferTexture2D(this._cgl.gl.FRAMEBUFFER, this._cgl.gl.COLOR_ATTACHMENT0, this._cgl.gl.TEXTURE_2D, this._colorTextures[i].tex, 0); + + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, null); + + this._cgl.gl.bindFramebuffer(this._cgl.gl.READ_FRAMEBUFFER, this.Framebuffer2BlittingFramebuffer); + this._cgl.gl.bindFramebuffer(this._cgl.gl.DRAW_FRAMEBUFFER, this.Framebuffer2FinalFramebuffer); + + // this._cgl.gl.clearBufferfv(this._cgl.gl.COLOR, i, [0.0, 0.0, 0.0, 1.0]); + + + + let flags = this._cgl.gl.COLOR_BUFFER_BIT; + if (i == 0) flags |= this._cgl.gl.DEPTH_BUFFER_BIT; + + this._cgl.gl.blitFramebuffer(0, 0, this._width, this._height, 0, 0, this._width, this._height, flags, this._cgl.gl.NEAREST); + } + } + + this._cgl.gl.bindFramebuffer(this._cgl.gl.FRAMEBUFFER, this._cgl.popGlFrameBuffer()); + this._cgl.popFrameBuffer(); + + this._cgl.popModelMatrix(); + // this._cgl.resetViewPort(); + this._cgl.popViewPort(); + + + if (this._colorTextures[0].filter == Texture.FILTER_MIPMAP) + { + for (let i = 0; i < this._numRenderBuffers; i++) + { + this._cgl.gl.bindTexture(this._cgl.gl.TEXTURE_2D, this._colorTextures[i].tex); + this._colorTextures[i].updateMipMap(); + this._cgl.gl.bindTexture(this._cgl.gl.TEXTURE_2D, null); + } + } +}; + + + +/// /////// + +;// CONCATENATED MODULE: ./src/core/cgl/cgl_marker.js +const Marker = function (_cgl) // deprecated... +{ + this.draw = function (cgl, _size, depthTest) {}; +}; + +const WirePoint = function (cgl) // deprecated... +{ + this.render = function (_cgl, _size) {}; +}; + +const WireCube = function (cgl) // deprecated... +{ + this.render = function (_cgl, sizeX, sizeY, sizeZ) {}; +}; + +;// CONCATENATED MODULE: ./src/core/cgl/cgl_unicolorshader.js + + +class UniColorShader +{ + constructor(_cgl) + { + this.shader = new CGL.Shader(_cgl, "markermaterial"); + + const frag = "" + .endl() + "void main()" + .endl() + "{" + .endl() + " outColor = vec4(color.rgb,1.0);" + .endl() + "}"; + + + const vert = "" + .endl() + "IN vec3 vPosition;" + .endl() + "UNI mat4 projMatrix;" + .endl() + "UNI mat4 mvMatrix;" + + .endl() + "void main()" + .endl() + "{" + .endl() + " gl_Position = projMatrix * mvMatrix * vec4(vPosition,1.0);" + .endl() + "}"; + + this.shader.setSource(vert, frag); + this.coloruni = this.shader.addUniformFrag("4f", "color", [1, 0.777, 1, 1]); + } + + setColor(r, g, b, a) + { + this.coloruni.set(r, g, b, a); + } +} + +;// CONCATENATED MODULE: ./src/core/cgl/index.js + + + + + + + + + + + + + + + + + + + + + + +const cgl_CGL = { + "Framebuffer": Framebuffer, + "Framebuffer2": Framebuffer2, + "Geometry": Geometry, + "BoundingBox": BoundingBox, + "Marker": Marker, + "WirePoint": WirePoint, + "WireCube": WireCube, + "MatrixStack": MatrixStack, + "Mesh": Mesh, + "MESH": MESH, + "ShaderLibMods": ShaderLibMods, + "Shader": Shader, + "Uniform": Uniform, + "MESHES": MESHES, + "Context": Context, + "Texture": Texture, + "TextureEffect": TextureEffect, + "isWindows": isWindows, + "getWheelSpeed": getWheelSpeed, + "getWheelDelta": getWheelDelta, + "onLoadingAssetsFinished": onLoadingAssetsFinished, + "ProfileData": ProfileData, + "UniColorShader": UniColorShader, + ...constants_CONSTANTS.BLEND_MODES, + ...constants_CONSTANTS.SHADER, + ...constants_CONSTANTS.MATH, + ...constants_CONSTANTS.BLEND_MODES, +}; + +window.CGL = cgl_CGL; + + + + + +;// CONCATENATED MODULE: ./src/core/index.js + + + + + + + + + + + + + + + + + + + + +window.CABLES = window.CABLES || {}; + +CABLES.CGL = cgl_CGL; +CABLES.CG = CG; +CABLES.CGP = cgp_CGP; +CABLES.EMBED = EMBED; +CABLES.Link = Link; +CABLES.Port = Port; +CABLES.Op = Op; +CABLES.Profiler = Profiler; +CABLES.Patch = core_patch; +CABLES.Instancing = Instancing; +CABLES.Timer = Timer; +CABLES.WEBAUDIO = WEBAUDIO; +CABLES.Variable = Variable; +CABLES.LoadingStatus = LoadingStatus; +CABLES.now = now; +CABLES.internalNow = internalNow; +CABLES.BranchStack = BranchStack; +CABLES.Branch = Branch; + + +CABLES = Object.assign(CABLES, + base64_namespaceObject, + utils_namespaceObject, + anim_namespaceObject, + CONSTANTS.PORT, + CONSTANTS.PACO, + CONSTANTS.ANIM, + CONSTANTS.OP +); + +/* harmony default export */ const core = (CABLES); + +if (!(function () { return !this; }())) console.warn("not in strict mode: index core"); // eslint-disable-line + +CABLES = __webpack_exports__["default"]; +/******/ })() +; + + +var CABLES = CABLES || {}; CABLES.build = {"timestamp":1715927482175,"created":"2024-05-17T06:31:22.175Z","git":{"branch":"master","commit":"83d9847c52906e47691c89c7ec564876e8749a3b","date":"1715927217","message":"subpatch ops wrong"}}; +/*! +@fileoverview gl-matrix - High performance matrix and vector operations +@author Brandon Jones +@author Colin MacKenzie IV +@version 3.1.0 + +Copyright (c) 2015-2019, Brandon Jones, Colin MacKenzie IV. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ +!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((t=t||self).glMatrix={})}(this,function(t){"use strict";var n=1e-6,a="undefined"!=typeof Float32Array?Float32Array:Array,r=Math.random;var u=Math.PI/180;Math.hypot||(Math.hypot=function(){for(var t=0,n=arguments.length;n--;)t+=arguments[n]*arguments[n];return Math.sqrt(t)});var e=Object.freeze({EPSILON:n,get ARRAY_TYPE(){return a},RANDOM:r,setMatrixArrayType:function(t){a=t},toRadian:function(t){return t*u},equals:function(t,a){return Math.abs(t-a)<=n*Math.max(1,Math.abs(t),Math.abs(a))}});function o(t,n,a){var r=n[0],u=n[1],e=n[2],o=n[3],i=a[0],c=a[1],h=a[2],s=a[3];return t[0]=r*i+e*c,t[1]=u*i+o*c,t[2]=r*h+e*s,t[3]=u*h+o*s,t}function i(t,n,a){return t[0]=n[0]-a[0],t[1]=n[1]-a[1],t[2]=n[2]-a[2],t[3]=n[3]-a[3],t}var c=o,h=i,s=Object.freeze({create:function(){var t=new a(4);return a!=Float32Array&&(t[1]=0,t[2]=0),t[0]=1,t[3]=1,t},clone:function(t){var n=new a(4);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n},copy:function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t},identity:function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t},fromValues:function(t,n,r,u){var e=new a(4);return e[0]=t,e[1]=n,e[2]=r,e[3]=u,e},set:function(t,n,a,r,u){return t[0]=n,t[1]=a,t[2]=r,t[3]=u,t},transpose:function(t,n){if(t===n){var a=n[1];t[1]=n[2],t[2]=a}else t[0]=n[0],t[1]=n[2],t[2]=n[1],t[3]=n[3];return t},invert:function(t,n){var a=n[0],r=n[1],u=n[2],e=n[3],o=a*e-u*r;return o?(o=1/o,t[0]=e*o,t[1]=-r*o,t[2]=-u*o,t[3]=a*o,t):null},adjoint:function(t,n){var a=n[0];return t[0]=n[3],t[1]=-n[1],t[2]=-n[2],t[3]=a,t},determinant:function(t){return t[0]*t[3]-t[2]*t[1]},multiply:o,rotate:function(t,n,a){var r=n[0],u=n[1],e=n[2],o=n[3],i=Math.sin(a),c=Math.cos(a);return t[0]=r*c+e*i,t[1]=u*c+o*i,t[2]=r*-i+e*c,t[3]=u*-i+o*c,t},scale:function(t,n,a){var r=n[0],u=n[1],e=n[2],o=n[3],i=a[0],c=a[1];return t[0]=r*i,t[1]=u*i,t[2]=e*c,t[3]=o*c,t},fromRotation:function(t,n){var a=Math.sin(n),r=Math.cos(n);return t[0]=r,t[1]=a,t[2]=-a,t[3]=r,t},fromScaling:function(t,n){return t[0]=n[0],t[1]=0,t[2]=0,t[3]=n[1],t},str:function(t){return"mat2("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},frob:function(t){return Math.hypot(t[0],t[1],t[2],t[3])},LDU:function(t,n,a,r){return t[2]=r[2]/r[0],a[0]=r[0],a[1]=r[1],a[3]=r[3]-t[2]*a[1],[t,n,a]},add:function(t,n,a){return t[0]=n[0]+a[0],t[1]=n[1]+a[1],t[2]=n[2]+a[2],t[3]=n[3]+a[3],t},subtract:i,exactEquals:function(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]&&t[3]===n[3]},equals:function(t,a){var r=t[0],u=t[1],e=t[2],o=t[3],i=a[0],c=a[1],h=a[2],s=a[3];return Math.abs(r-i)<=n*Math.max(1,Math.abs(r),Math.abs(i))&&Math.abs(u-c)<=n*Math.max(1,Math.abs(u),Math.abs(c))&&Math.abs(e-h)<=n*Math.max(1,Math.abs(e),Math.abs(h))&&Math.abs(o-s)<=n*Math.max(1,Math.abs(o),Math.abs(s))},multiplyScalar:function(t,n,a){return t[0]=n[0]*a,t[1]=n[1]*a,t[2]=n[2]*a,t[3]=n[3]*a,t},multiplyScalarAndAdd:function(t,n,a,r){return t[0]=n[0]+a[0]*r,t[1]=n[1]+a[1]*r,t[2]=n[2]+a[2]*r,t[3]=n[3]+a[3]*r,t},mul:c,sub:h});function M(t,n,a){var r=n[0],u=n[1],e=n[2],o=n[3],i=n[4],c=n[5],h=a[0],s=a[1],M=a[2],f=a[3],l=a[4],v=a[5];return t[0]=r*h+e*s,t[1]=u*h+o*s,t[2]=r*M+e*f,t[3]=u*M+o*f,t[4]=r*l+e*v+i,t[5]=u*l+o*v+c,t}function f(t,n,a){return t[0]=n[0]-a[0],t[1]=n[1]-a[1],t[2]=n[2]-a[2],t[3]=n[3]-a[3],t[4]=n[4]-a[4],t[5]=n[5]-a[5],t}var l=M,v=f,b=Object.freeze({create:function(){var t=new a(6);return a!=Float32Array&&(t[1]=0,t[2]=0,t[4]=0,t[5]=0),t[0]=1,t[3]=1,t},clone:function(t){var n=new a(6);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n[4]=t[4],n[5]=t[5],n},copy:function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t},identity:function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t},fromValues:function(t,n,r,u,e,o){var i=new a(6);return i[0]=t,i[1]=n,i[2]=r,i[3]=u,i[4]=e,i[5]=o,i},set:function(t,n,a,r,u,e,o){return t[0]=n,t[1]=a,t[2]=r,t[3]=u,t[4]=e,t[5]=o,t},invert:function(t,n){var a=n[0],r=n[1],u=n[2],e=n[3],o=n[4],i=n[5],c=a*e-r*u;return c?(c=1/c,t[0]=e*c,t[1]=-r*c,t[2]=-u*c,t[3]=a*c,t[4]=(u*i-e*o)*c,t[5]=(r*o-a*i)*c,t):null},determinant:function(t){return t[0]*t[3]-t[1]*t[2]},multiply:M,rotate:function(t,n,a){var r=n[0],u=n[1],e=n[2],o=n[3],i=n[4],c=n[5],h=Math.sin(a),s=Math.cos(a);return t[0]=r*s+e*h,t[1]=u*s+o*h,t[2]=r*-h+e*s,t[3]=u*-h+o*s,t[4]=i,t[5]=c,t},scale:function(t,n,a){var r=n[0],u=n[1],e=n[2],o=n[3],i=n[4],c=n[5],h=a[0],s=a[1];return t[0]=r*h,t[1]=u*h,t[2]=e*s,t[3]=o*s,t[4]=i,t[5]=c,t},translate:function(t,n,a){var r=n[0],u=n[1],e=n[2],o=n[3],i=n[4],c=n[5],h=a[0],s=a[1];return t[0]=r,t[1]=u,t[2]=e,t[3]=o,t[4]=r*h+e*s+i,t[5]=u*h+o*s+c,t},fromRotation:function(t,n){var a=Math.sin(n),r=Math.cos(n);return t[0]=r,t[1]=a,t[2]=-a,t[3]=r,t[4]=0,t[5]=0,t},fromScaling:function(t,n){return t[0]=n[0],t[1]=0,t[2]=0,t[3]=n[1],t[4]=0,t[5]=0,t},fromTranslation:function(t,n){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=n[0],t[5]=n[1],t},str:function(t){return"mat2d("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+")"},frob:function(t){return Math.hypot(t[0],t[1],t[2],t[3],t[4],t[5],1)},add:function(t,n,a){return t[0]=n[0]+a[0],t[1]=n[1]+a[1],t[2]=n[2]+a[2],t[3]=n[3]+a[3],t[4]=n[4]+a[4],t[5]=n[5]+a[5],t},subtract:f,multiplyScalar:function(t,n,a){return t[0]=n[0]*a,t[1]=n[1]*a,t[2]=n[2]*a,t[3]=n[3]*a,t[4]=n[4]*a,t[5]=n[5]*a,t},multiplyScalarAndAdd:function(t,n,a,r){return t[0]=n[0]+a[0]*r,t[1]=n[1]+a[1]*r,t[2]=n[2]+a[2]*r,t[3]=n[3]+a[3]*r,t[4]=n[4]+a[4]*r,t[5]=n[5]+a[5]*r,t},exactEquals:function(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]&&t[3]===n[3]&&t[4]===n[4]&&t[5]===n[5]},equals:function(t,a){var r=t[0],u=t[1],e=t[2],o=t[3],i=t[4],c=t[5],h=a[0],s=a[1],M=a[2],f=a[3],l=a[4],v=a[5];return Math.abs(r-h)<=n*Math.max(1,Math.abs(r),Math.abs(h))&&Math.abs(u-s)<=n*Math.max(1,Math.abs(u),Math.abs(s))&&Math.abs(e-M)<=n*Math.max(1,Math.abs(e),Math.abs(M))&&Math.abs(o-f)<=n*Math.max(1,Math.abs(o),Math.abs(f))&&Math.abs(i-l)<=n*Math.max(1,Math.abs(i),Math.abs(l))&&Math.abs(c-v)<=n*Math.max(1,Math.abs(c),Math.abs(v))},mul:l,sub:v});function m(){var t=new a(9);return a!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t}function d(t,n,a){var r=n[0],u=n[1],e=n[2],o=n[3],i=n[4],c=n[5],h=n[6],s=n[7],M=n[8],f=a[0],l=a[1],v=a[2],b=a[3],m=a[4],d=a[5],x=a[6],p=a[7],y=a[8];return t[0]=f*r+l*o+v*h,t[1]=f*u+l*i+v*s,t[2]=f*e+l*c+v*M,t[3]=b*r+m*o+d*h,t[4]=b*u+m*i+d*s,t[5]=b*e+m*c+d*M,t[6]=x*r+p*o+y*h,t[7]=x*u+p*i+y*s,t[8]=x*e+p*c+y*M,t}function x(t,n,a){return t[0]=n[0]-a[0],t[1]=n[1]-a[1],t[2]=n[2]-a[2],t[3]=n[3]-a[3],t[4]=n[4]-a[4],t[5]=n[5]-a[5],t[6]=n[6]-a[6],t[7]=n[7]-a[7],t[8]=n[8]-a[8],t}var p=d,y=x,q=Object.freeze({create:m,fromMat4:function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[4],t[4]=n[5],t[5]=n[6],t[6]=n[8],t[7]=n[9],t[8]=n[10],t},clone:function(t){var n=new a(9);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n[4]=t[4],n[5]=t[5],n[6]=t[6],n[7]=t[7],n[8]=t[8],n},copy:function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t},fromValues:function(t,n,r,u,e,o,i,c,h){var s=new a(9);return s[0]=t,s[1]=n,s[2]=r,s[3]=u,s[4]=e,s[5]=o,s[6]=i,s[7]=c,s[8]=h,s},set:function(t,n,a,r,u,e,o,i,c,h){return t[0]=n,t[1]=a,t[2]=r,t[3]=u,t[4]=e,t[5]=o,t[6]=i,t[7]=c,t[8]=h,t},identity:function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},transpose:function(t,n){if(t===n){var a=n[1],r=n[2],u=n[5];t[1]=n[3],t[2]=n[6],t[3]=a,t[5]=n[7],t[6]=r,t[7]=u}else t[0]=n[0],t[1]=n[3],t[2]=n[6],t[3]=n[1],t[4]=n[4],t[5]=n[7],t[6]=n[2],t[7]=n[5],t[8]=n[8];return t},invert:function(t,n){var a=n[0],r=n[1],u=n[2],e=n[3],o=n[4],i=n[5],c=n[6],h=n[7],s=n[8],M=s*o-i*h,f=-s*e+i*c,l=h*e-o*c,v=a*M+r*f+u*l;return v?(v=1/v,t[0]=M*v,t[1]=(-s*r+u*h)*v,t[2]=(i*r-u*o)*v,t[3]=f*v,t[4]=(s*a-u*c)*v,t[5]=(-i*a+u*e)*v,t[6]=l*v,t[7]=(-h*a+r*c)*v,t[8]=(o*a-r*e)*v,t):null},adjoint:function(t,n){var a=n[0],r=n[1],u=n[2],e=n[3],o=n[4],i=n[5],c=n[6],h=n[7],s=n[8];return t[0]=o*s-i*h,t[1]=u*h-r*s,t[2]=r*i-u*o,t[3]=i*c-e*s,t[4]=a*s-u*c,t[5]=u*e-a*i,t[6]=e*h-o*c,t[7]=r*c-a*h,t[8]=a*o-r*e,t},determinant:function(t){var n=t[0],a=t[1],r=t[2],u=t[3],e=t[4],o=t[5],i=t[6],c=t[7],h=t[8];return n*(h*e-o*c)+a*(-h*u+o*i)+r*(c*u-e*i)},multiply:d,translate:function(t,n,a){var r=n[0],u=n[1],e=n[2],o=n[3],i=n[4],c=n[5],h=n[6],s=n[7],M=n[8],f=a[0],l=a[1];return t[0]=r,t[1]=u,t[2]=e,t[3]=o,t[4]=i,t[5]=c,t[6]=f*r+l*o+h,t[7]=f*u+l*i+s,t[8]=f*e+l*c+M,t},rotate:function(t,n,a){var r=n[0],u=n[1],e=n[2],o=n[3],i=n[4],c=n[5],h=n[6],s=n[7],M=n[8],f=Math.sin(a),l=Math.cos(a);return t[0]=l*r+f*o,t[1]=l*u+f*i,t[2]=l*e+f*c,t[3]=l*o-f*r,t[4]=l*i-f*u,t[5]=l*c-f*e,t[6]=h,t[7]=s,t[8]=M,t},scale:function(t,n,a){var r=a[0],u=a[1];return t[0]=r*n[0],t[1]=r*n[1],t[2]=r*n[2],t[3]=u*n[3],t[4]=u*n[4],t[5]=u*n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t},fromTranslation:function(t,n){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=n[0],t[7]=n[1],t[8]=1,t},fromRotation:function(t,n){var a=Math.sin(n),r=Math.cos(n);return t[0]=r,t[1]=a,t[2]=0,t[3]=-a,t[4]=r,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},fromScaling:function(t,n){return t[0]=n[0],t[1]=0,t[2]=0,t[3]=0,t[4]=n[1],t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},fromMat2d:function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=0,t[3]=n[2],t[4]=n[3],t[5]=0,t[6]=n[4],t[7]=n[5],t[8]=1,t},fromQuat:function(t,n){var a=n[0],r=n[1],u=n[2],e=n[3],o=a+a,i=r+r,c=u+u,h=a*o,s=r*o,M=r*i,f=u*o,l=u*i,v=u*c,b=e*o,m=e*i,d=e*c;return t[0]=1-M-v,t[3]=s-d,t[6]=f+m,t[1]=s+d,t[4]=1-h-v,t[7]=l-b,t[2]=f-m,t[5]=l+b,t[8]=1-h-M,t},normalFromMat4:function(t,n){var a=n[0],r=n[1],u=n[2],e=n[3],o=n[4],i=n[5],c=n[6],h=n[7],s=n[8],M=n[9],f=n[10],l=n[11],v=n[12],b=n[13],m=n[14],d=n[15],x=a*i-r*o,p=a*c-u*o,y=a*h-e*o,q=r*c-u*i,g=r*h-e*i,A=u*h-e*c,w=s*b-M*v,R=s*m-f*v,z=s*d-l*v,P=M*m-f*b,j=M*d-l*b,I=f*d-l*m,S=x*I-p*j+y*P+q*z-g*R+A*w;return S?(S=1/S,t[0]=(i*I-c*j+h*P)*S,t[1]=(c*z-o*I-h*R)*S,t[2]=(o*j-i*z+h*w)*S,t[3]=(u*j-r*I-e*P)*S,t[4]=(a*I-u*z+e*R)*S,t[5]=(r*z-a*j-e*w)*S,t[6]=(b*A-m*g+d*q)*S,t[7]=(m*y-v*A-d*p)*S,t[8]=(v*g-b*y+d*x)*S,t):null},projection:function(t,n,a){return t[0]=2/n,t[1]=0,t[2]=0,t[3]=0,t[4]=-2/a,t[5]=0,t[6]=-1,t[7]=1,t[8]=1,t},str:function(t){return"mat3("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+")"},frob:function(t){return Math.hypot(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8])},add:function(t,n,a){return t[0]=n[0]+a[0],t[1]=n[1]+a[1],t[2]=n[2]+a[2],t[3]=n[3]+a[3],t[4]=n[4]+a[4],t[5]=n[5]+a[5],t[6]=n[6]+a[6],t[7]=n[7]+a[7],t[8]=n[8]+a[8],t},subtract:x,multiplyScalar:function(t,n,a){return t[0]=n[0]*a,t[1]=n[1]*a,t[2]=n[2]*a,t[3]=n[3]*a,t[4]=n[4]*a,t[5]=n[5]*a,t[6]=n[6]*a,t[7]=n[7]*a,t[8]=n[8]*a,t},multiplyScalarAndAdd:function(t,n,a,r){return t[0]=n[0]+a[0]*r,t[1]=n[1]+a[1]*r,t[2]=n[2]+a[2]*r,t[3]=n[3]+a[3]*r,t[4]=n[4]+a[4]*r,t[5]=n[5]+a[5]*r,t[6]=n[6]+a[6]*r,t[7]=n[7]+a[7]*r,t[8]=n[8]+a[8]*r,t},exactEquals:function(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]&&t[3]===n[3]&&t[4]===n[4]&&t[5]===n[5]&&t[6]===n[6]&&t[7]===n[7]&&t[8]===n[8]},equals:function(t,a){var r=t[0],u=t[1],e=t[2],o=t[3],i=t[4],c=t[5],h=t[6],s=t[7],M=t[8],f=a[0],l=a[1],v=a[2],b=a[3],m=a[4],d=a[5],x=a[6],p=a[7],y=a[8];return Math.abs(r-f)<=n*Math.max(1,Math.abs(r),Math.abs(f))&&Math.abs(u-l)<=n*Math.max(1,Math.abs(u),Math.abs(l))&&Math.abs(e-v)<=n*Math.max(1,Math.abs(e),Math.abs(v))&&Math.abs(o-b)<=n*Math.max(1,Math.abs(o),Math.abs(b))&&Math.abs(i-m)<=n*Math.max(1,Math.abs(i),Math.abs(m))&&Math.abs(c-d)<=n*Math.max(1,Math.abs(c),Math.abs(d))&&Math.abs(h-x)<=n*Math.max(1,Math.abs(h),Math.abs(x))&&Math.abs(s-p)<=n*Math.max(1,Math.abs(s),Math.abs(p))&&Math.abs(M-y)<=n*Math.max(1,Math.abs(M),Math.abs(y))},mul:p,sub:y});function g(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function A(t,n,a){var r=n[0],u=n[1],e=n[2],o=n[3],i=n[4],c=n[5],h=n[6],s=n[7],M=n[8],f=n[9],l=n[10],v=n[11],b=n[12],m=n[13],d=n[14],x=n[15],p=a[0],y=a[1],q=a[2],g=a[3];return t[0]=p*r+y*i+q*M+g*b,t[1]=p*u+y*c+q*f+g*m,t[2]=p*e+y*h+q*l+g*d,t[3]=p*o+y*s+q*v+g*x,p=a[4],y=a[5],q=a[6],g=a[7],t[4]=p*r+y*i+q*M+g*b,t[5]=p*u+y*c+q*f+g*m,t[6]=p*e+y*h+q*l+g*d,t[7]=p*o+y*s+q*v+g*x,p=a[8],y=a[9],q=a[10],g=a[11],t[8]=p*r+y*i+q*M+g*b,t[9]=p*u+y*c+q*f+g*m,t[10]=p*e+y*h+q*l+g*d,t[11]=p*o+y*s+q*v+g*x,p=a[12],y=a[13],q=a[14],g=a[15],t[12]=p*r+y*i+q*M+g*b,t[13]=p*u+y*c+q*f+g*m,t[14]=p*e+y*h+q*l+g*d,t[15]=p*o+y*s+q*v+g*x,t}function w(t,n,a){var r=n[0],u=n[1],e=n[2],o=n[3],i=r+r,c=u+u,h=e+e,s=r*i,M=r*c,f=r*h,l=u*c,v=u*h,b=e*h,m=o*i,d=o*c,x=o*h;return t[0]=1-(l+b),t[1]=M+x,t[2]=f-d,t[3]=0,t[4]=M-x,t[5]=1-(s+b),t[6]=v+m,t[7]=0,t[8]=f+d,t[9]=v-m,t[10]=1-(s+l),t[11]=0,t[12]=a[0],t[13]=a[1],t[14]=a[2],t[15]=1,t}function R(t,n){return t[0]=n[12],t[1]=n[13],t[2]=n[14],t}function z(t,n){var a=n[0],r=n[1],u=n[2],e=n[4],o=n[5],i=n[6],c=n[8],h=n[9],s=n[10];return t[0]=Math.hypot(a,r,u),t[1]=Math.hypot(e,o,i),t[2]=Math.hypot(c,h,s),t}function P(t,n){var r=new a(3);z(r,n);var u=1/r[0],e=1/r[1],o=1/r[2],i=n[0]*u,c=n[1]*e,h=n[2]*o,s=n[4]*u,M=n[5]*e,f=n[6]*o,l=n[8]*u,v=n[9]*e,b=n[10]*o,m=i+M+b,d=0;return m>0?(d=2*Math.sqrt(m+1),t[3]=.25*d,t[0]=(f-v)/d,t[1]=(l-h)/d,t[2]=(c-s)/d):i>M&&i>b?(d=2*Math.sqrt(1+i-M-b),t[3]=(f-v)/d,t[0]=.25*d,t[1]=(c+s)/d,t[2]=(l+h)/d):M>b?(d=2*Math.sqrt(1+M-i-b),t[3]=(l-h)/d,t[0]=(c+s)/d,t[1]=.25*d,t[2]=(f+v)/d):(d=2*Math.sqrt(1+b-i-M),t[3]=(c-s)/d,t[0]=(l+h)/d,t[1]=(f+v)/d,t[2]=.25*d),t}function j(t,n,a){return t[0]=n[0]-a[0],t[1]=n[1]-a[1],t[2]=n[2]-a[2],t[3]=n[3]-a[3],t[4]=n[4]-a[4],t[5]=n[5]-a[5],t[6]=n[6]-a[6],t[7]=n[7]-a[7],t[8]=n[8]-a[8],t[9]=n[9]-a[9],t[10]=n[10]-a[10],t[11]=n[11]-a[11],t[12]=n[12]-a[12],t[13]=n[13]-a[13],t[14]=n[14]-a[14],t[15]=n[15]-a[15],t}var I=A,S=j,E=Object.freeze({create:function(){var t=new a(16);return a!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t},clone:function(t){var n=new a(16);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n[4]=t[4],n[5]=t[5],n[6]=t[6],n[7]=t[7],n[8]=t[8],n[9]=t[9],n[10]=t[10],n[11]=t[11],n[12]=t[12],n[13]=t[13],n[14]=t[14],n[15]=t[15],n},copy:function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],t},fromValues:function(t,n,r,u,e,o,i,c,h,s,M,f,l,v,b,m){var d=new a(16);return d[0]=t,d[1]=n,d[2]=r,d[3]=u,d[4]=e,d[5]=o,d[6]=i,d[7]=c,d[8]=h,d[9]=s,d[10]=M,d[11]=f,d[12]=l,d[13]=v,d[14]=b,d[15]=m,d},set:function(t,n,a,r,u,e,o,i,c,h,s,M,f,l,v,b,m){return t[0]=n,t[1]=a,t[2]=r,t[3]=u,t[4]=e,t[5]=o,t[6]=i,t[7]=c,t[8]=h,t[9]=s,t[10]=M,t[11]=f,t[12]=l,t[13]=v,t[14]=b,t[15]=m,t},identity:g,transpose:function(t,n){if(t===n){var a=n[1],r=n[2],u=n[3],e=n[6],o=n[7],i=n[11];t[1]=n[4],t[2]=n[8],t[3]=n[12],t[4]=a,t[6]=n[9],t[7]=n[13],t[8]=r,t[9]=e,t[11]=n[14],t[12]=u,t[13]=o,t[14]=i}else t[0]=n[0],t[1]=n[4],t[2]=n[8],t[3]=n[12],t[4]=n[1],t[5]=n[5],t[6]=n[9],t[7]=n[13],t[8]=n[2],t[9]=n[6],t[10]=n[10],t[11]=n[14],t[12]=n[3],t[13]=n[7],t[14]=n[11],t[15]=n[15];return t},invert:function(t,n){var a=n[0],r=n[1],u=n[2],e=n[3],o=n[4],i=n[5],c=n[6],h=n[7],s=n[8],M=n[9],f=n[10],l=n[11],v=n[12],b=n[13],m=n[14],d=n[15],x=a*i-r*o,p=a*c-u*o,y=a*h-e*o,q=r*c-u*i,g=r*h-e*i,A=u*h-e*c,w=s*b-M*v,R=s*m-f*v,z=s*d-l*v,P=M*m-f*b,j=M*d-l*b,I=f*d-l*m,S=x*I-p*j+y*P+q*z-g*R+A*w;return S?(S=1/S,t[0]=(i*I-c*j+h*P)*S,t[1]=(u*j-r*I-e*P)*S,t[2]=(b*A-m*g+d*q)*S,t[3]=(f*g-M*A-l*q)*S,t[4]=(c*z-o*I-h*R)*S,t[5]=(a*I-u*z+e*R)*S,t[6]=(m*y-v*A-d*p)*S,t[7]=(s*A-f*y+l*p)*S,t[8]=(o*j-i*z+h*w)*S,t[9]=(r*z-a*j-e*w)*S,t[10]=(v*g-b*y+d*x)*S,t[11]=(M*y-s*g-l*x)*S,t[12]=(i*R-o*P-c*w)*S,t[13]=(a*P-r*R+u*w)*S,t[14]=(b*p-v*q-m*x)*S,t[15]=(s*q-M*p+f*x)*S,t):null},adjoint:function(t,n){var a=n[0],r=n[1],u=n[2],e=n[3],o=n[4],i=n[5],c=n[6],h=n[7],s=n[8],M=n[9],f=n[10],l=n[11],v=n[12],b=n[13],m=n[14],d=n[15];return t[0]=i*(f*d-l*m)-M*(c*d-h*m)+b*(c*l-h*f),t[1]=-(r*(f*d-l*m)-M*(u*d-e*m)+b*(u*l-e*f)),t[2]=r*(c*d-h*m)-i*(u*d-e*m)+b*(u*h-e*c),t[3]=-(r*(c*l-h*f)-i*(u*l-e*f)+M*(u*h-e*c)),t[4]=-(o*(f*d-l*m)-s*(c*d-h*m)+v*(c*l-h*f)),t[5]=a*(f*d-l*m)-s*(u*d-e*m)+v*(u*l-e*f),t[6]=-(a*(c*d-h*m)-o*(u*d-e*m)+v*(u*h-e*c)),t[7]=a*(c*l-h*f)-o*(u*l-e*f)+s*(u*h-e*c),t[8]=o*(M*d-l*b)-s*(i*d-h*b)+v*(i*l-h*M),t[9]=-(a*(M*d-l*b)-s*(r*d-e*b)+v*(r*l-e*M)),t[10]=a*(i*d-h*b)-o*(r*d-e*b)+v*(r*h-e*i),t[11]=-(a*(i*l-h*M)-o*(r*l-e*M)+s*(r*h-e*i)),t[12]=-(o*(M*m-f*b)-s*(i*m-c*b)+v*(i*f-c*M)),t[13]=a*(M*m-f*b)-s*(r*m-u*b)+v*(r*f-u*M),t[14]=-(a*(i*m-c*b)-o*(r*m-u*b)+v*(r*c-u*i)),t[15]=a*(i*f-c*M)-o*(r*f-u*M)+s*(r*c-u*i),t},determinant:function(t){var n=t[0],a=t[1],r=t[2],u=t[3],e=t[4],o=t[5],i=t[6],c=t[7],h=t[8],s=t[9],M=t[10],f=t[11],l=t[12],v=t[13],b=t[14],m=t[15];return(n*o-a*e)*(M*m-f*b)-(n*i-r*e)*(s*m-f*v)+(n*c-u*e)*(s*b-M*v)+(a*i-r*o)*(h*m-f*l)-(a*c-u*o)*(h*b-M*l)+(r*c-u*i)*(h*v-s*l)},multiply:A,translate:function(t,n,a){var r,u,e,o,i,c,h,s,M,f,l,v,b=a[0],m=a[1],d=a[2];return n===t?(t[12]=n[0]*b+n[4]*m+n[8]*d+n[12],t[13]=n[1]*b+n[5]*m+n[9]*d+n[13],t[14]=n[2]*b+n[6]*m+n[10]*d+n[14],t[15]=n[3]*b+n[7]*m+n[11]*d+n[15]):(r=n[0],u=n[1],e=n[2],o=n[3],i=n[4],c=n[5],h=n[6],s=n[7],M=n[8],f=n[9],l=n[10],v=n[11],t[0]=r,t[1]=u,t[2]=e,t[3]=o,t[4]=i,t[5]=c,t[6]=h,t[7]=s,t[8]=M,t[9]=f,t[10]=l,t[11]=v,t[12]=r*b+i*m+M*d+n[12],t[13]=u*b+c*m+f*d+n[13],t[14]=e*b+h*m+l*d+n[14],t[15]=o*b+s*m+v*d+n[15]),t},scale:function(t,n,a){var r=a[0],u=a[1],e=a[2];return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t[3]=n[3]*r,t[4]=n[4]*u,t[5]=n[5]*u,t[6]=n[6]*u,t[7]=n[7]*u,t[8]=n[8]*e,t[9]=n[9]*e,t[10]=n[10]*e,t[11]=n[11]*e,t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],t},rotate:function(t,a,r,u){var e,o,i,c,h,s,M,f,l,v,b,m,d,x,p,y,q,g,A,w,R,z,P,j,I=u[0],S=u[1],E=u[2],O=Math.hypot(I,S,E);return O<n?null:(I*=O=1/O,S*=O,E*=O,e=Math.sin(r),i=1-(o=Math.cos(r)),c=a[0],h=a[1],s=a[2],M=a[3],f=a[4],l=a[5],v=a[6],b=a[7],m=a[8],d=a[9],x=a[10],p=a[11],y=I*I*i+o,q=S*I*i+E*e,g=E*I*i-S*e,A=I*S*i-E*e,w=S*S*i+o,R=E*S*i+I*e,z=I*E*i+S*e,P=S*E*i-I*e,j=E*E*i+o,t[0]=c*y+f*q+m*g,t[1]=h*y+l*q+d*g,t[2]=s*y+v*q+x*g,t[3]=M*y+b*q+p*g,t[4]=c*A+f*w+m*R,t[5]=h*A+l*w+d*R,t[6]=s*A+v*w+x*R,t[7]=M*A+b*w+p*R,t[8]=c*z+f*P+m*j,t[9]=h*z+l*P+d*j,t[10]=s*z+v*P+x*j,t[11]=M*z+b*P+p*j,a!==t&&(t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15]),t)},rotateX:function(t,n,a){var r=Math.sin(a),u=Math.cos(a),e=n[4],o=n[5],i=n[6],c=n[7],h=n[8],s=n[9],M=n[10],f=n[11];return n!==t&&(t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15]),t[4]=e*u+h*r,t[5]=o*u+s*r,t[6]=i*u+M*r,t[7]=c*u+f*r,t[8]=h*u-e*r,t[9]=s*u-o*r,t[10]=M*u-i*r,t[11]=f*u-c*r,t},rotateY:function(t,n,a){var r=Math.sin(a),u=Math.cos(a),e=n[0],o=n[1],i=n[2],c=n[3],h=n[8],s=n[9],M=n[10],f=n[11];return n!==t&&(t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15]),t[0]=e*u-h*r,t[1]=o*u-s*r,t[2]=i*u-M*r,t[3]=c*u-f*r,t[8]=e*r+h*u,t[9]=o*r+s*u,t[10]=i*r+M*u,t[11]=c*r+f*u,t},rotateZ:function(t,n,a){var r=Math.sin(a),u=Math.cos(a),e=n[0],o=n[1],i=n[2],c=n[3],h=n[4],s=n[5],M=n[6],f=n[7];return n!==t&&(t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15]),t[0]=e*u+h*r,t[1]=o*u+s*r,t[2]=i*u+M*r,t[3]=c*u+f*r,t[4]=h*u-e*r,t[5]=s*u-o*r,t[6]=M*u-i*r,t[7]=f*u-c*r,t},fromTranslation:function(t,n){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=n[0],t[13]=n[1],t[14]=n[2],t[15]=1,t},fromScaling:function(t,n){return t[0]=n[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=n[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=n[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},fromRotation:function(t,a,r){var u,e,o,i=r[0],c=r[1],h=r[2],s=Math.hypot(i,c,h);return s<n?null:(i*=s=1/s,c*=s,h*=s,u=Math.sin(a),o=1-(e=Math.cos(a)),t[0]=i*i*o+e,t[1]=c*i*o+h*u,t[2]=h*i*o-c*u,t[3]=0,t[4]=i*c*o-h*u,t[5]=c*c*o+e,t[6]=h*c*o+i*u,t[7]=0,t[8]=i*h*o+c*u,t[9]=c*h*o-i*u,t[10]=h*h*o+e,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)},fromXRotation:function(t,n){var a=Math.sin(n),r=Math.cos(n);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=r,t[6]=a,t[7]=0,t[8]=0,t[9]=-a,t[10]=r,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},fromYRotation:function(t,n){var a=Math.sin(n),r=Math.cos(n);return t[0]=r,t[1]=0,t[2]=-a,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=a,t[9]=0,t[10]=r,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},fromZRotation:function(t,n){var a=Math.sin(n),r=Math.cos(n);return t[0]=r,t[1]=a,t[2]=0,t[3]=0,t[4]=-a,t[5]=r,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},fromRotationTranslation:w,fromQuat2:function(t,n){var r=new a(3),u=-n[0],e=-n[1],o=-n[2],i=n[3],c=n[4],h=n[5],s=n[6],M=n[7],f=u*u+e*e+o*o+i*i;return f>0?(r[0]=2*(c*i+M*u+h*o-s*e)/f,r[1]=2*(h*i+M*e+s*u-c*o)/f,r[2]=2*(s*i+M*o+c*e-h*u)/f):(r[0]=2*(c*i+M*u+h*o-s*e),r[1]=2*(h*i+M*e+s*u-c*o),r[2]=2*(s*i+M*o+c*e-h*u)),w(t,n,r),t},getTranslation:R,getScaling:z,getRotation:P,fromRotationTranslationScale:function(t,n,a,r){var u=n[0],e=n[1],o=n[2],i=n[3],c=u+u,h=e+e,s=o+o,M=u*c,f=u*h,l=u*s,v=e*h,b=e*s,m=o*s,d=i*c,x=i*h,p=i*s,y=r[0],q=r[1],g=r[2];return t[0]=(1-(v+m))*y,t[1]=(f+p)*y,t[2]=(l-x)*y,t[3]=0,t[4]=(f-p)*q,t[5]=(1-(M+m))*q,t[6]=(b+d)*q,t[7]=0,t[8]=(l+x)*g,t[9]=(b-d)*g,t[10]=(1-(M+v))*g,t[11]=0,t[12]=a[0],t[13]=a[1],t[14]=a[2],t[15]=1,t},fromRotationTranslationScaleOrigin:function(t,n,a,r,u){var e=n[0],o=n[1],i=n[2],c=n[3],h=e+e,s=o+o,M=i+i,f=e*h,l=e*s,v=e*M,b=o*s,m=o*M,d=i*M,x=c*h,p=c*s,y=c*M,q=r[0],g=r[1],A=r[2],w=u[0],R=u[1],z=u[2],P=(1-(b+d))*q,j=(l+y)*q,I=(v-p)*q,S=(l-y)*g,E=(1-(f+d))*g,O=(m+x)*g,T=(v+p)*A,D=(m-x)*A,F=(1-(f+b))*A;return t[0]=P,t[1]=j,t[2]=I,t[3]=0,t[4]=S,t[5]=E,t[6]=O,t[7]=0,t[8]=T,t[9]=D,t[10]=F,t[11]=0,t[12]=a[0]+w-(P*w+S*R+T*z),t[13]=a[1]+R-(j*w+E*R+D*z),t[14]=a[2]+z-(I*w+O*R+F*z),t[15]=1,t},fromQuat:function(t,n){var a=n[0],r=n[1],u=n[2],e=n[3],o=a+a,i=r+r,c=u+u,h=a*o,s=r*o,M=r*i,f=u*o,l=u*i,v=u*c,b=e*o,m=e*i,d=e*c;return t[0]=1-M-v,t[1]=s+d,t[2]=f-m,t[3]=0,t[4]=s-d,t[5]=1-h-v,t[6]=l+b,t[7]=0,t[8]=f+m,t[9]=l-b,t[10]=1-h-M,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},frustum:function(t,n,a,r,u,e,o){var i=1/(a-n),c=1/(u-r),h=1/(e-o);return t[0]=2*e*i,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*e*c,t[6]=0,t[7]=0,t[8]=(a+n)*i,t[9]=(u+r)*c,t[10]=(o+e)*h,t[11]=-1,t[12]=0,t[13]=0,t[14]=o*e*2*h,t[15]=0,t},perspective:function(t,n,a,r,u){var e,o=1/Math.tan(n/2);return t[0]=o/a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=o,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,null!=u&&u!==1/0?(e=1/(r-u),t[10]=(u+r)*e,t[14]=2*u*r*e):(t[10]=-1,t[14]=-2*r),t},perspectiveFromFieldOfView:function(t,n,a,r){var u=Math.tan(n.upDegrees*Math.PI/180),e=Math.tan(n.downDegrees*Math.PI/180),o=Math.tan(n.leftDegrees*Math.PI/180),i=Math.tan(n.rightDegrees*Math.PI/180),c=2/(o+i),h=2/(u+e);return t[0]=c,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=h,t[6]=0,t[7]=0,t[8]=-(o-i)*c*.5,t[9]=(u-e)*h*.5,t[10]=r/(a-r),t[11]=-1,t[12]=0,t[13]=0,t[14]=r*a/(a-r),t[15]=0,t},ortho:function(t,n,a,r,u,e,o){var i=1/(n-a),c=1/(r-u),h=1/(e-o);return t[0]=-2*i,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*h,t[11]=0,t[12]=(n+a)*i,t[13]=(u+r)*c,t[14]=(o+e)*h,t[15]=1,t},lookAt:function(t,a,r,u){var e,o,i,c,h,s,M,f,l,v,b=a[0],m=a[1],d=a[2],x=u[0],p=u[1],y=u[2],q=r[0],A=r[1],w=r[2];return Math.abs(b-q)<n&&Math.abs(m-A)<n&&Math.abs(d-w)<n?g(t):(M=b-q,f=m-A,l=d-w,e=p*(l*=v=1/Math.hypot(M,f,l))-y*(f*=v),o=y*(M*=v)-x*l,i=x*f-p*M,(v=Math.hypot(e,o,i))?(e*=v=1/v,o*=v,i*=v):(e=0,o=0,i=0),c=f*i-l*o,h=l*e-M*i,s=M*o-f*e,(v=Math.hypot(c,h,s))?(c*=v=1/v,h*=v,s*=v):(c=0,h=0,s=0),t[0]=e,t[1]=c,t[2]=M,t[3]=0,t[4]=o,t[5]=h,t[6]=f,t[7]=0,t[8]=i,t[9]=s,t[10]=l,t[11]=0,t[12]=-(e*b+o*m+i*d),t[13]=-(c*b+h*m+s*d),t[14]=-(M*b+f*m+l*d),t[15]=1,t)},targetTo:function(t,n,a,r){var u=n[0],e=n[1],o=n[2],i=r[0],c=r[1],h=r[2],s=u-a[0],M=e-a[1],f=o-a[2],l=s*s+M*M+f*f;l>0&&(s*=l=1/Math.sqrt(l),M*=l,f*=l);var v=c*f-h*M,b=h*s-i*f,m=i*M-c*s;return(l=v*v+b*b+m*m)>0&&(v*=l=1/Math.sqrt(l),b*=l,m*=l),t[0]=v,t[1]=b,t[2]=m,t[3]=0,t[4]=M*m-f*b,t[5]=f*v-s*m,t[6]=s*b-M*v,t[7]=0,t[8]=s,t[9]=M,t[10]=f,t[11]=0,t[12]=u,t[13]=e,t[14]=o,t[15]=1,t},str:function(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"},frob:function(t){return Math.hypot(t[0],t[1],t[3],t[4],t[5],t[6],t[7],t[8],t[9],t[10],t[11],t[12],t[13],t[14],t[15])},add:function(t,n,a){return t[0]=n[0]+a[0],t[1]=n[1]+a[1],t[2]=n[2]+a[2],t[3]=n[3]+a[3],t[4]=n[4]+a[4],t[5]=n[5]+a[5],t[6]=n[6]+a[6],t[7]=n[7]+a[7],t[8]=n[8]+a[8],t[9]=n[9]+a[9],t[10]=n[10]+a[10],t[11]=n[11]+a[11],t[12]=n[12]+a[12],t[13]=n[13]+a[13],t[14]=n[14]+a[14],t[15]=n[15]+a[15],t},subtract:j,multiplyScalar:function(t,n,a){return t[0]=n[0]*a,t[1]=n[1]*a,t[2]=n[2]*a,t[3]=n[3]*a,t[4]=n[4]*a,t[5]=n[5]*a,t[6]=n[6]*a,t[7]=n[7]*a,t[8]=n[8]*a,t[9]=n[9]*a,t[10]=n[10]*a,t[11]=n[11]*a,t[12]=n[12]*a,t[13]=n[13]*a,t[14]=n[14]*a,t[15]=n[15]*a,t},multiplyScalarAndAdd:function(t,n,a,r){return t[0]=n[0]+a[0]*r,t[1]=n[1]+a[1]*r,t[2]=n[2]+a[2]*r,t[3]=n[3]+a[3]*r,t[4]=n[4]+a[4]*r,t[5]=n[5]+a[5]*r,t[6]=n[6]+a[6]*r,t[7]=n[7]+a[7]*r,t[8]=n[8]+a[8]*r,t[9]=n[9]+a[9]*r,t[10]=n[10]+a[10]*r,t[11]=n[11]+a[11]*r,t[12]=n[12]+a[12]*r,t[13]=n[13]+a[13]*r,t[14]=n[14]+a[14]*r,t[15]=n[15]+a[15]*r,t},exactEquals:function(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]&&t[3]===n[3]&&t[4]===n[4]&&t[5]===n[5]&&t[6]===n[6]&&t[7]===n[7]&&t[8]===n[8]&&t[9]===n[9]&&t[10]===n[10]&&t[11]===n[11]&&t[12]===n[12]&&t[13]===n[13]&&t[14]===n[14]&&t[15]===n[15]},equals:function(t,a){var r=t[0],u=t[1],e=t[2],o=t[3],i=t[4],c=t[5],h=t[6],s=t[7],M=t[8],f=t[9],l=t[10],v=t[11],b=t[12],m=t[13],d=t[14],x=t[15],p=a[0],y=a[1],q=a[2],g=a[3],A=a[4],w=a[5],R=a[6],z=a[7],P=a[8],j=a[9],I=a[10],S=a[11],E=a[12],O=a[13],T=a[14],D=a[15];return Math.abs(r-p)<=n*Math.max(1,Math.abs(r),Math.abs(p))&&Math.abs(u-y)<=n*Math.max(1,Math.abs(u),Math.abs(y))&&Math.abs(e-q)<=n*Math.max(1,Math.abs(e),Math.abs(q))&&Math.abs(o-g)<=n*Math.max(1,Math.abs(o),Math.abs(g))&&Math.abs(i-A)<=n*Math.max(1,Math.abs(i),Math.abs(A))&&Math.abs(c-w)<=n*Math.max(1,Math.abs(c),Math.abs(w))&&Math.abs(h-R)<=n*Math.max(1,Math.abs(h),Math.abs(R))&&Math.abs(s-z)<=n*Math.max(1,Math.abs(s),Math.abs(z))&&Math.abs(M-P)<=n*Math.max(1,Math.abs(M),Math.abs(P))&&Math.abs(f-j)<=n*Math.max(1,Math.abs(f),Math.abs(j))&&Math.abs(l-I)<=n*Math.max(1,Math.abs(l),Math.abs(I))&&Math.abs(v-S)<=n*Math.max(1,Math.abs(v),Math.abs(S))&&Math.abs(b-E)<=n*Math.max(1,Math.abs(b),Math.abs(E))&&Math.abs(m-O)<=n*Math.max(1,Math.abs(m),Math.abs(O))&&Math.abs(d-T)<=n*Math.max(1,Math.abs(d),Math.abs(T))&&Math.abs(x-D)<=n*Math.max(1,Math.abs(x),Math.abs(D))},mul:I,sub:S});function O(){var t=new a(3);return a!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function T(t){var n=t[0],a=t[1],r=t[2];return Math.hypot(n,a,r)}function D(t,n,r){var u=new a(3);return u[0]=t,u[1]=n,u[2]=r,u}function F(t,n,a){return t[0]=n[0]-a[0],t[1]=n[1]-a[1],t[2]=n[2]-a[2],t}function L(t,n,a){return t[0]=n[0]*a[0],t[1]=n[1]*a[1],t[2]=n[2]*a[2],t}function V(t,n,a){return t[0]=n[0]/a[0],t[1]=n[1]/a[1],t[2]=n[2]/a[2],t}function Q(t,n){var a=n[0]-t[0],r=n[1]-t[1],u=n[2]-t[2];return Math.hypot(a,r,u)}function Y(t,n){var a=n[0]-t[0],r=n[1]-t[1],u=n[2]-t[2];return a*a+r*r+u*u}function X(t){var n=t[0],a=t[1],r=t[2];return n*n+a*a+r*r}function Z(t,n){var a=n[0],r=n[1],u=n[2],e=a*a+r*r+u*u;return e>0&&(e=1/Math.sqrt(e)),t[0]=n[0]*e,t[1]=n[1]*e,t[2]=n[2]*e,t}function _(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}function B(t,n,a){var r=n[0],u=n[1],e=n[2],o=a[0],i=a[1],c=a[2];return t[0]=u*c-e*i,t[1]=e*o-r*c,t[2]=r*i-u*o,t}var N,k=F,U=L,W=V,C=Q,G=Y,H=T,J=X,K=(N=O(),function(t,n,a,r,u,e){var o,i;for(n||(n=3),a||(a=0),i=r?Math.min(r*n+a,t.length):t.length,o=a;o<i;o+=n)N[0]=t[o],N[1]=t[o+1],N[2]=t[o+2],u(N,N,e),t[o]=N[0],t[o+1]=N[1],t[o+2]=N[2];return t}),$=Object.freeze({create:O,clone:function(t){var n=new a(3);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n},length:T,fromValues:D,copy:function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t},set:function(t,n,a,r){return t[0]=n,t[1]=a,t[2]=r,t},add:function(t,n,a){return t[0]=n[0]+a[0],t[1]=n[1]+a[1],t[2]=n[2]+a[2],t},subtract:F,multiply:L,divide:V,ceil:function(t,n){return t[0]=Math.ceil(n[0]),t[1]=Math.ceil(n[1]),t[2]=Math.ceil(n[2]),t},floor:function(t,n){return t[0]=Math.floor(n[0]),t[1]=Math.floor(n[1]),t[2]=Math.floor(n[2]),t},min:function(t,n,a){return t[0]=Math.min(n[0],a[0]),t[1]=Math.min(n[1],a[1]),t[2]=Math.min(n[2],a[2]),t},max:function(t,n,a){return t[0]=Math.max(n[0],a[0]),t[1]=Math.max(n[1],a[1]),t[2]=Math.max(n[2],a[2]),t},round:function(t,n){return t[0]=Math.round(n[0]),t[1]=Math.round(n[1]),t[2]=Math.round(n[2]),t},scale:function(t,n,a){return t[0]=n[0]*a,t[1]=n[1]*a,t[2]=n[2]*a,t},scaleAndAdd:function(t,n,a,r){return t[0]=n[0]+a[0]*r,t[1]=n[1]+a[1]*r,t[2]=n[2]+a[2]*r,t},distance:Q,squaredDistance:Y,squaredLength:X,negate:function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t},inverse:function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t[2]=1/n[2],t},normalize:Z,dot:_,cross:B,lerp:function(t,n,a,r){var u=n[0],e=n[1],o=n[2];return t[0]=u+r*(a[0]-u),t[1]=e+r*(a[1]-e),t[2]=o+r*(a[2]-o),t},hermite:function(t,n,a,r,u,e){var o=e*e,i=o*(2*e-3)+1,c=o*(e-2)+e,h=o*(e-1),s=o*(3-2*e);return t[0]=n[0]*i+a[0]*c+r[0]*h+u[0]*s,t[1]=n[1]*i+a[1]*c+r[1]*h+u[1]*s,t[2]=n[2]*i+a[2]*c+r[2]*h+u[2]*s,t},bezier:function(t,n,a,r,u,e){var o=1-e,i=o*o,c=e*e,h=i*o,s=3*e*i,M=3*c*o,f=c*e;return t[0]=n[0]*h+a[0]*s+r[0]*M+u[0]*f,t[1]=n[1]*h+a[1]*s+r[1]*M+u[1]*f,t[2]=n[2]*h+a[2]*s+r[2]*M+u[2]*f,t},random:function(t,n){n=n||1;var a=2*r()*Math.PI,u=2*r()-1,e=Math.sqrt(1-u*u)*n;return t[0]=Math.cos(a)*e,t[1]=Math.sin(a)*e,t[2]=u*n,t},transformMat4:function(t,n,a){var r=n[0],u=n[1],e=n[2],o=a[3]*r+a[7]*u+a[11]*e+a[15];return o=o||1,t[0]=(a[0]*r+a[4]*u+a[8]*e+a[12])/o,t[1]=(a[1]*r+a[5]*u+a[9]*e+a[13])/o,t[2]=(a[2]*r+a[6]*u+a[10]*e+a[14])/o,t},transformMat3:function(t,n,a){var r=n[0],u=n[1],e=n[2];return t[0]=r*a[0]+u*a[3]+e*a[6],t[1]=r*a[1]+u*a[4]+e*a[7],t[2]=r*a[2]+u*a[5]+e*a[8],t},transformQuat:function(t,n,a){var r=a[0],u=a[1],e=a[2],o=a[3],i=n[0],c=n[1],h=n[2],s=u*h-e*c,M=e*i-r*h,f=r*c-u*i,l=u*f-e*M,v=e*s-r*f,b=r*M-u*s,m=2*o;return s*=m,M*=m,f*=m,l*=2,v*=2,b*=2,t[0]=i+s+l,t[1]=c+M+v,t[2]=h+f+b,t},rotateX:function(t,n,a,r){var u=[],e=[];return u[0]=n[0]-a[0],u[1]=n[1]-a[1],u[2]=n[2]-a[2],e[0]=u[0],e[1]=u[1]*Math.cos(r)-u[2]*Math.sin(r),e[2]=u[1]*Math.sin(r)+u[2]*Math.cos(r),t[0]=e[0]+a[0],t[1]=e[1]+a[1],t[2]=e[2]+a[2],t},rotateY:function(t,n,a,r){var u=[],e=[];return u[0]=n[0]-a[0],u[1]=n[1]-a[1],u[2]=n[2]-a[2],e[0]=u[2]*Math.sin(r)+u[0]*Math.cos(r),e[1]=u[1],e[2]=u[2]*Math.cos(r)-u[0]*Math.sin(r),t[0]=e[0]+a[0],t[1]=e[1]+a[1],t[2]=e[2]+a[2],t},rotateZ:function(t,n,a,r){var u=[],e=[];return u[0]=n[0]-a[0],u[1]=n[1]-a[1],u[2]=n[2]-a[2],e[0]=u[0]*Math.cos(r)-u[1]*Math.sin(r),e[1]=u[0]*Math.sin(r)+u[1]*Math.cos(r),e[2]=u[2],t[0]=e[0]+a[0],t[1]=e[1]+a[1],t[2]=e[2]+a[2],t},angle:function(t,n){var a=D(t[0],t[1],t[2]),r=D(n[0],n[1],n[2]);Z(a,a),Z(r,r);var u=_(a,r);return u>1?0:u<-1?Math.PI:Math.acos(u)},zero:function(t){return t[0]=0,t[1]=0,t[2]=0,t},str:function(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"},exactEquals:function(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]},equals:function(t,a){var r=t[0],u=t[1],e=t[2],o=a[0],i=a[1],c=a[2];return Math.abs(r-o)<=n*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(u-i)<=n*Math.max(1,Math.abs(u),Math.abs(i))&&Math.abs(e-c)<=n*Math.max(1,Math.abs(e),Math.abs(c))},sub:k,mul:U,div:W,dist:C,sqrDist:G,len:H,sqrLen:J,forEach:K});function tt(){var t=new a(4);return a!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t}function nt(t){var n=new a(4);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n}function at(t,n,r,u){var e=new a(4);return e[0]=t,e[1]=n,e[2]=r,e[3]=u,e}function rt(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t}function ut(t,n,a,r,u){return t[0]=n,t[1]=a,t[2]=r,t[3]=u,t}function et(t,n,a){return t[0]=n[0]+a[0],t[1]=n[1]+a[1],t[2]=n[2]+a[2],t[3]=n[3]+a[3],t}function ot(t,n,a){return t[0]=n[0]-a[0],t[1]=n[1]-a[1],t[2]=n[2]-a[2],t[3]=n[3]-a[3],t}function it(t,n,a){return t[0]=n[0]*a[0],t[1]=n[1]*a[1],t[2]=n[2]*a[2],t[3]=n[3]*a[3],t}function ct(t,n,a){return t[0]=n[0]/a[0],t[1]=n[1]/a[1],t[2]=n[2]/a[2],t[3]=n[3]/a[3],t}function ht(t,n,a){return t[0]=n[0]*a,t[1]=n[1]*a,t[2]=n[2]*a,t[3]=n[3]*a,t}function st(t,n){var a=n[0]-t[0],r=n[1]-t[1],u=n[2]-t[2],e=n[3]-t[3];return Math.hypot(a,r,u,e)}function Mt(t,n){var a=n[0]-t[0],r=n[1]-t[1],u=n[2]-t[2],e=n[3]-t[3];return a*a+r*r+u*u+e*e}function ft(t){var n=t[0],a=t[1],r=t[2],u=t[3];return Math.hypot(n,a,r,u)}function lt(t){var n=t[0],a=t[1],r=t[2],u=t[3];return n*n+a*a+r*r+u*u}function vt(t,n){var a=n[0],r=n[1],u=n[2],e=n[3],o=a*a+r*r+u*u+e*e;return o>0&&(o=1/Math.sqrt(o)),t[0]=a*o,t[1]=r*o,t[2]=u*o,t[3]=e*o,t}function bt(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]+t[3]*n[3]}function mt(t,n,a,r){var u=n[0],e=n[1],o=n[2],i=n[3];return t[0]=u+r*(a[0]-u),t[1]=e+r*(a[1]-e),t[2]=o+r*(a[2]-o),t[3]=i+r*(a[3]-i),t}function dt(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]&&t[3]===n[3]}function xt(t,a){var r=t[0],u=t[1],e=t[2],o=t[3],i=a[0],c=a[1],h=a[2],s=a[3];return Math.abs(r-i)<=n*Math.max(1,Math.abs(r),Math.abs(i))&&Math.abs(u-c)<=n*Math.max(1,Math.abs(u),Math.abs(c))&&Math.abs(e-h)<=n*Math.max(1,Math.abs(e),Math.abs(h))&&Math.abs(o-s)<=n*Math.max(1,Math.abs(o),Math.abs(s))}var pt=ot,yt=it,qt=ct,gt=st,At=Mt,wt=ft,Rt=lt,zt=function(){var t=tt();return function(n,a,r,u,e,o){var i,c;for(a||(a=4),r||(r=0),c=u?Math.min(u*a+r,n.length):n.length,i=r;i<c;i+=a)t[0]=n[i],t[1]=n[i+1],t[2]=n[i+2],t[3]=n[i+3],e(t,t,o),n[i]=t[0],n[i+1]=t[1],n[i+2]=t[2],n[i+3]=t[3];return n}}(),Pt=Object.freeze({create:tt,clone:nt,fromValues:at,copy:rt,set:ut,add:et,subtract:ot,multiply:it,divide:ct,ceil:function(t,n){return t[0]=Math.ceil(n[0]),t[1]=Math.ceil(n[1]),t[2]=Math.ceil(n[2]),t[3]=Math.ceil(n[3]),t},floor:function(t,n){return t[0]=Math.floor(n[0]),t[1]=Math.floor(n[1]),t[2]=Math.floor(n[2]),t[3]=Math.floor(n[3]),t},min:function(t,n,a){return t[0]=Math.min(n[0],a[0]),t[1]=Math.min(n[1],a[1]),t[2]=Math.min(n[2],a[2]),t[3]=Math.min(n[3],a[3]),t},max:function(t,n,a){return t[0]=Math.max(n[0],a[0]),t[1]=Math.max(n[1],a[1]),t[2]=Math.max(n[2],a[2]),t[3]=Math.max(n[3],a[3]),t},round:function(t,n){return t[0]=Math.round(n[0]),t[1]=Math.round(n[1]),t[2]=Math.round(n[2]),t[3]=Math.round(n[3]),t},scale:ht,scaleAndAdd:function(t,n,a,r){return t[0]=n[0]+a[0]*r,t[1]=n[1]+a[1]*r,t[2]=n[2]+a[2]*r,t[3]=n[3]+a[3]*r,t},distance:st,squaredDistance:Mt,length:ft,squaredLength:lt,negate:function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t[3]=-n[3],t},inverse:function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t[2]=1/n[2],t[3]=1/n[3],t},normalize:vt,dot:bt,cross:function(t,n,a,r){var u=a[0]*r[1]-a[1]*r[0],e=a[0]*r[2]-a[2]*r[0],o=a[0]*r[3]-a[3]*r[0],i=a[1]*r[2]-a[2]*r[1],c=a[1]*r[3]-a[3]*r[1],h=a[2]*r[3]-a[3]*r[2],s=n[0],M=n[1],f=n[2],l=n[3];return t[0]=M*h-f*c+l*i,t[1]=-s*h+f*o-l*e,t[2]=s*c-M*o+l*u,t[3]=-s*i+M*e-f*u,t},lerp:mt,random:function(t,n){var a,u,e,o,i,c;n=n||1;do{i=(a=2*r()-1)*a+(u=2*r()-1)*u}while(i>=1);do{c=(e=2*r()-1)*e+(o=2*r()-1)*o}while(c>=1);var h=Math.sqrt((1-i)/c);return t[0]=n*a,t[1]=n*u,t[2]=n*e*h,t[3]=n*o*h,t},transformMat4:function(t,n,a){var r=n[0],u=n[1],e=n[2],o=n[3];return t[0]=a[0]*r+a[4]*u+a[8]*e+a[12]*o,t[1]=a[1]*r+a[5]*u+a[9]*e+a[13]*o,t[2]=a[2]*r+a[6]*u+a[10]*e+a[14]*o,t[3]=a[3]*r+a[7]*u+a[11]*e+a[15]*o,t},transformQuat:function(t,n,a){var r=n[0],u=n[1],e=n[2],o=a[0],i=a[1],c=a[2],h=a[3],s=h*r+i*e-c*u,M=h*u+c*r-o*e,f=h*e+o*u-i*r,l=-o*r-i*u-c*e;return t[0]=s*h+l*-o+M*-c-f*-i,t[1]=M*h+l*-i+f*-o-s*-c,t[2]=f*h+l*-c+s*-i-M*-o,t[3]=n[3],t},zero:function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t},str:function(t){return"vec4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},exactEquals:dt,equals:xt,sub:pt,mul:yt,div:qt,dist:gt,sqrDist:At,len:wt,sqrLen:Rt,forEach:zt});function jt(){var t=new a(4);return a!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t[3]=1,t}function It(t,n,a){a*=.5;var r=Math.sin(a);return t[0]=r*n[0],t[1]=r*n[1],t[2]=r*n[2],t[3]=Math.cos(a),t}function St(t,n,a){var r=n[0],u=n[1],e=n[2],o=n[3],i=a[0],c=a[1],h=a[2],s=a[3];return t[0]=r*s+o*i+u*h-e*c,t[1]=u*s+o*c+e*i-r*h,t[2]=e*s+o*h+r*c-u*i,t[3]=o*s-r*i-u*c-e*h,t}function Et(t,n,a){a*=.5;var r=n[0],u=n[1],e=n[2],o=n[3],i=Math.sin(a),c=Math.cos(a);return t[0]=r*c+o*i,t[1]=u*c+e*i,t[2]=e*c-u*i,t[3]=o*c-r*i,t}function Ot(t,n,a){a*=.5;var r=n[0],u=n[1],e=n[2],o=n[3],i=Math.sin(a),c=Math.cos(a);return t[0]=r*c-e*i,t[1]=u*c+o*i,t[2]=e*c+r*i,t[3]=o*c-u*i,t}function Tt(t,n,a){a*=.5;var r=n[0],u=n[1],e=n[2],o=n[3],i=Math.sin(a),c=Math.cos(a);return t[0]=r*c+u*i,t[1]=u*c-r*i,t[2]=e*c+o*i,t[3]=o*c-e*i,t}function Dt(t,n){var a=n[0],r=n[1],u=n[2],e=n[3],o=Math.sqrt(a*a+r*r+u*u),i=Math.exp(e),c=o>0?i*Math.sin(o)/o:0;return t[0]=a*c,t[1]=r*c,t[2]=u*c,t[3]=i*Math.cos(o),t}function Ft(t,n){var a=n[0],r=n[1],u=n[2],e=n[3],o=Math.sqrt(a*a+r*r+u*u),i=o>0?Math.atan2(o,e)/o:0;return t[0]=a*i,t[1]=r*i,t[2]=u*i,t[3]=.5*Math.log(a*a+r*r+u*u+e*e),t}function Lt(t,a,r,u){var e,o,i,c,h,s=a[0],M=a[1],f=a[2],l=a[3],v=r[0],b=r[1],m=r[2],d=r[3];return(o=s*v+M*b+f*m+l*d)<0&&(o=-o,v=-v,b=-b,m=-m,d=-d),1-o>n?(e=Math.acos(o),i=Math.sin(e),c=Math.sin((1-u)*e)/i,h=Math.sin(u*e)/i):(c=1-u,h=u),t[0]=c*s+h*v,t[1]=c*M+h*b,t[2]=c*f+h*m,t[3]=c*l+h*d,t}function Vt(t,n){var a,r=n[0]+n[4]+n[8];if(r>0)a=Math.sqrt(r+1),t[3]=.5*a,a=.5/a,t[0]=(n[5]-n[7])*a,t[1]=(n[6]-n[2])*a,t[2]=(n[1]-n[3])*a;else{var u=0;n[4]>n[0]&&(u=1),n[8]>n[3*u+u]&&(u=2);var e=(u+1)%3,o=(u+2)%3;a=Math.sqrt(n[3*u+u]-n[3*e+e]-n[3*o+o]+1),t[u]=.5*a,a=.5/a,t[3]=(n[3*e+o]-n[3*o+e])*a,t[e]=(n[3*e+u]+n[3*u+e])*a,t[o]=(n[3*o+u]+n[3*u+o])*a}return t}var Qt,Yt,Xt,Zt,_t,Bt,Nt=nt,kt=at,Ut=rt,Wt=ut,Ct=et,Gt=St,Ht=ht,Jt=bt,Kt=mt,$t=ft,tn=$t,nn=lt,an=nn,rn=vt,un=dt,en=xt,on=(Qt=O(),Yt=D(1,0,0),Xt=D(0,1,0),function(t,n,a){var r=_(n,a);return r<-.999999?(B(Qt,Yt,n),H(Qt)<1e-6&&B(Qt,Xt,n),Z(Qt,Qt),It(t,Qt,Math.PI),t):r>.999999?(t[0]=0,t[1]=0,t[2]=0,t[3]=1,t):(B(Qt,n,a),t[0]=Qt[0],t[1]=Qt[1],t[2]=Qt[2],t[3]=1+r,rn(t,t))}),cn=(Zt=jt(),_t=jt(),function(t,n,a,r,u,e){return Lt(Zt,n,u,e),Lt(_t,a,r,e),Lt(t,Zt,_t,2*e*(1-e)),t}),hn=(Bt=m(),function(t,n,a,r){return Bt[0]=a[0],Bt[3]=a[1],Bt[6]=a[2],Bt[1]=r[0],Bt[4]=r[1],Bt[7]=r[2],Bt[2]=-n[0],Bt[5]=-n[1],Bt[8]=-n[2],rn(t,Vt(t,Bt))}),sn=Object.freeze({create:jt,identity:function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},setAxisAngle:It,getAxisAngle:function(t,a){var r=2*Math.acos(a[3]),u=Math.sin(r/2);return u>n?(t[0]=a[0]/u,t[1]=a[1]/u,t[2]=a[2]/u):(t[0]=1,t[1]=0,t[2]=0),r},getAngle:function(t,n){var a=Jt(t,n);return Math.acos(2*a*a-1)},multiply:St,rotateX:Et,rotateY:Ot,rotateZ:Tt,calculateW:function(t,n){var a=n[0],r=n[1],u=n[2];return t[0]=a,t[1]=r,t[2]=u,t[3]=Math.sqrt(Math.abs(1-a*a-r*r-u*u)),t},exp:Dt,ln:Ft,pow:function(t,n,a){return Ft(t,n),Ht(t,t,a),Dt(t,t),t},slerp:Lt,random:function(t){var n=r(),a=r(),u=r(),e=Math.sqrt(1-n),o=Math.sqrt(n);return t[0]=e*Math.sin(2*Math.PI*a),t[1]=e*Math.cos(2*Math.PI*a),t[2]=o*Math.sin(2*Math.PI*u),t[3]=o*Math.cos(2*Math.PI*u),t},invert:function(t,n){var a=n[0],r=n[1],u=n[2],e=n[3],o=a*a+r*r+u*u+e*e,i=o?1/o:0;return t[0]=-a*i,t[1]=-r*i,t[2]=-u*i,t[3]=e*i,t},conjugate:function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t[3]=n[3],t},fromMat3:Vt,fromEuler:function(t,n,a,r){var u=.5*Math.PI/180;n*=u,a*=u,r*=u;var e=Math.sin(n),o=Math.cos(n),i=Math.sin(a),c=Math.cos(a),h=Math.sin(r),s=Math.cos(r);return t[0]=e*c*s-o*i*h,t[1]=o*i*s+e*c*h,t[2]=o*c*h-e*i*s,t[3]=o*c*s+e*i*h,t},str:function(t){return"quat("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},clone:Nt,fromValues:kt,copy:Ut,set:Wt,add:Ct,mul:Gt,scale:Ht,dot:Jt,lerp:Kt,length:$t,len:tn,squaredLength:nn,sqrLen:an,normalize:rn,exactEquals:un,equals:en,rotationTo:on,sqlerp:cn,setAxes:hn});function Mn(t,n,a){var r=.5*a[0],u=.5*a[1],e=.5*a[2],o=n[0],i=n[1],c=n[2],h=n[3];return t[0]=o,t[1]=i,t[2]=c,t[3]=h,t[4]=r*h+u*c-e*i,t[5]=u*h+e*o-r*c,t[6]=e*h+r*i-u*o,t[7]=-r*o-u*i-e*c,t}function fn(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t}var ln=Ut;var vn=Ut;function bn(t,n,a){var r=n[0],u=n[1],e=n[2],o=n[3],i=a[4],c=a[5],h=a[6],s=a[7],M=n[4],f=n[5],l=n[6],v=n[7],b=a[0],m=a[1],d=a[2],x=a[3];return t[0]=r*x+o*b+u*d-e*m,t[1]=u*x+o*m+e*b-r*d,t[2]=e*x+o*d+r*m-u*b,t[3]=o*x-r*b-u*m-e*d,t[4]=r*s+o*i+u*h-e*c+M*x+v*b+f*d-l*m,t[5]=u*s+o*c+e*i-r*h+f*x+v*m+l*b-M*d,t[6]=e*s+o*h+r*c-u*i+l*x+v*d+M*m-f*b,t[7]=o*s-r*i-u*c-e*h+v*x-M*b-f*m-l*d,t}var mn=bn;var dn=Jt;var xn=$t,pn=xn,yn=nn,qn=yn;var gn=Object.freeze({create:function(){var t=new a(8);return a!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[4]=0,t[5]=0,t[6]=0,t[7]=0),t[3]=1,t},clone:function(t){var n=new a(8);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n[4]=t[4],n[5]=t[5],n[6]=t[6],n[7]=t[7],n},fromValues:function(t,n,r,u,e,o,i,c){var h=new a(8);return h[0]=t,h[1]=n,h[2]=r,h[3]=u,h[4]=e,h[5]=o,h[6]=i,h[7]=c,h},fromRotationTranslationValues:function(t,n,r,u,e,o,i){var c=new a(8);c[0]=t,c[1]=n,c[2]=r,c[3]=u;var h=.5*e,s=.5*o,M=.5*i;return c[4]=h*u+s*r-M*n,c[5]=s*u+M*t-h*r,c[6]=M*u+h*n-s*t,c[7]=-h*t-s*n-M*r,c},fromRotationTranslation:Mn,fromTranslation:function(t,n){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t[4]=.5*n[0],t[5]=.5*n[1],t[6]=.5*n[2],t[7]=0,t},fromRotation:function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=0,t[5]=0,t[6]=0,t[7]=0,t},fromMat4:function(t,n){var r=jt();P(r,n);var u=new a(3);return R(u,n),Mn(t,r,u),t},copy:fn,identity:function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t[6]=0,t[7]=0,t},set:function(t,n,a,r,u,e,o,i,c){return t[0]=n,t[1]=a,t[2]=r,t[3]=u,t[4]=e,t[5]=o,t[6]=i,t[7]=c,t},getReal:ln,getDual:function(t,n){return t[0]=n[4],t[1]=n[5],t[2]=n[6],t[3]=n[7],t},setReal:vn,setDual:function(t,n){return t[4]=n[0],t[5]=n[1],t[6]=n[2],t[7]=n[3],t},getTranslation:function(t,n){var a=n[4],r=n[5],u=n[6],e=n[7],o=-n[0],i=-n[1],c=-n[2],h=n[3];return t[0]=2*(a*h+e*o+r*c-u*i),t[1]=2*(r*h+e*i+u*o-a*c),t[2]=2*(u*h+e*c+a*i-r*o),t},translate:function(t,n,a){var r=n[0],u=n[1],e=n[2],o=n[3],i=.5*a[0],c=.5*a[1],h=.5*a[2],s=n[4],M=n[5],f=n[6],l=n[7];return t[0]=r,t[1]=u,t[2]=e,t[3]=o,t[4]=o*i+u*h-e*c+s,t[5]=o*c+e*i-r*h+M,t[6]=o*h+r*c-u*i+f,t[7]=-r*i-u*c-e*h+l,t},rotateX:function(t,n,a){var r=-n[0],u=-n[1],e=-n[2],o=n[3],i=n[4],c=n[5],h=n[6],s=n[7],M=i*o+s*r+c*e-h*u,f=c*o+s*u+h*r-i*e,l=h*o+s*e+i*u-c*r,v=s*o-i*r-c*u-h*e;return Et(t,n,a),r=t[0],u=t[1],e=t[2],o=t[3],t[4]=M*o+v*r+f*e-l*u,t[5]=f*o+v*u+l*r-M*e,t[6]=l*o+v*e+M*u-f*r,t[7]=v*o-M*r-f*u-l*e,t},rotateY:function(t,n,a){var r=-n[0],u=-n[1],e=-n[2],o=n[3],i=n[4],c=n[5],h=n[6],s=n[7],M=i*o+s*r+c*e-h*u,f=c*o+s*u+h*r-i*e,l=h*o+s*e+i*u-c*r,v=s*o-i*r-c*u-h*e;return Ot(t,n,a),r=t[0],u=t[1],e=t[2],o=t[3],t[4]=M*o+v*r+f*e-l*u,t[5]=f*o+v*u+l*r-M*e,t[6]=l*o+v*e+M*u-f*r,t[7]=v*o-M*r-f*u-l*e,t},rotateZ:function(t,n,a){var r=-n[0],u=-n[1],e=-n[2],o=n[3],i=n[4],c=n[5],h=n[6],s=n[7],M=i*o+s*r+c*e-h*u,f=c*o+s*u+h*r-i*e,l=h*o+s*e+i*u-c*r,v=s*o-i*r-c*u-h*e;return Tt(t,n,a),r=t[0],u=t[1],e=t[2],o=t[3],t[4]=M*o+v*r+f*e-l*u,t[5]=f*o+v*u+l*r-M*e,t[6]=l*o+v*e+M*u-f*r,t[7]=v*o-M*r-f*u-l*e,t},rotateByQuatAppend:function(t,n,a){var r=a[0],u=a[1],e=a[2],o=a[3],i=n[0],c=n[1],h=n[2],s=n[3];return t[0]=i*o+s*r+c*e-h*u,t[1]=c*o+s*u+h*r-i*e,t[2]=h*o+s*e+i*u-c*r,t[3]=s*o-i*r-c*u-h*e,i=n[4],c=n[5],h=n[6],s=n[7],t[4]=i*o+s*r+c*e-h*u,t[5]=c*o+s*u+h*r-i*e,t[6]=h*o+s*e+i*u-c*r,t[7]=s*o-i*r-c*u-h*e,t},rotateByQuatPrepend:function(t,n,a){var r=n[0],u=n[1],e=n[2],o=n[3],i=a[0],c=a[1],h=a[2],s=a[3];return t[0]=r*s+o*i+u*h-e*c,t[1]=u*s+o*c+e*i-r*h,t[2]=e*s+o*h+r*c-u*i,t[3]=o*s-r*i-u*c-e*h,i=a[4],c=a[5],h=a[6],s=a[7],t[4]=r*s+o*i+u*h-e*c,t[5]=u*s+o*c+e*i-r*h,t[6]=e*s+o*h+r*c-u*i,t[7]=o*s-r*i-u*c-e*h,t},rotateAroundAxis:function(t,a,r,u){if(Math.abs(u)<n)return fn(t,a);var e=Math.hypot(r[0],r[1],r[2]);u*=.5;var o=Math.sin(u),i=o*r[0]/e,c=o*r[1]/e,h=o*r[2]/e,s=Math.cos(u),M=a[0],f=a[1],l=a[2],v=a[3];t[0]=M*s+v*i+f*h-l*c,t[1]=f*s+v*c+l*i-M*h,t[2]=l*s+v*h+M*c-f*i,t[3]=v*s-M*i-f*c-l*h;var b=a[4],m=a[5],d=a[6],x=a[7];return t[4]=b*s+x*i+m*h-d*c,t[5]=m*s+x*c+d*i-b*h,t[6]=d*s+x*h+b*c-m*i,t[7]=x*s-b*i-m*c-d*h,t},add:function(t,n,a){return t[0]=n[0]+a[0],t[1]=n[1]+a[1],t[2]=n[2]+a[2],t[3]=n[3]+a[3],t[4]=n[4]+a[4],t[5]=n[5]+a[5],t[6]=n[6]+a[6],t[7]=n[7]+a[7],t},multiply:bn,mul:mn,scale:function(t,n,a){return t[0]=n[0]*a,t[1]=n[1]*a,t[2]=n[2]*a,t[3]=n[3]*a,t[4]=n[4]*a,t[5]=n[5]*a,t[6]=n[6]*a,t[7]=n[7]*a,t},dot:dn,lerp:function(t,n,a,r){var u=1-r;return dn(n,a)<0&&(r=-r),t[0]=n[0]*u+a[0]*r,t[1]=n[1]*u+a[1]*r,t[2]=n[2]*u+a[2]*r,t[3]=n[3]*u+a[3]*r,t[4]=n[4]*u+a[4]*r,t[5]=n[5]*u+a[5]*r,t[6]=n[6]*u+a[6]*r,t[7]=n[7]*u+a[7]*r,t},invert:function(t,n){var a=yn(n);return t[0]=-n[0]/a,t[1]=-n[1]/a,t[2]=-n[2]/a,t[3]=n[3]/a,t[4]=-n[4]/a,t[5]=-n[5]/a,t[6]=-n[6]/a,t[7]=n[7]/a,t},conjugate:function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t[3]=n[3],t[4]=-n[4],t[5]=-n[5],t[6]=-n[6],t[7]=n[7],t},length:xn,len:pn,squaredLength:yn,sqrLen:qn,normalize:function(t,n){var a=yn(n);if(a>0){a=Math.sqrt(a);var r=n[0]/a,u=n[1]/a,e=n[2]/a,o=n[3]/a,i=n[4],c=n[5],h=n[6],s=n[7],M=r*i+u*c+e*h+o*s;t[0]=r,t[1]=u,t[2]=e,t[3]=o,t[4]=(i-r*M)/a,t[5]=(c-u*M)/a,t[6]=(h-e*M)/a,t[7]=(s-o*M)/a}return t},str:function(t){return"quat2("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+")"},exactEquals:function(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]&&t[3]===n[3]&&t[4]===n[4]&&t[5]===n[5]&&t[6]===n[6]&&t[7]===n[7]},equals:function(t,a){var r=t[0],u=t[1],e=t[2],o=t[3],i=t[4],c=t[5],h=t[6],s=t[7],M=a[0],f=a[1],l=a[2],v=a[3],b=a[4],m=a[5],d=a[6],x=a[7];return Math.abs(r-M)<=n*Math.max(1,Math.abs(r),Math.abs(M))&&Math.abs(u-f)<=n*Math.max(1,Math.abs(u),Math.abs(f))&&Math.abs(e-l)<=n*Math.max(1,Math.abs(e),Math.abs(l))&&Math.abs(o-v)<=n*Math.max(1,Math.abs(o),Math.abs(v))&&Math.abs(i-b)<=n*Math.max(1,Math.abs(i),Math.abs(b))&&Math.abs(c-m)<=n*Math.max(1,Math.abs(c),Math.abs(m))&&Math.abs(h-d)<=n*Math.max(1,Math.abs(h),Math.abs(d))&&Math.abs(s-x)<=n*Math.max(1,Math.abs(s),Math.abs(x))}});function An(){var t=new a(2);return a!=Float32Array&&(t[0]=0,t[1]=0),t}function wn(t,n,a){return t[0]=n[0]-a[0],t[1]=n[1]-a[1],t}function Rn(t,n,a){return t[0]=n[0]*a[0],t[1]=n[1]*a[1],t}function zn(t,n,a){return t[0]=n[0]/a[0],t[1]=n[1]/a[1],t}function Pn(t,n){var a=n[0]-t[0],r=n[1]-t[1];return Math.hypot(a,r)}function jn(t,n){var a=n[0]-t[0],r=n[1]-t[1];return a*a+r*r}function In(t){var n=t[0],a=t[1];return Math.hypot(n,a)}function Sn(t){var n=t[0],a=t[1];return n*n+a*a}var En=In,On=wn,Tn=Rn,Dn=zn,Fn=Pn,Ln=jn,Vn=Sn,Qn=function(){var t=An();return function(n,a,r,u,e,o){var i,c;for(a||(a=2),r||(r=0),c=u?Math.min(u*a+r,n.length):n.length,i=r;i<c;i+=a)t[0]=n[i],t[1]=n[i+1],e(t,t,o),n[i]=t[0],n[i+1]=t[1];return n}}(),Yn=Object.freeze({create:An,clone:function(t){var n=new a(2);return n[0]=t[0],n[1]=t[1],n},fromValues:function(t,n){var r=new a(2);return r[0]=t,r[1]=n,r},copy:function(t,n){return t[0]=n[0],t[1]=n[1],t},set:function(t,n,a){return t[0]=n,t[1]=a,t},add:function(t,n,a){return t[0]=n[0]+a[0],t[1]=n[1]+a[1],t},subtract:wn,multiply:Rn,divide:zn,ceil:function(t,n){return t[0]=Math.ceil(n[0]),t[1]=Math.ceil(n[1]),t},floor:function(t,n){return t[0]=Math.floor(n[0]),t[1]=Math.floor(n[1]),t},min:function(t,n,a){return t[0]=Math.min(n[0],a[0]),t[1]=Math.min(n[1],a[1]),t},max:function(t,n,a){return t[0]=Math.max(n[0],a[0]),t[1]=Math.max(n[1],a[1]),t},round:function(t,n){return t[0]=Math.round(n[0]),t[1]=Math.round(n[1]),t},scale:function(t,n,a){return t[0]=n[0]*a,t[1]=n[1]*a,t},scaleAndAdd:function(t,n,a,r){return t[0]=n[0]+a[0]*r,t[1]=n[1]+a[1]*r,t},distance:Pn,squaredDistance:jn,length:In,squaredLength:Sn,negate:function(t,n){return t[0]=-n[0],t[1]=-n[1],t},inverse:function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t},normalize:function(t,n){var a=n[0],r=n[1],u=a*a+r*r;return u>0&&(u=1/Math.sqrt(u)),t[0]=n[0]*u,t[1]=n[1]*u,t},dot:function(t,n){return t[0]*n[0]+t[1]*n[1]},cross:function(t,n,a){var r=n[0]*a[1]-n[1]*a[0];return t[0]=t[1]=0,t[2]=r,t},lerp:function(t,n,a,r){var u=n[0],e=n[1];return t[0]=u+r*(a[0]-u),t[1]=e+r*(a[1]-e),t},random:function(t,n){n=n||1;var a=2*r()*Math.PI;return t[0]=Math.cos(a)*n,t[1]=Math.sin(a)*n,t},transformMat2:function(t,n,a){var r=n[0],u=n[1];return t[0]=a[0]*r+a[2]*u,t[1]=a[1]*r+a[3]*u,t},transformMat2d:function(t,n,a){var r=n[0],u=n[1];return t[0]=a[0]*r+a[2]*u+a[4],t[1]=a[1]*r+a[3]*u+a[5],t},transformMat3:function(t,n,a){var r=n[0],u=n[1];return t[0]=a[0]*r+a[3]*u+a[6],t[1]=a[1]*r+a[4]*u+a[7],t},transformMat4:function(t,n,a){var r=n[0],u=n[1];return t[0]=a[0]*r+a[4]*u+a[12],t[1]=a[1]*r+a[5]*u+a[13],t},rotate:function(t,n,a,r){var u=n[0]-a[0],e=n[1]-a[1],o=Math.sin(r),i=Math.cos(r);return t[0]=u*i-e*o+a[0],t[1]=u*o+e*i+a[1],t},angle:function(t,n){var a=t[0],r=t[1],u=n[0],e=n[1],o=a*a+r*r;o>0&&(o=1/Math.sqrt(o));var i=u*u+e*e;i>0&&(i=1/Math.sqrt(i));var c=(a*u+r*e)*o*i;return c>1?0:c<-1?Math.PI:Math.acos(c)},zero:function(t){return t[0]=0,t[1]=0,t},str:function(t){return"vec2("+t[0]+", "+t[1]+")"},exactEquals:function(t,n){return t[0]===n[0]&&t[1]===n[1]},equals:function(t,a){var r=t[0],u=t[1],e=a[0],o=a[1];return Math.abs(r-e)<=n*Math.max(1,Math.abs(r),Math.abs(e))&&Math.abs(u-o)<=n*Math.max(1,Math.abs(u),Math.abs(o))},len:En,sub:On,mul:Tn,div:Dn,dist:Fn,sqrDist:Ln,sqrLen:Vn,forEach:Qn});t.glMatrix=e,t.mat2=s,t.mat2d=b,t.mat3=q,t.mat4=E,t.quat=sn,t.quat2=gn,t.vec2=Yn,t.vec3=$,t.vec4=Pt,Object.defineProperty(t,"__esModule",{value:!0})}); + +// ["glMatrix", "mat2", "mat2d", "mat3", "mat4", "quat", "quat2", "vec2", "vec3", "vec4"] +window.glMatrix = glMatrix; +window.mat2 = glMatrix.mat2; +window.mat2d = glMatrix.mat2d; +window.mat3 = glMatrix.mat3; +window.mat4 = glMatrix.mat4; +window.quat = glMatrix.quat; +window.quat2 = glMatrix.quat2; +window.vec2 = glMatrix.vec2; +window.vec3 = glMatrix.vec3; +window.vec4 = glMatrix.vec4; + + +if(!CABLES.exportedPatches)CABLES.exportedPatches={};CABLES.exportedPatches["uvBp73"]={_id:"65bcb16a71656d76fa1ec204",ops:[{id:"zdo60lxbk",uiAttribs:{},portsIn:[{name:"FPS Limit",value:0},{name:"Reduce FPS not focussed",value:1},{name:"Reduce FPS loading",value:0},{name:"Clear",value:1},{name:"ClearAlpha",value:0},{name:"Fullscreen Button",value:0},{name:"Active",value:1},{name:"Hires Displays",value:1},{name:"Pixel Unit index",value:0},{name:"Pixel Unit",value:"Display"}],portsOut:[{name:"trigger",links:[{portIn:"render",portOut:"trigger",objIn:"e0268dfa-e089-4f1f-966c-c30218792023",objOut:"zdo60lxbk"}]},{name:"width",value:1532},{name:"height",value:834}],objName:"Ops.Gl.MainLoop"},{id:"141502b6-2964-42b8-b273-c6d7f5bcf303",uiAttribs:{},portsOut:[{name:"trigger 0",links:[{portIn:"Trigger",portOut:"trigger 0",objIn:"e0698285-4e6a-4339-a9ba-d9b3e441372c",objOut:"141502b6-2964-42b8-b273-c6d7f5bcf303"},{portIn:"Increment",portOut:"trigger 0",objIn:"6hojoyomj",objOut:"141502b6-2964-42b8-b273-c6d7f5bcf303"}]},{name:"trigger 5",links:[{portIn:"in0 Cursor Update",portOut:"trigger 5",objIn:"cd9136e7-4c7b-4555-bf01-18381685410b",objOut:"141502b6-2964-42b8-b273-c6d7f5bcf303"}]},{name:"trigger 8",links:[{portIn:"Trigger",portOut:"trigger 8",objIn:"ch5u1xz0l",objOut:"141502b6-2964-42b8-b273-c6d7f5bcf303"}]},{name:"trigger 9",links:[{portIn:"exe",portOut:"trigger 9",objIn:"124910bf-e88f-4da5-847e-888a7ac73020",objOut:"141502b6-2964-42b8-b273-c6d7f5bcf303"}]},{name:"trigger 15",links:[{portIn:"Trigger",portOut:"trigger 15",objIn:"afa40c7e-19f5-4546-911c-1e34c62f310b",objOut:"141502b6-2964-42b8-b273-c6d7f5bcf303"}]}],objName:"Ops.Trigger.Sequence"},{id:"4950e7c1-dcaf-47ac-9ca9-512013c4e9c9",uiAttribs:{subPatch:"66dae55a-8297-4120-81e2-d946cc6b2b60"},portsIn:[{name:"Coordinates index",value:0},{name:"Coordinates",value:"-1 to 1"},{name:"Area index",value:3},{name:"Area",value:"Canvas Area"},{name:"flip y",value:0},{name:"right click prevent default",value:1},{name:"Touch support",value:1},{name:"Passive Events",value:0},{name:"Active",value:1}],portsOut:[{name:"x",links:[{portIn:"out1 Ops.Devices.Mouse.Mouse_v3 x",portOut:"x",objIn:"7bebb5f0-9d69-43ee-98be-27a13edd98db",objOut:"4950e7c1-dcaf-47ac-9ca9-512013c4e9c9"}]},{name:"y",links:[{portIn:"out2 Ops.Devices.Mouse.Mouse_v3 y",portOut:"y",objIn:"7bebb5f0-9d69-43ee-98be-27a13edd98db",objOut:"4950e7c1-dcaf-47ac-9ca9-512013c4e9c9"}]},{name:"click",links:[{portIn:"Trigger",portOut:"click",objIn:"xz7qgpta6",objOut:"4950e7c1-dcaf-47ac-9ca9-512013c4e9c9"}]},{name:"Button is down",value:0},{name:"Mouse is hovering",links:[{portIn:"Value",portOut:"Mouse is hovering",objIn:"d155f04b-ae78-473c-994b-81138389d0f0",objOut:"4950e7c1-dcaf-47ac-9ca9-512013c4e9c9"}]},{name:"Movement X",value:0},{name:"Movement Y",value:0}],objName:"Ops.Devices.Mouse.Mouse_v3"},{id:"d155f04b-ae78-473c-994b-81138389d0f0",uiAttribs:{subPatch:"66dae55a-8297-4120-81e2-d946cc6b2b60"},portsIn:[{name:"Variable",value:"ui_mouseOver"}],objName:"Ops.Vars.VarSetNumber_v2"},{id:"dq71li66q",uiAttribs:{subPatch:"66dae55a-8297-4120-81e2-d946cc6b2b60"},portsIn:[{name:"Multiply",value:1},{name:"Limit",value:1},{name:"Min",value:0},{name:"Max",value:1},{name:"Rubberband",value:0}],portsOut:[{name:"Absolute Value",links:[{portIn:"out0 DeltaSum Absolute Value",portOut:"Absolute Value",objIn:"7bebb5f0-9d69-43ee-98be-27a13edd98db",objOut:"dq71li66q"}]}],objName:"Ops.Math.DeltaSum"},{id:"9d85ffdc-685a-42ef-bd41-b501521a114c",uiAttribs:{subPatch:"66dae55a-8297-4120-81e2-d946cc6b2b60"},portsOut:[{name:"create port",value:0}],objName:"Ops.Ui.PatchInput"},{id:"7bebb5f0-9d69-43ee-98be-27a13edd98db",uiAttribs:{subPatch:"66dae55a-8297-4120-81e2-d946cc6b2b60"},portsIn:[{name:"create port",value:0}],objName:"Ops.Ui.PatchOutput"},{id:"cd9136e7-4c7b-4555-bf01-18381685410b",uiAttribs:{},storage:{subPatchVer:1},portsIn:[{name:"create port",value:0},{name:"dataStr",value:'{"ports":[{"name":"in0 Cursor Update","type":1}],"portsOut":[{"name":"out0 DeltaSum Absolute Value","type":0},{"name":"out1 Ops.Devices.Mouse.Mouse_v3 x","type":0},{"name":"out2 Ops.Devices.Mouse.Mouse_v3 y","type":0}]}'},{name:"patchId",value:"66dae55a-8297-4120-81e2-d946cc6b2b60"}],portsOut:[{name:"create port out",value:0},{name:"out0 DeltaSum Absolute Value",links:[{portIn:"Value",portOut:"out0 DeltaSum Absolute Value",objIn:"9fsk0rgx7",objOut:"cd9136e7-4c7b-4555-bf01-18381685410b"}]}],objName:"Ops.Ui.SubPatch"},{id:"c2a85325-d75f-4f01-9b5c-83a2edd8d35d",uiAttribs:{},portsIn:[{name:"posY",value:-.2},{name:"posZ",value:0},{name:"scale",value:.25},{name:"rotX",value:0},{name:"rotY",value:180},{name:"rotZ",value:315.48}],portsOut:[{name:"trigger",links:[{portIn:"render",portOut:"trigger",objIn:"li365texv",objOut:"c2a85325-d75f-4f01-9b5c-83a2edd8d35d"},{portIn:"render",portOut:"trigger",objIn:"i111f5qjb",objOut:"c2a85325-d75f-4f01-9b5c-83a2edd8d35d"}]}],objName:"Ops.Gl.Matrix.Transform"},{id:"e0268dfa-e089-4f1f-966c-c30218792023",uiAttribs:{},portsIn:[{name:"r",value:0},{name:"g",value:0},{name:"b",value:0},{name:"a",value:1}],portsOut:[{name:"trigger",links:[{portIn:"render",portOut:"trigger",objIn:"te11ob7nw",objOut:"e0268dfa-e089-4f1f-966c-c30218792023"},{portIn:"Trigger",portOut:"trigger",objIn:"zcc6zzw4d",objOut:"e0268dfa-e089-4f1f-966c-c30218792023"}]}],objName:"Ops.Gl.ClearColor"},{id:"b65ca0b8-40c9-4d0a-9e22-aba7d89f3abf",uiAttribs:{subPatch:"66dae55a-8297-4120-81e2-d946cc6b2b60"},portsIn:[{name:"Active",value:1},{name:"Speed",value:-.01},{name:"Input Type index",value:0},{name:"Input Type",value:"All"},{name:"Area index",value:0},{name:"Area",value:"Canvas Area"}],portsOut:[{name:"Delta X",value:0},{name:"Delta Y",links:[{portIn:"Delta Value",portOut:"Delta Y",objIn:"dq71li66q",objOut:"b65ca0b8-40c9-4d0a-9e22-aba7d89f3abf"}]},{name:"Is Dragging",links:[{portIn:"Value",portOut:"Is Dragging",objIn:"ls3p3eowk",objOut:"b65ca0b8-40c9-4d0a-9e22-aba7d89f3abf"}]}],objName:"Ops.Patch.PuvBp73.MouseDrag"},{id:"b6dd9bba-0e82-4220-a27d-884c1d3887a3",uiAttribs:{},portsIn:[{name:"Attribute index",value:1},{name:"Attribute",value:"TexCoords"},{name:"Absolute",value:0},{name:"World Space",value:1}],portsOut:[{name:"trigger",links:[{portIn:"render",portOut:"trigger",objIn:"gfjoyon3n",objOut:"b6dd9bba-0e82-4220-a27d-884c1d3887a3"}]}],objName:"Ops.Gl.Shader.AttributeAsColorMaterial"},{id:"e0698285-4e6a-4339-a9ba-d9b3e441372c",uiAttribs:{},portsIn:[{name:"Named Trigger",value:"mainExe"}],objName:"Ops.Trigger.TriggerSend"},{id:"babe81ef-3ee9-4ed3-ba28-8b648c21dd11",uiAttribs:{},portsIn:[{name:"Title",value:"Dial Blueprint"}],objName:"Ops.Ui.Area"},{id:"a82e74aa-f66f-47c9-a07a-2f1b0376925b",uiAttribs:{},portsIn:[{name:"Title",value:"Data"}],objName:"Ops.Ui.Area"},{id:"afa40c7e-19f5-4546-911c-1e34c62f310b",uiAttribs:{},portsIn:[{name:"Named Trigger",value:"finalExe"}],objName:"Ops.Trigger.TriggerSend"},{id:"1aaf40f7-386a-40d0-80de-4857b3f558f4",uiAttribs:{},portsIn:[{name:"Variable",value:"ui_NormValue"}],portsOut:[{name:"Value",links:[{portIn:"Number",portOut:"Value",objIn:"rjsjd3otn",objOut:"1aaf40f7-386a-40d0-80de-4857b3f558f4"}]}],objName:"Ops.Vars.VarGetNumber_v2"},{id:"7dq6j5p5k",uiAttribs:{},portsIn:[{name:"Check Body Collisions",value:0}],portsOut:[{name:"Next",links:[{portIn:"Trigger",portOut:"Next",objIn:"9sm9dp98r",objOut:"7dq6j5p5k"}]},{name:"Total Bodies",value:4}],objName:"Ops.Graphics.Intersection.IntersectWorld"},{id:"9sm9dp98r",uiAttribs:{},portsIn:[{name:"Coordinate Format index",value:0},{name:"Coordinate Format",value:"-1 to 1"},{name:"Z",value:0},{name:"To X",value:0},{name:"To Y",value:0},{name:"To Z",value:0},{name:"Active",value:1},{name:"Change Cursor",value:0}],portsOut:[{name:"Next",links:[{portIn:"render",portOut:"Next",objIn:"ge3zj70cy",objOut:"9sm9dp98r"},{portIn:"render",portOut:"Next",objIn:"mbk4m8pcr",objOut:"9sm9dp98r"},{portIn:"render",portOut:"Next",objIn:"7qikt1vaf",objOut:"9sm9dp98r"},{portIn:"render",portOut:"Next",objIn:"aupoduf7d",objOut:"9sm9dp98r"}]},{name:"Has Hit",value:0},{name:"Hit Body Name",links:[{portIn:"Value",portOut:"Hit Body Name",objIn:"tg35ehmtt",objOut:"9sm9dp98r"}]},{name:"Hit X",value:0},{name:"Hit Y",value:0},{name:"Hit Z",value:0}],objName:"Ops.Graphics.Intersection.IntersectTestRaycast"},{id:"jrkdakvqd",uiAttribs:{},portsIn:[{name:"Shape index",value:0},{name:"Shape",value:"Sphere"},{name:"Name",value:"dial.1"},{name:"Radius",value:.22},{name:"Size X",value:.55},{name:"Size Y",value:.55},{name:"Size Z",value:0},{name:"Positions"},{name:"Append Index to name",value:1}],objName:"Ops.Graphics.Intersection.IntersectBody"},{id:"bs0d2bloj",uiAttribs:{},portsIn:[{name:"Named Trigger",value:"mainExe"}],portsOut:[{name:"Triggered",links:[{portIn:"Trigger",portOut:"Triggered",objIn:"7dq6j5p5k",objOut:"bs0d2bloj"}]}],objName:"Ops.Trigger.TriggerReceive"},{id:"ge3zj70cy",uiAttribs:{},portsIn:[{name:"x",value:-.88},{name:"y",value:-.19},{name:"z",value:0}],portsOut:[{name:"trigger",links:[{portIn:"Trigger",portOut:"trigger",objIn:"jrkdakvqd",objOut:"ge3zj70cy"}]}],objName:"Ops.Gl.Matrix.Translate"},{id:"5me0htliz",uiAttribs:{},portsIn:[{name:"Shape index",value:0},{name:"Shape",value:"Sphere"},{name:"Name",value:"dial.2"},{name:"Radius",value:.22},{name:"Size X",value:.55},{name:"Size Y",value:.55},{name:"Size Z",value:0},{name:"Positions"},{name:"Append Index to name",value:1}],objName:"Ops.Graphics.Intersection.IntersectBody"},{id:"mbk4m8pcr",uiAttribs:{},portsIn:[{name:"x",value:-.3},{name:"y",value:-.19},{name:"z",value:0}],portsOut:[{name:"trigger",links:[{portIn:"Trigger",portOut:"trigger",objIn:"5me0htliz",objOut:"mbk4m8pcr"}]}],objName:"Ops.Gl.Matrix.Translate"},{id:"adh054ku6",uiAttribs:{},portsIn:[{name:"Shape index",value:0},{name:"Shape",value:"Sphere"},{name:"Name",value:"dial.3"},{name:"Radius",value:.23},{name:"Size X",value:.55},{name:"Size Y",value:.55},{name:"Size Z",value:0},{name:"Positions"},{name:"Append Index to name",value:1}],objName:"Ops.Graphics.Intersection.IntersectBody"},{id:"yjtjh6kai",uiAttribs:{},portsIn:[{name:"Shape index",value:0},{name:"Shape",value:"Sphere"},{name:"Name",value:"dial.4"},{name:"Radius",value:.23},{name:"Size X",value:.55},{name:"Size Y",value:.55},{name:"Size Z",value:0},{name:"Positions"},{name:"Append Index to name",value:1}],objName:"Ops.Graphics.Intersection.IntersectBody"},{id:"sfqxroo9q",uiAttribs:{},portsIn:[{name:"Coordinates index",value:0},{name:"Coordinates",value:"-1 to 1"},{name:"Area index",value:0},{name:"Area",value:"Canvas"},{name:"flip y",value:1},{name:"right click prevent default",value:1},{name:"Touch support",value:1},{name:"Passive Events",value:0},{name:"Active",value:1}],portsOut:[{name:"x",links:[{portIn:"X",portOut:"x",objIn:"9sm9dp98r",objOut:"sfqxroo9q"}]},{name:"y",links:[{portIn:"Y",portOut:"y",objIn:"9sm9dp98r",objOut:"sfqxroo9q"}]},{name:"Button is down",links:[{portIn:"Value",portOut:"Button is down",objIn:"er6016ry9",objOut:"sfqxroo9q"}]},{name:"Mouse is hovering",value:1},{name:"Movement X",value:0},{name:"Movement Y",value:-.5}],objName:"Ops.Devices.Mouse.Mouse_v3"},{id:"124910bf-e88f-4da5-847e-888a7ac73020",uiAttribs:{},portsIn:[{name:"num x",value:4},{name:"num y",value:1},{name:"center",value:1}],portsOut:[{name:"trigger",links:[{portIn:"render",portOut:"trigger",objIn:"c2a85325-d75f-4f01-9b5c-83a2edd8d35d",objOut:"124910bf-e88f-4da5-847e-888a7ac73020"},{portIn:"render",portOut:"trigger",objIn:"zlpf1p0f5",objOut:"124910bf-e88f-4da5-847e-888a7ac73020"}]},{name:"x",links:[{portIn:"posX",portOut:"x",objIn:"c2a85325-d75f-4f01-9b5c-83a2edd8d35d",objOut:"124910bf-e88f-4da5-847e-888a7ac73020"},{portIn:"posX",portOut:"x",objIn:"zlpf1p0f5",objOut:"124910bf-e88f-4da5-847e-888a7ac73020"}]},{name:"y",value:0},{name:"index",links:[{portIn:"Value",portOut:"index",objIn:"euqza6b25",objOut:"124910bf-e88f-4da5-847e-888a7ac73020"}]},{name:"total iterations",value:4}],objName:"Ops.Trigger.Repeat2d"},{id:"7qikt1vaf",uiAttribs:{},portsIn:[{name:"x",value:.31},{name:"y",value:-.19},{name:"z",value:0}],portsOut:[{name:"trigger",links:[{portIn:"Trigger",portOut:"trigger",objIn:"adh054ku6",objOut:"7qikt1vaf"}]}],objName:"Ops.Gl.Matrix.Translate"},{id:"aupoduf7d",uiAttribs:{},portsIn:[{name:"x",value:.9},{name:"y",value:-.19},{name:"z",value:0}],portsOut:[{name:"trigger",links:[{portIn:"Trigger",portOut:"trigger",objIn:"yjtjh6kai",objOut:"aupoduf7d"}]}],objName:"Ops.Gl.Matrix.Translate"},{id:"32lmfrmux",uiAttribs:{},portsIn:[{name:"Title",value:"Intersect"}],objName:"Ops.Ui.Area"},{id:"tg35ehmtt",uiAttribs:{},portsIn:[{name:"Variable",value:"ui_hitBodyName"}],objName:"Ops.Vars.VarSetString_v2"},{id:"gb0lraco2",uiAttribs:{},portsIn:[{name:"Variable",value:"ui_activeDial_ID"}],portsOut:[{name:"Value",links:[{portIn:"number1",portOut:"Value",objIn:"kcwn0w2tu",objOut:"gb0lraco2"}]}],objName:"Ops.Vars.VarGetNumber_v2"},{id:"qyara3wac",uiAttribs:{},portsOut:[{name:"result",value:0}],objName:"Ops.Math.Compare.Equals"},{id:"xz7qgpta6",uiAttribs:{subPatch:"66dae55a-8297-4120-81e2-d946cc6b2b60"},portsIn:[{name:"Named Trigger",value:"mouseDown"}],objName:"Ops.Trigger.TriggerSend"},{id:"v1hlb4w7t",uiAttribs:{},portsIn:[{name:"Variable",value:"ui_activeDial_ID"}],portsOut:[{name:"Value",links:[{portIn:"number1",portOut:"Value",objIn:"k9cpiqwvn",objOut:"v1hlb4w7t"}]}],objName:"Ops.Vars.VarGetNumber_v2"},{id:"k9cpiqwvn",uiAttribs:{},portsIn:[{name:"number2",value:1}],portsOut:[{name:"result",links:[{portIn:"Index",portOut:"result",objIn:"rjsjd3otn",objOut:"k9cpiqwvn"}]}],objName:"Ops.Math.Subtract"},{id:"53603a6e-a331-41a7-9822-120aba8de4f8",uiAttribs:{},portsIn:[{name:"number2",value:270}],portsOut:[{name:"result",links:[{portIn:"rotY",portOut:"result",objIn:"li365texv",objOut:"53603a6e-a331-41a7-9822-120aba8de4f8"}]}],objName:"Ops.Math.Multiply"},{id:"931c114e-4c92-4747-896b-6697a0610953",uiAttribs:{},portsIn:[{name:"number2",value:.75}],portsOut:[{name:"result",links:[{portIn:"percent",portOut:"result",objIn:"gfjoyon3n",objOut:"931c114e-4c92-4747-896b-6697a0610953"},{portIn:"percent",portOut:"result",objIn:"8eccns7e5",objOut:"931c114e-4c92-4747-896b-6697a0610953"}]}],objName:"Ops.Math.Multiply"},{id:"9fsk0rgx7",uiAttribs:{},portsIn:[{name:"Variable",value:"ui_NormValue"}],objName:"Ops.Vars.VarSetNumber_v2"},{id:"aqjh1act1",uiAttribs:{},portsIn:[{name:"Value Invalid Index",value:0}],portsOut:[{name:"value",links:[{portIn:"number1",portOut:"value",objIn:"53603a6e-a331-41a7-9822-120aba8de4f8",objOut:"aqjh1act1"},{portIn:"number1",portOut:"value",objIn:"931c114e-4c92-4747-896b-6697a0610953",objOut:"aqjh1act1"},{portIn:"Value",portOut:"value",objIn:"j3kd0q09w",objOut:"aqjh1act1"},{portIn:"Value",portOut:"value",objIn:"1rc15x0gs",objOut:"aqjh1act1"}]},{name:"Valid Index",value:1}],objName:"Ops.Array.ArrayGetNumber"},{id:"x6efudpvd",uiAttribs:{},portsIn:[{name:"Variable",value:"ui_dialValues"}],objName:"Ops.Vars.VarSetArray_v2"},{id:"i0rjtphmz",uiAttribs:{},portsIn:[{name:"Variable",value:"ui_dialValues"}],portsOut:[{name:"Value",links:[{portIn:"array",portOut:"Value",objIn:"aqjh1act1",objOut:"i0rjtphmz"}]}],objName:"Ops.Vars.VarGetArray_v2"},{id:"hsmbgpnm6",uiAttribs:{},portsIn:[{name:"Array length",value:4},{name:"Mode select index",value:0},{name:"Mode select",value:"Number"},{name:"Default Value",value:0},{name:"Reverse",value:0}],portsOut:[{name:"Array",links:[{portIn:"Array",portOut:"Array",objIn:"rjsjd3otn",objOut:"hsmbgpnm6"}]},{name:"Array length out",value:4}],objName:"Ops.Array.Array_v3"},{id:"er6016ry9",uiAttribs:{},portsIn:[{name:"Variable",value:"ui_buttonIsDown"}],objName:"Ops.Vars.VarSetNumber_v2"},{id:"ls3p3eowk",uiAttribs:{subPatch:"66dae55a-8297-4120-81e2-d946cc6b2b60"},portsIn:[{name:"Variable",value:"ui_mouseIsDragging"}],objName:"Ops.Vars.VarSetNumber_v2"},{id:"c390aebl7",uiAttribs:{},portsIn:[{name:"Variable",value:"ui_mouseIsDragging"}],portsOut:[{name:"Value",links:[{portIn:"Pass Through",portOut:"Value",objIn:"d7vl5bf8b",objOut:"c390aebl7"}]}],objName:"Ops.Vars.VarGetNumber_v2"},{id:"kcwn0w2tu",uiAttribs:{},portsIn:[{name:"number2",value:1}],portsOut:[{name:"result",links:[{portIn:"number1",portOut:"result",objIn:"qyara3wac",objOut:"kcwn0w2tu"}]}],objName:"Ops.Math.Subtract"},{id:"pd9s43czm",uiAttribs:{},storage:{blueprintVer:2,subPatchVer:2},portsIn:[{name:"patchId",value:"bp2sub_pd9s43czm"}],objName:"Ops.Patch.PuvBp73.SubPatch2"},{id:"te11ob7nw",uiAttribs:{},portsIn:[{name:"projection mode index",value:0},{name:"projection mode",value:"prespective"},{name:"frustum near",value:.01},{name:"frustum far",value:5e3},{name:"fov",value:30},{name:"Auto Aspect Ratio",value:1},{name:"Aspect Ratio",value:1},{name:"eye X",value:0},{name:"eye Y",value:-.03},{name:"eye Z",value:.73},{name:"center X",value:0},{name:"center Y",value:0},{name:"center Z",value:0},{name:"truck",value:0},{name:"boom",value:.23},{name:"dolly",value:0},{name:"tilt",value:0},{name:"pan",value:0},{name:"roll",value:0}],portsOut:[{name:"trigger",links:[{portIn:"render",portOut:"trigger",objIn:"p78s2gczc",objOut:"te11ob7nw"}]},{name:"Aspect",value:1.8369304556354915}],objName:"Ops.Gl.Matrix.Camera"},{id:"p78s2gczc",uiAttribs:{},portsIn:[{name:"min distance",value:.001},{name:"max distance",value:1},{name:"min rot y",value:0},{name:"max rot y",value:0},{name:"initial radius",value:0},{name:"initial axis y",value:.5},{name:"initial axis x",value:.25},{name:"mul",value:1},{name:"Smoothness",value:.3},{name:"Speed X",value:1},{name:"Speed Y",value:1},{name:"Active",value:1},{name:"Allow Panning",value:1},{name:"Allow Zooming",value:1},{name:"Allow Rotation",value:0},{name:"restricted",value:1}],portsOut:[{name:"trigger",links:[{portIn:"exe",portOut:"trigger",objIn:"141502b6-2964-42b8-b273-c6d7f5bcf303",objOut:"p78s2gczc"},{portIn:"Trigger",portOut:"trigger",objIn:"4pu8mr0y2",objOut:"p78s2gczc"}]},{name:"radius",value:.001},{name:"Rot X",value:90},{name:"Rot Y",value:90}],objName:"Ops.Gl.Matrix.OrbitControls"},{id:"uc9r4wu0r",uiAttribs:{},portsIn:[{name:"b",value:.856},{name:"a",value:.63},{name:"colorizeTexture",value:1},{name:"Vertex Colors",value:0},{name:"Alpha Mask Source index",value:0},{name:"Alpha Mask Source",value:"Luminance"},{name:"Opacity TexCoords Transform",value:0},{name:"Discard Transparent Pixels",value:0},{name:"diffuseRepeatX",value:1},{name:"diffuseRepeatY",value:1},{name:"Tex Offset X",value:0},{name:"Tex Offset Y",value:0},{name:"Crop TexCoords",value:0},{name:"billboard",value:0}],portsOut:[{name:"trigger",links:[{portIn:"render",portOut:"trigger",objIn:"8eccns7e5",objOut:"uc9r4wu0r"}]}],objName:"Ops.Gl.Shader.BasicMaterial_v3"},{id:"j3kd0q09w",uiAttribs:{},portsIn:[{name:"Min",value:0},{name:"Max",value:.9},{name:"Easing index",value:4},{name:"Easing",value:"Cubic In"}],portsOut:[{name:"Result",links:[{portIn:"Value",portOut:"Result",objIn:"conrnxfgk",objOut:"j3kd0q09w"},{portIn:"r",portOut:"Result",objIn:"uc9r4wu0r",objOut:"j3kd0q09w"}]}],objName:"Ops.Math.Ease"},{id:"dugq70sv7",uiAttribs:{},portsOut:[{name:"Used Heap Size",value:80.84566116333008},{name:"Total Heap Size",value:87.53744506835938}],objName:"Ops.Devices.Browser.JsMemory"},{id:"conrnxfgk",uiAttribs:{},portsIn:[{name:"Min",value:0},{name:"Max",value:.27},{name:"Easing index",value:5},{name:"Easing",value:"Cubic Out"}],portsOut:[{name:"Result",links:[{portIn:"Offset X",portOut:"Result",objIn:"chztenqi0",objOut:"conrnxfgk"},{portIn:"g",portOut:"Result",objIn:"uc9r4wu0r",objOut:"conrnxfgk"}]}],objName:"Ops.Math.Ease"},{id:"8dsa2kb7j",uiAttribs:{},portsIn:[{name:"Draw",value:1,title:"Render mesh"},{name:"segments",value:32},{name:"stacks",value:1},{name:"length",value:.22},{name:"outer radius",value:.58},{name:"inner radius",value:.32},{name:"UV mode index",value:0},{name:"UV mode",value:"simple"},{name:"Flip Mapping",value:0},{name:"Caps",value:1},{name:"Flat Normals",value:0}],objName:"Ops.Gl.Meshes.Cylinder_v2"},{id:"chztenqi0",uiAttribs:{},portsIn:[{name:"r",value:.412},{name:"g",value:.512},{name:"b",value:.553},{name:"Opacity",value:1},{name:"AO Intensity",value:1},{name:"Normal Map Intensity",value:1},{name:"Repeat X",value:0},{name:"Repeat Y",value:1},{name:"Offset Y",value:0},{name:"Screen Space Normals",value:0},{name:"Calc normal tangents",value:0},{name:"Opacity TexCoords Transform",value:0},{name:"Discard Transparent Pixels",value:1},{name:"Alpha Mask Source index",value:0},{name:"Alpha Mask Source",value:"Luminance"}],portsOut:[{name:"Next",links:[{portIn:"render",portOut:"Next",objIn:"8dsa2kb7j",objOut:"chztenqi0"}]}],objName:"Ops.Gl.Shader.MatCapMaterial_v3"},{id:"0oya8etuv",uiAttribs:{},portsIn:[{name:"File",value:"assets/lib_matcaps_Chrome_Blue_Tint-White.png",display:"file"},{name:"Filter index",value:1},{name:"Filter",value:"linear"},{name:"Wrap index",value:0},{name:"Wrap",value:"repeat"},{name:"Anisotropic index",value:0},{name:"Anisotropic",value:"0"},{name:"Data Format index",value:3},{name:"Data Format",value:"RGBA"},{name:"Flip",value:0},{name:"Pre Multiplied Alpha",value:0},{name:"Active",value:1},{name:"Save Memory",value:1},{name:"Add Cachebuster",value:1}],portsOut:[{name:"Texture",links:[{portIn:"MatCap",portOut:"Texture",objIn:"chztenqi0",objOut:"0oya8etuv"}]},{name:"Width",value:256},{name:"Height",value:256},{name:"Aspect Ratio",value:1},{name:"Loaded",value:1},{name:"Loading",value:0}],objName:"Ops.Gl.Texture_v2"},{id:"li365texv",uiAttribs:{},portsIn:[{name:"posX",value:0},{name:"posY",value:0},{name:"posZ",value:0},{name:"scale",value:1},{name:"rotX",value:0},{name:"rotZ",value:0}],portsOut:[{name:"trigger",links:[{portIn:"Render",portOut:"trigger",objIn:"chztenqi0",objOut:"li365texv"}]}],objName:"Ops.Gl.Matrix.Transform"},{id:"bd0mu1qkj",uiAttribs:{},portsIn:[{name:"Title",value:"Main"}],objName:"Ops.Ui.Area"},{id:"fvg1zz75v",uiAttribs:{},portsIn:[{name:"Size index",value:0},{name:"Size",value:"Canvas"},{name:"texture width",value:1532},{name:"texture height",value:834},{name:"Auto Aspect",value:1},{name:"filter index",value:1},{name:"filter",value:"linear"},{name:"Wrap index",value:0},{name:"Wrap",value:"Clamp"},{name:"MSAA index",value:2},{name:"MSAA",value:"4x"},{name:"Pixel Format index",value:5},{name:"Pixel Format",value:"SRGBA 8bit ubyte"},{name:"Depth",value:1},{name:"Clear",value:1}],portsOut:[{name:"trigger",links:[{portIn:"render",portOut:"trigger",objIn:"tckfhevim",objOut:"fvg1zz75v"}]},{name:"texture",links:[{portIn:"Base Texture",portOut:"texture",objIn:"48vrkn65x",objOut:"fvg1zz75v"}]}],objName:"Ops.Gl.RenderToTexture_v3"},{id:"9dqwuc8l6",uiAttribs:{},portsIn:[{name:"render",title:"Trigger"},{name:"Render Mesh",value:1,title:"Render"},{name:"width",value:1},{name:"height",value:1.8},{name:"pivot x index",value:1},{name:"pivot x",value:"center"},{name:"pivot y index",value:1},{name:"pivot y",value:"center"},{name:"axis index",value:0},{name:"axis",value:"xy"},{name:"Flip TexCoord X",value:0},{name:"Flip TexCoord Y",value:1},{name:"num columns",value:1},{name:"num rows",value:1}],objName:"Ops.Gl.Meshes.Rectangle_v4"},{id:"62jtojeuu",uiAttribs:{},portsIn:[{name:"posX",value:0},{name:"posY",value:-.97},{name:"posZ",value:-2.94},{name:"scale",value:3.57},{name:"rotX",value:-84.79},{name:"rotY",value:0},{name:"rotZ",value:180.28}],portsOut:[{name:"trigger",links:[{portIn:"render",portOut:"trigger",objIn:"9dqwuc8l6",objOut:"62jtojeuu"}]}],objName:"Ops.Gl.Matrix.TransformView"},{id:"flor1ge09",uiAttribs:{},portsIn:[{name:"r",value:.07},{name:"g",value:.06},{name:"b",value:.51},{name:"Opacity",value:.78},{name:"AO Intensity",value:1},{name:"Normal Map Intensity",value:1},{name:"Repeat X",value:1},{name:"Repeat Y",value:1},{name:"Offset X",value:0},{name:"Offset Y",value:0},{name:"Screen Space Normals",value:0},{name:"Calc normal tangents",value:1},{name:"Opacity TexCoords Transform",value:0},{name:"Discard Transparent Pixels",value:1},{name:"Alpha Mask Source index",value:0},{name:"Alpha Mask Source",value:"Luminance"}],portsOut:[{name:"Next",links:[{portIn:"render",portOut:"Next",objIn:"wcm52u6xo",objOut:"flor1ge09"}]}],objName:"Ops.Gl.Shader.MatCapMaterial_v3"},{id:"wcm52u6xo",uiAttribs:{},portsIn:[{name:"x",value:-1.26},{name:"y",value:.46},{name:"z",value:-1.17}],portsOut:[{name:"trigger",links:[{portIn:"render",portOut:"trigger",objIn:"62jtojeuu",objOut:"wcm52u6xo"}]}],objName:"Ops.Gl.Matrix.ScaleXYZViewMatrix"},{id:"tckfhevim",uiAttribs:{},portsIn:[{name:"x",value:1.2},{name:"y",value:-2.97},{name:"z",value:-1}],portsOut:[{name:"trigger",links:[{portIn:"exe",portOut:"trigger",objIn:"124910bf-e88f-4da5-847e-888a7ac73020",objOut:"tckfhevim"}]}],objName:"Ops.Deprecated.Gl.Matrix.ScaleXYZ"},{id:"x8l31ycyr",uiAttribs:{},portsIn:[{name:"Num",value:64},{name:"Spacing",value:.3},{name:"Center",value:1},{name:"Axis index",value:1},{name:"Axis",value:"XZ"}],objName:"Ops.Gl.Meshes.Grid"},{id:"33hdtkr51",uiAttribs:{},portsIn:[{name:"x",value:0},{name:"y",value:.22},{name:"z",value:-.01}],portsOut:[{name:"trigger",links:[{portIn:"Render",portOut:"trigger",objIn:"flor1ge09",objOut:"33hdtkr51"}]}],objName:"Ops.Gl.Matrix.Translate"},{id:"ajz3m2b7r",uiAttribs:{},portsIn:[{name:"r",value:.4752931908661422},{name:"g",value:.36659911993317373},{name:"b",value:.9581856509868598},{name:"a",value:1},{name:"colorizeTexture",value:1},{name:"Vertex Colors",value:0},{name:"Alpha Mask Source index",value:0},{name:"Alpha Mask Source",value:"Luminance"},{name:"Opacity TexCoords Transform",value:0},{name:"Discard Transparent Pixels",value:1},{name:"diffuseRepeatX",value:1},{name:"diffuseRepeatY",value:1},{name:"Tex Offset X",value:-2.19},{name:"Tex Offset Y",value:11.92},{name:"Crop TexCoords",value:0},{name:"billboard",value:0}],portsOut:[{name:"trigger",links:[{portIn:"render",portOut:"trigger",objIn:"o4q65sx2h",objOut:"ajz3m2b7r"}]}],objName:"Ops.Gl.Shader.BasicMaterial_v3"},{id:"6a24jo2e0",uiAttribs:{},portsIn:[{name:"Title",value:"Setting"}],objName:"Ops.Ui.Area"},{id:"o4q65sx2h",uiAttribs:{},portsIn:[{name:"x",value:0},{name:"y",value:-.56},{name:"z",value:3.58}],portsOut:[{name:"trigger",links:[{portIn:"Render",portOut:"trigger",objIn:"x8l31ycyr",objOut:"o4q65sx2h"}]}],objName:"Ops.Gl.Matrix.Translate"},{id:"eupi4n3t8",uiAttribs:{},portsIn:[{name:"Scale index",value:0},{name:"Scale",value:"Stretch"},{name:"Flip Y",value:0},{name:"Flip X",value:0}],portsOut:[{name:"trigger",links:[{portIn:"Execute",portOut:"trigger",objIn:"ii9hyaw76",objOut:"eupi4n3t8"}]}],objName:"Ops.Gl.Meshes.FullscreenRectangle_v2"},{id:"txsuzzmpp",uiAttribs:{},portsIn:[{name:"Gradient",value:'{"keys" : [{"pos":0,"r":0,"g":0,"b":0},{"pos":1,"r":1,"g":1,"b":1}]}'},{name:"Direction index",value:1},{name:"Direction",value:"Y"},{name:"Smoothstep",value:0},{name:"Step",value:0},{name:"Flip",value:1},{name:"sRGB",value:1},{name:"Oklab",value:0},{name:"Size",value:64},{name:"filter index",value:1},{name:"filter",value:"linear"},{name:"wrap index",value:0},{name:"wrap",value:"clamp to edge"},{name:"Gradient Array",value:0}],portsOut:[{name:"Texture",links:[{portIn:"R",portOut:"Texture",objIn:"ii9hyaw76",objOut:"txsuzzmpp"}]}],objName:"Ops.Gl.GradientTexture"},{id:"ii9hyaw76",uiAttribs:{},portsIn:[{name:"Filter index",value:1},{name:"Filter",value:"linear"},{name:"Wrap index",value:1},{name:"Wrap",value:"repeat"},{name:"Pixel Format index",value:9},{name:"Pixel Format",value:"RGBA 16bit float"},{name:"Size index",value:0},{name:"Size",value:"Biggest"},{name:"R Source index",value:0},{name:"R Source",value:"R"},{name:"R Value index",value:0},{name:"R Value",value:"Source"},{name:"R Default",value:1},{name:"G Source index",value:0},{name:"G Source",value:"R"},{name:"G Value index",value:1},{name:"G Value",value:"Invert"},{name:"G Default",value:1},{name:"B Source index",value:2},{name:"B Source",value:"B"},{name:"B Value index",value:0},{name:"B Value",value:"Source"},{name:"B Default",value:1},{name:"A Source index",value:0},{name:"A Source",value:"R"},{name:"A Value index",value:0},{name:"A Value",value:"Source"},{name:"A Default",value:1}],portsOut:[{name:"Next",links:[{portIn:"Render",portOut:"Next",objIn:"bom62ei05",objOut:"ii9hyaw76"}]},{name:"Texture",links:[{portIn:"Base Texture",portOut:"Texture",objIn:"bom62ei05",objOut:"ii9hyaw76"}]}],objName:"Ops.Gl.Textures.CombineTextures"},{id:"dvpyr3uz9",uiAttribs:{},portsIn:[{name:"File",value:"assets/65bbe44771656d76fa1e7e54_voro.png",display:"file"},{name:"Filter index",value:2},{name:"Filter",value:"mipmap"},{name:"Wrap index",value:0},{name:"Wrap",value:"repeat"},{name:"Anisotropic index",value:0},{name:"Anisotropic",value:"0"},{name:"Data Format index",value:3},{name:"Data Format",value:"RGBA"},{name:"Flip",value:0},{name:"Pre Multiplied Alpha",value:0},{name:"Active",value:1},{name:"Save Memory",value:1},{name:"Add Cachebuster",value:1}],portsOut:[{name:"Texture",links:[{portIn:"G",portOut:"Texture",objIn:"ii9hyaw76",objOut:"dvpyr3uz9"}]},{name:"Width",value:1660},{name:"Height",value:840},{name:"Aspect Ratio",value:1.9761904761904763},{name:"Loaded",value:1},{name:"Loading",value:0}],objName:"Ops.Gl.Texture_v2"},{id:"48vrkn65x",uiAttribs:{},portsIn:[{name:"Size index",value:0},{name:"Size",value:"Auto"},{name:"Width",value:640},{name:"Height",value:480},{name:"Filter index",value:1},{name:"Filter",value:"linear"},{name:"Wrap index",value:1},{name:"Wrap",value:"repeat"},{name:"Anisotropic index",value:0},{name:"Anisotropic",value:"0"},{name:"Pixel Format index",value:5},{name:"Pixel Format",value:"SRGBA 8bit ubyte"},{name:"R",value:0},{name:"G",value:0},{name:"B",value:0},{name:"A",value:0}],portsOut:[{name:"Next",links:[{portIn:"render",portOut:"Next",objIn:"6fb2f0244",objOut:"48vrkn65x"}]},{name:"texture_out",links:[{portIn:"Diffuse",portOut:"texture_out",objIn:"flor1ge09",objOut:"48vrkn65x"}]},{name:"Aspect Ratio",value:1.8369304556354915},{name:"Texture Width",value:1532},{name:"Texture Height",value:834}],objName:"Ops.Gl.ImageCompose.ImageCompose_v4"},{id:"6fb2f0244",uiAttribs:{},portsIn:[{name:"Passes",value:1},{name:"Clamp",value:0},{name:"direction index",value:0},{name:"direction",value:"both"},{name:"Mask Invert",value:0}],objName:"Ops.Gl.ImageCompose.FastBlur_v2"},{id:"bom62ei05",uiAttribs:{},portsIn:[{name:"Size index",value:0},{name:"Size",value:"Auto"},{name:"Width",value:640},{name:"Height",value:480},{name:"Filter index",value:1},{name:"Filter",value:"linear"},{name:"Wrap index",value:1},{name:"Wrap",value:"repeat"},{name:"Anisotropic index",value:0},{name:"Anisotropic",value:"0"},{name:"Pixel Format index",value:4},{name:"Pixel Format",value:"RGBA 8bit ubyte"},{name:"R",value:0},{name:"G",value:0},{name:"B",value:0},{name:"A",value:0}],portsOut:[{name:"Next",links:[{portIn:"Render",portOut:"Next",objIn:"m6kwtuieo",objOut:"bom62ei05"}]},{name:"texture_out",links:[{portIn:"Texture",portOut:"texture_out",objIn:"eupi4n3t8",objOut:"bom62ei05"}]},{name:"Aspect Ratio",value:1.9761904761904763},{name:"Texture Width",value:1660},{name:"Texture Height",value:840}],objName:"Ops.Gl.ImageCompose.ImageCompose_v4"},{id:"m6kwtuieo",uiAttribs:{},portsIn:[{name:"Blend Mode index",value:0},{name:"Blend Mode",value:"normal"},{name:"Alpha Mask index",value:0},{name:"Alpha Mask",value:"Off"},{name:"Amount",value:1},{name:"Strength",value:1},{name:"Radius",value:.3},{name:"Sharp",value:.25},{name:"Aspect",value:1},{name:"r",value:0},{name:"g",value:0},{name:"b",value:0},{name:"Alpha",value:0}],objName:"Ops.Gl.ImageCompose.Vignette_v3"},{id:"kgtq6kbqp",uiAttribs:{},portsIn:[{name:"Font",value:"chivo"},{name:"Scale",value:.11},{name:"Letter Spacing",value:-.02},{name:"Line Height",value:1},{name:"Align index",value:0},{name:"Align",value:"Left"},{name:"Vertical Align index",value:2},{name:"Vertical Align",value:"Middle"},{name:"r",value:0},{name:"g",value:0},{name:"b",value:0},{name:"a",value:.91},{name:"SDF",value:1},{name:"Smoothing",value:.126},{name:"Border",value:1},{name:"Border Width",value:.222},{name:"Smoothness",value:.25},{name:"Border r",value:0},{name:"Border g",value:0},{name:"Border b",value:1},{name:"Shadow",value:0},{name:"Positions",value:0},{name:"Scalings",value:0},{name:"Rotations",value:0},{name:"Colors",value:0}],portsOut:[{name:"Num Lines",value:1},{name:"Width",value:.23304531249999996},{name:"Height",value:.06678697916666666},{name:"Start Y",value:.03477526041666667},{name:"Num Chars",value:9}],objName:"Ops.Gl.TextMeshMSDF_v2"},{id:"1rc15x0gs",uiAttribs:{},portsIn:[{name:"Variable",value:"_currentDialValueInsideRepeat2D"}],objName:"Ops.Vars.VarSetNumber_v2"},{id:"o8zk12f1r",uiAttribs:{},portsIn:[{name:"Variable",value:"_currentDialValueInsideRepeat2D"}],portsOut:[{name:"Value",links:[{portIn:"number",portOut:"Value",objIn:"2lpsqzgrb",objOut:"o8zk12f1r"}]}],objName:"Ops.Vars.VarGetNumber_v2"},{id:"2lpsqzgrb",uiAttribs:{},portsIn:[{name:"Decimal Places",value:4}],portsOut:[{name:"result",links:[{portIn:"Number",portOut:"result",objIn:"vib72zx3n",objOut:"2lpsqzgrb"}]}],objName:"Ops.Math.Round"},{id:"vib72zx3n",uiAttribs:{},portsOut:[{name:"Result",links:[{portIn:"String B",portOut:"Result",objIn:"hhpgrbf2g",objOut:"vib72zx3n"}]}],objName:"Ops.String.NumberToString_v2"},{id:"i111f5qjb",uiAttribs:{},portsIn:[{name:"x",value:0},{name:"y",value:0},{name:"z",value:0}],portsOut:[{name:"trigger",links:[{portIn:"render",portOut:"trigger",objIn:"uc9r4wu0r",objOut:"i111f5qjb"}]}],objName:"Ops.Gl.Matrix.Translate"},{id:"zlpf1p0f5",uiAttribs:{},portsIn:[{name:"posY",value:.09},{name:"posZ",value:.24},{name:"scale",value:1},{name:"rotX",value:0},{name:"rotY",value:0},{name:"rotZ",value:0}],portsOut:[{name:"trigger",links:[{portIn:"Render",portOut:"trigger",objIn:"kgtq6kbqp",objOut:"zlpf1p0f5"}]}],objName:"Ops.Gl.Matrix.TransformView"},{id:"prvtvnqot",uiAttribs:{},portsIn:[{name:"Font Name",value:"chivo"},{name:"Font Data",value:"assets/ChivoMono-Medium-msdf.json",display:"file"},{name:"Font Image",value:"assets/ChivoMono-Medium.png",display:"file"},{name:"Font Image 1",value:0,display:"file"},{name:"Font Image 2",value:0,display:"file"},{name:"Font Image 3",value:0,display:"file"}],portsOut:[{name:"Loaded",value:true},{name:"Total Chars",value:66},{name:"Chars",value:"jQgbdf03689CGOShikl12457ABDEFHIJKLMNPRTUVWXYZpqtyw+acemnorsuvxz*-."}],objName:"Ops.Gl.FontMSDF_v2"},{id:"f67se0kft",uiAttribs:{},portsIn:[{name:"Title",value:"Text"}],objName:"Ops.Ui.Area"},{id:"6hojoyomj",uiAttribs:{},portsIn:[{name:"Limit",value:1},{name:"Length",value:10},{name:"Mode index",value:1},{name:"Mode",value:"Stop at Max"},{name:"Default",value:0}],portsOut:[{name:"Value",links:[{portIn:"val",portOut:"Value",objIn:"1b7ls5v00",objOut:"6hojoyomj"}]}],objName:"Ops.Math.Incrementor"},{id:"m4wpz0q5c",uiAttribs:{},portsIn:[{name:"number2",value:.06}],portsOut:[{name:"result",links:[{portIn:"mul",portOut:"result",objIn:"124910bf-e88f-4da5-847e-888a7ac73020",objOut:"m4wpz0q5c"}]}],objName:"Ops.Math.Multiply"},{id:"1b7ls5v00",uiAttribs:{},portsIn:[{name:"min",value:0},{name:"max",value:9}],portsOut:[{name:"result",links:[{portIn:"number1",portOut:"result",objIn:"m4wpz0q5c",objOut:"1b7ls5v00"}]}],objName:"Ops.Math.SmootherStep"},{id:"hhpgrbf2g",uiAttribs:{},portsIn:[{name:"Format",value:"*$a $b"},{name:"String C",value:2},{name:"String D",value:3},{name:"String E",value:""},{name:"String F",value:""}],portsOut:[{name:"Result",links:[{portIn:"Text",portOut:"Result",objIn:"kgtq6kbqp",objOut:"hhpgrbf2g"}]}],objName:"Ops.String.StringCompose_v3"},{id:"euqza6b25",uiAttribs:{},portsIn:[{name:"Variable",value:"_currentIndexInsideRepeat2D"}],objName:"Ops.Vars.VarSetNumber_v2"},{id:"34zd4vl4f",uiAttribs:{},portsIn:[{name:"Variable",value:"_currentIndexInsideRepeat2D"}],portsOut:[{name:"Value",links:[{portIn:"index",portOut:"Value",objIn:"aqjh1act1",objOut:"34zd4vl4f"},{portIn:"number2",portOut:"Value",objIn:"qyara3wac",objOut:"34zd4vl4f"}]}],objName:"Ops.Vars.VarGetNumber_v2"},{id:"8eccns7e5",uiAttribs:{},portsIn:[{name:"radius",value:.97},{name:"innerRadius",value:.949},{name:"segments",value:32},{name:"steps",value:1},{name:"invertSteps",value:0},{name:"mapping index",value:1},{name:"mapping",value:"round"},{name:"Spline",value:0},{name:"Draw",value:1,title:"Render mesh"}],portsOut:[{name:"trigger",links:[{portIn:"render",portOut:"trigger",objIn:"b6dd9bba-0e82-4220-a27d-884c1d3887a3",objOut:"8eccns7e5"}]}],objName:"Ops.Gl.Meshes.Circle_v3"},{id:"gfjoyon3n",uiAttribs:{},portsIn:[{name:"radius",value:.86},{name:"innerRadius",value:.895},{name:"segments",value:100},{name:"steps",value:2},{name:"invertSteps",value:1},{name:"mapping index",value:0},{name:"mapping",value:"flat"},{name:"Spline",value:0},{name:"Draw",value:1,title:"Render mesh"}],objName:"Ops.Gl.Meshes.Circle_v3"},{id:"mtxdae1jj",uiAttribs:{},portsIn:[{name:"Variable",value:"_currentIndexInsideRepeat2D"}],portsOut:[{name:"Value",links:[{portIn:"index",portOut:"Value",objIn:"fxd9qy0nv",objOut:"mtxdae1jj"}]}],objName:"Ops.Vars.VarGetNumber_v2"},{id:"ejryfn62d",uiAttribs:{},portsIn:[{name:"Title",value:"*"}],objName:"Ops.Ui.Area"},{id:"yvvnsby8j",uiAttribs:{},portsIn:[{name:"text",value:"decay, size, mod, mix"},{name:"separator",value:","},{name:"Numbers",value:0},{name:"Trim",value:1},{name:"Split Lines",value:0}],portsOut:[{name:"array",links:[{portIn:"array",portOut:"array",objIn:"fxd9qy0nv",objOut:"yvvnsby8j"}]},{name:"length",value:4}],objName:"Ops.Array.StringToArray_v2"},{id:"fxd9qy0nv",uiAttribs:{},portsOut:[{name:"result",links:[{portIn:"String A",portOut:"result",objIn:"hhpgrbf2g",objOut:"fxd9qy0nv"}]}],objName:"Ops.Array.ArrayGetString"},{id:"xqowbomkj",uiAttribs:{},portsIn:[{name:"Title",value:"*"}],objName:"Ops.Ui.Area"},{id:"rdmibd961",uiAttribs:{},portsIn:[{name:"Start Row",value:0}],objName:"Ops.Ui.VizArrayTable"},{id:"okiq8ed9q",uiAttribs:{},portsIn:[{name:"Named Trigger",value:"mainExe"}],portsOut:[{name:"Triggered",links:[{portIn:"render",portOut:"Triggered",objIn:"eupi4n3t8",objOut:"okiq8ed9q"}]}],objName:"Ops.Trigger.TriggerReceive"},{id:"ch5u1xz0l",uiAttribs:{},portsIn:[{name:"Named Trigger",value:"midExe"}],objName:"Ops.Trigger.TriggerSend"},{id:"faiior48h",uiAttribs:{},portsIn:[{name:"Named Trigger",value:"midExe"}],portsOut:[{name:"Triggered",links:[{portIn:"render",portOut:"Triggered",objIn:"fvg1zz75v",objOut:"faiior48h"},{portIn:"Render",portOut:"Triggered",objIn:"48vrkn65x",objOut:"faiior48h"},{portIn:"render",portOut:"Triggered",objIn:"33hdtkr51",objOut:"faiior48h"}]}],objName:"Ops.Trigger.TriggerReceive"},{id:"smns78b6k",uiAttribs:{},portsIn:[{name:"Title",value:"*"}],objName:"Ops.Ui.Area"},{id:"c9u5wxkzu",uiAttribs:{},portsIn:[{name:"Value",value:0}],portsOut:[{name:"Next",links:[{portIn:"render",portOut:"Next",objIn:"33hdtkr51",objOut:"c9u5wxkzu"}]},{name:"Number",value:0}],objName:"Ops.Number.TriggerOnChangeNumber"},{id:"piq1e64rw",uiAttribs:{},portsIn:[{name:"Title",value:"*"}],objName:"Ops.Ui.Area"},{id:"t83msa078",uiAttribs:{},portsIn:[{name:"Title",value:"*"}],objName:"Ops.Ui.Area"},{id:"ifc049dka",uiAttribs:{},portsIn:[{name:"Id",value:""},{name:"Class",value:"nel-logo"},{name:"Style",value:""},{name:"Interactive",value:1},{name:"Visible",value:1},{name:"Convert Line Breaks",value:0},{name:"Propagate Click-Events",value:1}],portsOut:[{name:"DOM Element",links:[{portIn:"DOMElement",portOut:"DOM Element",objIn:"m4lf0ljbk",objOut:"ifc049dka"},{portIn:"Element",portOut:"DOM Element",objIn:"ql6igmez3",objOut:"ifc049dka"}]},{name:"Hover",links:[{portIn:"Use Value 1",portOut:"Hover",objIn:"acmkbycvu",objOut:"ifc049dka"}]},{name:"Clicked",links:[{portIn:"Open",portOut:"Clicked",objIn:"g5qz1ee85",objOut:"ifc049dka"}]}],objName:"Ops.Html.DivElement_v3"},{id:"p1qw1y67z",uiAttribs:{},portsIn:[{name:"value",value:'<?xml version="1.0" encoding="utf-8"?>\n\x3c!-- Generator: Adobe Illustrator 24.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --\x3e\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\n width="300px" viewBox="0 0 400 120" xml:space="preserve">\n <style type="text/css">\n .st0 {\n fill: #F79355;\n }\n\n .st1 {\n fill: #33C21C;\n }\n\n .st2 {\n fill: #00000000\n }\n </style>\n <symbol id="a59f87b6-0439-40fb-bcac-5aff05fde512" viewBox="-76.33 -6.58 152.66 13.16">\n <g>\n <g>\n <rect x="-76.32" y="-6.58" class="st0" width="6.53" height="1.89" />\n <rect x="-76.33" y="-2.8" class="st0" width="2.95" height="1.85" />\n <rect x="-70.44" y="-2.8" class="st0" width="2.92" height="1.85" />\n <rect x="-68.18" y="-6.58" class="st0" width="6.53" height="1.89" />\n <rect x="-76.32" y="4.69" class="st0" width="6.53" height="1.89" />\n <rect x="-68.18" y="4.69" class="st0" width="6.53" height="1.89" />\n <rect x="-64.6" y="-2.8" class="st0" width="2.95" height="1.85" />\n <rect x="-76.33" y="0.95" class="st0" width="2.95" height="1.85" />\n <rect x="-70.44" y="0.95" class="st0" width="2.92" height="1.85" />\n <rect x="-64.6" y="0.95" class="st0" width="2.95" height="1.85" />\n </g>\n <path class="st1" d="M-54.33-3.09l1.16,3v-3h1.18V3h-1.15l-1.19-3.05V3h-1.16v-6.09H-54.33z" />\n <path class="st1" d="M-42.82-3.09v1.22h-2.35v1.23h2.35v1.19h-2.35v1.23h2.35V3h-3.51v-6.09H-42.82z" />\n <path class="st1" d="M-36.04-3.09l0.58,3l0.58-3h1.19L-34.88,3h-1.16l-1.19-6.09H-36.04z" />\n <path class="st1" d="M-24.56-3.09v1.22h-2.35v1.23h2.35v1.19h-2.35v1.23h2.35V3h-3.53v-6.09H-24.56z" />\n <path class="st1"\n d="M-16.62-3.09c0.32,0.01,0.62,0.14,0.84,0.37c0.23,0.22,0.36,0.53,0.35,0.85v1.23c0,0.24-0.07,0.47-0.19,0.67\n\t\t\tc-0.13,0.2-0.31,0.35-0.53,0.44L-15.43,3h-1.19l-0.71-2.45h-0.47V3h-1.16v-6.09H-16.62z M-17.78-0.64h1.16v-1.23h-1.16V-0.64z" />\n <path class="st1" d="M-6.33-3.09v1.22h-2.32v1.23h2.32v1.19h-2.32v1.23h2.32V3h-3.5v-6.09H-6.33z" />\n <path class="st1" d="M0.49-3.09l1.15,3v-3h1.19V3H1.67L0.52,0v3H-0.7v-6.09H0.49z" />\n <path class="st1" d="M11.96-3.09v1.22H9.67v3.65h1.16v-2.42h1.18v2.42c0.01,0.32-0.11,0.63-0.34,0.85\n\t\t\tC11.45,2.86,11.15,2.99,10.83,3H9.67C9.35,2.99,9.05,2.85,8.82,2.63C8.59,2.41,8.47,2.1,8.48,1.78v-3.65\n\t\t\tC8.47-2.19,8.59-2.5,8.82-2.72c0.23-0.22,0.53-0.36,0.85-0.37H11.96z" />\n <path class="st1" d="M20.51-3.09v1.22h-0.6v3.65h0.6V3h-2.37V1.78h0.61v-3.65h-0.61v-1.22H20.51z" />\n <path class="st1" d="M28.33-3.09l1.15,3v-3h1.19V3h-1.19l-1.15-3v3h-1.19v-6.09H28.33z" />\n <path class="st1" d="M39.8-3.09v1.22h-2.34v1.23h2.34v1.19h-2.34v1.23h2.34V3h-3.53v-6.09H39.8z" />\n <path class="st1" d="M46.59-3.09v4.87h2.34V3H45.4v-6.09H46.59z" />\n <path class="st1" d="M56.88-3.09c0.32,0.01,0.62,0.14,0.84,0.37c0.23,0.22,0.36,0.53,0.35,0.85V3h-1.19V0.55h-1.16V3h-1.19v-4.87\n\t\t\tc-0.01-0.32,0.12-0.63,0.35-0.85c0.22-0.23,0.52-0.36,0.84-0.37L56.88-3.09z M55.72-0.64h1.16v-1.23h-1.16V-0.64z" />\n <path class="st1" d="M66.93-0.32c-0.16,0.17-0.38,0.27-0.62,0.27c0.24,0,0.46,0.1,0.62,0.28c0.17,0.17,0.27,0.4,0.27,0.64v0.91\n\t\t\tc0.01,0.32-0.12,0.63-0.35,0.85C66.63,2.86,66.33,2.99,66.01,3h-2.34v-6.09h2.35c0.32,0.01,0.62,0.14,0.84,0.37\n\t\t\tc0.23,0.22,0.36,0.53,0.35,0.85v0.91C67.21-0.72,67.11-0.48,66.93-0.32z M66.01-1.87h-1.16v1.23h1.16V-1.87z M66.01,0.55h-1.16\n\t\t\tv1.23h1.16V0.55z" />\n <path class="st1" d="M76.33-3.09v1.22h-2.35v1.23h1.16c0.31-0.01,0.62,0.12,0.84,0.34c0.23,0.22,0.36,0.53,0.35,0.85v1.23\n\t\t\tc0.01,0.32-0.12,0.63-0.35,0.85C75.76,2.86,75.46,2.99,75.14,3H72.8V1.78h2.34V0.55h-1.16c-0.64,0.01-1.17-0.5-1.18-1.14\n\t\t\tc0-0.02,0-0.03,0-0.05v-1.23c-0.01-0.32,0.11-0.63,0.34-0.85c0.22-0.23,0.52-0.36,0.84-0.37L76.33-3.09z" />\n </g>\n </symbol>\n <g id="Layer_2">\n <rect x="1.46" y="1.46" class="st2" width="400" height="114.29" />\n </g>\n <g id="ab50a4d6-51e3-4638-b29d-7ff1e5b6a9df">\n <g>\n <defs>\n <rect id="SVGID_1_" x="21.91" y="46.04" width="367.73" height="31.38" />\n </defs>\n <clipPath id="SVGID_2_">\n <use xlink:href="#SVGID_1_" style="overflow:visible;" />\n </clipPath>\n <g style="clip-path:url(#SVGID_2_);">\n\n <use xlink:href="#a59f87b6-0439-40fb-bcac-5aff05fde512" width="152.66" height="13.16" x="-76.33"\n y="-6.58" transform="matrix(2.4088 0 0 2.3848 205.7744 61.728)" style="overflow:visible;" />\n </g>\n </g>\n </g>\n</svg>'},{name:"Syntax index",value:3},{name:"Syntax",value:"html"}],portsOut:[{name:"Result",links:[{portIn:"Text",portOut:"Result",objIn:"ifc049dka",objOut:"p1qw1y67z"}]}],objName:"Ops.String.StringEditor"},{id:"ehh39rz6v",uiAttribs:{},portsIn:[{name:"css code",value:".nel-logo {\n \nposition:absolute;\nz-index:100;\nleft: 100px;\nopacity: 0.9;\n}"},{name:"Active",value:1}],objName:"Ops.Html.CSS_v2"},{id:"p160hjd8r",uiAttribs:{},portsIn:[{name:"posX",value:-1.53},{name:"posY",value:-1.09},{name:"posZ",value:-1.65},{name:"scale",value:1},{name:"rotX",value:8.63},{name:"rotY",value:69.58},{name:"rotZ",value:0}],portsOut:[{name:"trigger",links:[{portIn:"trigger",portOut:"trigger",objIn:"m4lf0ljbk",objOut:"p160hjd8r"}]}],objName:"Ops.Gl.Matrix.Transform"},{id:"m4lf0ljbk",uiAttribs:{},portsIn:[{name:"origin index",value:7},{name:"origin",value:"bottom-middle"}],objName:"Ops.Html.TransformCSS3DElement"},{id:"4pu8mr0y2",uiAttribs:{},portsIn:[{name:"Named Trigger",value:"preSequenceFlow"}],objName:"Ops.Trigger.TriggerSend"},{id:"jfun4qac1",uiAttribs:{},portsIn:[{name:"Pixel Unit index",value:0},{name:"Pixel Unit",value:"Display"}],portsOut:[{name:"width",value:1532},{name:"height",value:834},{name:"Pixel Ratio",value:2},{name:"Pixel Width",links:[{portIn:"number1",portOut:"Pixel Width",objIn:"cd0k5qsyf",objOut:"jfun4qac1"}]},{name:"Pixel Height",value:1668},{name:"Aspect Ratio",value:1.8369304556354915},{name:"Landscape",value:1}],objName:"Ops.Gl.CanvasInfo_v2"},{id:"cd0k5qsyf",uiAttribs:{},portsIn:[{name:"number2",value:800}],portsOut:[{name:"result",value:3.83}],objName:"Ops.Math.Divide"},{id:"of6q9dm1m",uiAttribs:{},portsIn:[{name:"Named Trigger",value:"mainExe"}],portsOut:[{name:"Triggered",links:[{portIn:"render",portOut:"Triggered",objIn:"ajz3m2b7r",objOut:"of6q9dm1m"}]}],objName:"Ops.Trigger.TriggerReceive"},{id:"rid9x7kap",uiAttribs:{},portsIn:[{name:"Named Trigger",value:"preSequenceFlow"}],portsOut:[{name:"Triggered",links:[{portIn:"render",portOut:"Triggered",objIn:"p160hjd8r",objOut:"rid9x7kap"}]}],objName:"Ops.Trigger.TriggerReceive"},{id:"efooconni",uiAttribs:{},portsIn:[{name:"Title",value:"HTML"}],objName:"Ops.Ui.Area"},{id:"ql6igmez3",uiAttribs:{},portsIn:[{name:"Property",value:"opacity"},{name:"Value Suffix",value:""}],objName:"Ops.Html.CSSProperty_v2"},{id:"acmkbycvu",uiAttribs:{},portsIn:[{name:"Value 0",value:.7},{name:"Value 1",value:1}],portsOut:[{name:"Out Value",links:[{portIn:"Value",portOut:"Out Value",objIn:"ql6igmez3",objOut:"acmkbycvu"}]}],objName:"Ops.Boolean.BoolToNumber_v2"},{id:"g5qz1ee85",uiAttribs:{},portsIn:[{name:"URL",value:"https://neverenginelabs.com"},{name:"Target Name",value:"_blank"},{name:"Specs",value:""}],objName:"Ops.Html.HyperLink_v2"},{id:"zcc6zzw4d",uiAttribs:{},portsIn:[{name:"Named Trigger",value:"exeNoCamera"}],objName:"Ops.Trigger.TriggerSend"},{id:"catyviogw",uiAttribs:{},portsIn:[{name:"x",value:1.73},{name:"y",value:.95},{name:"z",value:0}],portsOut:[{name:"trigger",links:[{portIn:"Trigger",portOut:"trigger",objIn:"ny2jicns4",objOut:"catyviogw"}]}],objName:"Ops.Gl.Matrix.Translate"},{id:"jmw19jjzi",uiAttribs:{},portsIn:[{name:"r",value:.222},{name:"g",value:.898},{name:"b",value:1},{name:"Vertex Colors",value:0},{name:"Alpha Mask Source index",value:0},{name:"Alpha Mask Source",value:"Luminance"},{name:"Opacity TexCoords Transform",value:0},{name:"Discard Transparent Pixels",value:0},{name:"diffuseRepeatX",value:-.36},{name:"diffuseRepeatY",value:-.18},{name:"Tex Offset X",value:-24.27},{name:"Tex Offset Y",value:7.78},{name:"Crop TexCoords",value:0},{name:"billboard",value:0}],portsOut:[{name:"trigger",links:[{portIn:"render",portOut:"trigger",objIn:"catyviogw",objOut:"jmw19jjzi"},{portIn:"Update",portOut:"trigger",objIn:"gf07781ar",objOut:"jmw19jjzi"}]}],objName:"Ops.Gl.Shader.BasicMaterial_v3"},{id:"avhqfpehd",uiAttribs:{},portsIn:[{name:"Named Trigger",value:"exeNoCamera"}],portsOut:[{name:"Triggered",links:[{portIn:"Trigger",portOut:"Triggered",objIn:"12xx7g980",objOut:"avhqfpehd"}]}],objName:"Ops.Trigger.TriggerReceive"},{id:"0cristvpm",uiAttribs:{},portsIn:[{name:"Font File",value:"assets/forkawesome-webfont.ttf",display:"file"}],portsOut:[{name:"Opentype Font",links:[{portIn:"Opentype Font",portOut:"Opentype Font",objIn:"btqy1laa6",objOut:"0cristvpm"}]}],objName:"Ops.Extension.OpenType.OpentypeFont"},{id:"btqy1laa6",uiAttribs:{},portsIn:[{name:"Text",value:""},{name:"Letter Spacing",value:0}],portsOut:[{name:"Path String",links:[{portIn:"SVG Path",portOut:"Path String",objIn:"m3rdjk1xk",objOut:"btqy1laa6"}]}],objName:"Ops.Extension.OpenType.OpentypeToSvgPath"},{id:"m3rdjk1xk",uiAttribs:{},portsIn:[{name:"Bezier Stepsize",value:3},{name:"Rescale",value:.07}],portsOut:[{name:"Geometry",links:[{portIn:"Geometry",portOut:"Geometry",objIn:"s71v490xs",objOut:"m3rdjk1xk"}]}],objName:"Ops.Graphics.Geometry.SvgPathToGeometry_v2"},{id:"9vf5ijecy",uiAttribs:{},portsIn:[{name:"Render Mesh",value:1},{name:"Add Vertex Numbers",value:0}],objName:"Ops.Gl.RenderGeometry_v2"},{id:"12xx7g980",uiAttribs:{},portsIn:[{name:"Check Body Collisions",value:0}],portsOut:[{name:"Next",links:[{portIn:"Trigger",portOut:"Next",objIn:"zmasrvvjw",objOut:"12xx7g980"}]},{name:"Total Bodies",value:1}],objName:"Ops.Graphics.Intersection.IntersectWorld"},{id:"ny2jicns4",uiAttribs:{},portsIn:[{name:"Shape index",value:1},{name:"Shape",value:"BoxAA"},{name:"Name",value:"icon.save"},{name:"Radius",value:.09},{name:"Size X",value:.24},{name:"Size Y",value:.23},{name:"Size Z",value:.19},{name:"Positions"},{name:"Append Index to name",value:0}],portsOut:[{name:"Next",links:[{portIn:"render",portOut:"Next",objIn:"lp0zvoc9g",objOut:"ny2jicns4"}]}],objName:"Ops.Graphics.Intersection.IntersectBody"},{id:"zmasrvvjw",uiAttribs:{},portsIn:[{name:"Coordinate Format index",value:0},{name:"Coordinate Format",value:"-1 to 1"},{name:"Z",value:0},{name:"To X",value:0},{name:"To Y",value:0},{name:"To Z",value:0},{name:"Active",value:1},{name:"Change Cursor",value:1}],portsOut:[{name:"Next",links:[{portIn:"render",portOut:"Next",objIn:"jmw19jjzi",objOut:"zmasrvvjw"}]},{name:"Has Hit",value:0},{name:"Hit Body Name",value:""},{name:"Hit X",links:[{portIn:"colorizeTexture",portOut:"Hit X",objIn:"jmw19jjzi",objOut:"zmasrvvjw"}]},{name:"Hit Y",links:[{portIn:"number1",portOut:"Hit Y",objIn:"w59tgvg1u",objOut:"zmasrvvjw"}]},{name:"Hit Z",links:[{portIn:"A",portOut:"Hit Z",objIn:"yn916v8en",objOut:"zmasrvvjw"}]}],objName:"Ops.Graphics.Intersection.IntersectTestRaycast"},{id:"mts5kprh0",uiAttribs:{},portsIn:[{name:"Coordinates index",value:0},{name:"Coordinates",value:"-1 to 1"},{name:"Area index",value:0},{name:"Area",value:"Canvas"},{name:"flip y",value:1},{name:"right click prevent default",value:1},{name:"Touch support",value:1},{name:"Passive Events",value:0},{name:"Active",value:1}],portsOut:[{name:"x",links:[{portIn:"X",portOut:"x",objIn:"zmasrvvjw",objOut:"mts5kprh0"}]},{name:"y",links:[{portIn:"Y",portOut:"y",objIn:"zmasrvvjw",objOut:"mts5kprh0"}]},{name:"Button is down",value:0},{name:"Mouse is hovering",value:1},{name:"Movement X",value:0},{name:"Movement Y",value:-.5}],objName:"Ops.Devices.Mouse.Mouse_v3"},{id:"s71v490xs",uiAttribs:{},portsIn:[{name:"Smooth",value:1},{name:"Walls",value:0},{name:"Top",value:1},{name:"Bottom",value:0}],portsOut:[{name:"Result Geometry",links:[{portIn:"Geometry",portOut:"Result Geometry",objIn:"9vf5ijecy",objOut:"s71v490xs"}]}],objName:"Ops.Graphics.Geometry.GeometryExtrude"},{id:"w59tgvg1u",uiAttribs:{},portsIn:[{name:"number2",value:.05}],portsOut:[{name:"result",links:[{portIn:"Value",portOut:"result",objIn:"gf07781ar",objOut:"w59tgvg1u"}]}],objName:"Ops.Math.Multiply"},{id:"lp0zvoc9g",uiAttribs:{},portsIn:[{name:"x",value:-.05},{name:"y",value:-.05},{name:"z",value:0}],portsOut:[{name:"trigger",links:[{portIn:"render",portOut:"trigger",objIn:"9vf5ijecy",objOut:"lp0zvoc9g"}]}],objName:"Ops.Gl.Matrix.Translate"},{id:"lk6h207g7",uiAttribs:{},portsIn:[{name:"File",value:"assets/lib_matcaps_Chrome_Blue_Tint-White.png",display:"file"},{name:"Filter index",value:1},{name:"Filter",value:"linear"},{name:"Wrap index",value:0},{name:"Wrap",value:"repeat"},{name:"Anisotropic index",value:0},{name:"Anisotropic",value:"0"},{name:"Data Format index",value:3},{name:"Data Format",value:"RGBA"},{name:"Flip",value:1},{name:"Pre Multiplied Alpha",value:1},{name:"Active",value:1},{name:"Save Memory",value:1},{name:"Add Cachebuster",value:1}],portsOut:[{name:"Texture",links:[{portIn:"texture",portOut:"Texture",objIn:"jmw19jjzi",objOut:"lk6h207g7"}]},{name:"Width",value:256},{name:"Height",value:256},{name:"Aspect Ratio",value:1},{name:"Loaded",value:1},{name:"Loading",value:0}],objName:"Ops.Gl.Texture_v2"},{id:"gf07781ar",uiAttribs:{},portsIn:[{name:"Separate inc/dec",value:0},{name:"Inc factor",value:4,title:"Inc/Dec factor"},{name:"Dec factor",value:4}],portsOut:[{name:"Result",links:[{portIn:"Height",portOut:"Result",objIn:"s71v490xs",objOut:"gf07781ar"}]}],objName:"Ops.Anim.Smooth"},{id:"g464u24ms",uiAttribs:{},portsIn:[{name:"Title",value:"Icons"}],objName:"Ops.Ui.Area"},{id:"yn916v8en",uiAttribs:{},portsIn:[{name:"B",value:5},{name:"C",value:.5},{name:"D",value:3},{name:"Expression",value:"(a*b) + c"}],portsOut:[{name:"Result",links:[{portIn:"a",portOut:"Result",objIn:"jmw19jjzi",objOut:"yn916v8en"}]},{name:"Expression Valid",value:true}],objName:"Ops.Math.MathExpression"},{id:"zi3u8x4zd",uiAttribs:{subPatch:"66dae55a-8297-4120-81e2-d946cc6b2b60"},portsIn:[{name:"Variable",value:"ui_activeDial_ID"}],portsOut:[{name:"Value",links:[{portIn:"number1",portOut:"Value",objIn:"zhjkbd61e",objOut:"zi3u8x4zd"}]}],objName:"Ops.Vars.VarGetNumber_v2"},{id:"0txm5qrgs",uiAttribs:{subPatch:"66dae55a-8297-4120-81e2-d946cc6b2b60"},portsIn:[{name:"Variable",value:"ui_dialValues"}],portsOut:[{name:"Value",links:[{portIn:"array",portOut:"Value",objIn:"ccotjup9t",objOut:"0txm5qrgs"}]}],objName:"Ops.Vars.VarGetArray_v2"},{id:"ccotjup9t",uiAttribs:{subPatch:"66dae55a-8297-4120-81e2-d946cc6b2b60"},portsIn:[{name:"Value Invalid Index",value:0}],portsOut:[{name:"value",links:[{portIn:"Default Value",portOut:"value",objIn:"dq71li66q",objOut:"ccotjup9t"}]},{name:"Valid Index",value:1}],objName:"Ops.Array.ArrayGetNumber"},{id:"zhjkbd61e",uiAttribs:{subPatch:"66dae55a-8297-4120-81e2-d946cc6b2b60"},portsIn:[{name:"number2",value:1}],portsOut:[{name:"result",links:[{portIn:"index",portOut:"result",objIn:"ccotjup9t",objOut:"zhjkbd61e"}]}],objName:"Ops.Math.Subtract"},{id:"d7vl5bf8b",uiAttribs:{},portsIn:[{name:"When False index",value:0},{name:"When False",value:"keep last array"}],portsOut:[{name:"Array Out",links:[{portIn:"Value",portOut:"Array Out",objIn:"x6efudpvd",objOut:"d7vl5bf8b"}]}],objName:"Ops.Array.GateArray_v2"},{id:"rjsjd3otn",uiAttribs:{},portsOut:[{name:"Result",links:[{portIn:"Array",portOut:"Result",objIn:"rdmibd961",objOut:"rjsjd3otn"},{portIn:"Array in",portOut:"Result",objIn:"d7vl5bf8b",objOut:"rjsjd3otn"}]}],objName:"Ops.Patch.PuvBp73.ArraySetNumberAtIndex_v4"}],export:{time:"2024-06-29 16:32:47",service:"download",exportNumber:8}};if(!CABLES.exportedPatch){CABLES.exportedPatch=CABLES.exportedPatches["uvBp73"]}"use strict";var CABLES=CABLES||{};CABLES.OPS=CABLES.OPS||{};var Ops=Ops||{};Ops.Gl=Ops.Gl||{};Ops.Ui=Ops.Ui||{};Ops.Anim=Ops.Anim||{};Ops.Html=Ops.Html||{};Ops.Math=Ops.Math||{};Ops.Vars=Ops.Vars||{};Ops.Array=Ops.Array||{};Ops.Patch=Ops.Patch||{};Ops.Number=Ops.Number||{};Ops.String=Ops.String||{};Ops.Boolean=Ops.Boolean||{};Ops.Devices=Ops.Devices||{};Ops.Trigger=Ops.Trigger||{};Ops.Graphics=Ops.Graphics||{};Ops.Extension=Ops.Extension||{};Ops.Gl.Matrix=Ops.Gl.Matrix||{};Ops.Gl.Meshes=Ops.Gl.Meshes||{};Ops.Gl.Shader=Ops.Gl.Shader||{};Ops.Deprecated=Ops.Deprecated||{};Ops.Gl.Textures=Ops.Gl.Textures||{};Ops.Math.Compare=Ops.Math.Compare||{};Ops.Deprecated.Gl=Ops.Deprecated.Gl||{};Ops.Devices.Mouse=Ops.Devices.Mouse||{};Ops.Patch.PuvBp73=Ops.Patch.PuvBp73||{};Ops.Devices.Browser=Ops.Devices.Browser||{};Ops.Gl.ImageCompose=Ops.Gl.ImageCompose||{};Ops.Graphics.Geometry=Ops.Graphics.Geometry||{};Ops.Extension.OpenType=Ops.Extension.OpenType||{};Ops.Deprecated.Gl.Matrix=Ops.Deprecated.Gl.Matrix||{};Ops.Graphics.Intersection=Ops.Graphics.Intersection||{};Ops.Patch.PuvBp73.SubPatch2=function(){CABLES.Op.apply(this,arguments);const e=this;const n=e.attachments={inc_gen_ports_js:"op.initInnerPorts=function(addedOps)\n{\n for(let i=0;i<addedOps.length;i++)\n {\n if(addedOps[i].innerInput)\n {\n }\nif(addedOps[i].innerOutput)\n{\n}\n}\n};\n",subpatch_json:'{"ops":[{"id":"bp0-0","uiAttribs":{"subPatch":"6d80loy1x"},"portsOut":[{"name":"Number","links":[{"portIn":"number1","portOut":"Number","objIn":"bp0-3","objOut":"bp0-0"},{"portIn":"Value In","portOut":"Number","objIn":"bp0-5","objOut":"bp0-0"}]}],"storage":{"ref":"bp0-0"},"objName":"Ops.String.ParseInt_v2"},{"id":"bp0-1","uiAttribs":{"subPatch":"6d80loy1x"},"portsIn":[{"name":"Variable","value":"ui_hitBodyName"}],"portsOut":[{"name":"Value","links":[{"portIn":"String","portOut":"Value","objIn":"bp0-2","objOut":"bp0-1"}]}],"storage":{"ref":"bp0-1"},"objName":"Ops.Vars.VarGetString"},{"id":"bp0-2","uiAttribs":{"subPatch":"6d80loy1x"},"portsIn":[{"name":"Search For","value":"dial."},{"name":"Replace","value":""},{"name":"Replace What index","value":0},{"name":"Replace What","value":"All"}],"portsOut":[{"name":"Result","links":[{"portIn":"String","portOut":"Result","objIn":"bp0-0","objOut":"bp0-2"}]}],"storage":{"ref":"bp0-2"},"objName":"Ops.String.StringReplace"},{"id":"bp0-3","uiAttribs":{"subPatch":"6d80loy1x"},"portsIn":[{"name":"number2","value":0}],"portsOut":[{"name":"result","links":[{"portIn":"Pass Through","portOut":"result","objIn":"bp0-5","objOut":"bp0-3"}]}],"storage":{"ref":"bp0-3"},"objName":"Ops.Math.Compare.GreaterThan"},{"id":"bp0-4","uiAttribs":{"subPatch":"6d80loy1x"},"portsIn":[{"name":"Variable","value":"ui_activeDial_ID"}],"storage":{"ref":"bp0-4"},"objName":"Ops.Vars.VarSetNumber_v2"},{"id":"bp0-5","uiAttribs":{"subPatch":"6d80loy1x"},"portsOut":[{"name":"Value Out","links":[{"portIn":"Value","portOut":"Value Out","objIn":"bp0-4","objOut":"bp0-5"}]}],"storage":{"ref":"bp0-5"},"objName":"Ops.Number.GateNumber"},{"id":"bp0-6","uiAttribs":{"subPatch":"6d80loy1x"},"storage":{"ref":"bp0-6"},"objName":"Ops.Ui.SubPatchInput"},{"id":"bp0-7","uiAttribs":{"subPatch":"6d80loy1x"},"storage":{"ref":"bp0-7"},"objName":"Ops.Ui.SubPatchOutput"}]}'};e.initInnerPorts=function(t){for(let e=0;e<t.length;e++){if(t[e].innerInput){}if(t[e].innerOutput){}}};const r="bp2sub_"+e.id;new CABLES.SubPatchOp(e,{subId:r});t();function t(){const t=JSON.parse(n.subpatch_json);CABLES.Patch.replaceOpIds(t,{parentSubPatchId:r,prefixHash:r,oldIdAsRef:true,doNotUnlinkLostLinks:true});for(let e=0;e<t.ops.length;e++){t.ops[e].uiAttribs.blueprintSubpatch2=true}e.patch.deSerialize(t,{opsCreated:e.initInnerPorts});if(CABLES.UI)gui.savedState.setSaved("blueprintloaded",r);e.patch.emitEvent("subpatchExpose",r);e.setStorage({blueprintVer:2});e.patch.emitEvent("subpatchExpose",r)}};Ops.Patch.PuvBp73.SubPatch2.prototype=new CABLES.Op;CABLES.OPS["26622971-92ff-4790-a68e-d502135e936f"]={f:Ops.Patch.PuvBp73.SubPatch2,objName:"Ops.Patch.PuvBp73.SubPatch2"};Ops.String.ParseInt_v2=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inString("String",5711),r=e.outNumber("Number");n.onChange=function(){let e=parseInt(n.get());if(e!=e)e=0;r.set(e)}};Ops.String.ParseInt_v2.prototype=new CABLES.Op;CABLES.OPS["6d208424-daf2-4a2b-874f-daac406c1f66"]={f:Ops.String.ParseInt_v2,objName:"Ops.String.ParseInt_v2"};Ops.Vars.VarGetString=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};var n=e.outString("Value");e.varName=e.inValueSelect("Variable",[],"",true);new CABLES.VarGetOpWrapper(e,"string",e.varName,n)};Ops.Vars.VarGetString.prototype=new CABLES.Op;CABLES.OPS["3ad08cfc-bce6-4175-9746-fef2817a3b12"]={f:Ops.Vars.VarGetString,objName:"Ops.Vars.VarGetString"};Ops.String.StringReplace=function(){CABLES.Op.apply(this,arguments);const t=this;const e=t.attachments={};const n=t.inString("String"),r=t.inString("Search For","foo"),i=t.inString("Replace","bar"),a=t.inSwitch("Replace What",["All","First"],"All"),s=t.outString("Result");i.onChange=n.onChange=a.onChange=r.onChange=o;function o(){t.setUiError("exception",null);let e="";try{if(a.get()=="All")e=String(n.get()).replace(new RegExp(r.get(),"g"),i.get());else e=String(n.get()).replace(r.get(),i.get())}catch(e){t.setUiError("exception","exception "+e.message)}s.set(e)}};Ops.String.StringReplace.prototype=new CABLES.Op;CABLES.OPS["4a053e7a-6b00-4e71-bd51-90cdb190994c"]={f:Ops.String.StringReplace,objName:"Ops.String.StringReplace"};Ops.Math.Compare.GreaterThan=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inValueFloat("number1"),r=e.inValueFloat("number2"),i=e.outBoolNum("result");e.setUiAttribs({mathTitle:true});n.onChange=r.onChange=a;function a(){i.set(n.get()>r.get())}};Ops.Math.Compare.GreaterThan.prototype=new CABLES.Op;CABLES.OPS["b250d606-f7f8-44d3-b099-c29efff2608a"]={f:Ops.Math.Compare.GreaterThan,objName:"Ops.Math.Compare.GreaterThan"};Ops.Vars.VarSetNumber_v2=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inValueFloat("Value",0);e.varName=e.inDropDown("Variable",[],"",true);new CABLES.VarSetOpWrapper(e,"number",n,e.varName)};Ops.Vars.VarSetNumber_v2.prototype=new CABLES.Op;CABLES.OPS["b5249226-6095-4828-8a1c-080654e192fa"]={f:Ops.Vars.VarSetNumber_v2,objName:"Ops.Vars.VarSetNumber_v2"};Ops.Number.GateNumber=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inValue("Value In",0),r=e.inValueBool("Pass Through"),i=e.inSwitch("When False",["keep last number","custom"],"keep last number"),a=e.inFloat("Custom Value",0),s=e.outNumber("Value Out");n.onChange=l;r.onChange=l;n.changeAlways=s.changeAlways=true;i.onChange=o;function o(){a.setUiAttribs({greyout:i.get()!="custom"});l()}function l(){if(r.get()){s.set(n.get())}else{if(i.get()=="custom")s.set(a.get())}}};Ops.Number.GateNumber.prototype=new CABLES.Op;CABLES.OPS["594105c8-1fdb-4f3c-bbd5-29b9ad6b33e0"]={f:Ops.Number.GateNumber,objName:"Ops.Number.GateNumber"};Ops.Ui.SubPatchInput=function(){CABLES.Op.apply(this,arguments);const t=this;const e=t.attachments={};t.innerInput=true;const n=t.inTriggerButton("Goto SubPatchOp");n.setUiAttribs({hidePort:true});n.onTriggered=()=>{const e=t.patch.getSubPatchOuterOp(t.uiAttribs.subPatch);gui.patchView.centerSelectOp(e.id)}};Ops.Ui.SubPatchInput.prototype=new CABLES.Op;CABLES.OPS["c4e4e933-136e-479e-8de8-0b35b75d9217"]={f:Ops.Ui.SubPatchInput,objName:"Ops.Ui.SubPatchInput"};Ops.Ui.SubPatchOutput=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};e.innerOutput=true};Ops.Ui.SubPatchOutput.prototype=new CABLES.Op;CABLES.OPS["02d45073-7936-4830-81ad-59a162febf1f"]={f:Ops.Ui.SubPatchOutput,objName:"Ops.Ui.SubPatchOutput"};Ops.Gl.MainLoop=function(){CABLES.Op.apply(this,arguments);const r=this;const e=r.attachments={};const t=r.inValue("FPS Limit",0),n=r.outTrigger("trigger"),i=r.outNumber("width"),a=r.outNumber("height"),s=r.inValueBool("Reduce FPS not focussed",false),o=r.inValueBool("Reduce FPS loading"),l=r.inValueBool("Clear",true),u=r.inValueBool("ClearAlpha",true),c=r.inValueBool("Fullscreen Button",false),p=r.inValueBool("Active",true),h=r.inValueBool("Hires Displays",false),f=r.inSwitch("Pixel Unit",["Display","CSS"],"Display");r.onAnimFrame=T;h.onChange=function(){if(h.get())r.patch.cgl.pixelDensity=window.devicePixelRatio;else r.patch.cgl.pixelDensity=1;r.patch.cgl.updateSize();if(CABLES.UI)gui.setLayout()};p.onChange=function(){r.patch.removeOnAnimFrame(r);if(p.get()){r.setUiAttrib({extendTitle:""});r.onAnimFrame=T;r.patch.addOnAnimFrame(r);r.log("adding again!")}else{r.setUiAttrib({extendTitle:"Inactive"})}};const d=r.patch.cgl;let g=0;let m=0;let v=null;let b=false;if(!r.patch.cgl)r.uiAttr({error:"No webgl cgl context"});const y=vec3.create();vec3.set(y,0,0,0);const x=vec3.create();vec3.set(x,0,0,-2);c.onChange=C;setTimeout(C,100);let S=null;let O=true;let _=true;window.addEventListener("blur",()=>{O=false});window.addEventListener("focus",()=>{O=true});document.addEventListener("visibilitychange",()=>{_=!document.hidden});I();d.mainloopOp=this;f.onChange=()=>{i.set(0);a.set(0)};function A(){if(o.get()&&r.patch.loading.getProgress()<1)return 5;if(s.get()){if(!_)return 10;if(!O)return 30}return t.get()}function C(){function e(){if(S)S.style.display="block"}function t(){if(S)S.style.display="none"}r.patch.cgl.canvas.addEventListener("mouseleave",t);r.patch.cgl.canvas.addEventListener("mouseenter",e);if(c.get()){if(!S){S=document.createElement("div");const n=r.patch.cgl.canvas.parentElement;if(n)n.appendChild(S);S.addEventListener("mouseenter",e);S.addEventListener("click",function(e){if(CABLES.UI&&!e.shiftKey)gui.cycleFullscreen();else d.fullScreen()})}S.style.padding="10px";S.style.position="absolute";S.style.right="5px";S.style.top="5px";S.style.width="20px";S.style.height="20px";S.style.cursor="pointer";S.style["border-radius"]="40px";S.style.background="#444";S.style["z-index"]="9999";S.style.display="none";S.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 490 490" style="width:20px;height:20px;" xml:space="preserve" width="512px" height="512px"><g><path d="M173.792,301.792L21.333,454.251v-80.917c0-5.891-4.776-10.667-10.667-10.667C4.776,362.667,0,367.442,0,373.333V480 c0,5.891,4.776,10.667,10.667,10.667h106.667c5.891,0,10.667-4.776,10.667-10.667s-4.776-10.667-10.667-10.667H36.416 l152.459-152.459c4.093-4.237,3.975-10.99-0.262-15.083C184.479,297.799,177.926,297.799,173.792,301.792z" fill="#FFFFFF"/><path d="M480,0H373.333c-5.891,0-10.667,4.776-10.667,10.667c0,5.891,4.776,10.667,10.667,10.667h80.917L301.792,173.792 c-4.237,4.093-4.354,10.845-0.262,15.083c4.093,4.237,10.845,4.354,15.083,0.262c0.089-0.086,0.176-0.173,0.262-0.262 L469.333,36.416v80.917c0,5.891,4.776,10.667,10.667,10.667s10.667-4.776,10.667-10.667V10.667C490.667,4.776,485.891,0,480,0z" fill="#FFFFFF"/><path d="M36.416,21.333h80.917c5.891,0,10.667-4.776,10.667-10.667C128,4.776,123.224,0,117.333,0H10.667 C4.776,0,0,4.776,0,10.667v106.667C0,123.224,4.776,128,10.667,128c5.891,0,10.667-4.776,10.667-10.667V36.416l152.459,152.459 c4.237,4.093,10.99,3.975,15.083-0.262c3.992-4.134,3.992-10.687,0-14.82L36.416,21.333z" fill="#FFFFFF"/><path d="M480,362.667c-5.891,0-10.667,4.776-10.667,10.667v80.917L316.875,301.792c-4.237-4.093-10.99-3.976-15.083,0.261 c-3.993,4.134-3.993,10.688,0,14.821l152.459,152.459h-80.917c-5.891,0-10.667,4.776-10.667,10.667s4.776,10.667,10.667,10.667 H480c5.891,0,10.667-4.776,10.667-10.667V373.333C490.667,367.442,485.891,362.667,480,362.667z" fill="#FFFFFF"/></g></svg>'}else{if(S){S.style.display="none";S.remove();S=null}}}r.onDelete=function(){d.gl.clearColor(0,0,0,0);d.gl.clear(d.gl.COLOR_BUFFER_BIT|d.gl.DEPTH_BUFFER_BIT)};function T(e){if(!p.get())return;if(d.aborted||d.canvas.clientWidth===0||d.canvas.clientHeight===0)return;r.patch.cg=d;if(h.get())r.patch.cgl.pixelDensity=window.devicePixelRatio;const t=performance.now();r.patch.config.fpsLimit=A();if(d.canvasWidth==-1){d.setCanvas(r.patch.config.glCanvasId);return}if(d.canvasWidth!=i.get()||d.canvasHeight!=a.get()){let e=1;if(f.get()=="CSS")e=r.patch.cgl.pixelDensity;i.set(d.canvasWidth/e);a.set(d.canvasHeight/e)}if(CABLES.now()-m>1e3){CGL.fpsReport=CGL.fpsReport||[];if(r.patch.loading.getProgress()>=1&&m!==0)CGL.fpsReport.push(g);g=0;m=CABLES.now()}CGL.MESH.lastShader=null;CGL.MESH.lastMesh=null;d.renderStart(d,y,x);if(l.get()){d.gl.clearColor(0,0,0,1);d.gl.clear(d.gl.COLOR_BUFFER_BIT|d.gl.DEPTH_BUFFER_BIT)}n.trigger();if(CGL.MESH.lastMesh)CGL.MESH.lastMesh.unBind();if(CGL.Texture.previewTexture){if(!CGL.Texture.texturePreviewer)CGL.Texture.texturePreviewer=new CGL.Texture.texturePreview(d);CGL.Texture.texturePreviewer.render(CGL.Texture.previewTexture)}d.renderEnd(d);r.patch.cg=null;if(u.get()){d.gl.clearColor(1,1,1,1);d.gl.colorMask(false,false,false,true);d.gl.clear(d.gl.COLOR_BUFFER_BIT);d.gl.colorMask(true,true,true,true)}if(!d.frameStore.phong)d.frameStore.phong={};g++;r.patch.cgl.profileData.profileMainloopMs=performance.now()-t}function I(){clearTimeout(v);v=setTimeout(()=>{if(r.patch.getOpsByObjName(r.name).length>1){r.setUiError("multimainloop","there should only be one mainloop op!");if(!b)b=r.patch.addEventListener("onOpDelete",I)}else r.setUiError("multimainloop",null,1)},500)}};Ops.Gl.MainLoop.prototype=new CABLES.Op;CABLES.OPS["b0472a1d-db16-4ba6-8787-f300fbdc77bb"]={f:Ops.Gl.MainLoop,objName:"Ops.Gl.MainLoop"};Ops.Trigger.Sequence=function(){CABLES.Op.apply(this,arguments);const a=this;const e=a.attachments={};const t=a.inTrigger("exe"),n=a.inTriggerButton("Clean up connections");a.setUiAttrib({resizable:true,resizableY:false,stretchPorts:true});const r=[],s=[],i=16;let o=null,l=[];t.onTriggered=p;n.onTriggered=h;n.setUiAttribs({hideParam:true,hidePort:true});for(let t=0;t<i;t++){const f=a.outTrigger("trigger "+t);s.push(f);f.onLinkChanged=c;if(t<i-1){let e=a.inTrigger("exe "+t);e.onTriggered=p;r.push(e)}}u();function u(){l.length=0;for(let e=0;e<s.length;e++)if(s[e].links.length>0)l.push(s[e])}function c(){u();clearTimeout(o);o=setTimeout(()=>{let t=false;for(let e=0;e<s.length;e++)if(s[e].links.length>1)t=true;n.setUiAttribs({hideParam:!t});if(a.isCurrentUiOp())a.refreshParams()},60)}function p(){for(let e=0;e<l.length;e++)l[e].trigger()}function h(){let r=0;for(let n=0;n<s.length;n++){let t=[];if(s[n].links.length>1)for(let e=1;e<s[n].links.length;e++){while(s[r].links.length>0)r++;t.push(s[n].links[e]);const i=s[n].links[e].getOtherPort(s[n]);a.patch.link(a,"trigger "+r,i.op,i.name);r++}for(let e=0;e<t.length;e++)t[e].remove()}c();u()}};Ops.Trigger.Sequence.prototype=new CABLES.Op;CABLES.OPS["a466bc1f-06e9-4595-8849-bffb9fe22f99"]={f:Ops.Trigger.Sequence,objName:"Ops.Trigger.Sequence"};Ops.Devices.Mouse.Mouse_v3=function(){CABLES.Op.apply(this,arguments);const e=this;const k=e.attachments={};const t=e.inSwitch("Coordinates",["-1 to 1","Pixel Display","Pixel","0 to 1"],"-1 to 1"),i=e.inValueSelect("Area",["Canvas","Document","Parent Element","Canvas Area"],"Canvas"),a=e.inValueBool("flip y",true),n=e.inBool("right click prevent default",true),r=e.inValueBool("Touch support",true),s=e.inValueBool("Passive Events",false),o=e.inValueBool("Active",true),l=e.outNumber("x",0),u=e.outNumber("y",0),c=e.outTrigger("click"),p=e.outTrigger("click right"),h=e.outBoolNum("Button is down"),f=e.outBoolNum("Mouse is hovering"),d=e.outNumber("Movement X",0),g=e.outNumber("Movement Y",0);const m=e.patch.cgl;let v=1;let b=null;let y=null;s.onChange=i.onChange=M;t.onChange=B;e.onDelete=P;M();e.on("loadedValueSet",x);function x(){if(v==0){if(y.clientWidth===0){console.log("mouse waiting for listenerelement");setTimeout(x,50)}l.set(y.clientWidth/2);u.set(y.clientHeight/2)}else if(v==1){l.set(0);u.set(0)}else if(v==2){l.set(.5);u.set(.5)}else if(v==3){if(y.clientWidth===0){console.log("mouse waiting for listenerelement");setTimeout(x,50)}l.set(y.clientWidth/2/m.pixelDensity);u.set(y.clientHeight/2/m.pixelDensity)}else console.log("unknown normalize mouse",v)}function w(i,a){i=i||0;a=a||0;if(v==0){l.set(i);u.set(a)}else if(v==3){l.set(i*m.pixelDensity);u.set(a*m.pixelDensity)}else{let n=y.clientWidth/m.pixelDensity;let r=y.clientHeight/m.pixelDensity;n=n||1;r=r||1;if(v==1){let e=i/n*2-1;let t=a/r*2-1;e=CABLES.clamp(e,-1,1);t=CABLES.clamp(t,-1,1);l.set(e);u.set(t)}else if(v==2){let e=i/n;let t=a/r;e=CABLES.clamp(e,0,1);t=CABLES.clamp(t,0,1);l.set(e);u.set(t)}}}function S(e){const t=y.getBoundingClientRect();return e.clientX>t.left&&e.clientX<t.left+t.width&&e.clientY>t.top&&e.clientY<t.top+t.height}r.onChange=function(){P();M()};o.onChange=function(){if(b)P();if(o.get())M()};function B(){if(t.get()=="Pixel")v=0;else if(t.get()=="-1 to 1")v=1;else if(t.get()=="0 to 1")v=2;else if(t.get()=="Pixel Display")v=3}function O(e){h.set(false);f.set(S(e))}function _(e){if(!S(e))return;h.set(true)}function A(e){h.set(false)}function C(e){if(!S(e))return;p.trigger();if(n.get())e.preventDefault()}function T(e){if(!S(e))return;c.trigger()}function I(e){h.set(false);f.set(S(e))}function E(e){let t=e.clientX;let n=e.clientY;if(i.get()!="Document"){t=e.offsetX;n=e.offsetY}if(i.get()==="Canvas Area"){const r=y.getBoundingClientRect();t=e.clientX-r.left;n=e.clientY-r.top}if(a.get())n=y.clientHeight-n;w(t/m.pixelDensity,n/m.pixelDensity)}function L(e){f.set(S(e));E(e);d.set(e.movementX/m.pixelDensity);g.set(e.movementY/m.pixelDensity)}function N(e){if(event.touches&&event.touches.length>0)E(e.touches[0])}function U(e){h.set(true);if(e.touches&&e.touches.length>0)_(e.touches[0])}function R(e){h.set(false);A()}function P(){if(!b)return;b.removeEventListener("touchend",R);b.removeEventListener("touchstart",U);b.removeEventListener("touchmove",N);b.removeEventListener("click",T);b.removeEventListener("mousemove",L);b.removeEventListener("mouseleave",I);b.removeEventListener("mousedown",_);b.removeEventListener("mouseup",A);b.removeEventListener("mouseenter",O);b.removeEventListener("contextmenu",C);b=null}function M(){if(b||!o.get())P();if(!o.get())return;b=y=m.canvas;if(i.get()=="Canvas Area"){y=m.canvas.parentElement;b=document.body}if(i.get()=="Document")y=b=document.body;if(i.get()=="Parent Element")b=y=m.canvas.parentElement;let e=false;if(s.get())e={passive:true};if(r.get()){b.addEventListener("touchend",R,e);b.addEventListener("touchstart",U,e);b.addEventListener("touchmove",N,e)}b.addEventListener("mousemove",L,e);b.addEventListener("mouseleave",I,e);b.addEventListener("mousedown",_,e);b.addEventListener("mouseup",A,e);b.addEventListener("mouseenter",O,e);b.addEventListener("contextmenu",C,e);b.addEventListener("click",T,e)}};Ops.Devices.Mouse.Mouse_v3.prototype=new CABLES.Op;CABLES.OPS["6d1edbc0-088a-43d7-9156-918fb3d7f24b"]={f:Ops.Devices.Mouse.Mouse_v3,objName:"Ops.Devices.Mouse.Mouse_v3"};Ops.Math.DeltaSum=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const o=e.inValue("Delta Value"),n=e.inValue("Default Value",0),l=e.inValue("Multiply",1),r=e.inTriggerButton("Reset"),a=e.inValueBool("Limit",false),u=e.inValue("Min",0),c=e.inValue("Max",100),p=e.inValue("Rubberband",0),s=e.outNumber("Absolute Value");o.changeAlways=true;e.setPortGroup("Limit",[a,u,c,p]);let h=0;let f=CABLES.now();let d=null;a.onChange=g;n.onChange=r.onTriggered=i;c.onChange=u.onChange=v;g();function i(){let e=n.get();if(a.get()){e=Math.max(u.get(),e);e=Math.min(c.get(),e)}h=e;s.set(h)}function g(){u.setUiAttribs({greyout:!a.get()});c.setUiAttribs({greyout:!a.get()});p.setUiAttribs({greyout:!a.get()});v()}function m(){const e=u.get();const t=c.get();if(h<e)h=e;if(h>t)h=t;s.set(h)}function v(){if(a.get()){const e=u.get();const t=c.get();const n=p.get();const r=u.get()-n;const i=c.get()+n;if(h<r)h=r;if(h>i)h=i;if(n!==0){clearTimeout(d);d=setTimeout(m.bind(this),300)}}s.set(h)}o.onChange=function(){let e=o.get();const t=p.get();if(t!==0){const n=u.get();const r=c.get();const i=u.get()-t;const a=c.get()+t;if(h<n){const s=Math.abs(h-i)/t;e*=s*s}if(h>r){const s=Math.abs(a-h)/t;e*=s*s}}f=CABLES.now();h+=e*l.get();v()}};Ops.Math.DeltaSum.prototype=new CABLES.Op;CABLES.OPS["d9d4b3db-c24b-48da-b798-9e6230d861f7"]={f:Ops.Math.DeltaSum,objName:"Ops.Math.DeltaSum"};Ops.Ui.PatchInput=function(){CABLES.Op.apply(this,arguments);const i=this;const e=i.attachments={};const a=i.addOutPort(new CABLES.Port(i,"create port",CABLES.OP_PORT_TYPE_DYNAMIC));function s(){for(let e in i.patch.ops){if(i.patch.ops[e].patchId){if(i.patch.ops[e].patchId.get()==i.uiAttribs.subPatch){return i.patch.ops[e]}}}}a.onLinkChanged=()=>{const e=s();if(!a.links.length||!e||!e.addNewInPort)return;const t=a.links[0].getOtherPort(a);a.removeLinks();const n=e.addNewInPort(t);const r=gui.scene().link(t.parent,t.getName(),i,n);e.saveData()}};Ops.Ui.PatchInput.prototype=new CABLES.Op;CABLES.OPS["e3f68bc3-892a-4c78-9974-aca25c27025d"]={f:Ops.Ui.PatchInput,objName:"Ops.Ui.PatchInput"};Ops.Ui.PatchOutput=function(){CABLES.Op.apply(this,arguments);const i=this;const e=i.attachments={};const a=i.addInPort(new CABLES.Port(i,"create port",CABLES.OP_PORT_TYPE_DYNAMIC));function s(){for(let e in i.patch.ops){if(i.patch.ops[e].patchId){if(i.patch.ops[e].patchId.get()==i.uiAttribs.subPatch){return i.patch.ops[e]}}}}a.onLinkChanged=()=>{const e=s();if(!a.links.length)return;const t=a.links[0].getOtherPort(a);a.removeLinks();const n=e.addNewOutPort(t);const r=gui.scene().link(t.parent,t.getName(),i,n);e.saveData()}};Ops.Ui.PatchOutput.prototype=new CABLES.Op;CABLES.OPS["851b44cb-5667-4140-9800-5aeb7031f1d7"]={f:Ops.Ui.PatchOutput,objName:"Ops.Ui.PatchOutput"};Ops.Ui.SubPatch=function(){CABLES.Op.apply(this,arguments);const u=this;const e=u.attachments={};u.dyn=u.addInPort(new CABLES.Port(u,"create port",CABLES.OP_PORT_TYPE_DYNAMIC));u.dynOut=u.addOutPort(new CABLES.Port(u,"create port out",CABLES.OP_PORT_TYPE_DYNAMIC));const t=u.addInPort(new CABLES.Port(u,"dataStr",CABLES.OP_PORT_TYPE_VALUE,{display:"readonly"}));u.patchId=u.addInPort(new CABLES.Port(u,"patchId",CABLES.OP_PORT_TYPE_VALUE,{display:"readonly"}));t.setUiAttribs({hideParam:true});u.patchId.setUiAttribs({hidePort:true});let c={ports:[],portsOut:[]};let n=CABLES.generateUUID();u.patchId.set(n);d();f();let p=false;u.saveData=s;u.init=()=>{u.setStorage({subPatchVer:1})};u.patchId.onChange=function(){if(!u.patch.isEditorMode())return;const t=u.patch.getSubPatchOps(n);if(t.length===2){if(u.patch.isEditorMode()&&CABLES.UI.DEFAULTOPS.isInBlueprint(u))CABLES.UI.undo.pause();for(let e=0;e<t.length;e++){u.patch.deleteOp(t[e].id)}if(u.patch.isEditorMode()&&CABLES.UI.DEFAULTOPS.isInBlueprint(u))CABLES.UI.undo.resume()}};u.onLoaded=function(){};u.onLoadedValueSet=function(){c=JSON.parse(t.get());if(!c){c={ports:[],portsOut:[]}}a()};function r(){}t.onChange=function(){if(p)return;if(!t.get())return;try{r()}catch(e){u.logError("cannot load subpatch data...");u.logError(e)}};function s(){try{t.set(JSON.stringify(c))}catch(e){u.log(e)}}u.addPortListener=h;function h(n,e){if(!n.hasSubpatchLstener){n.hasSubpatchLstener=true;n.addEventListener("onUiAttrChange",function(t){if(t.title){let e=0;for(e=0;e<c.portsOut.length;e++)if(c.portsOut[e].name==n.name)c.portsOut[e].title=t.title;for(e=0;e<c.ports.length;e++)if(c.ports[e].name==n.name)c.ports[e].title=t.title;s()}})}if(n.direction==CABLES.PORT_DIR_IN){if(n.type==CABLES.OP_PORT_TYPE_FUNCTION){n.onTriggered=function(){if(e.isLinked())e.trigger()}}else{n.onChange=function(){e.set(n.get());if(!n.isLinked()){for(let e=0;e<c.ports.length;e++){if(c.ports[e].name===n.name){c.ports[e].value=n.get()}}s()}}}}}u.setupPorts=a;function a(){if(!u.patchId.get())return;const e=c.ports||[];const t=c.portsOut||[];let n=0;for(n=0;n<e.length;n++){if(!u.getPortByName(e[n].name)){const r=u.addInPort(new CABLES.Port(u,e[n].name,e[n].type));const i=d();const a=i.addOutPort(new CABLES.Port(i,e[n].name,e[n].type));r.ignoreValueSerialize=true;r.setUiAttribs({editableTitle:true});if(e[n].title){r.setUiAttribs({title:e[n].title});a.setUiAttribs({title:e[n].title})}if(e[n].objType){r.setUiAttribs({objType:e[n].objType});a.setUiAttribs({objType:e[n].objType})}if(e[n].value){r.set(e[n].value);a.set(e[n].value)}h(r,a)}}for(n=0;n<t.length;n++){if(!u.getPortByName(t[n].name)){const s=u.addOutPort(new CABLES.Port(u,t[n].name,t[n].type));const o=f();const l=o.addInPort(new CABLES.Port(o,t[n].name,t[n].type));s.ignoreValueSerialize=true;s.setUiAttribs({editableTitle:true});if(t[n].title){s.setUiAttribs({title:t[n].title});l.setUiAttribs({title:t[n].title})}if(t[n].objType){s.setUiAttribs({objType:t[n].objType});l.setUiAttribs({objType:t[n].objType})}h(l,s)}}p=true}u.addNewInPort=function(e,t,n){const r="in"+c.ports.length+" "+e.op.name+" "+e.name;const i={name:r,type:e.type};if(e.uiAttribs.objType)i.objType=e.uiAttribs.objType;c.ports.push(i);a();return r};u.dyn.onLinkChanged=function(){if(u.dyn.isLinked()){const e=u.dyn.links[0].getOtherPort(u.dyn);u.dyn.removeLinks();e.removeLinkTo(u.dyn);u.log("dyn link changed!!!");const t=u.addNewInPort(e);const n=gui.scene().link(e.op,e.getName(),u,t);p=true;s()}else{setTimeout(function(){u.dyn.removeLinks()},100)}};u.addNewOutPort=function(e,t,n){const r="out"+c.portsOut.length+" "+e.op.name+" "+e.name;const i={name:r,type:e.type};if(e.uiAttribs.objType)i.objType=e.uiAttribs.objType;c.portsOut.push(i);a();return r};u.dynOut.onLinkChanged=function(){if(u.dynOut.isLinked()){const e=u.dynOut.links[0].getOtherPort(u.dynOut);u.dynOut.removeLinks();e.removeLinkTo(u.dynOut);const t=u.addNewOutPort(e);gui.scene().link(e.op,e.getName(),u,t);p=true;s()}else{setTimeout(function(){u.dynOut.removeLinks()},100);u.log("dynOut unlinked...")}};function f(){let e=u.patch.getSubPatchOp(u.patchId.get(),"Ops.Ui.PatchOutput");if(!e){u.patch.addOp("Ops.Ui.PatchOutput",{subPatch:u.patchId.get(),translate:{x:0,y:0}});e=u.patch.getSubPatchOp(u.patchId.get(),"Ops.Ui.PatchOutput");if(!e)u.warn("no patchoutput!")}return e}function d(){let e=u.patch.getSubPatchOp(u.patchId.get(),"Ops.Ui.PatchInput");if(!e){u.patch.addOp("Ops.Ui.PatchInput",{subPatch:u.patchId.get(),translate:{x:0,y:0}});e=u.patch.getSubPatchOp(u.patchId.get(),"Ops.Ui.PatchInput");if(!e)u.warn("no patchinput2!")}return e}u.addSubLink=function(e,t){const n=c.ports.length;const r="in"+(n-1)+" "+t.op.name+" "+t.name;if(e.direction==CABLES.PORT_DIR_IN){gui.scene().link(e.op,e.getName(),d(),r)}else{const a=c.portsOut.length;gui.scene().link(e.op,e.getName(),f(),"out"+(a-1)+" "+t.op.name+" "+t.name)}const i=gui.patchView.getSubPatchBounds(u.patchId.get());d().uiAttr({translate:{x:i.minx,y:i.miny-100}});f().uiAttr({translate:{x:i.minx,y:i.maxy+100}});s();return r};u.onDelete=function(){for(let e=u.patch.ops.length-1;e>=0;e--){if(u.patch.ops[e]&&u.patch.ops[e].uiAttribs&&u.patch.ops[e].uiAttribs.subPatch==u.patchId.get()){u.patch.deleteOp(u.patch.ops[e].id)}}};u.rebuildListeners=()=>{u.log("rebuild listeners...");const t=f();for(let e=0;e<t.portsIn.length;e++){if(t.portsIn[e].isLinked()){h(t.portsIn[e],this.portsOut[e])}}}};Ops.Ui.SubPatch.prototype=new CABLES.Op;CABLES.OPS["84d9a6f0-ed7a-466d-b386-225ed9e89c60"]={f:Ops.Ui.SubPatch,objName:"Ops.Ui.SubPatch"};Ops.Gl.Matrix.Transform=function(){CABLES.Op.apply(this,arguments);const n=this;const e=n.attachments={};const t=n.inTrigger("render"),r=n.inValue("posX",0),i=n.inValue("posY",0),a=n.inValue("posZ",0),s=n.inValue("scale",1),o=n.inValue("rotX",0),l=n.inValue("rotY",0),u=n.inValue("rotZ",0),c=n.outTrigger("trigger");n.setPortGroup("Rotation",[o,l,u]);n.setPortGroup("Position",[r,i,a]);n.setPortGroup("Scale",[s]);n.setUiAxisPorts(r,i,a);n.toWorkPortsNeedToBeLinked(t,c);const p=vec3.create();const h=vec3.create();const f=mat4.create();mat4.identity(f);let d=false,g=false,m=true,v=true,b=true;o.onChange=l.onChange=u.onChange=A;r.onChange=i.onChange=a.onChange=O;s.onChange=_;t.onTriggered=function(){let e=false;if(m){x();e=true}if(v){S();e=true}if(b)e=true;if(e)y();const t=n.patch.cg||n.patch.cgl;t.pushModelMatrix();mat4.multiply(t.mMatrix,t.mMatrix,f);c.trigger();t.popModelMatrix();if(CABLES.UI)gui.setTransform(n.id,r.get(),i.get(),a.get());if(n.isCurrentUiOp())gui.setTransformGizmo({posX:r,posY:i,posZ:a})};function y(){mat4.identity(f);if(g)mat4.translate(f,f,p);if(o.get()!==0)mat4.rotateX(f,f,o.get()*CGL.DEG2RAD);if(l.get()!==0)mat4.rotateY(f,f,l.get()*CGL.DEG2RAD);if(u.get()!==0)mat4.rotateZ(f,f,u.get()*CGL.DEG2RAD);if(d)mat4.scale(f,f,h);b=false}function x(){g=false;if(r.get()!==0||i.get()!==0||a.get()!==0)g=true;vec3.set(p,r.get(),i.get(),a.get());m=false}function S(){d=true;vec3.set(h,s.get(),s.get(),s.get());v=false}function O(){m=true}function _(){v=true}function A(){b=true}y()};Ops.Gl.Matrix.Transform.prototype=new CABLES.Op;CABLES.OPS["650baeb1-db2d-4781-9af6-ab4e9d4277be"]={f:Ops.Gl.Matrix.Transform,objName:"Ops.Gl.Matrix.Transform"};Ops.Gl.ClearColor=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inTrigger("render"),r=e.outTrigger("trigger"),i=e.inFloatSlider("r",.1),a=e.inFloatSlider("g",.1),s=e.inFloatSlider("b",.1),o=e.inFloatSlider("a",1);i.setUiAttribs({colorPick:true});const l=e.patch.cgl;n.onTriggered=function(){l.gl.clearColor(i.get(),a.get(),s.get(),o.get());l.gl.clear(l.gl.COLOR_BUFFER_BIT|l.gl.DEPTH_BUFFER_BIT);r.trigger()}};Ops.Gl.ClearColor.prototype=new CABLES.Op;CABLES.OPS["19b441eb-9f63-4f35-ba08-b87841517c4d"]={f:Ops.Gl.ClearColor,objName:"Ops.Gl.ClearColor"};Ops.Patch.PuvBp73.MouseDrag=function(){CABLES.Op.apply(this,arguments);const t=this;const e=t.attachments={};const n=t.inValueBool("Active",true),r=t.inValue("Speed",.01),i=t.inSwitch("Input Type",["All","Mouse","Touch"],"All"),a=t.inSwitch("Area",["Canvas Area","Canvas","Document"],"Canvas Area"),s=t.outNumber("Delta X"),o=t.outNumber("Delta Y"),l=t.outNumber("Is Dragging");let u=null;let c=null;const p=0;const h=0;let f=false;let d=0;let g=0;let m=true;i.onChange=a.onChange=O;O();function v(e){if(a.get()==="Canvas Area"){const t=c.getBoundingClientRect();return e.clientX>t.left&&e.clientX<t.left+t.width&&e.clientY>t.top&&e.clientY<t.top+t.height}return true}function b(e){if(e.touches)e=e.touches[0];if(f&&e&&v(e)){if(!m){l.set(true);const t=(e.clientX-d)*r.get();const n=(e.clientY-g)*r.get();s.set(0);o.set(0);s.set(t);o.set(n)}m=false;d=e.clientX;g=e.clientY}}function y(e){try{u.setPointerCapture(e.pointerId)}catch(e){}f=true}function x(e){try{u.releasePointerCapture(e.pointerId)}catch(e){}f=false;l.set(false);d=0;g=0;m=true}function S(){const e=t.patch.cg.canvas;if(document.pointerLockElement===e||document.mozPointerLockElement===e||document.webkitPointerLockElement===e){document.addEventListener("mousemove",onmousemove,false)}}function O(){A();if(a.get()=="Canvas Area"){u=document;c=t.patch.cgl.canvas}else if(a.get()=="Document")u=c=document;else u=c=t.patch.cgl.canvas;if(n.get())_()}function _(){if(!u)O();if(i.get()=="All"||i.get()=="Mouse"){u.addEventListener("mousemove",b);u.addEventListener("mousedown",y);u.addEventListener("mouseup",x);u.addEventListener("mouseenter",x);u.addEventListener("mouseleave",x)}if(i.get()=="All"||i.get()=="Touch"){u.addEventListener("touchmove",b);u.addEventListener("touchend",x);u.addEventListener("touchstart",y)}}function A(){if(!u)return;u.removeEventListener("mousemove",b);u.removeEventListener("mousedown",y);u.removeEventListener("mouseup",x);u.removeEventListener("mouseenter",x);u.removeEventListener("mouseleave",x);u.removeEventListener("touchmove",b);u.removeEventListener("touchend",x);u.removeEventListener("touchstart",y)}n.onChange=function(){if(n.get())_();else A()};t.onDelete=function(){A()}};Ops.Patch.PuvBp73.MouseDrag.prototype=new CABLES.Op;CABLES.OPS["6210a0fd-6a09-4b18-a8f8-a51d0887834e"]={f:Ops.Patch.PuvBp73.MouseDrag,objName:"Ops.Patch.PuvBp73.MouseDrag"};Ops.Gl.Shader.AttributeAsColorMaterial=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={normalsmaterial_frag:"IN vec3 normal;\nIN vec3 outTangent;\nIN vec3 outBiTangent;\nIN vec4 outPosition;\nIN mat4 mMatrix;\nIN vec2 texCoord;\nIN vec2 texCoord1;\nIN vec3 vert;\nIN mat4 mvMatrix;\n\n\n{{MODULES_HEAD}}\n\nvoid main()\n{\n #ifdef MULMODEL\n vec4 attr;\n attr.w=1.0;\n #endif\n #ifndef MULMODEL\n vec3 attr;\n #endif\n\n #ifdef SHOW_NORMALS\n attr.xyz=normal;\n #endif\n #ifdef SHOW_BITANGENTS\n attr.xyz=outBiTangent;\n #endif\n #ifdef SHOW_TANGENTS\n attr.xyz=outTangent;\n #endif\n #ifdef SHOW_TEXCOORDS\n attr.xy=texCoord;\n #endif\n #ifdef SHOW_TEXCOORDS1\n attr.xy=texCoord1;\n #endif\n #ifdef SHOW_POS\n attr.xyz=outPosition.xyz;\n #endif\n\n #ifdef MULMODEL\n attr*=mMatrix;\n attr.xyz=normalize(vec3(attr.x,attr.y,attr.z));\n #endif\n\n vec4 col=vec4(attr.x,attr.y,attr.z,1.0);\n\n #ifdef ABS\n col=abs(col);\n #endif\n\n {{MODULE_COLOR}}\n\n outColor=col;\n}",normalsmaterial_vert:"IN vec3 vPosition;\nIN vec2 attrTexCoord;\nIN vec2 attrTexCoord1;\nIN float attrVertIndex;\nIN vec3 attrVertNormal,attrTangent,attrBiTangent;\nOUT vec2 texCoord;\nOUT vec2 texCoord1;\nOUT vec3 normal;\nOUT vec3 tangent;\nOUT vec3 bitangent;\nOUT vec3 outTangent,outBiTangent;\nOUT vec4 outPosition;\nOUT mat4 mMatrix;\nOUT vec3 vert;\nOUT mat4 mvMatrix;\nUNI mat4 projMatrix;\n\nUNI mat4 modelMatrix;\nUNI mat4 viewMatrix;\n\n\n{{MODULES_HEAD}}\n\nvoid main()\n{\n texCoord=attrTexCoord;\n texCoord1=attrTexCoord1;\n vec3 norm=attrVertNormal;\n tangent=attrTangent;\n bitangent=attrBiTangent;\n\n vec4 pos=vec4(vPosition,1.0);\n mMatrix=modelMatrix;\n\n {{MODULE_VERTEX_POSITION}}\n\n mat4 modelViewMatrix=viewMatrix*mMatrix;\n\n vert=pos.xyz;\n normal=norm;\n outTangent=tangent;\n outBiTangent=bitangent;\n outPosition= mMatrix * pos;\n\n {{MODULE_VERTEX_MOVELVIEW}}\n\n gl_Position = projMatrix*viewMatrix*outPosition;\n}"};const n=e.inTrigger("render"),r=e.inSwitch("Attribute",["Position","TexCoords","TexCoords 1","Normals","Tangents","BiTangents"],"Normals"),i=e.inBool("Absolute",false),a=e.inBool("World Space",false),s=e.outTrigger("trigger"),o=e.outObject("Shader");const l=e.patch.cgl;const u=new CGL.Shader(l,e.name,e);u.setSource(t.normalsmaterial_vert,t.normalsmaterial_frag);o.set(u);n.onTriggered=p;c();a.onChange=i.onChange=r.onChange=c;function c(){u.toggleDefine("SHOW_POS",r.get()=="Position");u.toggleDefine("SHOW_NORMALS",r.get()=="Normals");u.toggleDefine("SHOW_TANGENTS",r.get()=="Tangents");u.toggleDefine("SHOW_BITANGENTS",r.get()=="BiTangents");u.toggleDefine("SHOW_TEXCOORDS",r.get()=="TexCoords");u.toggleDefine("SHOW_TEXCOORDS1",r.get()=="TexCoords 1");u.toggleDefine("ABS",i.get());u.toggleDefine("MULMODEL",a.get())}function p(){l.pushShader(u);s.trigger();l.popShader()}};Ops.Gl.Shader.AttributeAsColorMaterial.prototype=new CABLES.Op;CABLES.OPS["2963fd23-a860-461a-a3cf-394b8261159f"]={f:Ops.Gl.Shader.AttributeAsColorMaterial,objName:"Ops.Gl.Shader.AttributeAsColorMaterial"};Ops.Trigger.TriggerSend=function(){CABLES.Op.apply(this,arguments);const r=this;const e=r.attachments={};const t=r.inTriggerButton("Trigger");r.varName=r.inValueSelect("Named Trigger",[],"",true);r.varName.onChange=i;t.onTriggered=a;r.patch.addEventListener("namedTriggersChanged",n);n();function n(){if(CABLES.UI){const e=[];const t=r.patch.namedTriggers;e.push("+ create new one");for(const n in t)e.push(n);r.varName.uiAttribs.values=e}}function i(){if(CABLES.UI){if(r.varName.get()=="+ create new one"){new CABLES.UI.ModalDialog({prompt:true,title:"New Trigger",text:"Enter a name for the new trigger",promptValue:"",promptOk:e=>{r.varName.set(e);r.patch.namedTriggers[e]=r.patch.namedTriggers[e]||[];n()}});return}r.refreshParams()}if(!r.patch.namedTriggers[r.varName.get()]){r.patch.namedTriggers[r.varName.get()]=r.patch.namedTriggers[r.varName.get()]||[];r.patch.emitEvent("namedTriggersChanged")}r.setTitle(">"+r.varName.get());r.refreshParams();r.patch.emitEvent("opTriggerNameChanged",r,r.varName.get())}function a(){const t=r.patch.namedTriggers[r.varName.get()];r.patch.emitEvent("namedTriggerSent",r.varName.get());if(!t){r.setUiError("unknowntrigger","unknown trigger");return}else r.setUiError("unknowntrigger",null);for(let e=0;e<t.length;e++){t[e]()}}};Ops.Trigger.TriggerSend.prototype=new CABLES.Op;CABLES.OPS["ce1eaf2b-943b-4dc0-ab5e-ee11b63c9ed0"]={f:Ops.Trigger.TriggerSend,objName:"Ops.Trigger.TriggerSend"};Ops.Ui.Area=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inString("Title","");n.setUiAttribs({hidePort:true});e.setUiAttrib({hasArea:true});e.init=n.onChange=e.onLoaded=r;r();function r(){if(CABLES.UI){gui.savedState.setUnSaved("areaOp");e.uiAttr({comment_title:n.get()||" "});e.name=n.get()}}};Ops.Ui.Area.prototype=new CABLES.Op;CABLES.OPS["38f79614-b0de-4960-8da5-2827e7f43415"]={f:Ops.Ui.Area,objName:"Ops.Ui.Area"};Ops.Vars.VarGetNumber_v2=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.outNumber("Value");e.varName=e.inValueSelect("Variable",[],"",true);new CABLES.VarGetOpWrapper(e,"number",e.varName,n)};Ops.Vars.VarGetNumber_v2.prototype=new CABLES.Op;CABLES.OPS["421f5b52-c0fa-47c4-8b7a-012b9e1c864a"]={f:Ops.Vars.VarGetNumber_v2,objName:"Ops.Vars.VarGetNumber_v2"};Ops.Graphics.Intersection.IntersectWorld=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inTrigger("Trigger"),r=e.inBool("Check Body Collisions",false),i=e.outTrigger("Next"),a=e.outNumber("Total Bodies"),s=e.outArray("Collisions",[]);n.onTriggered=p;const l=1;const u=2;const c=3;const o=e.patch.cgl;function p(){o.frameStore.collisionWorld={bodies:[],testCollision:h};i.trigger();a.set(o.frameStore.collisionWorld.bodies.length);if(r.get())f()}function h(a,s){if(a.type===l&&s.type===l){const n=vec3.distance(a.pos,s.pos);if(n<a.radius+s.radius){return{body0:a,name0:a.name,body1:s,name1:s.name}}}else if(a.type===c&&s.type===c){if(a.pos[0]===s.pos[0]&&a.pos[1]===s.pos[1]&&a.pos[2]===s.pos[2]){return{body0:a,name0:a.name,body1:s,name1:s.name}}}else if(s.type===l&&a.type===c||a.type===l&&s.type===c){let e=a;let t=s;if(a.type===l){e=s;t=a}const r=Math.abs(e.pos[0]-t.pos[0]);const i=Math.abs(e.pos[1]-t.pos[1]);const o=Math.abs(e.pos[2]-t.pos[2]);const n=Math.sqrt(r*r+i*i+o*o);if(n<t.radius){return{body0:a,name0:a.name,body1:s,name1:s.name}}}else if(s.type===u&&a.type===c||a.type===u&&s.type===c){let e=a;let t=s;if(a.type===u){e=s;t=a}if(e.pos[0]>t.minX&&e.pos[0]<t.maxX&&(e.pos[1]>t.minY&&e.pos[1]<t.maxY)&&(e.pos[2]>t.minZ&&e.pos[2]<t.maxZ)){return{body0:a,name0:a.name,body1:s,name1:s.name}}}else if(a.type===l&&s.type===u||a.type===u&&s.type===l){let e=a;let t=s;if(s.type===u){e=s;t=a}let n=t.radius*t.radius;let r=0;let i=t.radius*t.radius;if(t.pos[0]<e.minX)i-=(t.pos[0]-e.minX)**2;else if(t.pos[0]>e.maxX)i-=(t.pos[0]-e.maxX)**2;if(t.pos[1]<e.minY)i-=(t.pos[1]-e.minY)**2;else if(t.pos[1]>e.maxY)i-=(t.pos[1]-e.maxY)**2;if(t.pos[2]<e.minZ)i-=(t.pos[2]-e.minZ)**2;else if(t.pos[2]>e.maxZ)i-=(t.pos[2]-e.maxZ)**2;if(i>0){return{body0:a,name0:a.name,body1:s,name1:s.name}}}else{console.warn("unknown collision pair...",a.type,s.type)}}function f(){const n=[];const r=o.frameStore.collisionWorld.bodies;for(let t=0;t<r.length;t++){for(let e=t+1;e<r.length;e++){if(e!=t){const i=h(r[e],r[t]);if(i)n.push(i)}}}s.setRef(n,[])}};Ops.Graphics.Intersection.IntersectWorld.prototype=new CABLES.Op;CABLES.OPS["6ebdec23-6e10-48c9-87cf-43d488e4290f"]={f:Ops.Graphics.Intersection.IntersectWorld,objName:"Ops.Graphics.Intersection.IntersectWorld"};Ops.Graphics.Intersection.IntersectTestRaycast=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inTrigger("Trigger"),y=e.inSwitch("Coordinate Format",["-1 to 1","XYZ-XYZ"],"-1 to 1"),x=e.inValueFloat("X"),S=e.inValueFloat("Y"),O=e.inValueFloat("Z"),_=e.inValueFloat("To X"),A=e.inValueFloat("To Y"),C=e.inValueFloat("To Z"),r=e.inBool("Active",true),i=e.inBool("Change Cursor",true),T=e.outTrigger("Next"),I=e.outBoolNum("Has Hit",false),E=e.outString("Hit Body Name",""),L=e.outNumber("Hit X"),N=e.outNumber("Hit Y"),U=e.outNumber("Hit Z");const R=e.patch.cgl;const P=vec3.create();const M=mat4.create();const k=vec3.create();let a=false;let s=true;e.toWorkPortsNeedToBeLinked(n);n.onTriggered=l;y.onChange=o;o();function o(){O.setUiAttribs({greyout:y.get()!="XYZ-XYZ"});_.setUiAttribs({greyout:y.get()!="XYZ-XYZ"});A.setUiAttribs({greyout:y.get()!="XYZ-XYZ"});C.setUiAttribs({greyout:y.get()!="XYZ-XYZ"})}function l(){T.trigger();if(R.frameStore.collisionWorld){let t=vec3.create();if(y.get()=="-1 to 1"){t=vec3.fromValues(x.get(),S.get(),-1);mat4.mul(M,R.pMatrix,R.vMatrix);mat4.invert(M,M);vec3.transformMat4(t,t,M)}if(y.get()=="XYZ-XYZ"){t=vec3.fromValues(x.get(),S.get(),O.get())}let e=vec3.create();if(y.get()=="-1 to 1"){e=vec3.fromValues(x.get(),S.get(),1);mat4.mul(M,R.pMatrix,R.vMatrix);mat4.invert(M,M);vec3.transformMat4(e,e,M)}if(y.get()=="XYZ-XYZ"){e=vec3.fromValues(_.get(),A.get(),C.get())}vec3.sub(k,e,t);vec3.normalize(k,k);const i=vec3.dot(k,k);let n=9999999;let r=false;const a=R.frameStore.collisionWorld.bodies;for(let e=0;e<a.length;e++){const s=a[e];if(s.type==1){vec3.sub(P,t,s.pos);const o=2*vec3.dot(P,k);const l=vec3.dot(P,P)-s.radius*s.radius;const u=o*o-4*i*l;if(u>0){const c=(-o-Math.sqrt(u))/(2+i);if(c<n){r=true;E.set(s.name);I.set(true);n=c;vec3.mul(P,k,[c,c,c]);vec3.add(P,P,t);L.set(P[0]);N.set(P[1]);U.set(P[2])}}}else if(s.type==2){const p=(s.minX-t[0])/k[0];const h=(s.maxX-t[0])/k[0];const f=(s.minY-t[1])/k[1];const d=(s.maxY-t[1])/k[1];const g=(s.minZ-t[2])/k[2];const m=(s.maxZ-t[2])/k[2];const v=Math.max(Math.max(Math.min(p,h),Math.min(f,d)),Math.min(g,m));const b=Math.min(Math.min(Math.max(p,h),Math.max(f,d)),Math.max(g,m));if(b<0)continue;if(v>b)continue;r=true;E.set(s.name);I.set(true);vec3.mul(P,k,[v,v,v]);vec3.add(P,P,t);L.set(P[0]);N.set(P[1]);U.set(P[2])}}if(!r){E.set("");I.set(false);L.set(0);N.set(0);U.set(0)}}}};Ops.Graphics.Intersection.IntersectTestRaycast.prototype=new CABLES.Op;CABLES.OPS["dd5d9b39-75c2-40b1-98a4-7a0fdafdb5cb"]={f:Ops.Graphics.Intersection.IntersectTestRaycast,objName:"Ops.Graphics.Intersection.IntersectTestRaycast"};Ops.Graphics.Intersection.IntersectBody=function(){CABLES.Op.apply(this,arguments);const a=this;const e=a.attachments={};const t=["Sphere","BoxAA","Point"],n=a.inTrigger("Trigger"),r=a.inSwitch("Shape",t,"Sphere"),s=a.inString("Name",""),o=a.inFloat("Radius",.5),l=a.inFloat("Size X",1),u=a.inFloat("Size Y",1),c=a.inFloat("Size Z",1),p=a.inArray("Positions",null,3),h=a.inBool("Append Index to name",true),f=a.outTrigger("Next");a.setPortGroup("Array",[p,h]);const d=a.patch.cgl;const i=vec3.create();const g=vec3.create();y();let m=[];let v={name:"???",type:1};n.onTriggered=C;function b(){return{name:v.name,type:v.type}}r.onChange=()=>{v.type=t.indexOf(r.get())+1;y()};function y(){o.setUiAttribs({greyout:r.get()!="Sphere"});l.setUiAttribs({greyout:r.get()!="BoxAA"});u.setUiAttribs({greyout:r.get()!="BoxAA"});c.setUiAttribs({greyout:r.get()!="BoxAA"})}function x(e){e.minX=e.pos[0]-e.size[0]/2;e.maxX=e.pos[0]+e.size[0]/2;e.minY=e.pos[1]-e.size[1]/2;e.maxY=e.pos[1]+e.size[1]/2;e.minZ=e.pos[2]-e.size[2]/2;e.maxZ=e.pos[2]+e.size[2]/2}const S=1;const O=2;const _=3;function A(e){if(!CABLES.UI)return;if(!d.shouldDrawHelpers(a))return;if(e.type===S){d.pushModelMatrix();CABLES.UI.OverlayMeshes.drawSphere(a,e.radius,true);d.popModelMatrix()}else if(e.type===O){d.pushModelMatrix();CABLES.UI.OverlayMeshes.drawCube(a,e.size[0]/2,e.size[1]/2,e.size[2]/2);d.popModelMatrix()}else if(e.type===_){d.pushModelMatrix();CABLES.UI.OverlayMeshes.drawAxisMarker(a,.05);d.popModelMatrix()}else console.warn("[intersectWorld] unknown col shape")}function C(){if(!d.frameStore||!d.frameStore.collisionWorld)return;const t=a.patch.cgl;const n=p.get();const r=o.get();if(n&&n.length>0&&n.length%3==0){m.length=n.length/3;for(let e=0;e<n.length;e+=3){const i=m[e/3]||{};if(h.get())i.name=s.get()+"."+e/3;else i.name=s.get();i.pos=[n[e+0],n[e+1],n[e+2]];vec3.transformMat4(i.pos,i.pos,t.mMatrix);i.type=v.type;i.size=[l.get(),u.get(),c.get()];if(i.type==2)x(i);if(i.type==1)i.radius=r;d.frameStore.collisionWorld.bodies.push(i);A(i)}}else{const e=b();d.frameStore.collisionWorld.bodies.push(e);e.name=s.get();e.pos=[0,0,0];vec3.transformMat4(e.pos,e.pos,t.mMatrix);e.size=[l.get(),u.get(),c.get()];if(e.type==2)x(e);if(e.type==1)e.radius=r;A(e)}f.trigger()}};Ops.Graphics.Intersection.IntersectBody.prototype=new CABLES.Op;CABLES.OPS["b2e39096-8a02-4a50-b2f5-3e68f2c16ad7"]={f:Ops.Graphics.Intersection.IntersectBody,objName:"Ops.Graphics.Intersection.IntersectBody"};Ops.Trigger.TriggerReceive=function(){CABLES.Op.apply(this,arguments);const r=this;const e=r.attachments={};const t=r.outTrigger("Triggered");r.varName=r.inValueSelect("Named Trigger",[],"",true);a();r.patch.addEventListener("namedTriggersChanged",a);let n=null;function i(){t.trigger()}function a(){if(CABLES.UI){let t=[];let n=r.patch.namedTriggers;for(let e in n)t.push(e);r.varName.uiAttribs.values=t}}r.varName.onChange=function(){if(n){let e=r.patch.namedTriggers[n];let t=e.indexOf(i);if(t!=-1)e.splice(t,1)}r.setTitle(">"+r.varName.get());r.patch.namedTriggers[r.varName.get()]=r.patch.namedTriggers[r.varName.get()]||[];let e=r.patch.namedTriggers[r.varName.get()];e.push(i);n=r.varName.get();s();r.patch.emitEvent("opTriggerNameChanged",r,r.varName.get())};r.on("uiParamPanel",s);function s(){if(!r.varName.get()){r.setUiError("unknowntrigger","unknown trigger")}else r.setUiError("unknowntrigger",null)}};Ops.Trigger.TriggerReceive.prototype=new CABLES.Op;CABLES.OPS["0816c999-f2db-466b-9777-2814573574c5"]={f:Ops.Trigger.TriggerReceive,objName:"Ops.Trigger.TriggerReceive"};Ops.Gl.Matrix.Translate=function(){CABLES.Op.apply(this,arguments);const t=this;const e=t.attachments={};const n=t.inTrigger("render"),r=t.outTrigger("trigger"),i=t.inValue("x"),a=t.inValue("y"),s=t.inValue("z");const o=vec3.create();n.onTriggered=function(){const e=t.patch.cg;vec3.set(o,i.get(),a.get(),s.get());e.pushModelMatrix();mat4.translate(e.mMatrix,e.mMatrix,o);r.trigger();e.popModelMatrix()}};Ops.Gl.Matrix.Translate.prototype=new CABLES.Op;CABLES.OPS["1f89ba0e-e7eb-46d7-8c66-7814b7c528b9"]={f:Ops.Gl.Matrix.Translate,objName:"Ops.Gl.Matrix.Translate"};Ops.Trigger.Repeat2d=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inTrigger("exe"),s=e.inValueInt("num x",5),o=e.inValueInt("num y",5),l=e.inValueFloat("mul",1),u=e.inValueBool("center"),c=e.outTrigger("trigger"),p=e.outNumber("x"),h=e.outNumber("y"),f=e.outNumber("index"),d=e.outNumber("total iterations");n.onTriggered=function(){let n=0;let e=0;const r=l.get();const i=s.get();const a=o.get();if(u.get()){n=(i-1)*r/2;e=(a-1)*r/2}for(let t=0;t<a;t++){h.set(t*r-e);for(let e=0;e<i;e++){p.set(e*r-n);f.set(e+t*i);c.trigger()}}d.set(s.get()*o.get())}};Ops.Trigger.Repeat2d.prototype=new CABLES.Op;CABLES.OPS["79934693-5887-4173-8b48-3e3a18fcf225"]={f:Ops.Trigger.Repeat2d,objName:"Ops.Trigger.Repeat2d"};Ops.Vars.VarSetString_v2=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inString("Value","New String");e.varName=e.inDropDown("Variable",[],"",true);new CABLES.VarSetOpWrapper(e,"string",n,e.varName)};Ops.Vars.VarSetString_v2.prototype=new CABLES.Op;CABLES.OPS["0b4d9229-8024-4a30-9cc0-f6653942c2e4"]={f:Ops.Vars.VarSetString_v2,objName:"Ops.Vars.VarSetString_v2"};Ops.Math.Compare.Equals=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inValue("number1",1),r=e.inValue("number2",1),i=e.outBoolNum("result");n.onChange=r.onChange=a;a();function a(){i.set(n.get()==r.get())}};Ops.Math.Compare.Equals.prototype=new CABLES.Op;CABLES.OPS["4dd3cc55-eebc-4187-9d4e-2e053a956fab"]={f:Ops.Math.Compare.Equals,objName:"Ops.Math.Compare.Equals"};Ops.Math.Subtract=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inValue("number1",1),r=e.inValue("number2",1),i=e.outNumber("result");e.setUiAttribs({mathTitle:true});n.onChange=r.onChange=a;a();function a(){let e=n.get()-r.get();if(!isNaN(e))i.set(e)}};Ops.Math.Subtract.prototype=new CABLES.Op;CABLES.OPS["a4ffe852-d200-4b96-9347-68feb01122ca"]={f:Ops.Math.Subtract,objName:"Ops.Math.Subtract"};Ops.Math.Multiply=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inValueFloat("number1",1),r=e.inValueFloat("number2",1),i=e.outNumber("result");e.setUiAttribs({mathTitle:true});n.onChange=r.onChange=a;a();function a(){const e=n.get();const t=r.get();i.set(e*t)}};Ops.Math.Multiply.prototype=new CABLES.Op;CABLES.OPS["1bbdae06-fbb2-489b-9bcc-36c9d65bd441"]={f:Ops.Math.Multiply,objName:"Ops.Math.Multiply"};Ops.Array.ArrayGetNumber=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inArray("array"),r=e.inValueInt("index"),i=e.inFloat("Value Invalid Index",0),a=e.outNumber("value"),s=e.outBoolNum("Valid Index",true);n.ignoreValueSerialize=true;r.onChange=n.onChange=o;function o(){if(n.get()){const e=n.get()[r.get()];if(isNaN(e)){a.set(i.get());s.set(false)}else{s.set(true);a.set(parseFloat(e))}}}};Ops.Array.ArrayGetNumber.prototype=new CABLES.Op;CABLES.OPS["d1189078-70cf-437d-9a37-b2ebe89acdaf"]={f:Ops.Array.ArrayGetNumber,objName:"Ops.Array.ArrayGetNumber"};Ops.Vars.VarSetArray_v2=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inArray("Value",null);e.varName=e.inDropDown("Variable",[],"",true);new CABLES.VarSetOpWrapper(e,"array",n,e.varName)};Ops.Vars.VarSetArray_v2.prototype=new CABLES.Op;CABLES.OPS["8088290f-45d4-4312-b4ca-184d34ca4667"]={f:Ops.Vars.VarSetArray_v2,objName:"Ops.Vars.VarSetArray_v2"};Ops.Vars.VarGetArray_v2=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.outArray("Value");e.varName=e.inValueSelect("Variable",[],"",true);new CABLES.VarGetOpWrapper(e,"array",e.varName,n)};Ops.Vars.VarGetArray_v2.prototype=new CABLES.Op;CABLES.OPS["afa79294-aa9c-43bc-a49a-cade000a1de5"]={f:Ops.Vars.VarGetArray_v2,objName:"Ops.Vars.VarGetArray_v2"};Ops.Array.Array_v3=function(){CABLES.Op.apply(this,arguments);const t=this;const e=t.attachments={};const r=t.inValueInt("Array length",10),n=t.inSwitch("Mode select",["Number","1,2,3,4","0-1"],"Number"),i=t.inValueFloat("Default Value"),a=t.inBool("Reverse",false),s=t.outArray("Array"),o=t.outNumber("Array length out");let l=[];let u=0;const c=0;const p=1;const h=2;n.onChange=f;a.onChange=i.onChange=r.onChange=d;f();d();function f(){let e=n.get();if(e==="Number")u=c;else if(e==="1,2,3,4")u=p;else if(e==="0-1")u=h;i.setUiAttribs({greyout:u!==c});t.setUiAttrib({extendTitle:n.get()});d()}function d(){l.length=0;let e=r.get();let t=i.get();let n;if(u===c){for(n=0;n<e;n++){l[n]=t}}else if(u===p){for(n=0;n<e;n++){l[n]=n}}else if(u===h){for(n=0;n<e;n++){l[n]=n/(e-1)}}if(a.get())l=l.reverse();s.setRef(l);o.set(l.length)}};Ops.Array.Array_v3.prototype=new CABLES.Op;CABLES.OPS["e4d31a46-bf64-42a8-be34-4cbb2bbc2600"]={f:Ops.Array.Array_v3,objName:"Ops.Array.Array_v3"};Ops.Gl.Matrix.Camera=function(){CABLES.Op.apply(this,arguments);const e=this;const k=e.attachments={};const t=e.inTrigger("render");const n=e.outTrigger("trigger");const r=e.inValueSelect("projection mode",["prespective","ortogonal"],"prespective");const i=e.inValue("frustum near",.01);const a=e.inValue("frustum far",5e3);const s=e.inValue("fov",45);const o=e.inValueBool("Auto Aspect Ratio",true);const l=e.inValue("Aspect Ratio",1);const u=e.inValue("eye X",0);const c=e.inValue("eye Y",0);const p=e.inValue("eye Z",5);const h=e.inValue("center X",0);const f=e.inValue("center Y",0);const d=e.inValue("center Z",0);const g=e.inValue("truck",0);const m=e.inValue("boom",0);const v=e.inValue("dolly",0);const b=e.inValue("tilt",0);const y=e.inValue("pan",0);const x=e.inValue("roll",0);const S=e.outNumber("Aspect");const O=e.outArray("Look At Array");const _=e.patch.cgl;let A=0;const C=vec3.create();const T=vec3.create();const I=vec3.create();const E=mat4.create();mat4.identity(E);const L=[];const N=vec3.create();const U=mat4.create();mat4.identity(U);let R=true;t.onTriggered=function(){if(_.frameStore.shadowPass)return n.trigger();if(!o.get())A=l.get();else A=_.getViewPort()[2]/_.getViewPort()[3];S.set(A);_.pushViewMatrix();if(R){mat4.identity(U);vec3.set(N,g.get(),m.get(),v.get());if(g.get()!==0||m.get()!==0||v.get()!==0)mat4.translate(U,U,N);if(b.get()!==0)mat4.rotateX(U,U,b.get()*CGL.DEG2RAD);if(y.get()!==0)mat4.rotateY(U,U,y.get()*CGL.DEG2RAD);if(x.get()!==0)mat4.rotateZ(U,U,x.get()*CGL.DEG2RAD);R=false}mat4.multiply(_.vMatrix,_.vMatrix,U);_.pushPMatrix();_.pushViewMatrix();if(r.get()=="prespective"){mat4.perspective(_.pMatrix,s.get()*.0174533,A,i.get(),a.get())}else if(r.get()=="ortogonal"){mat4.ortho(_.pMatrix,-1*(s.get()/14),1*(s.get()/14),-1*(s.get()/14)/A,1*(s.get()/14)/A,i.get(),a.get())}L[0]=u.get();L[1]=c.get();L[2]=p.get();L[3]=h.get();L[4]=f.get();L[5]=d.get();L[6]=0;L[7]=1;L[8]=0;O.setRef(L);vec3.set(C,0,1,0);vec3.set(T,u.get(),c.get(),p.get());vec3.set(I,h.get(),f.get(),d.get());mat4.lookAt(E,T,I,C);mat4.multiply(_.vMatrix,_.vMatrix,E);n.trigger();_.popViewMatrix();_.popPMatrix();_.popViewMatrix();if(e.isCurrentUiOp())gui.setTransformGizmo({posX:g,posY:m,posZ:v})};const P=function(){if(!o.get()){l.setUiAttribs({greyout:false})}else{l.setUiAttribs({greyout:true})}};const M=function(){R=true};g.onChange=M;m.onChange=M;v.onChange=M;b.onChange=M;y.onChange=M;x.onChange=M;o.onChange=P;P()};Ops.Gl.Matrix.Camera.prototype=new CABLES.Op;CABLES.OPS["b24dbfdc-485c-49d2-92a1-7258efd9239a"]={f:Ops.Gl.Matrix.Camera,objName:"Ops.Gl.Matrix.Camera"};Ops.Gl.Matrix.OrbitControls=function(){CABLES.Op.apply(this,arguments);const i=this;const w=i.attachments={};const B=i.inTrigger("render"),a=i.inValueFloat("min distance"),s=i.inValueFloat("max distance"),o=i.inValue("min rot y",0),l=i.inValue("max rot y",0),t=i.inValue("initial radius",0),n=i.inValueSlider("initial axis y"),r=i.inValueSlider("initial axis x"),u=i.inValueFloat("mul"),e=i.inValueSlider("Smoothness",1),G=i.inValue("Speed X",1),V=i.inValue("Speed Y",1),D=i.inValueBool("Active",true),F=i.inValueBool("Allow Panning",true),j=i.inValueBool("Allow Zooming",true),z=i.inValueBool("Allow Rotation",true),H=i.inValueBool("restricted",true),X=i.outTrigger("trigger"),c=i.outNumber("radius"),Y=i.outNumber("Rot X"),W=i.outNumber("Rot Y"),q=i.inTriggerButton("Reset");i.setPortGroup("Initial Values",[n,r,t]);i.setPortGroup("Interaction",[u,e,G,V]);i.setPortGroup("Boundaries",[o,l,a,s]);u.set(1);a.set(.01);s.set(99999);q.onTriggered=$;let p=vec3.create();const h=vec3.create();const f=vec3.create();const d=mat4.create();const Z=mat4.create();const g=vec3.create();const K=vec3.create();n.set(.5);let m=false;let v=5;c.set(v);let b=0,y=0;let x=0,S=0;vec3.set(f,0,0,0);vec3.set(h,0,1,0);const O=vec3.create();const _=vec3.create();const A=vec3.create();const C=vec3.create();let T=0;let I=0;let Q=1;let E=null;ee();i.onDelete=he;const J=Math.PI;const L=Math.PI*2;function $(){let e=0;if(T%L<-J){e=-L;T%=-L}else if(T%L>J){e=L;T%=L}else T%=L;I%=Math.PI;vec3.set(g,0,0,0);vec3.set(f,0,0,0);vec3.set(h,0,1,0);x=r.get()*Math.PI*2+e;S=n.get()-.5;v=t.get();p=R(S)}function ee(){Q=e.get()*10+1}e.onChange=ee;let te=true;function N(e,t){if(te)return t;return e+(t-e)/Q}let U=0;const ne=0;B.onTriggered=function(){const e=i.patch.cg;if(!E){ce(e.canvas);pe()}e.pushViewMatrix();T=N(T,x);I=N(I,S);let t=(I+.5)*180;if(o.get()!==0&&t<o.get()){t=o.get();I=U}else if(l.get()!==0&&t>l.get()){t=l.get();I=U}else{U=I}const n=T*CGL.RAD2DEG;W.set(t);Y.set(n);re(p,I);vec3.add(O,p,g);vec3.add(A,f,g);_[0]=N(_[0],O[0]);_[1]=N(_[1],O[1]);_[2]=N(_[2],O[2]);C[0]=N(C[0],A[0]);C[1]=N(C[1],A[1]);C[2]=N(C[2],A[2]);const r=vec3.create();mat4.lookAt(d,_,C,h);mat4.rotate(d,d,T,h);mat4.multiply(e.vMatrix,e.vMatrix,d);X.trigger();e.popViewMatrix();te=false};function re(e,t){const n=u.get();if(v<a.get()*n)v=a.get()*n;if(v>s.get()*n)v=s.get()*n;c.set(v*n);let r=0,i=0;i=360*t/2*CGL.DEG2RAD;vec3.set(e,Math.cos(i)*v*n,Math.sin(i)*v*n,0);return e}function R(e){const t=u.get();if(v<a.get()*t)v=a.get()*t;if(v>s.get()*t)v=s.get()*t;c.set(v*t);let n=0,r=0;const i=vec3.create();r=360*e/2*CGL.DEG2RAD;vec3.set(i,Math.cos(r)*v*t,Math.sin(r)*v*t,0);return i}function P(e){if(!m)return;const t=e.clientX;const n=e.clientY;let r=t-b;let i=n-y;r*=G.get();i*=V.get();if(e.buttons==2&&F.get()){g[2]+=r*.01*u.get();g[1]+=i*.01*u.get()}else if(e.buttons==4&&j.get()){v+=i*.05;p=R(S)}else{if(z.get()){x+=r*.003;S+=i*.002;if(H.get()){if(S>.5)S=.5;if(S<-.5)S=-.5}}}b=t;y=n}function M(e){b=e.clientX;y=e.clientY;m=true;try{E.setPointerCapture(e.pointerId)}catch(e){}}function k(e){m=false;try{E.releasePointerCapture(e.pointerId)}catch(e){}}function ie(){const e=i.patch.cg.canvas;if(document.pointerLockElement===e||document.mozPointerLockElement===e||document.webkitPointerLockElement===e){document.addEventListener("mousemove",P,false)}}function ae(e){}t.onChange=function(){v=t.get();$()};r.onChange=function(){T=x=r.get()*Math.PI*2};n.onChange=function(){I=S=n.get()-.5;p=R(S)};const se=function(e){if(j.get()){const t=CGL.getWheelSpeed(e)*.06;v+=parseFloat(t)*1.2;p=R(S)}};const oe=function(e){if(e.touches&&e.touches.length>0)M(e.touches[0])};const le=function(e){k()};const ue=function(e){if(e.touches&&e.touches.length>0)P(e.touches[0])};D.onChange=function(){if(D.get())pe();else he()};function ce(e){he();E=e;pe()}function pe(){if(!E)return;E.addEventListener("pointermove",P);E.addEventListener("pointerdown",M);E.addEventListener("pointerup",k);E.addEventListener("pointerleave",k);E.addEventListener("pointerenter",ae);E.addEventListener("contextmenu",function(e){e.preventDefault()});E.addEventListener("wheel",se,{passive:true})}function he(){if(!E)return;E.removeEventListener("pointermove",P);E.removeEventListener("pointerdown",M);E.removeEventListener("pointerup",k);E.removeEventListener("pointerleave",k);E.removeEventListener("pointerenter",k);E.removeEventListener("wheel",se)}p=R(0);r.set(.25);t.set(.05)};Ops.Gl.Matrix.OrbitControls.prototype=new CABLES.Op;CABLES.OPS["eaf4f7ce-08a3-4d1b-b9f4-ebc0b7b1cde1"]={f:Ops.Gl.Matrix.OrbitControls,objName:"Ops.Gl.Matrix.OrbitControls"};Ops.Gl.Shader.BasicMaterial_v3=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={basicmaterial_frag:"{{MODULES_HEAD}}\n\nIN vec2 texCoord;\n\n#ifdef VERTEX_COLORS\nIN vec4 vertCol;\n#endif\n\n#ifdef HAS_TEXTURES\n IN vec2 texCoordOrig;\n #ifdef HAS_TEXTURE_DIFFUSE\n UNI sampler2D tex;\n #endif\n #ifdef HAS_TEXTURE_OPACITY\n UNI sampler2D texOpacity;\n #endif\n#endif\n\n\n\nvoid main()\n{\n {{MODULE_BEGIN_FRAG}}\n vec4 col=color;\n\n\n #ifdef HAS_TEXTURES\n vec2 uv=texCoord;\n\n #ifdef CROP_TEXCOORDS\n if(uv.x<0.0 || uv.x>1.0 || uv.y<0.0 || uv.y>1.0) discard;\n #endif\n\n #ifdef HAS_TEXTURE_DIFFUSE\n col=texture(tex,uv);\n\n #ifdef COLORIZE_TEXTURE\n col.r*=color.r;\n col.g*=color.g;\n col.b*=color.b;\n #endif\n #endif\n col.a*=color.a;\n #ifdef HAS_TEXTURE_OPACITY\n #ifdef TRANSFORMALPHATEXCOORDS\n uv=texCoordOrig;\n #endif\n #ifdef ALPHA_MASK_IR\n col.a*=1.0-texture(texOpacity,uv).r;\n #endif\n #ifdef ALPHA_MASK_IALPHA\n col.a*=1.0-texture(texOpacity,uv).a;\n #endif\n #ifdef ALPHA_MASK_ALPHA\n col.a*=texture(texOpacity,uv).a;\n #endif\n #ifdef ALPHA_MASK_LUMI\n col.a*=dot(vec3(0.2126,0.7152,0.0722), texture(texOpacity,uv).rgb);\n #endif\n #ifdef ALPHA_MASK_R\n col.a*=texture(texOpacity,uv).r;\n #endif\n #ifdef ALPHA_MASK_G\n col.a*=texture(texOpacity,uv).g;\n #endif\n #ifdef ALPHA_MASK_B\n col.a*=texture(texOpacity,uv).b;\n #endif\n // #endif\n #endif\n #endif\n\n {{MODULE_COLOR}}\n\n #ifdef DISCARDTRANS\n if(col.a<0.2) discard;\n #endif\n\n #ifdef VERTEX_COLORS\n col*=vertCol;\n #endif\n\n outColor = col;\n}\n",basicmaterial_vert:"\n{{MODULES_HEAD}}\n\nOUT vec2 texCoord;\nOUT vec2 texCoordOrig;\n\nUNI mat4 projMatrix;\nUNI mat4 modelMatrix;\nUNI mat4 viewMatrix;\n\n#ifdef HAS_TEXTURES\n UNI float diffuseRepeatX;\n UNI float diffuseRepeatY;\n UNI float texOffsetX;\n UNI float texOffsetY;\n#endif\n\n#ifdef VERTEX_COLORS\n in vec4 attrVertColor;\n out vec4 vertCol;\n\n#endif\n\n\nvoid main()\n{\n mat4 mMatrix=modelMatrix;\n mat4 modelViewMatrix;\n\n norm=attrVertNormal;\n texCoordOrig=attrTexCoord;\n texCoord=attrTexCoord;\n #ifdef HAS_TEXTURES\n texCoord.x=texCoord.x*diffuseRepeatX+texOffsetX;\n texCoord.y=(1.0-texCoord.y)*diffuseRepeatY+texOffsetY;\n #endif\n\n #ifdef VERTEX_COLORS\n vertCol=attrVertColor;\n #endif\n\n vec4 pos = vec4(vPosition, 1.0);\n\n #ifdef BILLBOARD\n vec3 position=vPosition;\n modelViewMatrix=viewMatrix*modelMatrix;\n\n gl_Position = projMatrix * modelViewMatrix * vec4((\n position.x * vec3(\n modelViewMatrix[0][0],\n modelViewMatrix[1][0],\n modelViewMatrix[2][0] ) +\n position.y * vec3(\n modelViewMatrix[0][1],\n modelViewMatrix[1][1],\n modelViewMatrix[2][1]) ), 1.0);\n #endif\n\n {{MODULE_VERTEX_POSITION}}\n\n #ifndef BILLBOARD\n modelViewMatrix=viewMatrix * mMatrix;\n\n {{MODULE_VERTEX_MOVELVIEW}}\n\n #endif\n\n // mat4 modelViewMatrix=viewMatrix*mMatrix;\n\n #ifndef BILLBOARD\n // gl_Position = projMatrix * viewMatrix * modelMatrix * pos;\n gl_Position = projMatrix * modelViewMatrix * pos;\n #endif\n}\n"};const n=e.inTrigger("render");const r=e.outTrigger("trigger");const i=e.outObject("shader",null,"shader");i.ignoreValueSerialize=true;e.toWorkPortsNeedToBeLinked(n);e.toWorkShouldNotBeChild("Ops.Gl.TextureEffects.ImageCompose",CABLES.OP_PORT_TYPE_FUNCTION);const a=e.patch.cgl;const s=new CGL.Shader(a,"basicmaterialnew",this);s.addAttribute({type:"vec3",name:"vPosition"});s.addAttribute({type:"vec2",name:"attrTexCoord"});s.addAttribute({type:"vec3",name:"attrVertNormal",nameFrag:"norm"});s.addAttribute({type:"float",name:"attrVertIndex"});s.setModules(["MODULE_VERTEX_POSITION","MODULE_COLOR","MODULE_BEGIN_FRAG","MODULE_VERTEX_MOVELVIEW"]);s.setSource(t.basicmaterial_vert,t.basicmaterial_frag);i.setRef(s);n.onTriggered=I;const o=e.inValueSlider("r",Math.random());const l=e.inValueSlider("g",Math.random());const u=e.inValueSlider("b",Math.random());const c=e.inValueSlider("a",1);o.setUiAttribs({colorPick:true});const p=s.addUniformFrag("4f","color",o,l,u,c);s.uniformColorDiffuse=p;const h=e.inTexture("texture");let f=null;h.onChange=L;const d=e.inValueBool("colorizeTexture",false);const g=e.inValueBool("Vertex Colors",false);const m=e.inTexture("textureOpacity");let v=null;const b=e.inSwitch("Alpha Mask Source",["Luminance","R","G","B","A","1-A","1-R"],"Luminance");b.setUiAttribs({greyout:true});m.onChange=E;const y=e.inValueBool("Opacity TexCoords Transform",false);const x=e.inValueBool("Discard Transparent Pixels");const S=e.inValue("diffuseRepeatX",1),O=e.inValue("diffuseRepeatY",1),_=e.inValue("Tex Offset X",0),A=e.inValue("Tex Offset Y",0),C=e.inBool("Crop TexCoords",false);s.addUniformFrag("f","diffuseRepeatX",S);s.addUniformFrag("f","diffuseRepeatY",O);s.addUniformFrag("f","texOffsetX",_);s.addUniformFrag("f","texOffsetY",A);const T=e.inValueBool("billboard",false);b.onChange=T.onChange=x.onChange=y.onChange=C.onChange=g.onChange=d.onChange=U;e.setPortGroup("Color",[o,l,u,c]);e.setPortGroup("Color Texture",[h,g,d]);e.setPortGroup("Opacity",[m,b,x,y]);e.setPortGroup("Texture Transform",[S,O,_,A,C]);E();L();e.preRender=function(){s.bind();I()};function I(){if(!s)return;a.pushShader(s);s.popTextures();if(f&&h.get())s.pushTexture(f,h.get());if(v&&m.get())s.pushTexture(v,m.get());r.trigger();a.popShader()}function E(){if(m.get()){if(v!==null)return;s.removeUniform("texOpacity");s.define("HAS_TEXTURE_OPACITY");if(!v)v=new CGL.Uniform(s,"t","texOpacity")}else{s.removeUniform("texOpacity");s.removeDefine("HAS_TEXTURE_OPACITY");v=null}U()}function L(){if(h.get()){if(!s.hasDefine("HAS_TEXTURE_DIFFUSE"))s.define("HAS_TEXTURE_DIFFUSE");if(!f)f=new CGL.Uniform(s,"t","texDiffuse")}else{s.removeUniform("texDiffuse");s.removeDefine("HAS_TEXTURE_DIFFUSE");f=null}N()}function N(){const e=h.isLinked()||m.isLinked();S.setUiAttribs({greyout:!e});O.setUiAttribs({greyout:!e});_.setUiAttribs({greyout:!e});A.setUiAttribs({greyout:!e});d.setUiAttribs({greyout:!e});b.setUiAttribs({greyout:!m.get()});y.setUiAttribs({greyout:!m.get()});let t=true;t=h.get()&&!d.get();o.setUiAttribs({greyout:t});l.setUiAttribs({greyout:t});u.setUiAttribs({greyout:t})}function U(){s.toggleDefine("VERTEX_COLORS",g.get());s.toggleDefine("CROP_TEXCOORDS",C.get());s.toggleDefine("COLORIZE_TEXTURE",d.get());s.toggleDefine("TRANSFORMALPHATEXCOORDS",y.get());s.toggleDefine("DISCARDTRANS",x.get());s.toggleDefine("BILLBOARD",T.get());s.toggleDefine("ALPHA_MASK_ALPHA",b.get()=="A");s.toggleDefine("ALPHA_MASK_IALPHA",b.get()=="1-A");s.toggleDefine("ALPHA_MASK_IR",b.get()=="1-R");s.toggleDefine("ALPHA_MASK_LUMI",b.get()=="Luminance");s.toggleDefine("ALPHA_MASK_R",b.get()=="R");s.toggleDefine("ALPHA_MASK_G",b.get()=="G");s.toggleDefine("ALPHA_MASK_B",b.get()=="B");N()}};Ops.Gl.Shader.BasicMaterial_v3.prototype=new CABLES.Op;CABLES.OPS["ec55d252-3843-41b1-b731-0482dbd9e72b"]={f:Ops.Gl.Shader.BasicMaterial_v3,objName:"Ops.Gl.Shader.BasicMaterial_v3"};Ops.Math.Ease=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inValue("Value"),r=e.inValue("Min",0),i=e.inValue("Max",1),a=e.outNumber("Result"),s=new CABLES.Anim;s.createPort(e,"Easing",l);s.setValue(0,0);s.setValue(1,1);e.onLoaded=r.onChange=i.onChange=o;function o(){s.keys[0].time=s.keys[0].value=Math.min(r.get(),i.get());s.keys[1].time=s.keys[1].value=Math.max(r.get(),i.get())}function l(){s.keys[0].setEasing(s.defaultEasing)}n.onChange=function(){const e=s.getValue(n.get());a.set(e)}};Ops.Math.Ease.prototype=new CABLES.Op;CABLES.OPS["8f6e4a08-33e6-408f-ac4a-198bd03b417b"]={f:Ops.Math.Ease,objName:"Ops.Math.Ease"};Ops.Devices.Browser.JsMemory=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inTrigger("Update"),r=e.outNumber("Used Heap Size",0),i=e.outNumber("Total Heap Size",0);if(performance.memory&&performance.memory.usedJSHeapSize)n.onTriggered=a;function a(){r.set(performance.memory.usedJSHeapSize/1024/1024);i.set(performance.memory.totalJSHeapSize/1024/1024)}};Ops.Devices.Browser.JsMemory.prototype=new CABLES.Op;CABLES.OPS["7176f9c7-1ee8-419e-b58b-178cca9265e7"]={f:Ops.Devices.Browser.JsMemory,objName:"Ops.Devices.Browser.JsMemory"};Ops.Gl.Meshes.Cylinder_v2=function(){CABLES.Op.apply(this,arguments);const _=this;const e=_.attachments={};const t=_.inTrigger("render"),n=_.inValueBool("Draw",true),A=_.inValueInt("segments",40),C=_.inValueInt("stacks",1),T=_.inValueFloat("length",1),I=_.inValueFloat("outer radius",.5),E=_.inValueFloat("inner radius",0),L=_.inValueSelect("UV mode",["simple","atlas"],"simple"),N=_.inValueBool("Flip Mapping",false),U=_.inValueBool("Caps",true),R=_.inValueBool("Flat Normals",false),r=_.outTrigger("next"),P=_.outObject("geometry"),M=new CGL.Geometry("cylinder");n.setUiAttribs({title:"Render mesh"});const k=Math.PI*2,i=_.patch.cgl;let w=true;let B=null;L.setUiAttribs({hidePort:true});_.preRender=a;function a(){const e=N.get();const t=Math.max(A.get(),3)|0,n=Math.max(E.get(),0),r=Math.max(I.get(),n),i=Math.max(C.get(),C.defaultValue)|0,a=T.get(),s=a/i,o=k/t,l=L.get();let u=[],c=[],p=[],h=[],f=[],d=[],g,m,v,b,y,x,S,O;if(l=="atlas")O=.5;else O=1;for(b=0,v=-a/2;b<=i;b++,v+=s){for(y=x=0;y<=t;y++,x+=o){u.push((g=Math.sin(x))*r,(m=Math.cos(x))*r,v);S=Math.sqrt(g*g+m*m);g/=S;m/=S;c.push(g,m,0);p.push(-m,g,0);h.push(0,0,1);if(e)f.push(y/t,1-(v/a+.5)*O);else f.push((v/a+.5)*O,y/t)}}for(y=0;y<i;y++){for(b=0,S=y*(t+1);b<t;b++,S++){x=S+1;d.push(S+(t+1),x,S,S+(t+1),x+(t+1),x)}}if(n){S=u.length;for(b=y=0;b<S;b+=3,y+=2){u.push(u[b]/r*n,u[b+1]/r*n,u[b+2]);c.push(-c[b],-c[b+1],0);p.push(-p[b],-p[b+1],0);h.push(0,-h[b+1],-h[b+2]);f.push(f[y],1-f[y+1])}x=S/3;S=d.length;for(b=0;b<S;b+=6){d.push(x+d[b],x+d[b+2],x+d[b+1],x+d[b+3],x+d[b+5],x+d[b+4])}if(U.get()){x=u.length;O=x/2;S=t*3;Array.prototype.push.apply(u,u.slice(0,S));Array.prototype.push.apply(u,u.slice(O,O+S));Array.prototype.push.apply(u,u.slice(O-S,O));Array.prototype.push.apply(u,u.slice(x-S,x));S=t*2;for(b=0;b<S;b++)c.push(0,0,-1),p.push(-1,0,0),h.push(0,-1,0);for(b=0;b<S;b++)c.push(0,0,1),p.push(1,0,0),h.push(0,1,0);if(l=="atlas"){S=n/r*.5;for(b=O=0;b<t;b++,O+=o)f.push(Math.sin(O)*.25+.75,Math.cos(O)*.25+.25);for(b=O=0;b<t;b++,O+=o)f.push((Math.sin(O)*S+.5)*.5+.5,(Math.cos(O)*S+.5)*.5);for(b=O=0;b<t;b++,O+=o)f.push(Math.sin(O)*.25+.75,Math.cos(O)*.25+.75);for(b=O=0;b<t;b++,O+=o)f.push((Math.sin(O)*S+.5)*.5+.5,(Math.cos(O)*S+.5)*.5+.5)}else{for(b=0;b<S;b++)f.push(0,0);for(b=0;b<S;b++)f.push(1,1)}for(b=0,O=x/3+g;b<t-1;b++,O++){d.push(O+1,O+t,O,O+t+1,O+t,O+1)}d.push(O+t,x/3+g,x/3+t+g,O+t,O,x/3+g);g+=t*2;for(b=0,O=x/3+g;b<t-1;b++,O++){d.push(O,O+t,O+1,O+1,O+t,O+t+1)}d.push(x/3+t+g,x/3+g,O+t,x/3+g,O,O+t)}}else{x=u.length;S=x/3;u.push(0,0,-a/2);Array.prototype.push.apply(u,u.slice(0,t*3));for(b=0;b<=t;b++)c.push(0,0,-1),p.push(-1,0,0),h.push(0,-1,0);if(U.get()){u.push(0,0,a/2);Array.prototype.push.apply(u,u.slice(x-t*3,x));for(b=0;b<=t;b++)c.push(0,0,1),p.push(1,0,0),h.push(0,1,0);if(l=="atlas"){f.push(.75,.25);for(b=x=0;b<t;b++,x+=o)f.push(Math.sin(x)*.25+.75,Math.cos(x)*.25+.25);f.push(.75,.75);for(b=x=0;b<t;b++,x+=o)f.push(Math.sin(x)*.25+.75,Math.cos(x)*.25+.75)}else{for(b=0;b<=t;b++)f.push(0,0);for(b=0;b<=t;b++)f.push(1,1)}d.push(S+1,S,S+t);for(b=1;b<t;b++)d.push(S,S+b,S+b+1);S+=t+1;d.push(S,S+1,S+t);for(b=1;b<t;b++)d.push(S,S+b+1,S+b);S+=t+1}}M.clear();M.vertices=u;M.texCoords=f;M.vertexNormals=c;M.tangents=p;M.biTangents=h;M.verticesIndices=d;if(R.get())M.unIndex();P.setRef(M);if(!B)B=_.patch.cg.createMesh(M,{opId:_.id});else B.setGeom(M);w=false}t.onTriggered=function(){if(w)a();if(n.get())B.render(i.getShader());r.trigger()};A.onChange=I.onChange=E.onChange=U.onChange=T.onChange=N.onChange=C.onChange=R.onChange=L.onChange=function(){w=true};_.onDelete=function(){if(B)B.dispose()}};Ops.Gl.Meshes.Cylinder_v2.prototype=new CABLES.Op;CABLES.OPS["2899ad67-1e64-4692-af2a-c3b9078f1b5f"]={f:Ops.Gl.Meshes.Cylinder_v2,objName:"Ops.Gl.Meshes.Cylinder_v2"};Ops.Gl.Shader.MatCapMaterial_v3=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={matcap_frag:"{{MODULES_HEAD}}\n\n#ifdef HAS_TEXTURES\n IN vec2 texCoord;\n#endif\n\nIN vec3 transformedNormal;\nIN vec3 viewSpacePosition;\n\nUNI vec4 inColor;\n\nUNI sampler2D texMatcap;\n\n#ifdef HAS_DIFFUSE_TEXTURE\n UNI sampler2D texDiffuse;\n#endif\n\n#ifdef USE_SPECULAR_TEXTURE\n UNI sampler2D texSpec;\n UNI sampler2D texSpecMatCap;\n#endif\n\n#ifdef HAS_AO_TEXTURE\n UNI sampler2D texAo;\n UNI float aoIntensity;\n#endif\n\n#ifdef HAS_NORMAL_TEXTURE\n IN vec3 vBiTangent;\n IN vec3 vTangent;\n IN mat3 normalMatrix;\n\n UNI sampler2D texNormal;\n UNI float normalMapIntensity;\n#endif\n\n#ifdef HAS_TEXTURE_OPACITY\n UNI sampler2D texOpacity;\n#endif\n\n#ifdef CALC_SSNORMALS\n IN vec3 eye_relative_pos;\n\n // from https://www.enkisoftware.com/devlogpost-20150131-1-Normal_generation_in_the_pixel_shader\n vec3 CalculateScreenSpaceNormals() {\n \tvec3 dFdxPos = dFdx(eye_relative_pos);\n \tvec3 dFdyPos = dFdy(eye_relative_pos);\n \tvec3 screenSpaceNormal = normalize( cross(dFdxPos, dFdyPos));\n return normalize(screenSpaceNormal);\n }\n#endif\n\n// * taken & modified from https://github.com/mrdoob/three.js/blob/dev/src/renderers/shaders/ShaderLib/meshmatcap_frag.glsl.js\nvec2 getMatCapUV(vec3 viewSpacePosition, vec3 normal) {\n vec3 viewDir = normalize(-viewSpacePosition);\n\tvec3 x = normalize(vec3(viewDir.z, 0.0, - viewDir.x));\n\tvec3 y = normalize(cross(viewDir, x));\n\tvec2 uv = vec2(dot(x, normal), dot(y, normal)) * 0.495 + 0.5; // 0.495 to remove artifacts caused by undersized matcap disks\n\treturn uv;\n}\n\nvoid main()\n{\n vec3 viewSpaceNormal = normalize(transformedNormal);\n\n #ifdef HAS_TEXTURES\n vec2 texCoords = texCoord;\n {{MODULE_BEGIN_FRAG}}\n #endif\n\n\n #ifdef CALC_SSNORMALS\n viewSpaceNormal = CalculateScreenSpaceNormals();\n #endif\n\n\n #ifdef HAS_NORMAL_TEXTURE\n vec3 normalFromMap = texture( texNormal, texCoord ).xyz * 2.0 - 1.0;\n normalFromMap = normalize(normalFromMap);\n\n vec3 tangent;\n vec3 binormal;\n\n #ifdef CALC_TANGENT\n vec3 c1 = cross(normalFromMap, vec3(0.0, 0.0, 1.0));\n vec3 c2 = cross(normalFromMap, vec3(0.0, 1.0, 0.0));\n\n tangent = c1;\n tangent = normalize(tangent);\n binormal = cross(viewSpaceNormal, tangent);\n binormal = normalize(binormal);\n #endif\n\n #ifndef CALC_TANGENT\n tangent = normalize(normalMatrix * vTangent);\n vec3 bitangent = normalize(normalMatrix * vBiTangent);\n binormal = normalize(cross(viewSpaceNormal, bitangent));\n #endif\n\n normalFromMap = normalize(\n tangent * normalFromMap.x\n + binormal * normalFromMap.y\n + viewSpaceNormal * normalFromMap.z\n );\n\n vec3 mixedNormal = normalize(viewSpaceNormal + normalFromMap * normalMapIntensity);\n\n viewSpaceNormal = mixedNormal;\n #endif\n\n vec4 col = texture(texMatcap, getMatCapUV(viewSpacePosition, viewSpaceNormal));\n\n #ifdef HAS_DIFFUSE_TEXTURE\n col = col*texture(texDiffuse, texCoords);\n #endif\n\n col.rgb *= inColor.rgb;\n\n\n #ifdef HAS_AO_TEXTURE\n col = col\n * mix(\n vec4(1.0,1.0,1.0,1.0),\n texture(texAo, texCoords),\n aoIntensity\n );\n #endif\n\n #ifdef USE_SPECULAR_TEXTURE\n vec4 spec = texture(texSpecMatCap, getMatCapUV(viewSpacePosition, viewSpaceNormal));\n spec *= texture(texSpec, texCoords);\n col += spec;\n #endif\n\n col.a *= inColor.a;\n\n #ifdef HAS_TEXTURE_OPACITY\n #ifdef TRANSFORMALPHATEXCOORDS\n texCoords=vec2(texCoord.s,1.0-texCoord.t);\n texCoords.y = 1. - texCoords.y;\n #endif\n #ifdef ALPHA_MASK_ALPHA\n col.a*=texture(texOpacity,texCoords).a;\n #endif\n #ifdef ALPHA_MASK_LUMI\n col.a*=dot(vec3(0.2126,0.7152,0.0722), texture(texOpacity,texCoords).rgb);\n #endif\n #ifdef ALPHA_MASK_R\n col.a*=texture(texOpacity,texCoords).r;\n #endif\n #ifdef ALPHA_MASK_G\n col.a*=texture(texOpacity,texCoords).g;\n #endif\n #ifdef ALPHA_MASK_B\n col.a*=texture(texOpacity,texCoords).b;\n #endif\n\n #ifdef DISCARDTRANS\n if(col.a < 0.2) discard;\n #endif\n #endif\n\n {{MODULE_COLOR}}\n\n outColor = col;\n}",matcap_vert:"IN vec3 vPosition;\n\n#ifdef HAS_TEXTURES\n IN vec2 attrTexCoord;\n#endif\n\nIN vec3 attrVertNormal;\nIN float attrVertIndex;\n\n#ifdef HAS_NORMAL_TEXTURE\n IN vec3 attrTangent;\n IN vec3 attrBiTangent;\n OUT vec3 vBiTangent;\n OUT vec3 vTangent;\n#endif\n\nUNI mat4 projMatrix;\nUNI mat4 modelMatrix;\nUNI mat4 viewMatrix;\nUNI vec3 camPos;\n\n#ifdef HAS_TEXTURES\n UNI vec2 texOffset;\n UNI vec2 texRepeat;\n OUT vec2 texCoord;\n#endif\n\nOUT mat3 normalMatrix;\nOUT vec3 viewSpacePosition;\nOUT vec3 transformedNormal;\n\n{{MODULES_HEAD}}\n\n#ifdef CALC_SSNORMALS\n // from https://www.enkisoftware.com/devlogpost-20150131-1-Normal_generation_in_the_pixel_shader\n OUT vec3 eye_relative_pos;\n#endif\n\nmat3 transposeMat3(mat3 m) {\n return mat3(m[0][0], m[1][0], m[2][0],\n m[0][1], m[1][1], m[2][1],\n m[0][2], m[1][2], m[2][2]);\n}\n\n mat3 inverseMat3(mat3 m) {\n float a00 = m[0][0], a01 = m[0][1], a02 = m[0][2];\n float a10 = m[1][0], a11 = m[1][1], a12 = m[1][2];\n float a20 = m[2][0], a21 = m[2][1], a22 = m[2][2];\n\n float b01 = a22 * a11 - a12 * a21;\n float b11 = -a22 * a10 + a12 * a20;\n float b21 = a21 * a10 - a11 * a20;\n\n float det = a00 * b01 + a01 * b11 + a02 * b21;\n\n return mat3(b01, (-a22 * a01 + a02 * a21), (a12 * a01 - a02 * a11),\n b11, (a22 * a00 - a02 * a20), (-a12 * a00 + a02 * a10),\n b21, (-a21 * a00 + a01 * a20), (a11 * a00 - a01 * a10)) / det;\n}\n\nvoid main()\n{\n #ifdef HAS_TEXTURES\n texCoord = texRepeat * vec2(attrTexCoord.x, attrTexCoord.y) + texOffset;\n texCoord.y = 1. - texCoord.y;\n #endif\n\n mat4 mMatrix = modelMatrix;\n mat4 mvMatrix;\n\n #ifdef HAS_NORMAL_TEXTURE\n vec3 tangent = attrTangent;\n vec3 bitangent = attrBiTangent;\n vTangent = attrTangent;\n vBiTangent = attrBiTangent;\n #endif\n\n vec4 pos = vec4(vPosition, 1.);\n vec3 norm = attrVertNormal;\n\n {{MODULE_VERTEX_POSITION}}\n\n mvMatrix = viewMatrix * mMatrix;\n vec3 normal = norm;\n\n normalMatrix = transposeMat3(inverseMat3(mat3(mvMatrix)));\n\n vec3 fragPos = vec3((mvMatrix) * pos);\n viewSpacePosition = normalize(fragPos);\n\n #ifdef CALC_SSNORMALS\n eye_relative_pos = -(vec3(viewMatrix * vec4(camPos, 1.)) - fragPos);\n #endif\n\n transformedNormal = normalize(mat3(normalMatrix) * normal);\n\n mat4 modelViewMatrix=mvMatrix;\n {{MODULE_VERTEX_MOVELVIEW}}\n\n gl_Position = projMatrix * modelViewMatrix * pos;\n\n}"};const n=e.patch.cgl;const w=e.inTrigger("Render"),r=e.inTexture("MatCap"),i=e.inTexture("Diffuse"),a=e.inTexture("Normal"),s=e.inTexture("Specular Mask"),o=e.inTexture("Specular MatCap"),l=e.inTexture("AO Texture"),u=e.inTexture("Opacity Texture"),c=e.inValueSlider("r",1),p=e.inValueSlider("g",1),h=e.inValueSlider("b",1),f=e.inValueSlider("Opacity",1),d=e.inValueSlider("AO Intensity",1),g=e.inFloatSlider("Normal Map Intensity",1),m=e.inValue("Repeat X",1),v=e.inValue("Repeat Y",1),b=e.inValue("Offset X",0),y=e.inValue("Offset Y",0),x=e.inValueBool("Screen Space Normals"),S=e.inValueBool("Calc normal tangents",true),O=e.inValueBool("Opacity TexCoords Transform",false),_=e.inValueBool("Discard Transparent Pixels"),B=e.outTrigger("Next"),G=e.outObject("Shader");c.setUiAttribs({colorPick:true});const A=e.inSwitch("Alpha Mask Source",["Luminance","R","G","B","A"],"Luminance");A.setUiAttribs({greyout:true});e.setPortGroup("Texture Opacity",[A,O,_]);e.setPortGroup("Texture Transforms",[d,g,m,v,b,y,S,x]);e.setPortGroup("Texture Maps",[i,a,s,o,l,u]);e.setPortGroup("Color",[c,p,h,f]);const C=new CGL.Shader(n,"MatCapMaterialNew3");const V=new CGL.Uniform(C,"f","opacity",f);C.setModules(["MODULE_VERTEX_POSITION","MODULE_COLOR","MODULE_BEGIN_FRAG","MODULE_VERTEX_MOVELVIEW"]);C.setSource(t.matcap_vert,t.matcap_frag);G.set(C);const D=new CGL.Uniform(C,"t","texMatcap");let T=null;let I=null;let E=null;let L=null;let N=null;let U=null;const F=new CGL.Uniform(C,"2f","texOffset",b,y);const j=new CGL.Uniform(C,"2f","texRepeat",m,v);const z=new CGL.Uniform(C,"f","aoIntensity",d);const H=new CGL.Uniform(C,"4f","inColor",c,p,h,f);S.onChange=R;R();function R(){if(S.get())C.define("CALC_TANGENT");else C.removeDefine("CALC_TANGENT")}x.onChange=function(){if(x.get()){if(n.glVersion<2){n.gl.getExtension("OES_standard_derivatives");C.enableExtension("GL_OES_standard_derivatives")}C.define("CALC_SSNORMALS")}else C.removeDefine("CALC_SSNORMALS")};r.onChange=P;function P(){if(!n.defaultMatcapTex3){const r=new Uint8Array(256*4);for(let n=0;n<16;n++){for(let t=0;t<16;t++){let e=t*16;e*=Math.min(1,(n+t/3)/8);r[(n+t*16)*4+0]=r[(n+t*16)*4+1]=r[(n+t*16)*4+2]=e;r[(n+t*16)*4+3]=255}}n.defaultMatcapTex3=new CGL.Texture(n);n.defaultMatcapTex3.initFromData(r,16,16,CGL.Texture.FILTER_LINEAR,CGL.Texture.WRAP_REPEAT)}}i.onChange=function(){if(i.get()){if(T!==null)return;C.define("HAS_DIFFUSE_TEXTURE");C.removeUniform("texDiffuse");T=new CGL.Uniform(C,"t","texDiffuse")}else{C.removeDefine("HAS_DIFFUSE_TEXTURE");C.removeUniform("texDiffuse");T=null}};a.onChange=function(){if(a.get()){if(I!==null)return;C.define("HAS_NORMAL_TEXTURE");C.removeUniform("texNormal");I=new CGL.Uniform(C,"t","texNormal");if(!E)E=new CGL.Uniform(C,"f","normalMapIntensity",g)}else{C.removeDefine("HAS_NORMAL_TEXTURE");C.removeUniform("texNormal");I=null}};l.onChange=function(){if(l.get()){if(U!==null)return;C.define("HAS_AO_TEXTURE");C.removeUniform("texAo");U=new CGL.Uniform(C,"t","texAo")}else{C.removeDefine("HAS_AO_TEXTURE");C.removeUniform("texAo");U=null}};s.onChange=o.onChange=function(){if(s.get()&&o.get()){if(L!==null)return;C.define("USE_SPECULAR_TEXTURE");C.removeUniform("texSpec");C.removeUniform("texSpecMatCap");L=new CGL.Uniform(C,"t","texSpec");N=new CGL.Uniform(C,"t","texSpecMatCap")}else{C.removeDefine("USE_SPECULAR_TEXTURE");C.removeUniform("texSpec");C.removeUniform("texSpecMatCap");L=null;N=null}};function M(){if(A.get()=="Alpha Channel")C.define("ALPHA_MASK_ALPHA");else C.removeDefine("ALPHA_MASK_ALPHA");if(A.get()=="Luminance")C.define("ALPHA_MASK_LUMI");else C.removeDefine("ALPHA_MASK_LUMI");if(A.get()=="R")C.define("ALPHA_MASK_R");else C.removeDefine("ALPHA_MASK_R");if(A.get()=="G")C.define("ALPHA_MASK_G");else C.removeDefine("ALPHA_MASK_G");if(A.get()=="B")C.define("ALPHA_MASK_B");else C.removeDefine("ALPHA_MASK_B")}A.onChange=M;u.onChange=X;let k=null;function X(){if(u.get()){if(k!==null)return;C.removeUniform("texOpacity");C.define("HAS_TEXTURE_OPACITY");if(!k)k=new CGL.Uniform(C,"t","texOpacity");A.setUiAttribs({greyout:false});_.setUiAttribs({greyout:false});O.setUiAttribs({greyout:false})}else{C.removeUniform("texOpacity");C.removeDefine("HAS_TEXTURE_OPACITY");k=null;A.setUiAttribs({greyout:true});_.setUiAttribs({greyout:true});O.setUiAttribs({greyout:true})}M()}_.onChange=function(){if(_.get())C.define("DISCARDTRANS");else C.removeDefine("DISCARDTRANS")};O.onChange=function(){if(O.get())C.define("TRANSFORMALPHATEXCOORDS");else C.removeDefine("TRANSFORMALPHATEXCOORDS")};function Y(){if(s.get()&&!o.get()){e.setUiError("specNoMatCapSpec","You connected a specular texture but have not connected a specular matcap texture. You need to connect both texture inputs for the specular input to work.",1);e.setUiError("noSpecMatCapSpec",null)}else if(!s.get()&&o.get()){e.setUiError("noSpecMatCapSpec","You connected a specular matcap texture but have not connected a specular texture. You need to connect both texture inputs for the specular input to work.",1);e.setUiError("specNoMatCapSpec",null)}else if(s.get()&&o.get()){e.setUiError("specNoMatCapSpec",null);e.setUiError("noSpecMatCapSpec",null)}else{e.setUiError("specNoMatCapSpec",null);e.setUiError("noSpecMatCapSpec",null)}}w.onTriggered=function(){Y();if(!n.defaultMatcapTex3)P();C.popTextures();const e=r.get()||n.defaultMatcapTex3;C.pushTexture(D,e.tex);if(i.get()&&T)C.pushTexture(T,i.get().tex);if(a.get()&&I)C.pushTexture(I,a.get().tex);if(s.get()&&L)C.pushTexture(L,s.get().tex);if(o.get()&&N)C.pushTexture(N,o.get().tex);if(l.get()&&U)C.pushTexture(U,l.get().tex);if(u.get()&&k)C.pushTexture(k,u.get().tex);n.pushShader(C);B.trigger();n.popShader()}};Ops.Gl.Shader.MatCapMaterial_v3.prototype=new CABLES.Op;CABLES.OPS["c1dd6e76-61b4-471a-b8d1-f550a5a9a4f4"]={f:Ops.Gl.Shader.MatCapMaterial_v3,objName:"Ops.Gl.Shader.MatCapMaterial_v3"};Ops.Gl.Texture_v2=function(){CABLES.Op.apply(this,arguments);const i=this;const e=i.attachments={};const a=i.inUrl("File",[".jpg",".png",".webp",".jpeg",".avif"]),t=i.inSwitch("Filter",["nearest","linear","mipmap"]),n=i.inValueSelect("Wrap",["repeat","mirrored repeat","clamp to edge"],"clamp to edge"),r=i.inSwitch("Anisotropic",["0","1","2","4","8","16"],"0"),s=i.inSwitch("Data Format",["R","RG","RGB","RGBA","SRGBA"],"RGBA"),o=i.inValueBool("Flip",false),l=i.inValueBool("Pre Multiplied Alpha",false),u=i.inValueBool("Active",true),c=i.inBool("Save Memory",true),p=i.outTexture("Texture"),h=i.inBool("Add Cachebuster",true),f=i.outNumber("Width"),d=i.outNumber("Height"),g=i.outNumber("Aspect Ratio"),m=i.outBoolNum("Loaded",0),v=i.outBoolNum("Loading",0);const b=i.patch.cgl;i.toWorkPortsNeedToBeLinked(p);i.setPortGroup("Size",[f,d]);let y=null;let x=null;let S=null;let O=CGL.Texture.FILTER_MIPMAP;let _=CGL.Texture.WRAP_REPEAT;let A=0;let C=0;l.setUiAttribs({hidePort:true});l.onChange=a.onChange=s.onChange=h.onChange=o.onChange=I;r.onChange=t.onChange=N;n.onChange=U;t.set("mipmap");n.set("repeat");p.set(CGL.Texture.getEmptyTexture(b));u.onChange=function(){if(u.get()){if(y!=a.get()||!S)I();else p.set(S)}else{p.set(CGL.Texture.getEmptyTexture(b));f.set(CGL.Texture.getEmptyTexture(b).width);d.set(CGL.Texture.getEmptyTexture(b).height);if(S)S.delete();i.setUiAttrib({extendTitle:""});S=null}};const T=function(){const e=CGL.Texture.getTempTexture(b);p.set(e)};function I(e){clearTimeout(C);C=setTimeout(function(){L(e)},30)}function E(){if(s.get()=="R")return CGL.Texture.PFORMATSTR_R8UB;if(s.get()=="RG")return CGL.Texture.PFORMATSTR_RG8UB;if(s.get()=="RGB")return CGL.Texture.PFORMATSTR_RGB8UB;if(s.get()=="SRGBA")return CGL.Texture.PFORMATSTR_SRGBA8;return CGL.Texture.PFORMATSTR_RGBA8UB}function L(e){i.checkMainloopExists();if(!u.get())return;if(x)x=b.patch.loading.finished(x);x=b.patch.loading.start("textureOp",a.get(),i);let t=i.patch.getFilePath(String(a.get()));if((h.get()||e)&&CABLES.UI)t=CABLES.cacheBust(t);if(String(a.get()).indexOf("data:")==0)t=a.get();let n=false;y=a.get();if(a.get()&&a.get().length>1){m.set(false);v.set(true);const r=a.get();i.setUiAttrib({extendTitle:CABLES.basename(t)});if(n)i.refreshParams();b.patch.loading.addAssetLoadingTask(()=>{i.setUiError("urlerror",null);CGL.Texture.load(b,t,function(e,t){b.checkFrameStarted("texture inittexture");if(a.get()!=r){b.patch.loading.finished(x);x=null;return}if(S)S.delete();if(e){const n=CGL.Texture.getErrorTexture(b);p.setRef(n);i.setUiError("urlerror",'could not load texture: "'+a.get()+'"',2);b.patch.loading.finished(x);x=null;return}f.set(t.width);d.set(t.height);g.set(t.width/t.height);S=t;p.setRef(S);v.set(false);m.set(true);if(c.get())S.image=null;if(x){b.patch.loading.finished(x);x=null}i.checkMainloopExists()},{anisotropic:A,wrap:_,flip:o.get(),unpackAlpha:l.get(),pixelFormat:E(),filter:O});i.checkMainloopExists()})}else{b.patch.loading.finished(x);x=null;T()}}function N(){if(t.get()=="nearest")O=CGL.Texture.FILTER_NEAREST;else if(t.get()=="linear")O=CGL.Texture.FILTER_LINEAR;else if(t.get()=="mipmap")O=CGL.Texture.FILTER_MIPMAP;else if(t.get()=="Anisotropic")O=CGL.Texture.FILTER_ANISOTROPIC;r.setUiAttribs({greyout:O!=CGL.Texture.FILTER_MIPMAP});A=parseFloat(r.get());I()}function U(){if(n.get()=="repeat")_=CGL.Texture.WRAP_REPEAT;if(n.get()=="mirrored repeat")_=CGL.Texture.WRAP_MIRRORED_REPEAT;if(n.get()=="clamp to edge")_=CGL.Texture.WRAP_CLAMP_TO_EDGE;I()}i.onFileChanged=function(e){if(a.get()&&a.get().indexOf(e)>-1){p.set(CGL.Texture.getEmptyTexture(i.patch.cgl));p.set(CGL.Texture.getTempTexture(b));L(true)}}};Ops.Gl.Texture_v2.prototype=new CABLES.Op;CABLES.OPS["790f3702-9833-464e-8e37-6f0f813f7e16"]={f:Ops.Gl.Texture_v2,objName:"Ops.Gl.Texture_v2"};Ops.Gl.RenderToTexture_v3=function(){CABLES.Op.apply(this,arguments);const i=this;const e=i.attachments={};const t=i.inTrigger("render"),n=i.inSwitch("Size",["Canvas","Manual"],"Canvas"),r=i.inValueInt("texture width",512),a=i.inValueInt("texture height",512),s=i.inBool("Auto Aspect",true),o=i.inSwitch("filter",["nearest","linear","mipmap"],"linear"),l=i.inSwitch("Wrap",["Clamp","Repeat","Mirror"],"Repeat"),u=i.inSwitch("MSAA",["none","2x","4x","8x"],"none"),c=i.outTrigger("trigger"),p=i.outTexture("texture"),h=i.outTexture("textureDepth"),f=i.inDropDown("Pixel Format",CGL.Texture.PIXELFORMATS,CGL.Texture.PFORMATSTR_RGBA8UB),d=i.inValueBool("Depth",true),g=i.inValueBool("Clear",true);const m=i.patch.cgl;let v=null;let b=true;i.setPortGroup("Size",[n,r,a,s]);f.onChange=d.onChange=g.onChange=o.onChange=l.onChange=u.onChange=x;n.onChange=y;t.onTriggered=i.preRender=S;y();function y(){r.setUiAttribs({greyout:n.get()!="Manual"});a.setUiAttribs({greyout:n.get()!="Manual"});s.setUiAttribs({greyout:n.get()!="Manual"})}function x(){b=true}function S(){CGL.TextureEffect.checkOpNotInTextureEffect(i);if(!v||b){if(v)v.delete();let n=CGL.Texture.WRAP_REPEAT;if(l.get()=="Clamp")n=CGL.Texture.WRAP_CLAMP_TO_EDGE;else if(l.get()=="Mirror")n=CGL.Texture.WRAP_MIRRORED_REPEAT;let r=CGL.Texture.FILTER_NEAREST;if(o.get()=="nearest")r=CGL.Texture.FILTER_NEAREST;else if(o.get()=="linear")r=CGL.Texture.FILTER_LINEAR;else if(o.get()=="mipmap")r=CGL.Texture.FILTER_MIPMAP;if(f.get().indexOf("loat")&&o.get()=="mipmap")i.setUiError("fpmipmap","Can't use mipmap and float texture at the same time");else i.setUiError("fpmipmap",null);if(m.glVersion>=2){let e=true;let t=4;if(u.get()=="none"){t=0;e=false}if(u.get()=="2x")t=2;if(u.get()=="4x")t=4;if(u.get()=="8x")t=8;v=new CGL.Framebuffer2(m,8,8,{name:"render2texture "+i.id,pixelFormat:f.get(),multisampling:e,multisamplingSamples:t,wrap:n,filter:r,depth:d.get(),clear:g.get()})}else{v=new CGL.Framebuffer(m,8,8,{isFloatingPointTexture:false,clear:g.get()})}if(v&&v.valid){h.set(v.getTextureDepth());b=false}else{v=null;b=true}}let e=s.get();if(n.get()=="Canvas"){e=true;r.set(i.patch.cgl.checkTextureSize(m.canvasWidth));a.set(i.patch.cgl.checkTextureSize(m.canvasHeight))}if(v.getWidth()!=i.patch.cgl.checkTextureSize(r.get())||v.getHeight()!=i.patch.cgl.checkTextureSize(a.get())){v.setSize(i.patch.cgl.checkTextureSize(r.get()),i.patch.cgl.checkTextureSize(a.get()))}v.renderStart(m);m.pushViewPort(0,0,r.get(),a.get());if(e)mat4.perspective(m.pMatrix,45,r.get()/a.get(),.1,1e3);c.trigger();v.renderEnd(m);m.popViewPort();h.setRef(v.getTextureDepth());p.setRef(v.getTextureColor())}};Ops.Gl.RenderToTexture_v3.prototype=new CABLES.Op;CABLES.OPS["41eec5c7-c480-477a-be81-04c3efac8357"]={f:Ops.Gl.RenderToTexture_v3,objName:"Ops.Gl.RenderToTexture_v3"};Ops.Gl.Meshes.Rectangle_v4=function(){CABLES.Op.apply(this,arguments);const t=this;const e=t.attachments={};const n=t.inTrigger("render"),r=t.inValueBool("Render Mesh",true),I=t.inValue("width",1),E=t.inValue("height",1),L=t.inSwitch("pivot x",["left","center","right"],"center"),N=t.inSwitch("pivot y",["top","center","bottom"],"center"),U=t.inSwitch("axis",["xy","xz"],"xy"),R=t.inBool("Flip TexCoord X",false),P=t.inBool("Flip TexCoord Y",true),M=t.inValueInt("num columns",1),k=t.inValueInt("num rows",1),i=t.outTrigger("trigger"),w=t.outObject("geometry",null,"geometry");w.ignoreValueSerialize=true;const a=t.patch.cgl;const B=new CGL.Geometry("rectangle");r.setUiAttribs({title:"Render"});n.setUiAttribs({title:"Trigger"});i.setUiAttribs({title:"Next"});t.setPortGroup("Pivot",[L,N,U]);t.setPortGroup("Size",[I,E]);t.setPortGroup("Structure",[M,k]);t.toWorkPortsNeedToBeLinked(n);t.toWorkShouldNotBeChild("Ops.Gl.TextureEffects.ImageCompose",CABLES.OP_PORT_TYPE_TRIGGER);const G=0;const V=1;let D=G;let F=null;let j=true;let z=true;const s=vec3.create();vec3.set(s,1,1,1);U.onChange=L.onChange=N.onChange=R.onChange=P.onChange=k.onChange=M.onChange=o;H();I.onChange=E.onChange=()=>{if(z)H();else j=true};function H(){if(D===G)vec3.set(s,I.get(),E.get(),1);if(D===V)vec3.set(s,I.get(),1,E.get())}w.onLinkChanged=()=>{z=!w.isLinked();H();j=true};function o(){j=true}n.onTriggered=()=>{if(j)l();const e=t.patch.cg;if(F&&r.get()){if(z){e.pushModelMatrix();mat4.scale(e.mMatrix,e.mMatrix,s)}F.render(e.getShader());if(z)e.popModelMatrix()}i.trigger()};t.onDelete=()=>{if(F)F.dispose();o()};function l(){if(U.get()=="xy")D=G;if(U.get()=="xz")D=V;H();let n=I.get();let r=E.get();if(z)n=r=1;let i=0;let a=0;if(L.get()=="center")i=0;else if(L.get()=="right")i=-n/2;else if(L.get()=="left")i=+n/2;if(N.get()=="center")a=0;else if(N.get()=="top")a=-r/2;else if(N.get()=="bottom")a=+r/2;const s=Math.max(1,Math.round(k.get()));const o=Math.max(1,Math.round(M.get()));const l=n/o;const u=r/s;const c=[];const p=new Float32Array((o+1)*(s+1)*2);const h=new Float32Array((o+1)*(s+1)*3);const f=new Float32Array((o+1)*(s+1)*3);const d=new Float32Array((o+1)*(s+1)*3);const g=new Float32Array((o+1)*(s+1)*3);let m=0;let v=0;let b=0;let y=0;let x=0;for(let t=0;t<=s;t++){for(let e=0;e<=o;e++){h[v++]=e*l-n/2+i;if(D==V)h[v++]=0;h[v++]=t*u-r/2+a;if(D==G)h[v++]=0;p[m++]=e/o;p[m++]=t/s;if(D==G){f[b++]=0;f[b++]=0;f[b++]=1;d[y++]=1;d[y++]=0;d[y++]=0;g[x++]=0;g[x++]=1;g[x++]=0}else if(D==V){f[b++]=0;f[b++]=1;f[b++]=0;g[x++]=0;g[x++]=0;g[x++]=1}}}c.length=o*s*6;let S=0;for(let t=0;t<o;t++){for(let e=0;e<s;e++){const O=t+(o+1)*e;const _=O;const A=O+1;const C=O+o+1;const T=O+1+o+1;if(D==G){c[S++]=_;c[S++]=A;c[S++]=C;c[S++]=C;c[S++]=A;c[S++]=T}else if(D==V){c[S++]=_;c[S++]=C;c[S++]=A;c[S++]=A;c[S++]=C;c[S++]=T}}}if(P.get())for(let e=0;e<p.length;e+=2)p[e+1]=1-p[e+1];if(R.get())for(let e=0;e<p.length;e+=2)p[e]=1-p[e];B.clear();B.vertices=h;B.texCoords=p;B.verticesIndices=c;B.vertexNormals=f;B.tangents=d;B.biTangents=g;if(!F)F=t.patch.cg.createMesh(B,{opId:t.id});else F.setGeom(B);w.setRef(B);j=false}};Ops.Gl.Meshes.Rectangle_v4.prototype=new CABLES.Op;CABLES.OPS["cc8c3ede-7103-410b-849f-a645793cab39"]={f:Ops.Gl.Meshes.Rectangle_v4,objName:"Ops.Gl.Meshes.Rectangle_v4"};Ops.Gl.Matrix.TransformView=function(){CABLES.Op.apply(this,arguments);const n=this;const e=n.attachments={};const t=n.inTrigger("render"),r=n.inValueFloat("posX"),i=n.inValueFloat("posY"),a=n.inValueFloat("posZ"),s=n.inValueFloat("scale"),o=n.inValueFloat("rotX"),l=n.inValueFloat("rotY"),u=n.inValueFloat("rotZ"),c=n.outTrigger("trigger");n.setPortGroup("Position",[r,i,a]);n.setPortGroup("Scale",[s]);n.setPortGroup("Rotation",[o,u,l]);const p=vec3.create();const h=vec3.create();const f=mat4.create();mat4.identity(f);let d=false;let g=false;let m=true;let v=true;let b=true;t.onTriggered=function(){const e=n.patch.cgl;let t=false;if(m){x();t=true}if(v){S();t=true}if(b){t=true}if(t)y();e.pushViewMatrix();mat4.multiply(e.vMatrix,e.vMatrix,f);c.trigger();e.popViewMatrix();if(n.isCurrentUiOp())gui.setTransformGizmo({posX:r,posY:i,posZ:a})};n.transform3d=function(){return{pos:[r,i,a]}};function y(){mat4.identity(f);if(g)mat4.translate(f,f,p);if(o.get()!==0)mat4.rotateX(f,f,o.get()*CGL.DEG2RAD);if(l.get()!==0)mat4.rotateY(f,f,l.get()*CGL.DEG2RAD);if(u.get()!==0)mat4.rotateZ(f,f,u.get()*CGL.DEG2RAD);if(d)mat4.scale(f,f,h);A=false}function x(){g=false;if(r.get()!==0||i.get()!==0||a.get()!==0)g=true;vec3.set(p,r.get(),i.get(),a.get());m=false}function S(){d=false;if(s.get()!==0)d=true;vec3.set(h,s.get(),s.get(),s.get());_=false}function O(){m=true}function _(){v=true}function A(){b=true}o.onChange=l.onChange=u.onChange=A;s.onChange=_;r.onChange=i.onChange=a.onChange=O;o.set(0);l.set(0);u.set(0);s.set(1);r.set(0);i.set(0);a.set(0);y()};Ops.Gl.Matrix.TransformView.prototype=new CABLES.Op;CABLES.OPS["0b3e04f7-323e-4ac8-8a22-a21e2f36e0e9"]={f:Ops.Gl.Matrix.TransformView,objName:"Ops.Gl.Matrix.TransformView"};Ops.Gl.Matrix.ScaleXYZViewMatrix=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inTrigger("render"),r=e.inValueFloat("x",1),i=e.inValueFloat("y",1),a=e.inValueFloat("z",1),s=e.outTrigger("trigger");const o=e.patch.cgl;let l=vec3.create();let u=mat4.create();mat4.identity(u);r.onChange=i.onChange=a.onChange=p;p();n.onTriggered=c;function c(){o.pushViewMatrix();mat4.multiply(o.vMatrix,o.vMatrix,u);s.trigger();o.popViewMatrix()}function p(){vec3.set(l,r.get(),i.get(),a.get());mat4.identity(u);mat4.scale(u,u,l)}};Ops.Gl.Matrix.ScaleXYZViewMatrix.prototype=new CABLES.Op;CABLES.OPS["8b1fa9c9-0c4d-41b6-9c4f-8f4b633a9d7f"]={f:Ops.Gl.Matrix.ScaleXYZViewMatrix,objName:"Ops.Gl.Matrix.ScaleXYZViewMatrix"};Ops.Deprecated.Gl.Matrix.ScaleXYZ=function(){CABLES.Op.apply(this,arguments);const t=this;const e=t.attachments={};const n=t.inTrigger("render"),r=t.inValueFloat("x",1),i=t.inValueFloat("y",1),a=t.inValueFloat("z",1),s=t.outTrigger("trigger");const o=vec3.create();let l=true;r.onChange=i.onChange=a.onChange=c;c();n.onTriggered=u;function u(){const e=t.patch.cg||t.patch.cgl;if(l){vec3.set(o,r.get(),i.get(),a.get());l=false}e.pushModelMatrix();mat4.scale(e.mMatrix,e.mMatrix,o);s.trigger();e.popModelMatrix()}function c(){l=true}};Ops.Deprecated.Gl.Matrix.ScaleXYZ.prototype=new CABLES.Op;CABLES.OPS["9ba52457-5f0d-4b20-a97c-4ec4856b8e29"]={f:Ops.Deprecated.Gl.Matrix.ScaleXYZ,objName:"Ops.Deprecated.Gl.Matrix.ScaleXYZ"};Ops.Gl.Meshes.Grid=function(){CABLES.Op.apply(this,arguments);const l=this;const e=l.attachments={};const t=l.inTrigger("Render"),u=l.inInt("Num",10),c=l.inValue("Spacing",1),p=l.inBool("Center",true),h=l.inSwitch("Axis",["XY","XZ"],"XY"),n=l.outTrigger("Next");const f=l.patch.cgl;let d=null;h.onChange=p.onChange=u.onChange=c.onChange=function(){if(d)d.dispose();d=null};function r(){const t=new CGL.Geometry(l.name);const e=new CGL.Geometry(l.name);const n=c.get();const r=Math.floor(u.get());const i=n*r/2;const a=[];let s=-r/2;let o=r/2+1;if(h.get()=="XY")for(let e=s;e<o;e++){t.vertices.push(-i,e*n,0);t.vertices.push(i,e*n,0);t.vertices.push(e*n,-i,0);t.vertices.push(e*n,i,0);a.push(0,0,0,0,0,0,0,0)}else for(let e=s;e<o;e++){t.vertices.push(-i,0,e*n);t.vertices.push(i,0,e*n);t.vertices.push(e*n,0,-i);t.vertices.push(e*n,0,i);a.push(0,0,0,0,0,0,0,0)}if(!p.get()){for(let e=0;e<t.vertices.length;e+=3){t.vertices[e+0]+=i;t.vertices[e+1]+=i}}t.setTexCoords(a);t.calculateNormals();if(!d)d=new CGL.Mesh(f,t);else d.setGeom(t)}t.onTriggered=function(){if(!d)r();let e=f.getShader();if(!e)return;let t=e.glPrimitive;e.glPrimitive=f.gl.LINES;d.render(e);e.glPrimitive=t;n.trigger()}};Ops.Gl.Meshes.Grid.prototype=new CABLES.Op;CABLES.OPS["677a7c03-6885-46b4-8a64-e4ea54ee5d7f"]={f:Ops.Gl.Meshes.Grid,objName:"Ops.Gl.Meshes.Grid"};Ops.Gl.Meshes.FullscreenRectangle_v2=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={shader_frag:"UNI sampler2D tex;\nIN vec2 texCoord;\n\nvoid main()\n{\n outColor= texture(tex,texCoord);\n}\n\n",shader_vert:"{{MODULES_HEAD}}\n\nIN vec3 vPosition;\nUNI mat4 projMatrix;\nUNI mat4 mvMatrix;\n\nOUT vec2 texCoord;\nIN vec2 attrTexCoord;\n\nvoid main()\n{\n vec4 pos=vec4(vPosition, 1.0);\n\n texCoord=vec2(attrTexCoord.x,(1.0-attrTexCoord.y));\n\n gl_Position = projMatrix * mvMatrix * pos;\n}\n"};const n=e.inTrigger("render"),r=e.inSwitch("Scale",["Stretch","Fit"],"Fit"),i=e.inValueBool("Flip Y"),a=e.inValueBool("Flip X"),s=e.inTexture("Texture"),o=e.outTrigger("trigger");const l=e.patch.cgl;let u=null;let c=new CGL.Geometry("fullscreen rectangle");let p=0,h=0,f=0,d=0;e.toWorkShouldNotBeChild("Ops.Gl.TextureEffects.ImageCompose",CABLES.OP_PORT_TYPE_FUNCTION);e.toWorkPortsNeedToBeLinked(n);a.onChange=_;i.onChange=_;n.onTriggered=O;s.onLinkChanged=y;r.onChange=S;const g=new CGL.Shader(l,"fullscreenrectangle",this);g.setModules(["MODULE_VERTEX_POSITION","MODULE_COLOR","MODULE_BEGIN_FRAG"]);g.setSource(t.shader_vert,t.shader_frag);g.fullscreenRectUniform=new CGL.Uniform(g,"t","tex",0);g.aspectUni=new CGL.Uniform(g,"f","aspectTex",0);let m=false;let v=true;let b=false;y();S();s.onChange=function(){v=true};function y(){if(!CABLES.UI)return;i.setUiAttribs({greyout:!s.isLinked()});a.setUiAttribs({greyout:!s.isLinked()});r.setUiAttribs({greyout:!s.isLinked()})}function x(){let e=s.get();if(e)m=true;else m=false}e.preRender=function(){x();g.bind();if(u)u.render(g);O()};function S(){b=r.get()=="Fit"}function O(){if(l.viewPort[2]!=f||l.viewPort[3]!=d||!u)A();if(v)x();l.pushPMatrix();mat4.identity(l.pMatrix);mat4.ortho(l.pMatrix,0,f,d,0,-10,1e3);l.pushModelMatrix();mat4.identity(l.mMatrix);l.pushViewMatrix();mat4.identity(l.vMatrix);if(b&&s.get()){const n=s.get().width/s.get().height;let e=d;let t=d*n;if(t>f){e=f*1/n;t=f}l.pushViewPort((f-t)/2,(d-e)/2,t,e)}if(m){if(s.get())l.setTexture(0,s.get().tex);u.render(g)}else{u.render(l.getShader())}l.gl.clear(l.gl.DEPTH_BUFFER_BIT);l.popPMatrix();l.popModelMatrix();l.popViewMatrix();if(b&&s.get())l.popViewPort();o.trigger()}function _(){u=null}function A(){if(l.viewPort[2]==f&&l.viewPort[3]==d&&u)return;let e=0,t=0;f=l.viewPort[2];d=l.viewPort[3];c.vertices=new Float32Array([e+f,t+d,0,e,t+d,0,e+f,t,0,e,t,0]);let n=null;if(i.get())n=new Float32Array([1,0,0,0,1,1,0,1]);else n=new Float32Array([1,1,0,1,1,0,0,0]);if(a.get()){n[0]=0;n[2]=1;n[4]=0;n[6]=1}c.setTexCoords(n);c.verticesIndices=new Uint16Array([2,1,0,3,1,2]);c.vertexNormals=new Float32Array([0,0,1,0,0,1,0,0,1,0,0,1]);c.tangents=new Float32Array([-1,0,0,-1,0,0,-1,0,0,-1,0,0]);c.biTangents==new Float32Array([0,-1,0,0,-1,0,0,-1,0,0,-1,0]);if(!u)u=new CGL.Mesh(l,c);else u.setGeom(c)}};Ops.Gl.Meshes.FullscreenRectangle_v2.prototype=new CABLES.Op;CABLES.OPS["fb70721a-eac2-4ff5-a5a2-5c59e2393972"]={f:Ops.Gl.Meshes.FullscreenRectangle_v2,objName:"Ops.Gl.Meshes.FullscreenRectangle_v2"};Ops.Gl.GradientTexture=function(){CABLES.Op.apply(this,arguments);const n=this;const e=n.attachments={};const T=n.inGradient("Gradient"),I=n.inValueSelect("Direction",["X","Y","XY","YX","Radial"],"X"),E=n.inValueBool("Smoothstep",false),L=n.inBool("Step",false),N=n.inBool("Flip",false),U=n.inBool("sRGB",false),R=n.inBool("Oklab",false),P=n.inValueInt("Size",256),M=n.inSwitch("filter",["nearest","linear","mipmap"],"linear"),k=n.inValueSelect("wrap",["clamp to edge","repeat","mirrored repeat"],"clamp to edge"),r=n.inArray("Gradient Array"),t=n.inTriggerButton("Randomize Colors"),w=n.outTexture("Texture"),B=n.outArray("Colors",null,3),G=n.outArray("Colors Pos",null,1);const V=n.patch.cgl;let i=null;T.setUiAttribs({editShortcut:true});k.onChange=M.onChange=L.onChange=N.onChange=U.onChange=R.onChange=P.onChange=T.onChange=E.onChange=I.onChange=r.onChange=a;T.set('{"keys" : [{"pos":0,"r":0,"g":0,"b":0},{"pos":1,"r":1,"g":1,"b":1}]}');n.onLoaded=a;t.onTriggered=()=>{const e=s();if(e){e.forEach(e=>{e.r=Math.random();e.g=Math.random();e.b=Math.random()});const t=JSON.stringify({keys:e});T.set(t)}};function D(e,t,n){let r=.4122214708*e+.5363325363*t+.0514459929*n;let i=.2119034982*e+.6806995451*t+.1073969566*n;let a=.0883024619*e+.2817188376*t+.6299787005*n;r=Math.cbrt(r);i=Math.cbrt(i);a=Math.cbrt(a);return[r*+.2104542553+i*+.793617785+a*-.0040720468,r*+1.9779984951+i*-2.428592205+a*+.4505937099,r*+.0259040371+i*+.7827717662+a*-.808675766]}function F(e,t,n){let r=e+t*+.3963377774+n*+.2158037573;let i=e+t*-.1055613458+n*-.0638541728;let a=e+t*-.0894841775+n*-1.291485548;r**=3;i**=3;a**=3;let s=r*+4.0767416621+i*-3.3077115913+a*+.2309699292;let o=r*-1.2684380046+i*+2.6097574011+a*-.3413193965;let l=r*-.0041960863+i*-.7034186147+a*+1.707614701;s=CABLES.clamp(s,0,1);o=CABLES.clamp(o,0,1);l=CABLES.clamp(l,0,1);return[s,o,l]}function j(e,t,n){e/=255;const r=.0031308;let i=12.92*e;let a=1.055*Math.pow(e,.41666)-.055;return(e<r?i:a)*255}function a(){clearTimeout(i);i=setTimeout(()=>{const e=s();if(e)o(e)},5)}function s(){let t=null;n.setUiError("nodata",null);n.setUiError("parse",null);if(Array.isArray(r.get())){t=r.get()}else{let e=null;if(!T.get()||T.get()===""){return null}try{e=JSON.parse(T.get())}catch(e){n.setUiError("parse","could not parse gradient data")}if(!e||!e.keys){n.setUiError("nodata","gradient no data");return null}t=e.keys}return t}function o(t){let i=Math.round(P.get());if(i<4)i=4;T.setUiAttribs({editShortcut:true,gradEditSmoothstep:E.get(),gradEditStep:L.get(),gradOklab:R.get()});let e=0;let n=0;if(k.get()=="repeat")e=CGL.Texture.WRAP_REPEAT;else if(k.get()=="mirrored repeat")e=CGL.Texture.WRAP_MIRRORED_REPEAT;else if(k.get()=="clamp to edge")e=CGL.Texture.WRAP_CLAMP_TO_EDGE;if(M.get()=="nearest")n=CGL.Texture.FILTER_NEAREST;else if(M.get()=="linear")n=CGL.Texture.FILTER_LINEAR;else if(M.get()=="mipmap")n=CGL.Texture.FILTER_MIPMAP;const r=new CGL.Texture(V);let a=new Uint8Array(i*4);for(let e=0;e<t.length-1;e++){const l=t[e];const u=t[e+1];for(let n=l.pos*i;n<u.pos*i;n++){let e=CABLES.map(n,l.pos*i,u.pos*i,0,1);if(L.get())e=Math.round(e);if(E.get())e=CABLES.smoothStep(e);n=Math.round(n);let t=n;if(N.get())t=i-n-1;if(R.get()){const c=D(l.r,l.g,l.b);const p=c[0];const h=c[1];const f=c[2];const d=D(u.r,u.g,u.b);const g=d[0];const m=d[1];const v=d[2];const b=e*g+(1-e)*p;const y=e*m+(1-e)*h;const x=e*v+(1-e)*f;const S=F(b,y,x);a[t*4+0]=Math.round(S[0]*255);a[t*4+1]=Math.round(S[1]*255);a[t*4+2]=Math.round(S[2]*255)}else{a[t*4+0]=Math.round((e*u.r+(1-e)*l.r)*255);a[t*4+1]=Math.round((e*u.g+(1-e)*l.g)*255);a[t*4+2]=Math.round((e*u.b+(1-e)*l.b)*255)}if(typeof l.a!=="undefined"&&typeof u.a!=="undefined"){const O=Math.round((e*u.a+(1-e)*l.a)*255);a[t*4+3]=O}else{a[t*4+3]=Math.round(255)}}}if(U.get())for(let e=0;e<a.length;e+=4){a[e+0]=j(a[e+0]);a[e+1]=j(a[e+1]);a[e+2]=j(a[e+2])}if(I.get()=="X")r.initFromData(a,i,1,n,e);if(I.get()=="Y")r.initFromData(a,1,i,n,e);if(I.get()=="Radial"){const _=new Uint8Array(i*i*4);for(let r=0;r<i;r++){for(let n=0;n<i;n++){const A=r-(i-1)/2;const C=n-(i-1)/2;let e=Math.sqrt(A*A+C*C)/i*2;if(E.get())e=CABLES.smoothStep(e);let t=Math.round(e*i)*4;if(t>=i*4)t=i*4-4;_[r*4+n*4*i+0]=a[t+0];_[r*4+n*4*i+1]=a[t+1];_[r*4+n*4*i+2]=a[t+2];_[r*4+n*4*i+3]=Math.round(255)}}a=_;r.initFromData(a,i,i,n,e)}if(I.get()=="XY"||I.get()=="YX"){const _=new Uint8Array(i*i*4);for(let r=0;r<i;r++){let n=r;if(I.get()=="YX")n=i-r-1;for(let t=0;t<i;t++){let e=Math.round((n+t)/2)*4;_[r*4+t*4*i+0]=a[e+0];_[r*4+t*4*i+1]=a[e+1];_[r*4+t*4*i+2]=a[e+2];_[r*4+t*4*i+3]=Math.round(255)}}a=_;r.initFromData(a,i,i,n,e)}const s=[];for(let e=0;e<t.length-1;e++){s.push(t[e].r,t[e].g,t[e].b)}const o=[];for(let e=0;e<t.length-1;e++){o.push(t[e].pos)}B.set(s);G.set(o);w.setRef(r)}};Ops.Gl.GradientTexture.prototype=new CABLES.Op;CABLES.OPS["01380a50-2dbb-4465-ae80-86349b0b717a"]={f:Ops.Gl.GradientTexture,objName:"Ops.Gl.GradientTexture"};Ops.Gl.Textures.CombineTextures=function(){CABLES.Op.apply(this,arguments);const e=this;const k=e.attachments={rgbe2fp_frag:"UNI sampler2D texR;\nUNI sampler2D texG;\nUNI sampler2D texB;\nUNI sampler2D texA;\nIN vec2 texCoord;\n\nUNI float defaultR;\nUNI float defaultG;\nUNI float defaultB;\nUNI float defaultA;\n\nvoid main()\n{\n float r=defaultR, g=defaultG, b=defaultB, a=defaultA;\n\n #ifdef HAS_R\n #ifdef R_SRC_R\n r=texture(texR,texCoord).r;\n #endif\n #ifdef R_SRC_G\n r=texture(texR,texCoord).g;\n #endif\n #ifdef R_SRC_B\n r=texture(texR,texCoord).b;\n #endif\n #ifdef R_SRC_A\n r=texture(texR,texCoord).a;\n #endif\n #endif\n\n #ifdef HAS_G\n #ifdef G_SRC_R\n g=texture(texG,texCoord).r;\n #endif\n #ifdef G_SRC_G\n g=texture(texG,texCoord).g;\n #endif\n #ifdef G_SRC_B\n g=texture(texG,texCoord).b;\n #endif\n #ifdef G_SRC_A\n g=texture(texG,texCoord).a;\n #endif\n #endif\n\n #ifdef HAS_B\n #ifdef B_SRC_R\n b=texture(texB,texCoord).r;\n #endif\n #ifdef B_SRC_G\n b=texture(texB,texCoord).g;\n #endif\n #ifdef B_SRC_B\n b=texture(texB,texCoord).b;\n #endif\n #ifdef B_SRC_A\n b=texture(texB,texCoord).a;\n #endif\n #endif\n\n #ifdef HAS_A\n #ifdef A_SRC_R\n a=texture(texA,texCoord).r;\n #endif\n #ifdef A_SRC_G\n a=texture(texA,texCoord).g;\n #endif\n #ifdef A_SRC_B\n a=texture(texA,texCoord).b;\n #endif\n #ifdef A_SRC_A\n a=texture(texA,texCoord).a;\n #endif\n #endif\n\n #ifdef INV_R\n r=1.0-r;\n #endif\n #ifdef INV_G\n g=1.0-g;\n #endif\n #ifdef INV_B\n b=1.0-b;\n #endif\n #ifdef INV_A\n a=1.0-a;\n #endif\n\n\n outColor = vec4(r,g,b,a);\n}\n\n\n"};const w=e.inTrigger("Execute"),n=e.inSwitch("Filter",["nearest","linear","mipmap"],"linear"),r=e.inValueSelect("Wrap",["clamp to edge","repeat","mirrored repeat"],"repeat"),i=e.inDropDown("Pixel Format",CGL.Texture.PIXELFORMATS,CGL.Texture.PFORMATSTR_RGBA8UB),t=e.inSwitch("Size",["Biggest","Smallest","R","G","B","A"],"Biggest"),a=e.inTexture("R"),s=e.inSwitch("R Source",["R","G","B","A"],"R"),o=e.inSwitch("R Value",["Source","Invert"],"Source"),l=e.inFloatSlider("R Default",1),u=e.inTexture("G"),c=e.inSwitch("G Source",["R","G","B","A"],"G"),p=e.inSwitch("G Value",["Source","Invert"],"Source"),h=e.inFloatSlider("G Default",1),f=e.inTexture("B"),d=e.inSwitch("B Source",["R","G","B","A"],"B"),g=e.inSwitch("B Value",["Source","Invert"],"Source"),m=e.inFloatSlider("B Default",1),v=e.inTexture("A"),b=e.inSwitch("A Source",["R","G","B","A"],"R"),y=e.inSwitch("A Value",["Source","Invert"],"Source"),x=e.inFloatSlider("A Default",1),B=e.outTrigger("Next"),G=e.outTexture("Texture");e.setPortGroup("Red",[l,a,s,o]);e.setPortGroup("Green",[h,u,c,p]);e.setPortGroup("Blue",[m,f,d,g]);e.setPortGroup("Alpha",[x,v,b,y]);const S=e.patch.cgl;let O=[2,2];let _=true;let A=null;let C,T,I,E,L,N,U,R;l.onChange=h.onChange=m.onChange=x.onChange=a.onChange=u.onChange=f.onChange=i.onChange=v.onChange=()=>{O=P();_=true};a.onLinkChanged=u.onLinkChanged=f.onLinkChanged=v.onLinkChanged=s.onChange=c.onChange=d.onChange=b.onChange=o.onChange=p.onChange=g.onChange=y.onChange=M;t.onChange=n.onChange=r.onChange=()=>{A=null};function P(){let n=4;let r=4;let i=[];if(t.get()=="Biggest"||t.get()=="Smallest"){if(a.get())i.push([a.get().width,a.get().height,a.get().width*a.get().height]);if(u.get())i.push([u.get().width,u.get().height,u.get().width*u.get().height]);if(f.get())i.push([f.get().width,f.get().height,f.get().width*f.get().height]);if(v.get())i.push([v.get().width,v.get().height,v.get().width*v.get().height])}if(t.get()=="Biggest"){let t=0;for(let e=0;e<i.length;e++){if(i[e][2]>t){n=i[e][0];r=i[e][1];t=i[e][2]}}}else if(t.get()=="Smallest"){let t=e.patch.cgl.gl.MAX_TEXTURE_SIZE+1;for(let e=0;e<i.length;e++){if(i[e][2]<t){n=i[e][0];r=i[e][1];t=i[e][2]}}}else if(t.get()=="R"&&a.get()){n=a.get().width;r=a.get().height}else if(t.get()=="G"&&u.get()){n=u.get().width;r=u.get().height}else if(t.get()=="B"&&f.get()){n=f.get().width;r=f.get().height}else if(t.get()=="A"&&v.get()){n=v.get().width;r=v.get().height}return[n,r]}function V(){let e=CGL.Texture.WRAP_REPEAT;if(r.get()=="mirrored repeat")e=CGL.Texture.WRAP_MIRRORED_REPEAT;if(r.get()=="clamp to edge")e=CGL.Texture.WRAP_CLAMP_TO_EDGE;let t=CGL.Texture.FILTER_NEAREST;if(n.get()=="linear")t=CGL.Texture.FILTER_LINEAR;if(n.get()=="mipmap")t=CGL.Texture.FILTER_MIPMAP;if(A)A.dispose();O=P();A=new CGL.CopyTexture(S,"combinetextures",{shader:k.rgbe2fp_frag,isFloatingPointTexture:i.get()==CGL.Texture.PFORMATSTR_RGBA32F,filter:t,wrap:e,width:O[0],height:O[1]});C=new CGL.Uniform(A.bgShader,"t","texR",0);T=new CGL.Uniform(A.bgShader,"t","texG",1);I=new CGL.Uniform(A.bgShader,"t","texB",2);E=new CGL.Uniform(A.bgShader,"t","texA",3);L=new CGL.Uniform(A.bgShader,"f","defaultR",l);N=new CGL.Uniform(A.bgShader,"f","defaultG",h);U=new CGL.Uniform(A.bgShader,"f","defaultB",m);R=new CGL.Uniform(A.bgShader,"f","defaultA",x);M();_=true}function M(){if(!A)return;s.setUiAttribs({greyout:!a.isLinked()});c.setUiAttribs({greyout:!u.isLinked()});d.setUiAttribs({greyout:!f.isLinked()});b.setUiAttribs({greyout:!v.isLinked()});o.setUiAttribs({greyout:!a.isLinked()});p.setUiAttribs({greyout:!u.isLinked()});g.setUiAttribs({greyout:!f.isLinked()});y.setUiAttribs({greyout:!v.isLinked()});l.setUiAttribs({greyout:a.isLinked()});h.setUiAttribs({greyout:u.isLinked()});m.setUiAttribs({greyout:f.isLinked()});x.setUiAttribs({greyout:v.isLinked()});A.bgShader.toggleDefine("R_SRC_R",s.get()=="R");A.bgShader.toggleDefine("R_SRC_G",s.get()=="G");A.bgShader.toggleDefine("R_SRC_B",s.get()=="B");A.bgShader.toggleDefine("R_SRC_A",s.get()=="A");A.bgShader.toggleDefine("G_SRC_R",c.get()=="R");A.bgShader.toggleDefine("G_SRC_G",c.get()=="G");A.bgShader.toggleDefine("G_SRC_B",c.get()=="B");A.bgShader.toggleDefine("G_SRC_A",c.get()=="A");A.bgShader.toggleDefine("B_SRC_R",d.get()=="R");A.bgShader.toggleDefine("B_SRC_G",d.get()=="G");A.bgShader.toggleDefine("B_SRC_B",d.get()=="B");A.bgShader.toggleDefine("B_SRC_A",d.get()=="A");A.bgShader.toggleDefine("A_SRC_R",b.get()=="R");A.bgShader.toggleDefine("A_SRC_G",b.get()=="G");A.bgShader.toggleDefine("A_SRC_B",b.get()=="B");A.bgShader.toggleDefine("A_SRC_A",b.get()=="A");A.bgShader.toggleDefine("INV_R",o.get()=="Invert");A.bgShader.toggleDefine("INV_G",p.get()=="Invert");A.bgShader.toggleDefine("INV_B",g.get()=="Invert");A.bgShader.toggleDefine("INV_A",y.get()=="Invert");A.bgShader.toggleDefine("HAS_R",a.isLinked());A.bgShader.toggleDefine("HAS_G",u.isLinked());A.bgShader.toggleDefine("HAS_B",f.isLinked());A.bgShader.toggleDefine("HAS_A",v.isLinked());_=true}w.onTriggered=()=>{if(!A||_&&!e.patch.cgl.frameStore.shadowPass){if(!A)V();A.bgShader.popTextures();if(a.get())A.bgShader.pushTexture(C,a.get().tex);else A.bgShader.pushTexture(C,CGL.Texture.getEmptyTexture(S).tex);if(u.get())A.bgShader.pushTexture(T,u.get().tex);else A.bgShader.pushTexture(T,CGL.Texture.getEmptyTexture(S).tex);if(f.get())A.bgShader.pushTexture(I,f.get().tex);else A.bgShader.pushTexture(I,CGL.Texture.getEmptyTexture(S).tex);if(v.get())A.bgShader.pushTexture(E,v.get().tex);else A.bgShader.pushTexture(E,CGL.Texture.getEmptyTexture(S).tex);L.setValue(l.get());N.setValue(h.get());U.setValue(m.get());R.setValue(x.get());A.setSize(O[0],O[1]);G.setRef(A.copy(a.get()||u.get()||f.get()||v.get()||CGL.Texture.getEmptyTexture(S)));_=false}B.trigger()}};Ops.Gl.Textures.CombineTextures.prototype=new CABLES.Op;CABLES.OPS["5f33dd4a-a553-4f0f-b3b1-66a80cd240a7"]={f:Ops.Gl.Textures.CombineTextures,objName:"Ops.Gl.Textures.CombineTextures"};Ops.Gl.ImageCompose.ImageCompose_v4=function(){CABLES.Op.apply(this,arguments);const n=this;const e=n.attachments={imgcomp_frag:"IN vec2 texCoord;\nUNI vec4 bgColor;\nUNI sampler2D tex;\n#ifdef USE_UVTEX\nUNI sampler2D UVTex;\n#endif\n\nvoid main()\n{\n\n #ifndef USE_TEX\n outColor=bgColor;\n #endif\n #ifdef USE_TEX\n #ifndef USE_UVTEX\n outColor=texture(tex,texCoord);\n #else\n outColor=texture(tex,texture(UVTex,texCoord).xy);\n #endif\n #endif\n\n\n\n}\n"};const t=n.patch.cgl,r=n.inTrigger("Render"),i=n.inTexture("Base Texture"),a=n.inTexture("UV Texture"),s=n.inSwitch("Size",["Auto","Canvas","Manual"],"Auto"),o=n.inValueInt("Width",640),l=n.inValueInt("Height",480),u=n.inSwitch("Filter",["nearest","linear","mipmap"],"linear"),c=n.inValueSelect("Wrap",["clamp to edge","repeat","mirrored repeat"],"repeat"),p=n.inSwitch("Anisotropic",["0","1","2","4","8","16"],"0"),h=n.inDropDown("Pixel Format",CGL.Texture.PIXELFORMATS,CGL.Texture.PFORMATSTR_RGBA8UB),f=n.inValueSlider("R",0),d=n.inValueSlider("G",0),g=n.inValueSlider("B",0),m=n.inValueSlider("A",0),v=n.outTrigger("Next"),b=n.outTexture("texture_out",CGL.Texture.getEmptyTexture(t)),y=n.outNumber("Aspect Ratio"),x=n.outNumber("Texture Width"),k=n.outNumber("Texture Height");n.setPortGroup("Texture Size",[s,o,l]);n.setPortGroup("Texture Parameters",[c,p,u,h]);f.setUiAttribs({colorPick:true});n.setPortGroup("Color",[f,d,g,m]);n.toWorkPortsNeedToBeLinked(r);const w=[0,0,0,0];let S=null;let O=null;let _=true;let B=false;let A=null;let G=null;let V=null;let D=null;c.onChange=u.onChange=p.onChange=h.onChange=F;i.onLinkChanged=s.onChange=a.onChange=R;r.onTriggered=n.preRender=M;R();function C(){if(S)S.delete();if(O)O.delete();O=null;S=new CGL.TextureEffect(t,{isFloatingPointTexture:CGL.Texture.isPixelFormatFloat(h.get()),name:n.name});const e=Math.min(t.maxAnisotropic,parseFloat(p.get()));O=new CGL.Texture(t,{anisotropic:e,name:"image_compose_v2_"+n.id,pixelFormat:h.get(),filter:T(),wrap:I(),width:E(),height:L()});S.setSourceTexture(O);x.set(E());k.set(L());y.set(E()/L());b.set(CGL.Texture.getEmptyTexture(t));_=false;R()}function T(){if(u.get()=="nearest")return CGL.Texture.FILTER_NEAREST;else if(u.get()=="linear")return CGL.Texture.FILTER_LINEAR;else if(u.get()=="mipmap")return CGL.Texture.FILTER_MIPMAP}function I(){if(c.get()=="repeat")return CGL.Texture.WRAP_REPEAT;else if(c.get()=="mirrored repeat")return CGL.Texture.WRAP_MIRRORED_REPEAT;else if(c.get()=="clamp to edge")return CGL.Texture.WRAP_CLAMP_TO_EDGE}function E(){let e=0;if(i.get()&&s.get()=="Auto")e=i.get().width;else if(s.get()=="Auto"||s.get()=="Canvas")e=t.canvasWidth;else if(s.get()=="ViewPort")e=t.getViewPort()[2];else e=Math.ceil(o.get());return n.patch.cgl.checkTextureSize(e)}function L(){let e=0;if(i.get()&&s.get()=="Auto")e=i.get().height;else if(s.get()=="Auto"||s.get()=="Canvas")e=t.canvasHeight;else if(s.get()=="ViewPort")e=t.getViewPort()[3];else e=Math.ceil(l.get());return n.patch.cgl.checkTextureSize(e)}function F(){_=true}function j(){if((E()!=O.width||L()!=O.height||O.pixelFormat!=h.get()||O.filter!=T()||O.wrap!=I())&&(E()!==0&&L()!==0)){C();S.setSourceTexture(O);b.set(CGL.Texture.getEmptyTexture(t));b.set(O);N();P()}}function N(){let e=null;if(s.get()=="Manual"){e=null}else if(s.get()=="Auto"){if(i.get())e="Input Texture";else e="Canvas Size";e+=": "+E()+" x "+L()}let t=false;t=s.uiAttribs.info!=e;s.setUiAttribs({info:e});if(t)n.refreshParams()}function U(){if(A)A.toggleDefine("USE_TEX",i.isLinked());if(A)A.toggleDefine("USE_UVTEX",a.isLinked())}function R(){p.setUiAttribs({greyout:T()!=CGL.Texture.FILTER_MIPMAP});f.setUiAttribs({greyout:i.isLinked()});g.setUiAttribs({greyout:i.isLinked()});d.setUiAttribs({greyout:i.isLinked()});m.setUiAttribs({greyout:i.isLinked()});o.setUiAttribs({greyout:s.get()!="Manual"});l.setUiAttribs({greyout:s.get()!="Manual"});if(O)if(CGL.Texture.isPixelFormatFloat(h.get())&&T()==CGL.Texture.FILTER_MIPMAP)n.setUiError("fpmipmap","Don't use mipmap and 32bit at the same time, many systems do not support this.");else n.setUiError("fpmipmap",null);N();U();P()}function P(){if(O)if(i.isLinked()&&i.get()&&O.isFloatingPoint()!=i.get().isFloatingPoint())n.setUiError("textypediff","Warning: Mixing floating point and non floating point texture can result in data/precision loss",1);else n.setUiError("textypediff",null)}n.preRender=()=>{M()};function z(){if(!A){A=new CGL.Shader(t,"copytextureshader");A.setSource(A.getDefaultVertexShader(),e.imgcomp_frag);G=new CGL.Uniform(A,"t","tex",0);V=new CGL.Uniform(A,"t","UVTex",1);D=new CGL.Uniform(A,"4f","bgColor",f,d,g,m);U()}t.pushShader(A);t.currentTextureEffect.bind();if(i.get())t.setTexture(0,i.get().tex);if(a.get())t.setTexture(1,a.get().tex);t.currentTextureEffect.finish();t.popShader()}function M(){if(!S||_)C();t.pushBlend(false);j();const e=t.currentTextureEffect;t.currentTextureEffect=S;t.currentTextureEffect.imgCompVer=3;t.currentTextureEffect.width=o.get();t.currentTextureEffect.height=l.get();S.setSourceTexture(O);S.startEffect(i.get()||CGL.Texture.getEmptyTexture(t,B),true);z();v.trigger();t.pushViewPort(0,0,o.get(),l.get());S.endEffect();b.setRef(S.getCurrentSourceTexture());t.popViewPort();t.popBlend();t.currentTextureEffect=e}};Ops.Gl.ImageCompose.ImageCompose_v4.prototype=new CABLES.Op;CABLES.OPS["17212e2b-d692-464c-8f8d-2d511dd3410a"]={f:Ops.Gl.ImageCompose.ImageCompose_v4,objName:"Ops.Gl.ImageCompose.ImageCompose_v4"};Ops.Gl.ImageCompose.FastBlur_v2=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={blur_frag:"\nUNI sampler2D tex;\n#ifdef USE_MASK\n UNI sampler2D texMask;\n#endif\nUNI float amount;\nUNI float pass;\n\nIN vec2 texCoord;\n\nUNI float dirX;\nUNI float dirY;\nUNI float width;\nUNI float height;\n\nIN vec2 coord0;\nIN vec2 coord1;\nIN vec2 coord2;\nIN vec2 coord3;\nIN vec2 coord4;\nIN vec2 coord5;\nIN vec2 coord6;\n\n#ifdef HAS_MASK\n UNI sampler2D imageMask;\n#endif\n\nvoid main()\n{\n vec4 color = vec4(0.0);\n\n #ifdef USE_MASK\n #ifdef MASK_INVERT\n if(texture(texMask,texCoord).r<0.5)\n {\n outColor= texture(tex, texCoord);\n return;\n }\n #endif\n\n #ifndef MASK_INVERT\n if(texture(texMask,texCoord).r>0.5)\n {\n outColor= texture(tex, texCoord);\n return;\n }\n #endif\n #endif\n\n color += texture(tex, coord0) * 0.06927096443792478;\n color += texture(tex, coord1) * 0.1383328848652136;\n color += texture(tex, coord2) * 0.21920904690397863;\n color += texture(tex, coord3) * 0.14637421;\n color += texture(tex, coord4) * 0.21920904690397863;\n color += texture(tex, coord5) * 0.1383328848652136;\n color += texture(tex, coord6) * 0.06927096443795711;\n\n outColor= color;\n}",blur_vert:"\nIN vec3 vPosition;\nIN vec2 attrTexCoord;\nIN vec3 attrVertNormal;\nOUT vec2 texCoord;\nOUT vec3 norm;\nUNI mat4 projMatrix;\nUNI mat4 mvMatrix;\nUNI mat4 modelMatrix;\n\nUNI float pass;\nUNI float dirX;\nUNI float dirY;\nUNI float width;\nUNI float height;\n\nOUT vec2 coord0;\nOUT vec2 coord1;\nOUT vec2 coord2;\nOUT vec2 coord3;\nOUT vec2 coord4;\nOUT vec2 coord5;\nOUT vec2 coord6;\n\nvoid main()\n{\n texCoord=attrTexCoord;\n norm=attrVertNormal;\n vec4 pos=vec4(vPosition, 1.0);\n {{MODULE_VERTEX_POSITION}}\n\n vec2 dir=vec2(dirX,dirY);\n vec2 res=vec2( (1.) / width , (1.) / height )*dir;\n\n coord3= attrTexCoord;\n\n coord0= attrTexCoord + (-3.0368997744118595 * res);\n coord1= attrTexCoord + (-2.089778445362373 * res);\n coord2= attrTexCoord + (-1.2004366090034069 * res);\n coord4= attrTexCoord + (1.2004366090034069 * res);\n coord5= attrTexCoord + (2.089778445362373* res);\n coord6= attrTexCoord + (3.0368997744118595 * res);\n\n #ifdef CLAMP\n coord0=clamp(coord0,0.0,1.0);\n coord1=clamp(coord1,0.0,1.0);\n coord2=clamp(coord2,0.0,1.0);\n coord3=clamp(coord3,0.0,1.0);\n coord4=clamp(coord4,0.0,1.0);\n coord5=clamp(coord5,0.0,1.0);\n coord6=clamp(coord6,0.0,1.0);\n #endif\n\n gl_Position = projMatrix * mvMatrix * pos;\n}\n"};const n=e.inTrigger("render"),r=e.outTrigger("trigger"),i=e.inFloat("Passes",3),a=e.inBool("Clamp",false),s=e.inDropDown("direction",["both","vertical","horizontal"],"both"),o=e.inTexture("Mask"),l=e.inBool("Mask Invert",false);const u=e.patch.cgl;const c=new CGL.Shader(u,"fastblur");e.setPortGroup("Mask",[o,l]);c.setSource(t.blur_vert,t.blur_frag);const p=new CGL.Uniform(c,"t","tex",0),h=new CGL.Uniform(c,"f","dirX",0),f=new CGL.Uniform(c,"f","dirY",0),d=new CGL.Uniform(c,"f","width",0),g=new CGL.Uniform(c,"f","height",0),m=new CGL.Uniform(c,"f","pass",0),v=new CGL.Uniform(c,"f","amount",i.get()),b=new CGL.Uniform(c,"t","texMask",1);i.onChange=()=>{v.setValue(i.get())};let y=0;s.onChange=()=>{if(s.get()=="both")y=0;if(s.get()=="horizontal")y=1;if(s.get()=="vertical")y=2};a.onChange=()=>{c.toggleDefine("CLAMP",a.get())};l.onChange=o.onChange=x;x();function x(){c.toggleDefine("USE_MASK",o.isLinked());c.toggleDefine("MASK_INVERT",l.get());l.setUiAttribs({greyout:!o.isLinked()})}n.onTriggered=function(){if(!CGL.TextureEffect.checkOpInEffect(e,3))return;d.setValue(u.currentTextureEffect.getCurrentSourceTexture().width);g.setValue(u.currentTextureEffect.getCurrentSourceTexture().height);const t=i.get();if(o.get())u.setTexture(1,o.get().tex);for(let e=0;e<t;e++){u.pushShader(c);m.setValue(e/t);if(y===0||y==2){u.currentTextureEffect.bind();u.setTexture(0,u.currentTextureEffect.getCurrentSourceTexture().tex);h.setValue(0);f.setValue(1+e*e);u.currentTextureEffect.finish()}if(y===0||y==1){u.currentTextureEffect.bind();u.setTexture(0,u.currentTextureEffect.getCurrentSourceTexture().tex);h.setValue(1+e*e);f.setValue(0);u.currentTextureEffect.finish()}u.popShader()}r.trigger()}};Ops.Gl.ImageCompose.FastBlur_v2.prototype=new CABLES.Op;CABLES.OPS["61ed277f-d096-43b2-9de8-dc87fb3a9169"]={f:Ops.Gl.ImageCompose.FastBlur_v2,objName:"Ops.Gl.ImageCompose.FastBlur_v2"};Ops.Gl.ImageCompose.Vignette_v3=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={vignette_frag:"IN vec2 texCoord;\nUNI sampler2D tex;\nUNI float lensRadius1;\nUNI float aspect;\nUNI float amount;\nUNI float strength;\nUNI float sharp;\n\nUNI vec3 vcol;\n\n{{CGL.BLENDMODES3}}\n\nvoid main()\n{\n vec4 base=texture(tex,texCoord);\n vec4 vvcol=vec4(vcol,1.0);\n vec4 col=texture(tex,texCoord);\n vec2 tcPos=vec2(texCoord.x,(texCoord.y-0.5)*aspect+0.5);\n float dist = distance(tcPos, vec2(0.5,0.5));\n float am = (1.0-smoothstep( (lensRadius1+0.5), (lensRadius1*0.99+0.5)*sharp, dist));\n\n col=mix(col,vvcol,am*strength);\n\n #ifndef ALPHA\n outColor=cgl_blendPixel(base,col,amount);\n #endif\n\n #ifdef ALPHA\n outColor=vec4(base.rgb,base.a*(1.0-am*strength));\n #endif\n}\n"};const n=e.inTrigger("Render"),r=CGL.TextureEffect.AddBlendSelect(e,"Blend Mode","normal"),i=CGL.TextureEffect.AddBlendAlphaMask(e),a=e.inValueSlider("Amount",1),s=e.outTrigger("Trigger"),o=e.inValueSlider("Strength",1),l=e.inValueSlider("Radius",.3),u=e.inValueSlider("Sharp",.25),c=e.inValue("Aspect",1),p=e.inValueSlider("r",0),h=e.inValueSlider("g",0),f=e.inValueSlider("b",0),d=e.inBool("Alpha",false);p.setUiAttribs({colorPick:true});const g=e.patch.cgl;const m=new CGL.Shader(g,"vignette");m.setSource(m.getDefaultVertexShader(),t.vignette_frag);const v=new CGL.Uniform(m,"t","tex",0),b=new CGL.Uniform(m,"f","amount",a),y=new CGL.Uniform(m,"f","lensRadius1",l),x=new CGL.Uniform(m,"f","aspect",c),S=new CGL.Uniform(m,"f","strength",o),O=new CGL.Uniform(m,"f","sharp",u),_=new CGL.Uniform(m,"3f","vcol",p,h,f);CGL.TextureEffect.setupBlending(e,m,r,a,i);d.onChange=A;A();function A(){m.toggleDefine("ALPHA",d.get());p.setUiAttribs({greyout:d.get()});h.setUiAttribs({greyout:d.get()});f.setUiAttribs({greyout:d.get()})}n.onTriggered=function(){if(!CGL.TextureEffect.checkOpInEffect(e,3))return;g.pushShader(m);g.currentTextureEffect.bind();g.setTexture(0,g.currentTextureEffect.getCurrentSourceTexture().tex);g.currentTextureEffect.finish();g.popShader();s.trigger()}};Ops.Gl.ImageCompose.Vignette_v3.prototype=new CABLES.Op;CABLES.OPS["588302cb-f5a7-4129-90d2-ba66212d69e5"]={f:Ops.Gl.ImageCompose.Vignette_v3,objName:"Ops.Gl.ImageCompose.Vignette_v3"};Ops.Gl.TextMeshMSDF_v2=function(){CABLES.Op.apply(this,arguments);const i=this;const y=i.attachments={textmeshsdf_frag:"\nUNI sampler2D tex0;\nUNI sampler2D tex1;\nUNI sampler2D tex2;\nUNI sampler2D tex3;\n\nIN vec2 texCoord;\nIN vec4 fragAttrColors;\n\nUNI vec4 color;\nUNI vec2 texSize;\n\n#ifdef BORDER\n UNI float borderWidth;\n UNI float borderSmooth;\n UNI vec3 colorBorder;\n#endif\n\n#ifdef TEXTURE_COLOR\nUNI sampler2D texMulColor;\n#endif\n#ifdef TEXTURE_MASK\nUNI sampler2D texMulMask;\n#endif\n\nUNI float smoothing;\nIN float texIndex;\n\n#ifdef SHADOW\n UNI float shadowWidth;\n#endif\n\n\nfloat median(float r, float g, float b)\n{\n return max(min(r, g), min(max(r, g), b));\n}\n\nvoid main()\n{\n vec4 bgColor=vec4(0.0,0.0,0.0,0.0);\n vec4 fgColor=color;\n float opacity=1.0;\n\n #ifndef SDF\n if(int(texIndex)==0) outColor = texture(tex0, texCoord);\n if(int(texIndex)==1) outColor = texture(tex1, texCoord);\n if(int(texIndex)==2) outColor = texture(tex2, texCoord);\n if(int(texIndex)==3) outColor = texture(tex3, texCoord);\n\n return;\n #endif\n\n\n #ifdef TEXTURE_COLOR\n fgColor.rgb *= texture(texMulColor, vec2(0.0,0.0)).rgb; //todo texcoords from char positioning\n #endif\n #ifdef TEXTURE_MASK\n opacity *= texture(texMulMask, vec2(0.0,0.0)).r; //todo texcoords from char positioning\n #endif\n\n\n #ifdef SHADOW\n vec2 msdfUnit1 = texSize;\n vec2 tcv=vec2(texCoord.x-0.002,texCoord.y-0.002);\n vec3 smpl1;\n if(int(texIndex)==0) smpl1 = texture(tex0, tcv).rgb;\n if(int(texIndex)==1) smpl1 = texture(tex1, tcv).rgb;\n if(int(texIndex)==2) smpl1 = texture(tex2, tcv).rgb;\n if(int(texIndex)==3) smpl1 = texture(tex3, tcv).rgb;\n\n float sigDist1 = median(smpl1.r, smpl1.g, smpl1.b) - 0.001;\n float opacity1 = smoothstep(0.0,0.9,sigDist1*sigDist1);\n outColor = mix(bgColor, vec4(0.0,0.0,0.0,1.0), opacity1);\n #endif\n\n vec2 msdfUnit = 8.0/texSize;\n vec3 smpl;\n\n if(int(texIndex)==0) smpl = texture(tex0, texCoord).rgb;\n if(int(texIndex)==1) smpl = texture(tex1, texCoord).rgb;\n if(int(texIndex)==2) smpl = texture(tex2, texCoord).rgb;\n if(int(texIndex)==3) smpl = texture(tex3, texCoord).rgb;\n\n\n float sigDist = median(smpl.r, smpl.g, smpl.b) - 0.5;\n sigDist *= dot(msdfUnit, (0.5+(smoothing-0.5))/fwidth(texCoord));\n opacity *= clamp(sigDist + 0.5, 0.0, 1.0);\n\n #ifdef BORDER\n float sigDist2 = median(smpl.r, smpl.g, smpl.b) - 0.01;\n float bw=borderWidth*0.6+0.24;\n float opacity2 = smoothstep(bw-borderSmooth,bw+borderSmooth,sigDist2*sigDist2);\n fgColor=mix(fgColor,vec4(colorBorder,1.0),1.0-opacity2);\n #endif\n\n if(color.a==0.0)discard;\n\n outColor = mix(outColor, fgColor, opacity*color.a);\n\n#ifdef HAS_ATTR_COLORS\n outColor*=fragAttrColors;\n#endif\n}\n\n",textmeshsdf_vert:"UNI sampler2D tex1;\nUNI sampler2D tex2;\nUNI sampler2D tex3;\nUNI sampler2D tex4;\n\nUNI mat4 projMatrix;\nUNI mat4 modelMatrix;\nUNI mat4 viewMatrix;\n\nIN vec3 vPosition;\nIN vec2 attrTexCoord;\nIN mat4 instMat;\nIN vec2 attrTexOffsets;\nIN vec2 attrSize;\nIN vec2 attrTcSize;\nIN float attrPage;\nIN vec4 attrColors;\n\nOUT vec2 texCoord;\nOUT float texIndex;\nOUT vec4 fragAttrColors;\n\n\n\n\nconst float mulSize=0.01;\n\nvoid main()\n{\n texCoord=(attrTexOffsets+attrTexCoord*attrTcSize);\n texCoord.y=1.0-texCoord.y;\n\n mat4 instMVMat=instMat;\n vec4 vert=vec4( vPosition, 1. );\n vert.x*=attrSize.x*mulSize;\n vert.y*=attrSize.y*mulSize;\n\n fragAttrColors=attrColors;\n\n texIndex=attrPage+0.4; // strange ios rounding errors?!\n\n mat4 mvMatrix=viewMatrix * modelMatrix * instMVMat;\n\n gl_Position = projMatrix * mvMatrix * vert;\n}\n"};const x=i.inTrigger("Render"),F=i.inString("Text","cables"),a=i.inDropDown("Font",[],"",true),t=i.inFloat("Scale",.25),A=i.inFloat("Letter Spacing",0),C=i.inFloat("Line Height",1),T=i.inSwitch("Align",["Left","Center","Right"],"Center"),e=i.inSwitch("Vertical Align",["Zero","Top","Middle","Bottom"],"Middle"),n=i.inValueSlider("r",1),S=i.inValueSlider("g",1),O=i.inValueSlider("b",1),_=i.inValueSlider("a",1),r=i.inBool("SDF",true),j=i.inValueSlider("Smoothing",.3),s=i.inBool("Border",false),o=i.inFloatSlider("Border Width",.5),l=i.inFloatSlider("Smoothness",.25),u=i.inValueSlider("Border r",1),z=i.inValueSlider("Border g",1),H=i.inValueSlider("Border b",1),X=i.inBool("Shadow",false),c=i.inTexture("Texture Color"),p=i.inTexture("Texture Mask"),Y=i.inArray("Positions"),W=i.inArray("Scalings"),q=i.inArray("Rotations"),I=i.inArray("Colors"),Z=i.outTrigger("Next"),K=i.outArray("Positions Original",null,3),Q=i.outArray("Scales",null,2),J=i.outNumber("Num Lines"),$=i.outNumber("Width"),ee=i.outNumber("Height"),te=i.outNumber("Start Y"),ne=i.outNumber("Num Chars");i.setPortGroup("Size",[A,C,t]);i.setPortGroup("Character Transformations",[W,q,Y]);i.setPortGroup("Alignment",[T,e]);i.setPortGroup("Color",[n,S,O,_,r]);i.setPortGroup("Border",[u,z,H,l,o,s]);n.setUiAttribs({colorPick:true});u.setUiAttribs({colorPick:true});const E=i.patch.cgl;const re="font_data_";const ie=re.length;const ae=vec3.create();const se=vec3.create();const h=new CGL.Shader(E,"TextMeshSDF");let f=null;let L=null;let N=null;let d=true;let U=null;let R=null;let P=false;let g=1;let m=0,oe=0;let M=0;let k,w,B,G;let V=true;let D=null;let v=0;if(E.glVersion==1){E.gl.getExtension("OES_standard_derivatives");h.enableExtension("GL_OES_standard_derivatives")}h.setSource(y.textmeshsdf_vert,y.textmeshsdf_frag);const le=new CGL.Uniform(h,"t","tex0",0),ue=new CGL.Uniform(h,"t","tex1",1),ce=new CGL.Uniform(h,"t","tex2",2),pe=new CGL.Uniform(h,"t","tex3",3),he=new CGL.Uniform(h,"t","texMulColor",4),fe=new CGL.Uniform(h,"t","texMulMask",5),de=new CGL.Uniform(h,"4f","color",n,S,O,_),ge=new CGL.Uniform(h,"3f","colorBorder",u,z,H),me=new CGL.Uniform(h,"2f","texSize",0,0),ve=new CGL.Uniform(h,"f","smoothing",j),be=new CGL.Uniform(h,"f","borderSmooth",l),ye=new CGL.Uniform(h,"f","borderWidth",o);t.onChange=Oe;q.onChange=Y.onChange=W.onChange=function(){V=true};c.onChange=p.onChange=X.onChange=s.onChange=r.onChange=xe;I.onLinkChanged=()=>{xe();V=true;d=true};I.onChange=()=>{d=true;if(R&&I.get()&&I.isLinked())R.setAttribute("attrColors",new Float32Array(I.get()),4,{instanced:true})};T.onChange=F.onChange=A.onChange=C.onChange=function(){d=true};e.onChange=_e;i.patch.addEventListener("variablesChanged",b);i.patch.addEventListener("FontLoadedMSDF",b);a.onChange=Se;xe();Oe();b();function xe(){h.toggleDefine("SDF",r.get());h.toggleDefine("SHADOW",X.get());h.toggleDefine("BORDER",s.get());h.toggleDefine("TEXTURE_COLOR",c.isLinked());h.toggleDefine("TEXTURE_MASK",p.isLinked());h.toggleDefine("HAS_ATTR_COLORS",I.isLinked());u.setUiAttribs({greyout:!s.get()});z.setUiAttribs({greyout:!s.get()});H.setUiAttribs({greyout:!s.get()});l.setUiAttribs({greyout:!s.get()});o.setUiAttribs({greyout:!s.get()})}function Se(){b();const e=re+a.get();L=null;f=null;N={};const t=i.patch.getVar(e);if(!t||!t.getValue()){L=null;i.warn("no varname",e);return}L=t.getValue().data;if(!L){return}const n=t.getValue().basename;const r=i.patch.getVar("font_tex_"+n);if(!r){f=null;L=null;return}f=r.getValue();for(let e=0;e<L.chars.length;e++)N[L.chars[e].char]=L.chars[e];d=true}function b(){const e=i.patch.getVars();const t=["..."];for(const n in e)if(e[n].type=="fontData")t.push(n.substr(ie));a.uiAttribs.values=t}function Oe(){const e=t.get();vec3.set(se,e,e,e);vec3.set(ae,0,v*e,0);$.set(oe*e);ee.set(m*e);te.set((w+v)*e)}function _e(){if(B==undefined)return;if(e.get()=="Top")g=0;else if(e.get()=="Middle")g=1;else if(e.get()=="Bottom")g=2;else if(e.get()=="Zero")g=3;v=0;oe=Math.abs(B-G);m=Math.abs(k-w);if(g===1)v=m/2;else if(g===2)v=m;if(g!=0)v-=M;Oe()}function Ae(){V=false;const t=[];const n=Y.get()||K.get();const r=W.get();const i=q.get();for(let e=0;e<R.numInstances;e++){const a=mat4.create();mat4.translate(a,a,[n[e*3+0],n[e*3+1],n[e*3+2]]);if(r)mat4.scale(a,a,[r[e*3+0],r[e*3+1],r[e*3+2]]);if(i){mat4.rotateX(a,a,i[e*3+0]*CGL.DEG2RAD);mat4.rotateY(a,a,i[e*3+1]*CGL.DEG2RAD);mat4.rotateZ(a,a,i[e*3+2]*CGL.DEG2RAD)}t.push(Array.prototype.slice.call(a))}D=[].concat.apply([],t)}x.onTriggered=function(){if(!L){i.setUiError("nodata","No font data!");i.setUiError("msdfhint","Use the FontMSDF op to create font and texture.",0);Se();Z.trigger();return}if(!f){i.setUiError("nodata","No font texture");i.setUiError("msdfhint","Use the FontMSDF op to create font and texture.",0);Se();Z.trigger();return}i.setUiError("nodata",null);i.setUiError("msdfhint",null);if(d){Te();d=false}if(R&&R.numInstances>0){E.pushShader(h);if(f[0])me.setValue([f[0].width,f[0].height]);if(f[0])E.setTexture(0,f[0].tex);else E.setTexture(0,CGL.Texture.getEmptyTexture(E).tex);if(f[1])E.setTexture(1,f[1].tex);else E.setTexture(1,CGL.Texture.getEmptyTexture(E).tex);if(f[2])E.setTexture(2,f[2].tex);else E.setTexture(2,CGL.Texture.getEmptyTexture(E).tex);if(f[3])E.setTexture(3,f[3].tex);else E.setTexture(3,CGL.Texture.getEmptyTexture(E).tex);if(c.get())E.setTexture(4,c.get().tex);if(p.get())E.setTexture(5,p.get().tex);E.pushModelMatrix();mat4.translate(E.mMatrix,E.mMatrix,ae);if(V)Ae();if(D)R.setAttribute("instMat",new Float32Array(D),16,{instanced:true});if(E.getShader())E.getShader().define("INSTANCING");if(!P){mat4.scale(E.mMatrix,E.mMatrix,se);R.render(E.getShader())}E.popModelMatrix();E.setTexture(0,null);E.popShader()}Z.trigger()};function Ce(e){return N[String(e)]||N["?"]||N._||N.X}function Te(){if(!L||!N){ne.set(0);return}const e=String(F.get()+"");if(!U){U=new CGL.Geometry("textmesh");U.vertices=[.5,.5,0,-.5,.5,0,.5,-.5,0,-.5,-.5,0];U.normals=[0,0,0,0,0,0,0,0,0,0,0,0];U.texCoords=new Float32Array([1,0,0,0,1,1,0,1]);U.verticesIndices=[0,1,2,2,1,3]}if(R)R.dispose();R=new CGL.Mesh(E,U);const i=e.split("\n");const a=[];const s=[];const o=[];const t=[];const l=[];const u=[];let c=0;const p=[];const h=.01;J.set(i.length);k=99999;w=-99999;B=99999;G=-99999;M=0;for(let e=0;e<L.chars.length;e++){if(L.chars[e].height)M+=L.chars[e].height}M/=L.chars.length;M*=h;for(let r=0;r<i.length;r++){const f=i[r];const d=f.length;let t=0;for(let e=0;e<d;e++){const g=f.substring(e,e+1);const m=Ce(g);if(m)t+=m.xadvance*h+A.get()}let n=0;if(T.get()=="Right")n-=t;else if(T.get()=="Center")n-=t/2;for(let t=0;t<d;t++){const v=mat4.create();const g=f.substring(t,t+1);const m=Ce(g);if(!m)continue;u.push(m.page||0);o.push(m.width,m.height);s.push(m.x/L.common.scaleW,m.y/L.common.scaleH);const b=m.width/L.common.scaleW;const y=m.height/L.common.scaleH;const x=m.yoffset/L.common.scaleH;const S=m.xoffset/L.common.scaleW;if(g==" ")l.push(0,0);else l.push(b,y);mat4.identity(v);let e=m.xadvance/2*h;n+=e;const O=n+m.xoffset/2*h;const _=r*-C.get()+M-h*(m.yoffset+m.height/2);B=Math.min(O-b,B);G=Math.max(O+b,G);k=Math.min(_-y-M/2,k);w=Math.max(_+y+M/2,w);mat4.translate(v,v,[O,_,0]);p.push(O,_,0);e=m.xadvance/2*h+A.get();n+=e;B=Math.min(n-b,B);G=Math.max(n+b,G);a.push(Array.prototype.slice.call(v));c++}}D=[].concat.apply([],a);P=false;if(D.length==0)P=true;R.numInstances=D.length/16;ne.set(R.numInstances);if(R.numInstances==0){P=true;return}R.setAttribute("instMat",new Float32Array(D),16,{instanced:true});R.setAttribute("attrTexOffsets",new Float32Array(s),2,{instanced:true});R.setAttribute("attrTcSize",new Float32Array(l),2,{instanced:true});R.setAttribute("attrSize",new Float32Array(o),2,{instanced:true});R.setAttribute("attrPage",new Float32Array(u),1,{instanced:true});if(I.isLinked())R.setAttribute("attrColors",new Float32Array(I.get()),4,{instanced:true});Q.set(o);_e();V=true;K.setRef(p)}};Ops.Gl.TextMeshMSDF_v2.prototype=new CABLES.Op;CABLES.OPS["b5c99363-a749-4040-884b-66f91294bcad"]={f:Ops.Gl.TextMeshMSDF_v2,objName:"Ops.Gl.TextMeshMSDF_v2"};Ops.Math.Round=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inValueFloat("number"),r=e.inInt("Decimal Places",0),i=e.outNumber("result");let a=0;n.onChange=o;r.onChange=s;s();function s(){a=Math.pow(10,r.get());o()}function o(){i.set(Math.round(n.get()*a)/a)}};Ops.Math.Round.prototype=new CABLES.Op;CABLES.OPS["1a1ef636-6d02-42ba-ae1e-627b917d0d2b"]={f:Ops.Math.Round,objName:"Ops.Math.Round"};Ops.String.NumberToString_v2=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inValue("Number"),r=e.outString("Result");n.onChange=i;i();function i(){r.set(String(n.get()||0))}};Ops.String.NumberToString_v2.prototype=new CABLES.Op;CABLES.OPS["5c6d375a-82db-4366-8013-93f56b4061a9"]={f:Ops.String.NumberToString_v2,objName:"Ops.String.NumberToString_v2"};Ops.Gl.FontMSDF_v2=function(){CABLES.Op.apply(this,arguments);const o=this;const e=o.attachments={};const l=o.inString("Font Name",CABLES.uuid()),u=o.inUrl("Font Data","/assets/library/fonts_msdf/worksans-regular_int.json"),c=o.inUrl("Font Image","/assets/library/fonts_msdf/worksans-regular_int.png"),p=o.inUrl("Font Image 1"),h=o.inUrl("Font Image 2"),f=o.inUrl("Font Image 3"),d=o.outBool("Loaded"),g=o.outNumber("Total Chars"),m=o.outString("Chars"),v=o.patch.cgl;let b=false,y=false,x=0;l.onChange=u.onChange=c.onChange=p.onChange=h.onChange=f.onChange=n;const S=[];function O(){const e=b&&y;if(!d.get()&&e)o.patch.emitEvent("FontLoadedMSDF");d.set(e)}o.onFileChanged=function(e){if(c.get()&&c.get().indexOf(e)>-1||p.get()&&p.get().indexOf(e)>-1||h.get()&&h.get().indexOf(e)>-1||f.get()&&f.get().indexOf(e)>-1){n()}};let t="";function n(){if(!u.get()||!c.get())return;S.length=0;o.patch.deleteVar("font_data_"+t);o.patch.deleteVar("font_tex_"+t);t=l.get();const i="font_data_"+l.get();const n="font_tex_"+l.get();o.patch.setVarValue(i,{});o.patch.setVarValue(n,S);o.patch.getVar(i).type="fontData";o.patch.getVar(n).type="fontTexture";b=y=false;O();o.patch.loading.finished(x);x=o.patch.loading.start("jsonFile",""+u.get(),o);o.setUiError("invaliddata",null);o.setUiError("jsonerr",null);o.setUiError("texurlerror",null);const e=o.patch.getFilePath(String(u.get()));v.patch.loading.addAssetLoadingTask(()=>{CABLES.ajax(e,(e,r,t)=>{if(e){o.logError(e);return}try{let t=r;if(typeof t==="string")t=JSON.parse(r);if(!t.chars||!t.info||!t.info.face){o.setUiError("invaliddata","data file is invalid");return}g.set(t.chars.length);let n="";for(let e=0;e<t.chars.length;e++)n+=t.chars[e].char;m.set(n);o.setUiAttrib({extendTitle:t.info.face});o.patch.setVarValue(i,null);o.patch.setVarValue(i,{name:CABLES.basename(u.get()),basename:l.get(),data:t});o.patch.loading.finished(x);b=true;O()}catch(e){o.patch.setVarValue(i,null);o.patch.setVarValue(n,null);o.logError(e);o.setUiError("jsonerr","Problem while loading json:<br/>"+e);o.patch.loading.finished(x);O();d.set(false)}})});for(let t=0;t<4;t++){const r=t;let e=c;if(t==1)e=p;if(t==2)e=h;if(t==3)e=f;if(!e.get())continue;const a=v.patch.loading.start("textureOp",e.get(),o);const s=o.patch.getFilePath(String(e.get()));CGL.Texture.load(v,s,function(e,t){if(e){o.setUiError("texurlerror","could not load texture");v.patch.loading.finished(a);y=false;return}S[r]=t;o.patch.setVarValue(n,null);o.patch.setVarValue(n,S);y=true;v.patch.loading.finished(a);O()},{filter:CGL.Texture.FILTER_LINEAR,flip:false})}}};Ops.Gl.FontMSDF_v2.prototype=new CABLES.Op;CABLES.OPS["6cbd5d67-25d5-4936-a2ad-3ee8ed478570"]={f:Ops.Gl.FontMSDF_v2,objName:"Ops.Gl.FontMSDF_v2"};Ops.Math.Incrementor=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inTriggerButton("Increment"),r=e.inTriggerButton("Decrement"),i=e.inBool("Limit",false),a=e.inValueInt("Length"),s=e.inTriggerButton("Reset"),o=e.inSwitch("Mode",["Rewind","Stop at Max"],"Rewind"),l=e.inValueInt("Default",0),u=e.outTrigger("Changed"),c=e.outNumber("Value"),p=e.outTrigger("Restarted");const h=0;const f=1;c.ignoreValueSerialize=true;a.set(10);let d=0;let g=h;c.set(0);a.onTriggered=s;l.onChange=v;s.onTriggered=v;i.onChange=m;m();o.onChange=()=>{if(o.get()=="Rewind"){g=h}if(o.get()=="Stop at Max"){g=f}};function m(){a.setUiAttribs({greyout:!i.get()})}function v(){c.set(null);d=l.get();c.set(d);p.trigger()}r.onTriggered=function(){d--;if(i.get()){if(g==h&&d<0)d=a.get()-1;if(g==f&&d<0)d=0}c.set(d);u.trigger()};n.onTriggered=function(){d++;if(i.get()){if(g==h&&d>=a.get()){d=0;p.trigger()}if(g==f&&d>=a.get())d=a.get()-1}c.set(d);u.trigger()}};Ops.Math.Incrementor.prototype=new CABLES.Op;CABLES.OPS["45cc0011-ada8-4423-8f5b-39a3810b8389"]={f:Ops.Math.Incrementor,objName:"Ops.Math.Incrementor"};Ops.Math.SmootherStep=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inValueFloat("val",0),r=e.inValueFloat("min",0),i=e.inValueFloat("max",1),a=e.outNumber("result");n.onChange=i.onChange=r.onChange=s;s();function s(){let e=Math.max(0,Math.min(1,(n.get()-r.get())/(i.get()-r.get())));a.set(e*e*e*(e*(e*6-15)+10)*(i.get()-r.get()))}};Ops.Math.SmootherStep.prototype=new CABLES.Op;CABLES.OPS["c66da84f-ff2f-45de-b3c2-557bdf1cb946"]={f:Ops.Math.SmootherStep,objName:"Ops.Math.SmootherStep"};Ops.String.StringCompose_v3=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inString("Format","hello $a, $b $c und $d"),r=e.inString("String A","world"),i=e.inString("String B",1),a=e.inString("String C",2),s=e.inString("String D",3),o=e.inString("String E"),l=e.inString("String F"),u=e.outString("Result");n.onChange=r.onChange=i.onChange=a.onChange=s.onChange=o.onChange=l.onChange=c;c();function c(){var e=n.get()||"";if(typeof e!="string")e="";e=e.replace(/\$a/g,r.get());e=e.replace(/\$b/g,i.get());e=e.replace(/\$c/g,a.get());e=e.replace(/\$d/g,s.get());e=e.replace(/\$e/g,o.get());e=e.replace(/\$f/g,l.get());u.set(e)}};Ops.String.StringCompose_v3.prototype=new CABLES.Op;CABLES.OPS["6afea9f4-728d-4f3c-9e75-62ddc1448bf0"]={f:Ops.String.StringCompose_v3,objName:"Ops.String.StringCompose_v3"};Ops.Gl.Meshes.Circle_v3=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inTrigger("render"),N=e.inValue("radius",.5),U=e.inValueSlider("innerRadius",0),R=e.inValueInt("segments",40),P=e.inValueSlider("percent",1),M=e.inValue("steps",0),k=e.inValueBool("invertSteps",false),w=e.inSwitch("mapping",["flat","round"]),B=e.inValueBool("Spline",false),r=e.inValueBool("Draw",true),i=e.outTrigger("trigger"),G=e.outObject("geometry",null,"geometry");e.setPortGroup("Size",[N,U]);e.setPortGroup("Display",[P,M,k]);e.toWorkShouldNotBeChild("Ops.Gl.TextureEffects.ImageCompose",CABLES.OP_PORT_TYPE_FUNCTION);r.setUiAttribs({title:"Render mesh"});w.set("flat");w.onChange=R.onChange=N.onChange=U.onChange=P.onChange=M.onChange=k.onChange=B.onChange=p;G.ignoreValueSerialize=true;const a=e.patch.cgl;let V=new CGL.Geometry("circle");let D=null;const s=-1;let o=0;let l=null;let F=true;n.onTriggered=u;e.preRender=()=>{u()};n.onLinkChanged=function(){if(!n.isLinked())G.set(null);else G.setRef(V)};function u(){if(F)c();if(!CGL.TextureEffect.checkOpNotInTextureEffect(e))return;l=e.patch.cg.getShader();if(!l)return;o=l.glPrimitive;if(B.get())l.glPrimitive=a.gl.LINE_STRIP;if(r.get()&&D)D.render(l);i.trigger();l.glPrimitive=o}function c(){const n=Math.max(3,Math.floor(R.get()));V.clear();const t=[];const r=[];const i=[];const a=[];const s=[];let o=0,l=0;let u=0,c=0;let p=0,h=0;let f=0,d=0;let g=0,m=0;let v=0,b=0;let y=0,x=0;let S=0,O=0;const _=Math.max(0,P.get());const A=[];if(B.get()){let e=0;let t=0;const C=[];for(o=0;o<=n*_;o++){l=360/n*o*CGL.DEG2RAD;S=Math.cos(l)*N.get();O=Math.sin(l)*N.get();x=.5;if(o>0){A.push(e);A.push(t);A.push(0);y=1-(o-1)/n;C.push(y,x)}A.push(S);A.push(O);A.push(0);e=S;t=O}V.setPointVertices(A)}else if(U.get()<=0){for(o=0;o<=n*_;o++){l=360/n*o*CGL.DEG2RAD;S=Math.cos(l)*N.get();O=Math.sin(l)*N.get();if(w.get()=="flat"){y=(Math.cos(l)+1)/2;x=1-(Math.sin(l)+1)/2;v=.5;b=.5}else if(w.get()=="round"){y=1-o/n;x=0;v=y;b=1}t.push([0,0,0],[u,c,0],[S,O,0]);r.push(v,b,p,h,y,x);i.push(0,0,1,0,0,1,0,0,1);a.push(1,0,0,1,0,0,1,0,0);s.push(0,-1,0,0,-1,0,0,-1,0);p=y;h=x;u=S;c=O}V=CGL.Geometry.buildFromFaces(t,"circle");V.vertexNormals=i;V.tangents=a;V.biTangents=s;V.texCoords=r}else{let e=0;const T=n*_;const I=0;for(o=0;o<=T;o++){e++;l=360/n*o*CGL.DEG2RAD;S=Math.cos(l)*N.get();O=Math.sin(l)*N.get();const E=Math.cos(l)*U.get()*N.get();const L=Math.sin(l)*U.get()*N.get();if(w.get()=="round"){y=1-o/n;x=0;v=y;b=1}if(M.get()===0||e%parseInt(M.get(),10)===0&&!k.get()||e%parseInt(M.get(),10)!==0&&k.get()){t.push([E,L,0],[u,c,0],[S,O,0]);t.push([f,d,0],[u,c,0],[E,L,0]);r.push(y,0,p,0,v,1,y,1,p,0,g,1);i.push(0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1);a.push(1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0);s.push(0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1)}g=v;m=b;p=y;h=x;u=S;c=O;f=E;d=L}V=CGL.Geometry.buildFromFaces(t,"circle");V.vertexNormals=i;V.tangents=a;V.biTangents=s;if(w.get()=="flat")V.mapTexCoords2d();else V.texCoords=r}G.setRef(V);if(V.vertices.length==0)return;if(D)D.dispose();D=null;D=e.patch.cg.createMesh(V,{opId:e.id});F=false}function p(){F=true}e.onDelete=function(){if(D)D.dispose()}};Ops.Gl.Meshes.Circle_v3.prototype=new CABLES.Op;CABLES.OPS["ae07830b-91c3-4cbe-a7d6-d3b737392c16"]={f:Ops.Gl.Meshes.Circle_v3,objName:"Ops.Gl.Meshes.Circle_v3"};Ops.Array.StringToArray_v2=function(){CABLES.Op.apply(this,arguments);const r=this;const e=r.attachments={};const i=r.inStringEditor("text","1,2,3"),a=r.inString("separator",","),s=r.inValueBool("Numbers",true),o=r.inValueBool("Trim",true),l=r.inBool("Split Lines",false),u=r.outArray("array"),c=r.outTrigger("Parsed"),p=r.outNumber("length");i.setUiAttribs({ignoreBigPort:true});i.onChange=a.onChange=s.onChange=o.onChange=t;l.onChange=()=>{a.setUiAttribs({greyout:l.get()});t()};t();function t(){if(!i.get()){u.set(null);u.set([]);p.set(0);return}let e=i.get();if(o.get()&&e){e=e.replace(/^\s+|\s+$/g,"");e=e.trim()}let n;let t=a.get();if(a.get()==="\\n")t="\n";if(l.get())n=e.split("\n");else n=e.split(t);if(n[n.length-1]==="")n.length-=1;p.set(n.length);if(o.get()){for(let e=0;e<n.length;e++){n[e]=n[e].replace(/^\s+|\s+$/g,"");n[e]=n[e].trim()}}r.setUiError("notnum",null);if(s.get()){let t=false;for(let e=0;e<n.length;e++){n[e]=Number(n[e]);if(!CABLES.UTILS.isNumeric(n[e])){t=true}}if(t){r.setUiError("notnum","Parse Error / Not all values numerical!",1)}}u.setRef(n);c.trigger()}};Ops.Array.StringToArray_v2.prototype=new CABLES.Op;CABLES.OPS["c974de41-4ce4-4432-b94d-724741109c71"]={f:Ops.Array.StringToArray_v2,objName:"Ops.Array.StringToArray_v2"};Ops.Array.ArrayGetString=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inArray("array"),r=e.inValueInt("index"),i=e.outString("result");n.ignoreValueSerialize=true;r.onChange=a;n.onChange=function(){a()};function a(){const e=n.get();if(e)i.set(e[r.get()])}};Ops.Array.ArrayGetString.prototype=new CABLES.Op;CABLES.OPS["be8f16c0-0c8a-48a2-a92b-45dbf88c76c1"]={f:Ops.Array.ArrayGetString,objName:"Ops.Array.ArrayGetString"};Ops.Ui.VizArrayTable=function(){CABLES.Op.apply(this,arguments);const d=this;const e=d.attachments={};const g=d.inArray("Array"),m=d.inInt("Start Row",0);d.setUiAttrib({height:200,width:400,resizable:true,vizLayerMaxZoom:2500});function v(t){let n="";if(typeof t=="string"){n='"'+t+'"'}else if(CABLES.UTILS.isNumeric(t))n=String(Math.round(t*1e4)/1e4);else if(Array.isArray(t)){let e="...";if(t.length==0)e="";n="["+e+"] ("+t.length+")"}else if(typeof t=="object"){try{n=JSON.stringify(t,true,1)}catch(e){n="{???}"}}else if(t!=t||t===undefined){n+=String(t)}else{n+=String(t)}return n}d.renderVizLayer=(r,i)=>{r.fillStyle="#222";r.fillRect(i.x,i.y,i.width,i.height);r.save();r.scale(i.scale,i.scale);r.font="normal 10px sourceCodePro";r.fillStyle="#ccc";const a=g.get()||[];let s=1;if(g.get()===null)d.setUiAttrib({extendTitle:"null"});else if(g.get()===undefined)d.setUiAttrib({extendTitle:"undefined"});else d.setUiAttrib({extendTitle:"length: "+a.length});if(g.links.length>0&&g.links[0].getOtherPort(g))s=g.links[0].getOtherPort(g).uiAttribs.stride||1;let e=Math.floor(i.height/i.scale/10-1);let o=4;let l=m.get()*s;let n=[];for(let e=0;e<s;e++)n[e]=0;for(let t=l;t<l+e*s;t+=s){for(let e=0;e<s;e++){const p=a[t+e];n[e]=Math.max(n[e],v(p).length)}}let u=[];let t=30;for(let e=0;e<s;e++){u[e]=t;t+=(n[e]+1)*7}for(let n=l;n<l+e*s;n+=s){if(n<0)continue;if(n+s>a.length)continue;r.fillStyle="#666";const h=n/s;if(h>=0)r.fillText(h,i.x/i.scale+o,i.y/i.scale+10+(n-l)/s*10+o);for(let t=0;t<s;t++){const p=a[n+t];let e=v(p);r.fillStyle="#ccc";if(typeof p=="string"){}else if(CABLES.UTILS.isNumeric(p))e=String(Math.round(p*1e4)/1e4);else if(Array.isArray(p)){}else if(typeof p=="object"){}else if(p!=p||p===undefined){r.fillStyle="#f00"}r.fillText(e,i.x/i.scale+u[t],i.y/i.scale+10+(n-l)/s*10+o)}}if(g.get()===null)r.fillText("null",i.x/i.scale+10,i.y/i.scale+10+o);else if(g.get()===undefined)r.fillText("undefined",i.x/i.scale+10,i.y/i.scale+10+o);const c=30;if(i.scale<=0)return;if(l>0){const f=r.createLinearGradient(0,i.y/i.scale+5,0,i.y/i.scale+c);f.addColorStop(0,"#222");f.addColorStop(1,"rgba(34,34,34,0.0)");r.fillStyle=f;r.fillRect(i.x/i.scale,i.y/i.scale,2e5,c)}if(l+e*s<a.length){const f=r.createLinearGradient(0,i.y/i.scale+i.height/i.scale-c+5,0,i.y/i.scale+i.height/i.scale-c+c);f.addColorStop(1,"#222");f.addColorStop(0,"rgba(34,34,34,0.0)");r.fillStyle=f;r.fillRect(i.x/i.scale,i.y/i.scale+i.height/i.scale-c,2e5,c)}r.restore()}};Ops.Ui.VizArrayTable.prototype=new CABLES.Op;CABLES.OPS["af2eeaaf-ff86-4bfb-9a27-42f05160a5d8"]={f:Ops.Ui.VizArrayTable,objName:"Ops.Ui.VizArrayTable"};Ops.Number.TriggerOnChangeNumber=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inFloat("Value"),r=e.outTrigger("Next"),i=e.outNumber("Number");n.onChange=function(){i.set(n.get());r.trigger()}};Ops.Number.TriggerOnChangeNumber.prototype=new CABLES.Op;CABLES.OPS["f5c8c433-ce13-49c4-9a33-74e98f110ed0"]={f:Ops.Number.TriggerOnChangeNumber,objName:"Ops.Number.TriggerOnChangeNumber"};Ops.Html.DivElement_v3=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inString("Text","Hello Div"),r=e.inString("Id"),i=e.inString("Class"),a=e.inStringEditor("Style","position:absolute;\nz-index:100;","inline-css"),s=e.inValueBool("Interactive",false),o=e.inValueBool("Visible",true),l=e.inValueBool("Convert Line Breaks",false),u=e.inValueBool("Propagate Click-Events",true),c=e.outObject("DOM Element",null,"element"),p=e.outBoolNum("Hover"),h=e.outTrigger("Clicked");let f=null;let d=null;let g="block";let m=null;const v=e.patch.cgl.canvas.parentElement;b();i.onChange=T;l.onChange=n.onChange=O;a.onChange=_;s.onChange=N;o.onChange=S;O();_();P();N();e.onDelete=y;c.onLinkChanged=_;function b(){m=e.patch.getDocument().createElement("div");m.dataset.op=e.id;m.classList.add("cablesEle");if(r.get())m.id=r.get();v.appendChild(m);c.set(m)}function y(){if(m)C();if(m&&m.parentNode)m.parentNode.removeChild(m);d=null;m=null}function x(e){if(!e){m.style.visibility="hidden";g=m.style.display||"inherit";m.style.display="none"}else{if(g=="none")g="inherit";m.style.visibility="visible";m.style.display=g}}function S(){x(o.get())}function O(){let e=n.get();if(d===e)return;d=e;if(e&&l.get())e=e.replace(/(?:\r\n|\r|\n)/g,"<br>");if(m.innerHTML!=e)m.innerHTML=e;c.set(null);c.set(m)}function _(){if(!m)return;m.setAttribute("style",a.get());S();c.set(null);c.set(m);if(!m.parentElement){v.appendChild(m)}P()}let A="";function C(){if(!m)return;const t=(i.get()||"").split(" ");for(let e=0;e<t.length;e++){if(t[e])m.classList.remove(t[e])}A=""}function T(){const t=(i.get()||"").split(" ");const n=(A||"").split(" ");let r=false;for(let e=0;e<n.length;e++){if(n[e]&&t.indexOf(n[e].trim())==-1){r=true;m.classList.remove(n[e])}}for(let e=0;e<t.length;e++){if(t[e]){m.classList.add(t[e].trim())}}A=i.get();P()}function I(e){p.set(true)}function E(e){p.set(false)}function L(e){if(!u.get()){e.stopPropagation()}h.trigger()}function N(){U();if(s.get())R()}r.onChange=function(){m.id=r.get()};function U(){if(f){f.removeEventListener("pointerdown",L);f.removeEventListener("pointerleave",E);f.removeEventListener("pointerenter",I);f=null}}function R(){if(f)U();f=m;if(f){f.addEventListener("pointerdown",L);f.addEventListener("pointerleave",E);f.addEventListener("pointerenter",I)}}e.addEventListener("onEnabledChange",function(e){y();if(e){b();_();T();O();N()}});function P(){if(i.get()&&a.get()){e.setUiError("error","Element uses external and inline CSS",1)}else{e.setUiError("error",null)}}};Ops.Html.DivElement_v3.prototype=new CABLES.Op;CABLES.OPS["d55d398c-e68e-486b-b0ce-d9c4bdf7df05"]={f:Ops.Html.DivElement_v3,objName:"Ops.Html.DivElement_v3"};Ops.String.StringEditor=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inStringEditor("value",""),r=e.inValueSelect("Syntax",["text","glsl","css","html","xml","json","javascript","inline-css","sql"],"text"),i=e.outString("Result");r.onChange=a;function a(){let e=r.get();if(e=="javascript")e="js";n.setUiAttribs({editorSyntax:e})}n.onChange=function(){i.set(n.get())}};Ops.String.StringEditor.prototype=new CABLES.Op;CABLES.OPS["6468b7c1-f63e-4db4-b809-4b203d27ead3"]={f:Ops.String.StringEditor,objName:"Ops.String.StringEditor"};Ops.Html.CSS_v2=function(){CABLES.Op.apply(this,arguments);const n=this;const e=n.attachments={};const r=n.inStringEditor("css code"),t=n.inBool("Active",true);r.setUiAttribs({editorSyntax:"css",ignoreBigPort:true});let i=null;const a="css_"+CABLES.uuid();r.onChange=o;o();t.onChange=()=>{if(!t.get())i.remove();else l()};function s(){let t=r.get();if(t){let e=null;if(n.storage&&n.storage.blueprint&&n.storage.blueprint.patchId){e=n.storage.blueprint.patchId}t=t.replace(new RegExp("{{ASSETPATH}}","g"),n.patch.getAssetPath(e))}return t}function o(){i=n.patch.getDocument().getElementById(a);if(i){i.textContent=s()}else{i=n.patch.getDocument().createElement("style");i.type="text/css";i.id=a;i.textContent=e.css_spinner;i.classList.add("cablesEle");l()}}function l(){const e=n.patch.getDocument().getElementsByTagName("body")[0];e.appendChild(i)}n.onDelete=function(){i=n.patch.getDocument().getElementById(a);if(i)i.remove()}};Ops.Html.CSS_v2.prototype=new CABLES.Op;CABLES.OPS["a56d3edd-06ad-44ed-9810-dbf714600c67"]={f:Ops.Html.CSS_v2,objName:"Ops.Html.CSS_v2"};Ops.Html.TransformCSS3DElement=function(){CABLES.Op.apply(this,arguments);const r=this;const e=r.attachments={};const i=r.patch.cgl,t=["top-left","top-middle","top-right","center-left","center-middle","center-right","bottom-left","bottom-middle","bottom-right"],n=r.inTrigger("trigger"),a=r.inObject("DOMElement"),s=r.inValueSelect("origin",t,"center-middle"),o=r.outTrigger("next"),l=mat4.create(),u=vec3.create();r.uuid=CABLES.uuid();let c=null;let p=i.canvas.parentElement.querySelector('[data-provide="css3d"]');if(!p){p=document.createElement("div");p.dataset.op=r.id;p.style.position="absolute";p.style.top=p.style.left=0;p.style.width=p.style.height="100%";p.dataset.provide="css3d";p.style.zIndex=1e3;p.style.pointerEvents="none";p.style.perspectiveOrigin="center center";i.canvas.parentElement.appendChild(p);let e=document.createElement("style");e.dataset.op=r.id;e.type="text/css";e.textContent=[".cables-loading .cables-css3dview {visibility:hidden;pointer-events:none;backface-visibility:hidden;}",".cables-css3dview {position:absolute;left:0;top:0;width:100%;height:100%;transform-style:preserve-3d;}",".cables-css3dview > * {pointer-events:auto;}",".cables-css3dview.origin-top-left > * {}",".cables-css3dview.origin-top-middle > * {transform:translate3d(-50%,0,0);}",".cables-css3dview.origin-top-right > * {transform:translate3d(-100%,0,0);}",".cables-css3dview.origin-center-left > * {transform:translate3d(0,-50%,0);}",".cables-css3dview.origin-center-middle > * {transform:translate3d(-50%,-50%,0);}",".cables-css3dview.origin-center-right > * {transform:translate3d(-100%,-50%,0);}",".cables-css3dview.origin-bottom-left > * {transform:translate3d(0,-100%,0);}",".cables-css3dview.origin-bottom-middle > * {transform:translate3d(-50%,-100%,0);}",".cables-css3dview.origin-bottom-right > * {transform:translate3d(-100%,-100%,0);}"].join("\n");p.appendChild(e)}r.onDelete=function(){let e=p.querySelector('[data-ccs3did="'+r.uuid+'"]');if(e&&e.parentElement)e.parentElement.removeChild(e)};function h(e){let t=document.createElement("div");t.classList.add("cables-css3dview");t.dataset.css3did=r.uuid;t.appendChild(e);return t}a.onChange=function(e,t){r.onDelete();if(!t)return;p.appendChild(h(t));s.onChange()};s.onChange=function(){let e=a.get();if(!e||!e.parentElement)return;DOMTokenList.prototype.remove.apply(e.parentElement.classList,t.map(function(e){return"origin-"+e}));e.parentElement.classList.add("origin-"+s.get())};n.onTriggered=function(){let e=.5/(1/i.pMatrix[5])*i.gl.drawingBufferHeight/r.patch.cgl.pixelDensity;p.style.perspective=e+"px";let t=-2*i.gl.drawingBufferWidth/i.gl.drawingBufferHeight;vec3.set(u,t/i.gl.drawingBufferWidth*r.patch.cgl.pixelDensity,-2/i.gl.drawingBufferHeight*r.patch.cgl.pixelDensity,1);let n=a.get();if(n){mat4.multiply(l,i.vMatrix,i.mMatrix);mat4.scale(l,l,u);if(n.parentElement)n.parentElement.style.transform="translateZ("+e+"px) matrix3d("+l[0]+","+-l[1]+","+l[2]+","+l[3]+","+l[4]+","+-l[5]+","+l[6]+","+l[7]+","+l[8]+","+-l[9]+","+l[10]+","+l[11]+","+l[12]+","+-l[13]+","+l[14]+","+l[15]+") scaleX(-1) translate3d("+i.gl.drawingBufferWidth/2/r.patch.cgl.pixelDensity+"px,"+i.gl.drawingBufferHeight/2/r.patch.cgl.pixelDensity+"px"+",0"+")"}o.trigger();c=n};s.onChange();function f(e){if(!e)e=a.get();if(e&&e.parentElement)e.parentElement.style.transform=""}r.onDelete=function(){f(c)};a.onLinkChanged=function(){if(!a.isLinked())f(c)};r.addEventListener("onEnabledChange",function(e){if(!e)f()})};Ops.Html.TransformCSS3DElement.prototype=new CABLES.Op;CABLES.OPS["7b81ed97-6fb9-4044-a731-962a2a11db27"]={f:Ops.Html.TransformCSS3DElement,objName:"Ops.Html.TransformCSS3DElement"};Ops.Gl.CanvasInfo_v2=function(){CABLES.Op.apply(this,arguments);const t=this;const e=t.attachments={};const n=t.outNumber("width"),r=t.outNumber("height"),i=t.outNumber("Pixel Ratio"),a=t.outNumber("Pixel Width"),s=t.outNumber("Pixel Height"),o=t.inSwitch("Pixel Unit",["Display","CSS"],"Display"),l=t.outNumber("Aspect Ratio"),u=t.outBool("Landscape"),c=t.outObject("Canvas","element"),p=t.outObject("Canvas Parent","element");let h=t.patch.cgl;c.set(t.patch.cgl.canvas);p.set(t.patch.cgl.canvas.parentElement);h.on("resize",f);o.onChange=f;f();function f(){let e=1;if(o.get()=="CSS")e=t.patch.cgl.pixelDensity;r.set(h.canvasHeight);n.set(h.canvasWidth);s.set(h.canvasHeight*t.patch.cgl.pixelDensity);a.set(h.canvasWidth*t.patch.cgl.pixelDensity);i.set(t.patch.cgl.pixelDensity);l.set(h.canvasWidth/h.canvasHeight);u.set(h.canvasWidth>h.canvasHeight?1:0)}};Ops.Gl.CanvasInfo_v2.prototype=new CABLES.Op;CABLES.OPS["a249e025-ae2c-4fb1-99f1-f86bfe7d5fc4"]={f:Ops.Gl.CanvasInfo_v2,objName:"Ops.Gl.CanvasInfo_v2"};Ops.Math.Divide=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inValueFloat("number1",1),r=e.inValueFloat("number2",2),i=e.outNumber("result");e.setUiAttribs({mathTitle:true});n.onChange=r.onChange=a;a();function a(){i.set(n.get()/r.get())}};Ops.Math.Divide.prototype=new CABLES.Op;CABLES.OPS["86fcfd8c-038d-4b91-9820-a08114f6b7eb"]={f:Ops.Math.Divide,objName:"Ops.Math.Divide"};Ops.Html.CSSProperty_v2=function(){CABLES.Op.apply(this,arguments);const t=this;const e=t.attachments={};const n=t.inObject("Element"),r=t.inString("Property"),i=t.inFloat("Value"),a=t.inString("Value Suffix","px"),s=t.outObject("HTML Element");t.setPortGroup("Element",[n]);t.setPortGroup("Attributes",[r,i,a]);r.onChange=l;i.onChange=u;a.onChange=u;let o=null;n.onChange=n.onLinkChanged=function(){if(o&&o.style){o.style[r.get()]="initial"}u()};function l(){u();t.setUiAttrib({extendTitle:r.get()+""})}function u(){o=n.get();if(o&&o.style){const e=i.get()+a.get();try{if(o.style[r.get()]!=e)o.style[r.get()]=e}catch(e){t.logError(e)}}else{setTimeout(u,50)}s.set(n.get())}};Ops.Html.CSSProperty_v2.prototype=new CABLES.Op;CABLES.OPS["c179aa0e-b558-4130-8c2d-2deab2919a07"]={f:Ops.Html.CSSProperty_v2,objName:"Ops.Html.CSSProperty_v2"};Ops.Boolean.BoolToNumber_v2=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inBool("Use Value 1",false),r=e.inFloat("Value 0",0),i=e.inFloat("Value 1",1),a=e.outNumber("Out Value",0);r.onChange=i.onChange=n.onChange=s;function s(){const e=n.get();if(e){a.set(i.get())}else{a.set(r.get())}}};Ops.Boolean.BoolToNumber_v2.prototype=new CABLES.Op;CABLES.OPS["400eea7d-5a68-4dda-a94d-2bb2ee7c2331"]={f:Ops.Boolean.BoolToNumber_v2,objName:"Ops.Boolean.BoolToNumber_v2"};Ops.Html.HyperLink_v2=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inTriggerButton("Open"),r=e.inString("URL","https://cables.gl"),i=e.inString("Target Name","_self"),a=e.inString("Specs","");n.onTriggered=function(){window.open(r.get(),i.get(),a.get())}};Ops.Html.HyperLink_v2.prototype=new CABLES.Op;CABLES.OPS["a669d4f7-1e35-463c-bf8b-08c9f1b68e04"]={f:Ops.Html.HyperLink_v2,objName:"Ops.Html.HyperLink_v2"};Ops.Extension.OpenType.OpentypeFont=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inUrl("Font File",[".otf",".ttf",".woff",".woff2"]),r=e.outObject("Opentype Font",null,"opentype");n.onChange=async function(){const e=await opentype.load(n.get());r.set(e)}};Ops.Extension.OpenType.OpentypeFont.prototype=new CABLES.Op;CABLES.OPS["f85574bb-3869-4a14-8dcc-70414bd8cfcd"]={f:Ops.Extension.OpenType.OpentypeFont,objName:"Ops.Extension.OpenType.OpentypeFont"};Ops.Extension.OpenType.OpentypeToSvgPath=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const a=e.inObject("Opentype Font"),s=e.inString("Text","cables"),o=e.inFloat("Letter Spacing",0),l=e.outString("Path String");s.onChange=o.onChange=a.onChange=async function(){const e=a.get();if(!e||!e.getPath){l.set("");return}const n=e.getPaths(s.get(),0,0,72);let r="";let i=o.get();for(let t=0;t<n.length;t++){for(let e=0;e<n[t].commands.length;e++){if(n[t].commands[e].hasOwnProperty("x"))n[t].commands[e].x+=t*i;if(n[t].commands[e].hasOwnProperty("x1"))n[t].commands[e].x1+=t*i}r+=n[t].toPathData()}l.set(r)}};Ops.Extension.OpenType.OpentypeToSvgPath.prototype=new CABLES.Op;CABLES.OPS["4d901c72-b8dc-45dc-ac2e-608e5da40677"]={f:Ops.Extension.OpenType.OpentypeToSvgPath,objName:"Ops.Extension.OpenType.OpentypeToSvgPath"};Ops.Graphics.Geometry.SvgPathToGeometry_v2=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const d=e.inString("SVG Path"),n=e.inFloat("Bezier Stepsize",3),g=e.inFloat("Rescale",1),m=e.outObject("Geometry",null,"geometry");n.onChange=g.onChange=d.onChange=()=>{let e=d.get();if(!e||e.length<2){m.set(null);return}e=e.replace(/([A-Z,a-z])/g," $1 ");const t=v(e);const o=[];t.forEach(({type:e,x:t,y:n,x1:r,y1:i,x2:a,y2:s})=>{switch(e){case"M":o.push(new b);o[o.length-1].moveTo({x:t,y:n});break;case"L":o[o.length-1].moveTo({x:t,y:n});break;case"C":o[o.length-1].cubicTo({x:t,y:n},{x:r,y:i},{x:a,y:s});break;case"Q":o[o.length-1].conicTo({x:t,y:n},{x:r,y:i});break;case"Z":o[o.length-1].close();break}});o.sort((e,t)=>{return Math.abs(t.area)-Math.abs(e.area)});const r=[];for(let n=0;n<o.length;++n){let t=null;for(let e=n-1;e>=0;--e){if(o[e].inside(o[n].points[0])&&o[n].area*o[e].area<0){t=o[e];break}}if(t){t.children.push(o[n])}else{r.push(o[n])}}const n=o.reduce((e,t)=>{return e+t.points.length},0);const i=new Float32Array(n*2);let a=0;const s=[];function l(e){const n=[];const t=[];e.points.forEach(({x:e,y:t})=>{return n.push(e,t)});e.children.forEach(e=>{e.children.forEach(l);t.push(n.length/2);e.points.forEach(({x:e,y:t})=>{return n.push(e,t)})});i.set(n,a*2);earcut(n,t).forEach(e=>{return s.push(e+a)});a+=n.length/2}r.forEach(l);const u=new Float32Array(n*3);let c=-99999;for(let e=0;e<u.length/3;e++){u[e*3+0]=i[e*2+0];u[e*3+1]=i[e*2+1]*-1;c=Math.max(u[e*3+1],c);u[e*3+2]=0}let p=g.get();let h=new CGL.Geometry("circle");h.setVertices(u);h.verticesIndices=s;if(p!=0){const f=h.getBounds();for(let e=0;e<u.length/3;e++){u[e*3+0]=u[e*3+0]/(f.size[0]/2)*p;u[e*3+1]=u[e*3+1]/(f.size[0]/2)*p}h.setVertices(u)}h.mapTexCoords2d();h.flipVertDir();h.calculateNormals();h.calcTangentsBitangents();m.set(h)};const s={M:["x","y"],m:["dx","dy"],H:["x"],h:["dx"],V:["y"],v:["dy"],L:["x","y"],l:["dx","dy"],Z:[],C:["x1","y1","x2","y2","x","y"],c:["dx1","dy1","dx2","dy2","dx","dy"],S:["x2","y2","x","y"],s:["dx2","dy2","dx","dy"],Q:["x1","y1","x","y"],q:["dx1","dy1","dx","dy"],T:["x","y"],t:["dx","dy"],A:["rx","ry","rotation","large-arc","sweep","x","y"],a:["rx","ry","rotation","large-arc","sweep","dx","dy"]};function v(e){const n=e.replace(/[\n\r]/g,"").replace(/-/g," -").replace(/(\d*\.)(\d+)(?=\.)/g,"$1$2 ").trim().split(/\s*,|\s+/);const r=[];let i="";let a={};while(n.length>0){let t=n.shift();if(s.hasOwnProperty(t)){i=t}else{n.unshift(t)}a={type:i};s[i].forEach(e=>{t=n.shift();a[e]=parseFloat(t)});if(i==="M"){i="L"}else if(i==="m"){i="l"}r.push(a)}return r}const u=15;const o=1e-6;class b{constructor(){this.points=[];this.children=[];this.area=0;this.BEZIER_STEP_SIZE=n.get()}moveTo(e){this.points.push(e)}lineTo(e){this.points.push(e)}close(){let t=this.points[this.points.length-1];this.points.forEach(e=>{this.area+=.5*r(t,e);t=e})}conicTo(t,n){const r=this.points[this.points.length-1];const e=c(r,n)+c(n,t);const i=Math.max(2,Math.min(u,e/this.BEZIER_STEP_SIZE));for(let e=1;e<=i;++e){const a=e/i;this.points.push(p(p(r,n,a),p(n,t,a),a))}}cubicTo(t,n,r){const i=this.points[this.points.length-1];const e=c(i,n)+c(n,r)+c(r,t);const a=Math.max(2,Math.min(u,e/this.BEZIER_STEP_SIZE));for(let e=1;e<=a;++e){const s=e/a;const o=p(p(i,n,s),p(n,r,s),s);const l=p(p(n,r,s),p(r,t,s),s);this.points.push(p(o,l,s))}}inside(r){let i=0,a=this.points[this.points.length-1];this.points.forEach(e=>{const t=a.y<e.y?a:e;const n=a.y<e.y?e:a;if(t.y<r.y+o&&n.y>r.y+o){if((n.x-t.x)*(r.y-t.y)>(r.x-t.x)*(n.y-t.y)){i+=1}}a=e});return i%2!==0}}function c(e,t){const n=e.x-t.x,r=e.y-t.y;return Math.sqrt(n*n+r*r)}function p(e,t,n){return{x:(1-n)*e.x+n*t.x,y:(1-n)*e.y+n*t.y}}function r(e,t){return e.x*t.y-e.y*t.x}};Ops.Graphics.Geometry.SvgPathToGeometry_v2.prototype=new CABLES.Op;CABLES.OPS["4267b3e7-1285-4a3e-acc8-ea92a72a6bc0"]={f:Ops.Graphics.Geometry.SvgPathToGeometry_v2,objName:"Ops.Graphics.Geometry.SvgPathToGeometry_v2"};Ops.Gl.RenderGeometry_v2=function(){CABLES.Op.apply(this,arguments);const t=this;const e=t.attachments={};const n=t.inTrigger("render"),r=t.inObject("Geometry",null,"geometry"),i=t.inBool("Render Mesh",true),a=t.inBool("Add Vertex Numbers",true),s=t.outTrigger("trigger");t.toWorkPortsNeedToBeLinked(r,n);r.ignoreValueSerialize=true;let o=null;let l=true;r.onLinkChanged=a.onChange=r.onChange=()=>{l=true};n.onTriggered=function(){if(l)u();if(o&&i.get())o.render(t.patch.cgl.getShader());s.trigger()};function u(){l=false;const e=r.get();if(e&&e.isGeometry){if(o){o.dispose();o=null}if(!o){o=new CGL.Mesh(t.patch.cgl,e);o.addVertexNumbers=a.get();o.setGeom(e)}}else{o=null}}};Ops.Gl.RenderGeometry_v2.prototype=new CABLES.Op;CABLES.OPS["0a9bdb39-8250-460e-8d99-50fe6825d956"]={f:Ops.Gl.RenderGeometry_v2,objName:"Ops.Gl.RenderGeometry_v2"};Ops.Graphics.Geometry.GeometryExtrude=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const p=e.inObject("Geometry",null,"geometry"),h=e.inFloat("Height",.5),f=e.inBool("Smooth",true),d=e.inBool("Walls",true),g=e.inBool("Top",true),m=e.inBool("Bottom",true),v=e.outObject("Result Geometry",null,"geometry");function b(t){let n=0;for(let e=0;e<t.length-3;e+=3){n+=(t[e+3]-t[e])*(t[e+3+1]+t[e])}return n>0}f.onChange=d.onChange=g.onChange=m.onChange=h.onChange=p.onChange=()=>{const i=p.get();if(!i){v.set(null);return}function t(t,n){let r=0;for(let e=0;e<i.verticesIndices.length;e+=3){if((i.verticesIndices[e]==t||i.verticesIndices[e+1]==t||i.verticesIndices[e+2]==t)&&(i.verticesIndices[e]==n||i.verticesIndices[e+1]==n||i.verticesIndices[e+2]==n)){r++;if(r==2)return true}}return false}let n=[];const e=[];const r=h.get();if(d.get())for(let e=0;e<i.verticesIndices.length;e+=3){const s=i.verticesIndices[e];const o=i.verticesIndices[e+1];const l=i.verticesIndices[e+2];if(!t(s,o)){const u=[];u.push([i.vertices[s*3+0],i.vertices[s*3+1],i.vertices[s*3+2]]);u.push([i.vertices[s*3+0],i.vertices[s*3+1],i.vertices[s*3+2]+r]);u.push([i.vertices[o*3+0],i.vertices[o*3+1],i.vertices[o*3+2]]);if(!b(u))n=n.concat(u);else n=n.concat(u.reverse());u.length=0;u.push([i.vertices[o*3+0],i.vertices[o*3+1],i.vertices[o*3+2]+r]);u.push([i.vertices[o*3+0],i.vertices[o*3+1],i.vertices[o*3+2]]);u.push([i.vertices[s*3+0],i.vertices[s*3+1],i.vertices[s*3+2]+r]);if(!b(u))n=n.concat(u);else n=n.concat(u.reverse())}if(!t(l,o)){const u=[];u.push([i.vertices[l*3+0],i.vertices[l*3+1],i.vertices[l*3+2]]);u.push([i.vertices[l*3+0],i.vertices[l*3+1],i.vertices[l*3+2]+r]);u.push([i.vertices[o*3+0],i.vertices[o*3+1],i.vertices[o*3+2]]);if(b(u))n=n.concat(u);else n=n.concat(u.reverse());u.length=0;u.push([i.vertices[o*3+0],i.vertices[o*3+1],i.vertices[o*3+2]+r]);u.push([i.vertices[o*3+0],i.vertices[o*3+1],i.vertices[o*3+2]]);u.push([i.vertices[l*3+0],i.vertices[l*3+1],i.vertices[l*3+2]+r]);if(b(u))n=n.concat(u);else n=n.concat(u.reverse())}if(!t(l,s)){const u=[];u.push([i.vertices[l*3+0],i.vertices[l*3+1],i.vertices[l*3+2]]);u.push([i.vertices[l*3+0],i.vertices[l*3+1],i.vertices[l*3+2]+r]);u.push([i.vertices[s*3+0],i.vertices[s*3+1],i.vertices[s*3+2]]);if(!b(u))n=n.concat(u);else n=n.concat(u.reverse());u.length=0;u.push([i.vertices[s*3+0],i.vertices[s*3+1],i.vertices[s*3+2]+r]);u.push([i.vertices[s*3+0],i.vertices[s*3+1],i.vertices[s*3+2]]);u.push([i.vertices[l*3+0],i.vertices[l*3+1],i.vertices[l*3+2]+r]);if(!b(u))n=n.concat(u);else n=n.concat(u.reverse())}}const a=CGL.Geometry.buildFromFaces(n,"extrude",true);a.calculateNormals();a.calcTangentsBitangents();if(m.get()){a.merge(i)}if(g.get()){const c=i.copy();for(let e=0;e<c.vertices.length;e+=3)c.vertices[e+2]+=r;c.flipVertDir();c.flipNormals();a.merge(c)}a.flipVertDir();if(!f.get()){a.unIndex();a.calculateNormals({forceZUp:true});a.flipNormals()}v.set(null);v.set(a)}};Ops.Graphics.Geometry.GeometryExtrude.prototype=new CABLES.Op;CABLES.OPS["64a34a29-000d-4350-875f-5b72b97a314f"]={f:Ops.Graphics.Geometry.GeometryExtrude,objName:"Ops.Graphics.Geometry.GeometryExtrude"};Ops.Anim.Smooth=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inTrigger("Update"),r=e.inBool("Separate inc/dec",false),i=e.inValue("Value"),a=e.outTrigger("Next"),s=e.inValue("Inc factor",4),o=e.inValue("Dec factor",4),l=e.outNumber("Result",0);let u=0;let c=0;let p=0;let h=0;e.toWorkPortsNeedToBeLinked(n);let f;let d;let g=4;let m=true;let v=0;const b=0;const y=1;x();S();r.setUiAttribs({hidePort:true});s.onChange=o.onChange=S;r.onChange=x;O();function x(){const e=r.get();if(!e)v=b;else v=y;if(v==b){o.setUiAttribs({greyout:true});s.setUiAttribs({title:"Inc/Dec factor"})}else if(v==y){o.setUiAttribs({greyout:false});s.setUiAttribs({title:"Inc factor"})}S();O()}function S(){if(v==b){f=s.get();d=s.get()}else if(v==y){f=s.get();d=o.get()}if(f<=.2||f!=f)f=.2;if(d<=.2||d!=d)d=.2}i.onChange=function(){m=false;let e=c;c=i.get()};s.onChange=function(){S()};function O(){let e=1;if(performance.now()-h>500||h===0)u=i.get()||0;else e=(performance.now()-h)/(performance.now()-h);h=performance.now();if(u!=u)u=0;if(g<=0)g=1e-4;const t=c-u;if(t>=0)u+=t/(d*e);else u+=t/(f*e);if(Math.abs(t)<1e-5)u=c;if(g!=g)u=0;if(u!=u||u==-Infinity||u==Infinity)u=i.get();if(p!=u){l.set(u);p=u}if(u==c&&!m){m=true;l.set(u)}a.trigger()}n.onTriggered=function(){O()}};Ops.Anim.Smooth.prototype=new CABLES.Op;CABLES.OPS["5677b5b5-753a-4fbf-9e91-64c81ec68a2f"]={f:Ops.Anim.Smooth,objName:"Ops.Anim.Smooth"};Ops.Math.MathExpression=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inFloat("A",0);const r=e.inFloat("B",1);const i=e.inFloat("C",2);const a=e.inFloat("D",3);e.setPortGroup("Parameters",[n,r,i,a]);const s=e.inString("Expression","a*(b+c+d)");e.setPortGroup("Expression",[s]);const o=e.outNumber("Result");const l=e.outBool("Expression Valid");let u=s.get();let c=false;const p=()=>{try{u=new Function("m","a","b","c","d",`with(m) { return ${s.get()} }`);c=true;h();l.set(c)}catch(e){c=false;l.set(c);if(e instanceof ReferenceError||e instanceof SyntaxError)return}};const h=()=>{if(c){o.set(u(Math,n.get(),r.get(),i.get(),a.get()));if(!s.get())o.set(0)}l.set(c)};n.onChange=r.onChange=i.onChange=a.onChange=h;s.onChange=p;p()};Ops.Math.MathExpression.prototype=new CABLES.Op;CABLES.OPS["d2343a1e-64ea-45b2-99ed-46e167bbdcd3"]={f:Ops.Math.MathExpression,objName:"Ops.Math.MathExpression"};Ops.Array.GateArray_v2=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const n=e.inArray("Array in"),r=e.inValueBool("Pass Through",true),i=e.inSwitch("When False",["keep last array","null"],"keep last array"),a=e.outArray("Array Out");let s=null;function o(t){if(!t)return null;const n=[];n.length=t.length;for(let e=0;e<t.length;e++)n[e]=t[e];return n}i.onChange=n.onChange=r.onChange=function(){if(r.get()){s=o(n.get());a.setRef(s)}else{if(i.get()=="null")a.setRef(null)}}};Ops.Array.GateArray_v2.prototype=new CABLES.Op;CABLES.OPS["e28a489c-46b6-4279-928c-6b0cbaaaae2a"]={f:Ops.Array.GateArray_v2,objName:"Ops.Array.GateArray_v2"};Ops.Patch.PuvBp73.ArraySetNumberAtIndex_v4=function(){CABLES.Op.apply(this,arguments);const e=this;const t=e.attachments={};const r=e.inArray("Array"),i=e.inInt("Index",0),a=e.inFloat("Number",1),s=e.outArray("Result");e.toWorkPortsNeedToBeLinked(r);r.onChange=i.onChange=a.onChange=n;function n(){const t=r.get();if(!t){s.set(null);return}const n=i.get();for(let e=0;e<t.length;e++){if(n===e){t[e]=a.get()||t[e]}}s.setRef(t)}};Ops.Patch.PuvBp73.ArraySetNumberAtIndex_v4.prototype=new CABLES.Op;CABLES.OPS["da4ee427-598b-4502-aba4-8e8fb896d4c2"]={f:Ops.Patch.PuvBp73.ArraySetNumberAtIndex_v4,objName:"Ops.Patch.PuvBp73.ArraySetNumberAtIndex_v4"};window.addEventListener("load",function(e){CABLES.jsLoaded=new Event("CABLES.jsLoaded");document.dispatchEvent(CABLES.jsLoaded)});(function(e,t){typeof exports==="object"&&typeof module!=="undefined"?t(exports):typeof define==="function"&&define.amd?define(["exports"],t):(e=e||self,t(e.opentype={}))})(this,function(C){"use strict";if(!String.prototype.codePointAt){(function(){var e=function(){try{var e={};var t=Object.defineProperty;var n=t(e,e,e)&&t}catch(e){}return n}();var t=function(e){if(this==null){throw TypeError()}var t=String(this);var n=t.length;var r=e?Number(e):0;if(r!=r){r=0}if(r<0||r>=n){return undefined}var i=t.charCodeAt(r);var a;if(i>=55296&&i<=56319&&n>r+1){a=t.charCodeAt(r+1);if(a>=56320&&a<=57343){return(i-55296)*1024+a-56320+65536}}return i};if(e){e(String.prototype,"codePointAt",{value:t,configurable:true,writable:true})}else{String.prototype.codePointAt=t}})()}var P=0;var M=-3;function k(){this.table=new Uint16Array(16);this.trans=new Uint16Array(288)}function w(e,t){this.source=e;this.sourceIndex=0;this.tag=0;this.bitcount=0;this.dest=t;this.destLen=0;this.ltree=new k;this.dtree=new k}var B=new k;var F=new k;var j=new Uint8Array(30);var z=new Uint16Array(30);var H=new Uint8Array(30);var X=new Uint16Array(30);var Y=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);var W=new k;var h=new Uint8Array(288+32);function q(e,t,n,r){var i,a;for(i=0;i<n;++i){e[i]=0}for(i=0;i<30-n;++i){e[i+n]=i/n|0}for(a=r,i=0;i<30;++i){t[i]=a;a+=1<<e[i]}}function Z(e,t){var n;for(n=0;n<7;++n){e.table[n]=0}e.table[7]=24;e.table[8]=152;e.table[9]=112;for(n=0;n<24;++n){e.trans[n]=256+n}for(n=0;n<144;++n){e.trans[24+n]=n}for(n=0;n<8;++n){e.trans[24+144+n]=280+n}for(n=0;n<112;++n){e.trans[24+144+8+n]=144+n}for(n=0;n<5;++n){t.table[n]=0}t.table[5]=32;for(n=0;n<32;++n){t.trans[n]=n}}var K=new Uint16Array(16);function Q(e,t,n,r){var i,a;for(i=0;i<16;++i){e.table[i]=0}for(i=0;i<r;++i){e.table[t[n+i]]++}e.table[0]=0;for(a=0,i=0;i<16;++i){K[i]=a;a+=e.table[i]}for(i=0;i<r;++i){if(t[n+i]){e.trans[K[t[n+i]]++]=i}}}function J(e){if(!e.bitcount--){e.tag=e.source[e.sourceIndex++];e.bitcount=7}var t=e.tag&1;e.tag>>>=1;return t}function f(e,t,n){if(!t){return n}while(e.bitcount<24){e.tag|=e.source[e.sourceIndex++]<<e.bitcount;e.bitcount+=8}var r=e.tag&65535>>>16-t;e.tag>>>=t;e.bitcount-=t;return r+n}function $(e,t){while(e.bitcount<24){e.tag|=e.source[e.sourceIndex++]<<e.bitcount;e.bitcount+=8}var n=0,r=0,i=0;var a=e.tag;do{r=2*r+(a&1);a>>>=1;++i;n+=t.table[i];r-=t.table[i]}while(r>=0);e.tag=a;e.bitcount-=i;return t.trans[n+r]}function ee(e,t,n){var r,i,a;var s,o,l;r=f(e,5,257);i=f(e,5,1);a=f(e,4,4);for(s=0;s<19;++s){h[s]=0}for(s=0;s<a;++s){var u=f(e,3,0);h[Y[s]]=u}Q(W,h,0,19);for(o=0;o<r+i;){var c=$(e,W);switch(c){case 16:var p=h[o-1];for(l=f(e,2,3);l;--l){h[o++]=p}break;case 17:for(l=f(e,3,3);l;--l){h[o++]=0}break;case 18:for(l=f(e,7,11);l;--l){h[o++]=0}break;default:h[o++]=c;break}}Q(t,h,0,r);Q(n,h,r,i)}function te(e,t,n){while(1){var r=$(e,t);if(r===256){return P}if(r<256){e.dest[e.destLen++]=r}else{var i,a,s;var o;r-=257;i=f(e,j[r],z[r]);a=$(e,n);s=e.destLen-f(e,H[a],X[a]);for(o=s;o<s+i;++o){e.dest[e.destLen++]=e.dest[o]}}}}function ne(e){var t,n;var r;while(e.bitcount>8){e.sourceIndex--;e.bitcount-=8}t=e.source[e.sourceIndex+1];t=256*t+e.source[e.sourceIndex];n=e.source[e.sourceIndex+3];n=256*n+e.source[e.sourceIndex+2];if(t!==(~n&65535)){return M}e.sourceIndex+=4;for(r=t;r;--r){e.dest[e.destLen++]=e.source[e.sourceIndex++]}e.bitcount=0;return P}function re(e,t){var n=new w(e,t);var r,i,a;do{r=J(n);i=f(n,2,0);switch(i){case 0:a=ne(n);break;case 1:a=te(n,B,F);break;case 2:ee(n,n.ltree,n.dtree);a=te(n,n.ltree,n.dtree);break;default:a=M}if(a!==P){throw new Error("Data error")}}while(!r);if(n.destLen<n.dest.length){if(typeof n.dest.slice==="function"){return n.dest.slice(0,n.destLen)}else{return n.dest.subarray(0,n.destLen)}}return n.dest}Z(B,F);q(j,z,4,3);q(H,X,2,1);j[28]=0;z[28]=258;var ie=re;function ae(e,t,n,r,i){return Math.pow(1-i,3)*e+3*Math.pow(1-i,2)*i*t+3*(1-i)*Math.pow(i,2)*n+Math.pow(i,3)*r}function o(){this.x1=Number.NaN;this.y1=Number.NaN;this.x2=Number.NaN;this.y2=Number.NaN}o.prototype.isEmpty=function(){return isNaN(this.x1)||isNaN(this.y1)||isNaN(this.x2)||isNaN(this.y2)};o.prototype.addPoint=function(e,t){if(typeof e==="number"){if(isNaN(this.x1)||isNaN(this.x2)){this.x1=e;this.x2=e}if(e<this.x1){this.x1=e}if(e>this.x2){this.x2=e}}if(typeof t==="number"){if(isNaN(this.y1)||isNaN(this.y2)){this.y1=t;this.y2=t}if(t<this.y1){this.y1=t}if(t>this.y2){this.y2=t}}};o.prototype.addX=function(e){this.addPoint(e,null)};o.prototype.addY=function(e){this.addPoint(null,e)};o.prototype.addBezier=function(e,t,n,r,i,a,s,o){var l=[e,t];var u=[n,r];var c=[i,a];var p=[s,o];this.addPoint(e,t);this.addPoint(s,o);for(var h=0;h<=1;h++){var f=6*l[h]-12*u[h]+6*c[h];var d=-3*l[h]+9*u[h]-9*c[h]+3*p[h];var g=3*u[h]-3*l[h];if(d===0){if(f===0){continue}var m=-g/f;if(0<m&&m<1){if(h===0){this.addX(ae(l[h],u[h],c[h],p[h],m))}if(h===1){this.addY(ae(l[h],u[h],c[h],p[h],m))}}continue}var v=Math.pow(f,2)-4*g*d;if(v<0){continue}var b=(-f+Math.sqrt(v))/(2*d);if(0<b&&b<1){if(h===0){this.addX(ae(l[h],u[h],c[h],p[h],b))}if(h===1){this.addY(ae(l[h],u[h],c[h],p[h],b))}}var y=(-f-Math.sqrt(v))/(2*d);if(0<y&&y<1){if(h===0){this.addX(ae(l[h],u[h],c[h],p[h],y))}if(h===1){this.addY(ae(l[h],u[h],c[h],p[h],y))}}}};o.prototype.addQuad=function(e,t,n,r,i,a){var s=e+2/3*(n-e);var o=t+2/3*(r-t);var l=s+1/3*(i-e);var u=o+1/3*(a-t);this.addBezier(e,t,s,o,l,u,i,a)};function d(){this.commands=[];this.fill="black";this.stroke=null;this.strokeWidth=1}d.prototype.moveTo=function(e,t){this.commands.push({type:"M",x:e,y:t})};d.prototype.lineTo=function(e,t){this.commands.push({type:"L",x:e,y:t})};d.prototype.curveTo=d.prototype.bezierCurveTo=function(e,t,n,r,i,a){this.commands.push({type:"C",x1:e,y1:t,x2:n,y2:r,x:i,y:a})};d.prototype.quadTo=d.prototype.quadraticCurveTo=function(e,t,n,r){this.commands.push({type:"Q",x1:e,y1:t,x:n,y:r})};d.prototype.close=d.prototype.closePath=function(){this.commands.push({type:"Z"})};d.prototype.extend=function(e){if(e.commands){e=e.commands}else if(e instanceof o){var t=e;this.moveTo(t.x1,t.y1);this.lineTo(t.x2,t.y1);this.lineTo(t.x2,t.y2);this.lineTo(t.x1,t.y2);this.close();return}Array.prototype.push.apply(this.commands,e)};d.prototype.getBoundingBox=function(){var e=new o;var t=0;var n=0;var r=0;var i=0;for(var a=0;a<this.commands.length;a++){var s=this.commands[a];switch(s.type){case"M":e.addPoint(s.x,s.y);t=r=s.x;n=i=s.y;break;case"L":e.addPoint(s.x,s.y);r=s.x;i=s.y;break;case"Q":e.addQuad(r,i,s.x1,s.y1,s.x,s.y);r=s.x;i=s.y;break;case"C":e.addBezier(r,i,s.x1,s.y1,s.x2,s.y2,s.x,s.y);r=s.x;i=s.y;break;case"Z":r=t;i=n;break;default:throw new Error("Unexpected path command "+s.type)}}if(e.isEmpty()){e.addPoint(0,0)}return e};d.prototype.draw=function(e){e.beginPath();for(var t=0;t<this.commands.length;t+=1){var n=this.commands[t];if(n.type==="M"){e.moveTo(n.x,n.y)}else if(n.type==="L"){e.lineTo(n.x,n.y)}else if(n.type==="C"){e.bezierCurveTo(n.x1,n.y1,n.x2,n.y2,n.x,n.y)}else if(n.type==="Q"){e.quadraticCurveTo(n.x1,n.y1,n.x,n.y)}else if(n.type==="Z"){e.closePath()}}if(this.fill){e.fillStyle=this.fill;e.fill()}if(this.stroke){e.strokeStyle=this.stroke;e.lineWidth=this.strokeWidth;e.stroke()}};d.prototype.toPathData=function(t){t=t!==undefined?t:2;function i(e){if(Math.round(e)===e){return""+Math.round(e)}else{return e.toFixed(t)}}function e(){var e=arguments;var t="";for(var n=0;n<arguments.length;n+=1){var r=e[n];if(r>=0&&n>0){t+=" "}t+=i(r)}return t}var n="";for(var r=0;r<this.commands.length;r+=1){var a=this.commands[r];if(a.type==="M"){n+="M"+e(a.x,a.y)}else if(a.type==="L"){n+="L"+e(a.x,a.y)}else if(a.type==="C"){n+="C"+e(a.x1,a.y1,a.x2,a.y2,a.x,a.y)}else if(a.type==="Q"){n+="Q"+e(a.x1,a.y1,a.x,a.y)}else if(a.type==="Z"){n+="Z"}}return n};d.prototype.toSVG=function(e){var t='<path d="';t+=this.toPathData(e);t+='"';if(this.fill&&this.fill!=="black"){if(this.fill===null){t+=' fill="none"'}else{t+=' fill="'+this.fill+'"'}}if(this.stroke){t+=' stroke="'+this.stroke+'" stroke-width="'+this.strokeWidth+'"'}t+="/>";return t};d.prototype.toDOMElement=function(e){var t=this.toPathData(e);var n=document.createElementNS("http://www.w3.org/2000/svg","path");n.setAttribute("d",t);return n};function se(e){throw new Error(e)}function oe(e,t){if(!e){se(t)}}var _={fail:se,argument:oe,assert:oe};var le=32768;var ue=2147483648;var ce={};var I={};var l={};function e(e){return function(){return e}}I.BYTE=function(e){_.argument(e>=0&&e<=255,"Byte value should be between 0 and 255.");return[e]};l.BYTE=e(1);I.CHAR=function(e){return[e.charCodeAt(0)]};l.CHAR=e(1);I.CHARARRAY=function(e){if(typeof e==="undefined"){e="";console.warn("Undefined CHARARRAY encountered and treated as an empty string. This is probably caused by a missing glyph name.")}var t=[];for(var n=0;n<e.length;n+=1){t[n]=e.charCodeAt(n)}return t};l.CHARARRAY=function(e){if(typeof e==="undefined"){return 0}return e.length};I.USHORT=function(e){return[e>>8&255,e&255]};l.USHORT=e(2);I.SHORT=function(e){if(e>=le){e=-(2*le-e)}return[e>>8&255,e&255]};l.SHORT=e(2);I.UINT24=function(e){return[e>>16&255,e>>8&255,e&255]};l.UINT24=e(3);I.ULONG=function(e){return[e>>24&255,e>>16&255,e>>8&255,e&255]};l.ULONG=e(4);I.LONG=function(e){if(e>=ue){e=-(2*ue-e)}return[e>>24&255,e>>16&255,e>>8&255,e&255]};l.LONG=e(4);I.FIXED=I.ULONG;l.FIXED=l.ULONG;I.FWORD=I.SHORT;l.FWORD=l.SHORT;I.UFWORD=I.USHORT;l.UFWORD=l.USHORT;I.LONGDATETIME=function(e){return[0,0,0,0,e>>24&255,e>>16&255,e>>8&255,e&255]};l.LONGDATETIME=e(8);I.TAG=function(e){_.argument(e.length===4,"Tag should be exactly 4 ASCII characters.");return[e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2),e.charCodeAt(3)]};l.TAG=e(4);I.Card8=I.BYTE;l.Card8=l.BYTE;I.Card16=I.USHORT;l.Card16=l.USHORT;I.OffSize=I.BYTE;l.OffSize=l.BYTE;I.SID=I.USHORT;l.SID=l.USHORT;I.NUMBER=function(e){if(e>=-107&&e<=107){return[e+139]}else if(e>=108&&e<=1131){e=e-108;return[(e>>8)+247,e&255]}else if(e>=-1131&&e<=-108){e=-e-108;return[(e>>8)+251,e&255]}else if(e>=-32768&&e<=32767){return I.NUMBER16(e)}else{return I.NUMBER32(e)}};l.NUMBER=function(e){return I.NUMBER(e).length};I.NUMBER16=function(e){return[28,e>>8&255,e&255]};l.NUMBER16=e(3);I.NUMBER32=function(e){return[29,e>>24&255,e>>16&255,e>>8&255,e&255]};l.NUMBER32=e(5);I.REAL=function(e){var t=e.toString();var n=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(t);if(n){var r=parseFloat("1e"+((n[2]?+n[2]:0)+n[1].length));t=(Math.round(e*r)/r).toString()}var i="";for(var a=0,s=t.length;a<s;a+=1){var o=t[a];if(o==="e"){i+=t[++a]==="-"?"c":"b"}else if(o==="."){i+="a"}else if(o==="-"){i+="e"}else{i+=o}}i+=i.length&1?"f":"ff";var l=[30];for(var u=0,c=i.length;u<c;u+=2){l.push(parseInt(i.substr(u,2),16))}return l};l.REAL=function(e){return I.REAL(e).length};I.NAME=I.CHARARRAY;l.NAME=l.CHARARRAY;I.STRING=I.CHARARRAY;l.STRING=l.CHARARRAY;ce.UTF8=function(e,t,n){var r=[];var i=n;for(var a=0;a<i;a++,t+=1){r[a]=e.getUint8(t)}return String.fromCharCode.apply(null,r)};ce.UTF16=function(e,t,n){var r=[];var i=n/2;for(var a=0;a<i;a++,t+=2){r[a]=e.getUint16(t)}return String.fromCharCode.apply(null,r)};I.UTF16=function(e){var t=[];for(var n=0;n<e.length;n+=1){var r=e.charCodeAt(n);t[t.length]=r>>8&255;t[t.length]=r&255}return t};l.UTF16=function(e){return e.length*2};var pe={"x-mac-croatian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø"+"¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ","x-mac-cyrillic":"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњ"+"јЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю","x-mac-gaelic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæø"+"ṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ","x-mac-greek":"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩ"+"άΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ","x-mac-icelandic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø"+"¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-inuit":"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗ"+"ᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł","x-mac-ce":"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅ"+"ņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",macintosh:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø"+"¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-romanian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș"+"¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-turkish":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø"+"¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ"};ce.MACSTRING=function(e,t,n,r){var i=pe[r];if(i===undefined){return undefined}var a="";for(var s=0;s<n;s++){var o=e.getUint8(t+s);if(o<=127){a+=String.fromCharCode(o)}else{a+=i[o&127]}}return a};var he=typeof WeakMap==="function"&&new WeakMap;var fe;var de=function(e){if(!fe){fe={};for(var t in pe){fe[t]=new String(t)}}var n=fe[e];if(n===undefined){return undefined}if(he){var r=he.get(n);if(r!==undefined){return r}}var i=pe[e];if(i===undefined){return undefined}var a={};for(var s=0;s<i.length;s++){a[i.charCodeAt(s)]=s+128}if(he){he.set(n,a)}return a};I.MACSTRING=function(e,t){var n=de(t);if(n===undefined){return undefined}var r=[];for(var i=0;i<e.length;i++){var a=e.charCodeAt(i);if(a>=128){a=n[a];if(a===undefined){return undefined}}r[i]=a}return r};l.MACSTRING=function(e,t){var n=I.MACSTRING(e,t);if(n!==undefined){return n.length}else{return 0}};function ge(e){return e>=-128&&e<=127}function me(e,t,n){var r=0;var i=e.length;while(t<i&&r<64&&e[t]===0){++t;++r}n.push(128|r-1);return t}function ve(e,t,n){var r=0;var i=e.length;var a=t;while(a<i&&r<64){var s=e[a];if(!ge(s)){break}if(s===0&&a+1<i&&e[a+1]===0){break}++a;++r}n.push(r-1);for(var o=t;o<a;++o){n.push(e[o]+256&255)}return a}function be(e,t,n){var r=0;var i=e.length;var a=t;while(a<i&&r<64){var s=e[a];if(s===0){break}if(ge(s)&&a+1<i&&ge(e[a+1])){break}++a;++r}n.push(64|r-1);for(var o=t;o<a;++o){var l=e[o];n.push(l+65536>>8&255,l+256&255)}return a}I.VARDELTAS=function(e){var t=0;var n=[];while(t<e.length){var r=e[t];if(r===0){t=me(e,t,n)}else if(r>=-128&&r<=127){t=ve(e,t,n)}else{t=be(e,t,n)}}return n};I.INDEX=function(e){var t=1;var n=[t];var r=[];for(var i=0;i<e.length;i+=1){var a=I.OBJECT(e[i]);Array.prototype.push.apply(r,a);t+=a.length;n.push(t)}if(r.length===0){return[0,0]}var s=[];var o=1+Math.floor(Math.log(t)/Math.log(2))/8|0;var l=[undefined,I.BYTE,I.USHORT,I.UINT24,I.ULONG][o];for(var u=0;u<n.length;u+=1){var c=l(n[u]);Array.prototype.push.apply(s,c)}return Array.prototype.concat(I.Card16(e.length),I.OffSize(o),s,r)};l.INDEX=function(e){return I.INDEX(e).length};I.DICT=function(e){var t=[];var n=Object.keys(e);var r=n.length;for(var i=0;i<r;i+=1){var a=parseInt(n[i],0);var s=e[a];t=t.concat(I.OPERAND(s.value,s.type));t=t.concat(I.OPERATOR(a))}return t};l.DICT=function(e){return I.DICT(e).length};I.OPERATOR=function(e){if(e<1200){return[e]}else{return[12,e-1200]}};I.OPERAND=function(e,t){var n=[];if(Array.isArray(t)){for(var r=0;r<t.length;r+=1){_.argument(e.length===t.length,"Not enough arguments given for type"+t);n=n.concat(I.OPERAND(e[r],t[r]))}}else{if(t==="SID"){n=n.concat(I.NUMBER(e))}else if(t==="offset"){n=n.concat(I.NUMBER32(e))}else if(t==="number"){n=n.concat(I.NUMBER(e))}else if(t==="real"){n=n.concat(I.REAL(e))}else{throw new Error("Unknown operand type "+t)}}return n};I.OP=I.BYTE;l.OP=l.BYTE;var ye=typeof WeakMap==="function"&&new WeakMap;I.CHARSTRING=function(e){if(ye){var t=ye.get(e);if(t!==undefined){return t}}var n=[];var r=e.length;for(var i=0;i<r;i+=1){var a=e[i];n=n.concat(I[a.type](a.value))}if(ye){ye.set(e,n)}return n};l.CHARSTRING=function(e){return I.CHARSTRING(e).length};I.OBJECT=function(e){var t=I[e.type];_.argument(t!==undefined,"No encoding function for type "+e.type);return t(e.value)};l.OBJECT=function(e){var t=l[e.type];_.argument(t!==undefined,"No sizeOf function for type "+e.type);return t(e.value)};I.TABLE=function(e){var t=[];var n=e.fields.length;var r=[];var i=[];for(var a=0;a<n;a+=1){var s=e.fields[a];var o=I[s.type];_.argument(o!==undefined,"No encoding function for field type "+s.type+" ("+s.name+")");var l=e[s.name];if(l===undefined){l=s.value}var u=o(l);if(s.type==="TABLE"){i.push(t.length);t=t.concat([0,0]);r.push(u)}else{t=t.concat(u)}}for(var c=0;c<r.length;c+=1){var p=i[c];var h=t.length;_.argument(h<65536,"Table "+e.tableName+" too big.");t[p]=h>>8;t[p+1]=h&255;t=t.concat(r[c])}return t};l.TABLE=function(e){var t=0;var n=e.fields.length;for(var r=0;r<n;r+=1){var i=e.fields[r];var a=l[i.type];_.argument(a!==undefined,"No sizeOf function for field type "+i.type+" ("+i.name+")");var s=e[i.name];if(s===undefined){s=i.value}t+=a(s);if(i.type==="TABLE"){t+=2}}return t};I.RECORD=I.TABLE;l.RECORD=l.TABLE;I.LITERAL=function(e){return e};l.LITERAL=function(e){return e.length};function i(e,t,n){if(t.length&&(t[0].name!=="coverageFormat"||t[0].value===1)){for(var r=0;r<t.length;r+=1){var i=t[r];this[i.name]=i.value}}this.tableName=e;this.fields=t;if(n){var a=Object.keys(n);for(var s=0;s<a.length;s+=1){var o=a[s];var l=n[o];if(this[o]!==undefined){this[o]=l}}}}i.prototype.encode=function(){return I.TABLE(this)};i.prototype.sizeOf=function(){return l.TABLE(this)};function xe(e,t,n){if(n===undefined){n=t.length}var r=new Array(t.length+1);r[0]={name:e+"Count",type:"USHORT",value:n};for(var i=0;i<t.length;i++){r[i+1]={name:e+i,type:"USHORT",value:t[i]}}return r}function Se(e,t,n){var r=t.length;var i=new Array(r+1);i[0]={name:e+"Count",type:"USHORT",value:r};for(var a=0;a<r;a++){i[a+1]={name:e+a,type:"TABLE",value:n(t[a],a)}}return i}function Oe(e,t,n){var r=t.length;var i=[];i[0]={name:e+"Count",type:"USHORT",value:r};for(var a=0;a<r;a++){i=i.concat(n(t[a],a))}return i}function _e(e){if(e.format===1){i.call(this,"coverageTable",[{name:"coverageFormat",type:"USHORT",value:1}].concat(xe("glyph",e.glyphs)))}else if(e.format===2){i.call(this,"coverageTable",[{name:"coverageFormat",type:"USHORT",value:2}].concat(Oe("rangeRecord",e.ranges,function(e){return[{name:"startGlyphID",type:"USHORT",value:e.start},{name:"endGlyphID",type:"USHORT",value:e.end},{name:"startCoverageIndex",type:"USHORT",value:e.index}]})))}else{_.assert(false,"Coverage format must be 1 or 2.")}}_e.prototype=Object.create(i.prototype);_e.prototype.constructor=_e;function Ae(e){i.call(this,"scriptListTable",Oe("scriptRecord",e,function(e,t){var n=e.script;var r=n.defaultLangSys;_.assert(!!r,"Unable to write GSUB: script "+e.tag+" has no default language system.");return[{name:"scriptTag"+t,type:"TAG",value:e.tag},{name:"script"+t,type:"TABLE",value:new i("scriptTable",[{name:"defaultLangSys",type:"TABLE",value:new i("defaultLangSys",[{name:"lookupOrder",type:"USHORT",value:0},{name:"reqFeatureIndex",type:"USHORT",value:r.reqFeatureIndex}].concat(xe("featureIndex",r.featureIndexes)))}].concat(Oe("langSys",n.langSysRecords,function(e,t){var n=e.langSys;return[{name:"langSysTag"+t,type:"TAG",value:e.tag},{name:"langSys"+t,type:"TABLE",value:new i("langSys",[{name:"lookupOrder",type:"USHORT",value:0},{name:"reqFeatureIndex",type:"USHORT",value:n.reqFeatureIndex}].concat(xe("featureIndex",n.featureIndexes)))}]})))}]}))}Ae.prototype=Object.create(i.prototype);Ae.prototype.constructor=Ae;function Ce(e){i.call(this,"featureListTable",Oe("featureRecord",e,function(e,t){var n=e.feature;return[{name:"featureTag"+t,type:"TAG",value:e.tag},{name:"feature"+t,type:"TABLE",value:new i("featureTable",[{name:"featureParams",type:"USHORT",value:n.featureParams}].concat(xe("lookupListIndex",n.lookupListIndexes)))}]}))}Ce.prototype=Object.create(i.prototype);Ce.prototype.constructor=Ce;function Te(e,n){i.call(this,"lookupListTable",Se("lookup",e,function(e){var t=n[e.lookupType];_.assert(!!t,"Unable to write GSUB lookup type "+e.lookupType+" tables.");return new i("lookupTable",[{name:"lookupType",type:"USHORT",value:e.lookupType},{name:"lookupFlag",type:"USHORT",value:e.lookupFlag}].concat(Se("subtable",e.subtables,t)))}))}Te.prototype=Object.create(i.prototype);Te.prototype.constructor=Te;var E={Table:i,Record:i,Coverage:_e,ScriptList:Ae,FeatureList:Ce,LookupList:Te,ushortList:xe,tableList:Se,recordList:Oe};function Ie(e,t){return e.getUint8(t)}function Ee(e,t){return e.getUint16(t,false)}function Le(e,t){return e.getInt16(t,false)}function Ne(e,t){return e.getUint32(t,false)}function Ue(e,t){var n=e.getInt16(t,false);var r=e.getUint16(t+2,false);return n+r/65535}function Re(e,t){var n="";for(var r=t;r<t+4;r+=1){n+=String.fromCharCode(e.getInt8(r))}return n}function Pe(e,t,n){var r=0;for(var i=0;i<n;i+=1){r<<=8;r+=e.getUint8(t+i)}return r}function Me(e,t,n){var r=[];for(var i=t;i<n;i+=1){r.push(e.getUint8(i))}return r}function ke(e){var t="";for(var n=0;n<e.length;n+=1){t+=String.fromCharCode(e[n])}return t}var we={byte:1,uShort:2,short:2,uLong:4,fixed:4,longDateTime:8,tag:4};function c(e,t){this.data=e;this.offset=t;this.relativeOffset=0}c.prototype.parseByte=function(){var e=this.data.getUint8(this.offset+this.relativeOffset);this.relativeOffset+=1;return e};c.prototype.parseChar=function(){var e=this.data.getInt8(this.offset+this.relativeOffset);this.relativeOffset+=1;return e};c.prototype.parseCard8=c.prototype.parseByte;c.prototype.parseUShort=function(){var e=this.data.getUint16(this.offset+this.relativeOffset);this.relativeOffset+=2;return e};c.prototype.parseCard16=c.prototype.parseUShort;c.prototype.parseSID=c.prototype.parseUShort;c.prototype.parseOffset16=c.prototype.parseUShort;c.prototype.parseShort=function(){var e=this.data.getInt16(this.offset+this.relativeOffset);this.relativeOffset+=2;return e};c.prototype.parseF2Dot14=function(){var e=this.data.getInt16(this.offset+this.relativeOffset)/16384;this.relativeOffset+=2;return e};c.prototype.parseULong=function(){var e=Ne(this.data,this.offset+this.relativeOffset);this.relativeOffset+=4;return e};c.prototype.parseOffset32=c.prototype.parseULong;c.prototype.parseFixed=function(){var e=Ue(this.data,this.offset+this.relativeOffset);this.relativeOffset+=4;return e};c.prototype.parseString=function(e){var t=this.data;var n=this.offset+this.relativeOffset;var r="";this.relativeOffset+=e;for(var i=0;i<e;i++){r+=String.fromCharCode(t.getUint8(n+i))}return r};c.prototype.parseTag=function(){return this.parseString(4)};c.prototype.parseLongDateTime=function(){var e=Ne(this.data,this.offset+this.relativeOffset+4);e-=2082844800;this.relativeOffset+=8;return e};c.prototype.parseVersion=function(e){var t=Ee(this.data,this.offset+this.relativeOffset);var n=Ee(this.data,this.offset+this.relativeOffset+2);this.relativeOffset+=4;if(e===undefined){e=4096}return t+n/e/10};c.prototype.skip=function(e,t){if(t===undefined){t=1}this.relativeOffset+=we[e]*t};c.prototype.parseULongList=function(e){if(e===undefined){e=this.parseULong()}var t=new Array(e);var n=this.data;var r=this.offset+this.relativeOffset;for(var i=0;i<e;i++){t[i]=n.getUint32(r);r+=4}this.relativeOffset+=e*4;return t};c.prototype.parseOffset16List=c.prototype.parseUShortList=function(e){if(e===undefined){e=this.parseUShort()}var t=new Array(e);var n=this.data;var r=this.offset+this.relativeOffset;for(var i=0;i<e;i++){t[i]=n.getUint16(r);r+=2}this.relativeOffset+=e*2;return t};c.prototype.parseShortList=function(e){var t=new Array(e);var n=this.data;var r=this.offset+this.relativeOffset;for(var i=0;i<e;i++){t[i]=n.getInt16(r);r+=2}this.relativeOffset+=e*2;return t};c.prototype.parseByteList=function(e){var t=new Array(e);var n=this.data;var r=this.offset+this.relativeOffset;for(var i=0;i<e;i++){t[i]=n.getUint8(r++)}this.relativeOffset+=e;return t};c.prototype.parseList=function(e,t){if(!t){t=e;e=this.parseUShort()}var n=new Array(e);for(var r=0;r<e;r++){n[r]=t.call(this)}return n};c.prototype.parseList32=function(e,t){if(!t){t=e;e=this.parseULong()}var n=new Array(e);for(var r=0;r<e;r++){n[r]=t.call(this)}return n};c.prototype.parseRecordList=function(e,t){if(!t){t=e;e=this.parseUShort()}var n=new Array(e);var r=Object.keys(t);for(var i=0;i<e;i++){var a={};for(var s=0;s<r.length;s++){var o=r[s];var l=t[o];a[o]=l.call(this)}n[i]=a}return n};c.prototype.parseRecordList32=function(e,t){if(!t){t=e;e=this.parseULong()}var n=new Array(e);var r=Object.keys(t);for(var i=0;i<e;i++){var a={};for(var s=0;s<r.length;s++){var o=r[s];var l=t[o];a[o]=l.call(this)}n[i]=a}return n};c.prototype.parseStruct=function(e){if(typeof e==="function"){return e.call(this)}else{var t=Object.keys(e);var n={};for(var r=0;r<t.length;r++){var i=t[r];var a=e[i];n[i]=a.call(this)}return n}};c.prototype.parseValueRecord=function(e){if(e===undefined){e=this.parseUShort()}if(e===0){return}var t={};if(e&1){t.xPlacement=this.parseShort()}if(e&2){t.yPlacement=this.parseShort()}if(e&4){t.xAdvance=this.parseShort()}if(e&8){t.yAdvance=this.parseShort()}if(e&16){t.xPlaDevice=undefined;this.parseShort()}if(e&32){t.yPlaDevice=undefined;this.parseShort()}if(e&64){t.xAdvDevice=undefined;this.parseShort()}if(e&128){t.yAdvDevice=undefined;this.parseShort()}return t};c.prototype.parseValueRecordList=function(){var e=this.parseUShort();var t=this.parseUShort();var n=new Array(t);for(var r=0;r<t;r++){n[r]=this.parseValueRecord(e)}return n};c.prototype.parsePointer=function(e){var t=this.parseOffset16();if(t>0){return new c(this.data,this.offset+t).parseStruct(e)}return undefined};c.prototype.parsePointer32=function(e){var t=this.parseOffset32();if(t>0){return new c(this.data,this.offset+t).parseStruct(e)}return undefined};c.prototype.parseListOfLists=function(e){var t=this.parseOffset16List();var n=t.length;var r=this.relativeOffset;var i=new Array(n);for(var a=0;a<n;a++){var s=t[a];if(s===0){i[a]=undefined;continue}this.relativeOffset=s;if(e){var o=this.parseOffset16List();var l=new Array(o.length);for(var u=0;u<o.length;u++){this.relativeOffset=s+o[u];l[u]=e.call(this)}i[a]=l}else{i[a]=this.parseUShortList()}}this.relativeOffset=r;return i};c.prototype.parseCoverage=function(){var e=this.offset+this.relativeOffset;var t=this.parseUShort();var n=this.parseUShort();if(t===1){return{format:1,glyphs:this.parseUShortList(n)}}else if(t===2){var r=new Array(n);for(var i=0;i<n;i++){r[i]={start:this.parseUShort(),end:this.parseUShort(),index:this.parseUShort()}}return{format:2,ranges:r}}throw new Error("0x"+e.toString(16)+": Coverage format must be 1 or 2.")};c.prototype.parseClassDef=function(){var e=this.offset+this.relativeOffset;var t=this.parseUShort();if(t===1){return{format:1,startGlyph:this.parseUShort(),classes:this.parseUShortList()}}else if(t===2){return{format:2,ranges:this.parseRecordList({start:c.uShort,end:c.uShort,classId:c.uShort})}}throw new Error("0x"+e.toString(16)+": ClassDef format must be 1 or 2.")};c.list=function(e,t){return function(){return this.parseList(e,t)}};c.list32=function(e,t){return function(){return this.parseList32(e,t)}};c.recordList=function(e,t){return function(){return this.parseRecordList(e,t)}};c.recordList32=function(e,t){return function(){return this.parseRecordList32(e,t)}};c.pointer=function(e){return function(){return this.parsePointer(e)}};c.pointer32=function(e){return function(){return this.parsePointer32(e)}};c.tag=c.prototype.parseTag;c.byte=c.prototype.parseByte;c.uShort=c.offset16=c.prototype.parseUShort;c.uShortList=c.prototype.parseUShortList;c.uLong=c.offset32=c.prototype.parseULong;c.uLongList=c.prototype.parseULongList;c.struct=c.prototype.parseStruct;c.coverage=c.prototype.parseCoverage;c.classDef=c.prototype.parseClassDef;var Be={reserved:c.uShort,reqFeatureIndex:c.uShort,featureIndexes:c.uShortList};c.prototype.parseScriptList=function(){return this.parsePointer(c.recordList({tag:c.tag,script:c.pointer({defaultLangSys:c.pointer(Be),langSysRecords:c.recordList({tag:c.tag,langSys:c.pointer(Be)})})}))||[]};c.prototype.parseFeatureList=function(){return this.parsePointer(c.recordList({tag:c.tag,feature:c.pointer({featureParams:c.offset16,lookupListIndexes:c.uShortList})}))||[]};c.prototype.parseLookupList=function(r){return this.parsePointer(c.list(c.pointer(function(){var e=this.parseUShort();_.argument(1<=e&&e<=9,"GPOS/GSUB lookup type "+e+" unknown.");var t=this.parseUShort();var n=t&16;return{lookupType:e,lookupFlag:t,subtables:this.parseList(c.pointer(r[e])),markFilteringSet:n?this.parseUShort():undefined}})))||[]};c.prototype.parseFeatureVariationsList=function(){return this.parsePointer32(function(){var e=this.parseUShort();var t=this.parseUShort();_.argument(e===1&&t<1,"GPOS/GSUB feature variations table unknown.");var n=this.parseRecordList32({conditionSetOffset:c.offset32,featureTableSubstitutionOffset:c.offset32});return n})||[]};var G={getByte:Ie,getCard8:Ie,getUShort:Ee,getCard16:Ee,getShort:Le,getULong:Ne,getFixed:Ue,getTag:Re,getOffset:Pe,getBytes:Me,bytesToString:ke,Parser:c};function Ge(e,t){t.parseUShort();e.length=t.parseULong();e.language=t.parseULong();var n;e.groupCount=n=t.parseULong();e.glyphIndexMap={};for(var r=0;r<n;r+=1){var i=t.parseULong();var a=t.parseULong();var s=t.parseULong();for(var o=i;o<=a;o+=1){e.glyphIndexMap[o]=s;s++}}}function Ve(e,t,n,r,i){e.length=t.parseUShort();e.language=t.parseUShort();var a;e.segCount=a=t.parseUShort()>>1;t.skip("uShort",3);e.glyphIndexMap={};var s=new G.Parser(n,r+i+14);var o=new G.Parser(n,r+i+16+a*2);var l=new G.Parser(n,r+i+16+a*4);var u=new G.Parser(n,r+i+16+a*6);var c=r+i+16+a*8;for(var p=0;p<a-1;p+=1){var h=void 0;var f=s.parseUShort();var d=o.parseUShort();var g=l.parseShort();var m=u.parseUShort();for(var v=d;v<=f;v+=1){if(m!==0){c=u.offset+u.relativeOffset-2;c+=m;c+=(v-d)*2;h=G.getUShort(n,c);if(h!==0){h=h+g&65535}}else{h=v+g&65535}e.glyphIndexMap[v]=h}}}function De(e,t){var n={};n.version=G.getUShort(e,t);_.argument(n.version===0,"cmap table version should be 0.");n.numTables=G.getUShort(e,t+2);var r=-1;for(var i=n.numTables-1;i>=0;i-=1){var a=G.getUShort(e,t+4+i*8);var s=G.getUShort(e,t+4+i*8+2);if(a===3&&(s===0||s===1||s===10)||a===0&&(s===0||s===1||s===2||s===3||s===4)){r=G.getULong(e,t+4+i*8+4);break}}if(r===-1){throw new Error("No valid cmap sub-tables found.")}var o=new G.Parser(e,t+r);n.format=o.parseUShort();if(n.format===12){Ge(n,o)}else if(n.format===4){Ve(n,o,e,t,r)}else{throw new Error("Only format 4 and 12 cmap tables are supported (found format "+n.format+").")}return n}function Fe(e,t,n){e.segments.push({end:t,start:t,delta:-(t-n),offset:0,glyphIndex:n})}function je(e){e.segments.push({end:65535,start:65535,delta:1,offset:0})}function ze(e){var t=true;var n;for(n=e.length-1;n>0;n-=1){var r=e.get(n);if(r.unicode>65535){console.log("Adding CMAP format 12 (needed!)");t=false;break}}var i=[{name:"version",type:"USHORT",value:0},{name:"numTables",type:"USHORT",value:t?1:2},{name:"platformID",type:"USHORT",value:3},{name:"encodingID",type:"USHORT",value:1},{name:"offset",type:"ULONG",value:t?12:12+8}];if(!t){i=i.concat([{name:"cmap12PlatformID",type:"USHORT",value:3},{name:"cmap12EncodingID",type:"USHORT",value:10},{name:"cmap12Offset",type:"ULONG",value:0}])}i=i.concat([{name:"format",type:"USHORT",value:4},{name:"cmap4Length",type:"USHORT",value:0},{name:"language",type:"USHORT",value:0},{name:"segCountX2",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);var a=new E.Table("cmap",i);a.segments=[];for(n=0;n<e.length;n+=1){var s=e.get(n);for(var o=0;o<s.unicodes.length;o+=1){Fe(a,s.unicodes[o],n)}a.segments=a.segments.sort(function(e,t){return e.start-t.start})}je(a);var l=a.segments.length;var u=0;var c=[];var p=[];var h=[];var f=[];var d=[];var g=[];for(n=0;n<l;n+=1){var m=a.segments[n];if(m.end<=65535&&m.start<=65535){c=c.concat({name:"end_"+n,type:"USHORT",value:m.end});p=p.concat({name:"start_"+n,type:"USHORT",value:m.start});h=h.concat({name:"idDelta_"+n,type:"SHORT",value:m.delta});f=f.concat({name:"idRangeOffset_"+n,type:"USHORT",value:m.offset});if(m.glyphId!==undefined){d=d.concat({name:"glyph_"+n,type:"USHORT",value:m.glyphId})}}else{u+=1}if(!t&&m.glyphIndex!==undefined){g=g.concat({name:"cmap12Start_"+n,type:"ULONG",value:m.start});g=g.concat({name:"cmap12End_"+n,type:"ULONG",value:m.end});g=g.concat({name:"cmap12Glyph_"+n,type:"ULONG",value:m.glyphIndex})}}a.segCountX2=(l-u)*2;a.searchRange=Math.pow(2,Math.floor(Math.log(l-u)/Math.log(2)))*2;a.entrySelector=Math.log(a.searchRange/2)/Math.log(2);a.rangeShift=a.segCountX2-a.searchRange;a.fields=a.fields.concat(c);a.fields.push({name:"reservedPad",type:"USHORT",value:0});a.fields=a.fields.concat(p);a.fields=a.fields.concat(h);a.fields=a.fields.concat(f);a.fields=a.fields.concat(d);a.cmap4Length=14+c.length*2+2+p.length*2+h.length*2+f.length*2+d.length*2;if(!t){var v=16+g.length*4;a.cmap12Offset=12+2*2+4+a.cmap4Length;a.fields=a.fields.concat([{name:"cmap12Format",type:"USHORT",value:12},{name:"cmap12Reserved",type:"USHORT",value:0},{name:"cmap12Length",type:"ULONG",value:v},{name:"cmap12Language",type:"ULONG",value:0},{name:"cmap12nGroups",type:"ULONG",value:g.length/3}]);a.fields=a.fields.concat(g)}return a}var He={parse:De,make:ze};var Xe=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","266 ff","onedotenleader","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall","001.000","001.001","001.002","001.003","Black","Bold","Book","Light","Medium","Regular","Roman","Semibold"];var Ye=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls"];var We=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"];var u=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"];function qe(e){this.font=e}qe.prototype.charToGlyphIndex=function(e){var t=e.codePointAt(0);var n=this.font.glyphs;if(n){for(var r=0;r<n.length;r+=1){var i=n.get(r);for(var a=0;a<i.unicodes.length;a+=1){if(i.unicodes[a]===t){return r}}}}return null};function Ze(e){this.cmap=e}Ze.prototype.charToGlyphIndex=function(e){return this.cmap.glyphIndexMap[e.codePointAt(0)]||0};function Ke(e,t){this.encoding=e;this.charset=t}Ke.prototype.charToGlyphIndex=function(e){var t=e.codePointAt(0);var n=this.encoding[t];return this.charset.indexOf(n)};function Qe(e){switch(e.version){case 1:this.names=u.slice();break;case 2:this.names=new Array(e.numberOfGlyphs);for(var t=0;t<e.numberOfGlyphs;t++){if(e.glyphNameIndex[t]<u.length){this.names[t]=u[e.glyphNameIndex[t]]}else{this.names[t]=e.names[e.glyphNameIndex[t]-u.length]}}break;case 2.5:this.names=new Array(e.numberOfGlyphs);for(var n=0;n<e.numberOfGlyphs;n++){this.names[n]=u[n+e.glyphNameIndex[n]]}break;case 3:this.names=[];break;default:this.names=[];break}}Qe.prototype.nameToGlyphIndex=function(e){return this.names.indexOf(e)};Qe.prototype.glyphIndexToName=function(e){return this.names[e]};function Je(e){var t;var n=e.tables.cmap.glyphIndexMap;var r=Object.keys(n);for(var i=0;i<r.length;i+=1){var a=r[i];var s=n[a];t=e.glyphs.get(s);t.addUnicode(parseInt(a))}for(var o=0;o<e.glyphs.length;o+=1){t=e.glyphs.get(o);if(e.cffEncoding){if(e.isCIDFont){t.name="gid"+o}else{t.name=e.cffEncoding.charset[o]}}else if(e.glyphNames.names){t.name=e.glyphNames.glyphIndexToName(o)}}}function $e(e){e._IndexToUnicodeMap={};var t=e.tables.cmap.glyphIndexMap;var n=Object.keys(t);for(var r=0;r<n.length;r+=1){var i=n[r];var a=t[i];if(e._IndexToUnicodeMap[a]===undefined){e._IndexToUnicodeMap[a]={unicodes:[parseInt(i)]}}else{e._IndexToUnicodeMap[a].unicodes.push(parseInt(i))}}}function et(e,t){if(t.lowMemory){$e(e)}else{Je(e)}}function tt(e,t,n,r,i){e.beginPath();e.moveTo(t,n);e.lineTo(r,i);e.stroke()}var p={line:tt};function nt(e,t){var n=t||new d;return{configurable:true,get:function(){if(typeof n==="function"){n=n()}return n},set:function(e){n=e}}}function g(e){this.bindConstructorValues(e)}g.prototype.bindConstructorValues=function(e){this.index=e.index||0;this.name=e.name||null;this.unicode=e.unicode||undefined;this.unicodes=e.unicodes||e.unicode!==undefined?[e.unicode]:[];if("xMin"in e){this.xMin=e.xMin}if("yMin"in e){this.yMin=e.yMin}if("xMax"in e){this.xMax=e.xMax}if("yMax"in e){this.yMax=e.yMax}if("advanceWidth"in e){this.advanceWidth=e.advanceWidth}Object.defineProperty(this,"path",nt(this,e.path))};g.prototype.addUnicode=function(e){if(this.unicodes.length===0){this.unicode=e}this.unicodes.push(e)};g.prototype.getBoundingBox=function(){return this.path.getBoundingBox()};g.prototype.getPath=function(e,t,n,r,i){e=e!==undefined?e:0;t=t!==undefined?t:0;n=n!==undefined?n:72;var a;var s;if(!r){r={}}var o=r.xScale;var l=r.yScale;if(r.hinting&&i&&i.hinting){s=this.path&&i.hinting.exec(this,n)}if(s){a=i.hinting.getCommands(s);e=Math.round(e);t=Math.round(t);o=l=1}else{a=this.path.commands;var u=1/(this.path.unitsPerEm||1e3)*n;if(o===undefined){o=u}if(l===undefined){l=u}}var c=new d;for(var p=0;p<a.length;p+=1){var h=a[p];if(h.type==="M"){c.moveTo(e+h.x*o,t+-h.y*l)}else if(h.type==="L"){c.lineTo(e+h.x*o,t+-h.y*l)}else if(h.type==="Q"){c.quadraticCurveTo(e+h.x1*o,t+-h.y1*l,e+h.x*o,t+-h.y*l)}else if(h.type==="C"){c.curveTo(e+h.x1*o,t+-h.y1*l,e+h.x2*o,t+-h.y2*l,e+h.x*o,t+-h.y*l)}else if(h.type==="Z"){c.closePath()}}return c};g.prototype.getContours=function(){if(this.points===undefined){return[]}var e=[];var t=[];for(var n=0;n<this.points.length;n+=1){var r=this.points[n];t.push(r);if(r.lastPointOfContour){e.push(t);t=[]}}_.argument(t.length===0,"There are still points left in the current contour.");return e};g.prototype.getMetrics=function(){var e=this.path.commands;var t=[];var n=[];for(var r=0;r<e.length;r+=1){var i=e[r];if(i.type!=="Z"){t.push(i.x);n.push(i.y)}if(i.type==="Q"||i.type==="C"){t.push(i.x1);n.push(i.y1)}if(i.type==="C"){t.push(i.x2);n.push(i.y2)}}var a={xMin:Math.min.apply(null,t),yMin:Math.min.apply(null,n),xMax:Math.max.apply(null,t),yMax:Math.max.apply(null,n),leftSideBearing:this.leftSideBearing};if(!isFinite(a.xMin)){a.xMin=0}if(!isFinite(a.xMax)){a.xMax=this.advanceWidth}if(!isFinite(a.yMin)){a.yMin=0}if(!isFinite(a.yMax)){a.yMax=0}a.rightSideBearing=this.advanceWidth-a.leftSideBearing-(a.xMax-a.xMin);return a};g.prototype.draw=function(e,t,n,r,i){this.getPath(t,n,r,i).draw(e)};g.prototype.drawPoints=function(a,e,t,n){function r(e,t,n,r){a.beginPath();for(var i=0;i<e.length;i+=1){a.moveTo(t+e[i].x*r,n+e[i].y*r);a.arc(t+e[i].x*r,n+e[i].y*r,2,0,Math.PI*2,false)}a.closePath();a.fill()}e=e!==undefined?e:0;t=t!==undefined?t:0;n=n!==undefined?n:24;var i=1/this.path.unitsPerEm*n;var s=[];var o=[];var l=this.path;for(var u=0;u<l.commands.length;u+=1){var c=l.commands[u];if(c.x!==undefined){s.push({x:c.x,y:-c.y})}if(c.x1!==undefined){o.push({x:c.x1,y:-c.y1})}if(c.x2!==undefined){o.push({x:c.x2,y:-c.y2})}}a.fillStyle="blue";r(s,e,t,i);a.fillStyle="red";r(o,e,t,i)};g.prototype.drawMetrics=function(e,t,n,r){var i;t=t!==undefined?t:0;n=n!==undefined?n:0;r=r!==undefined?r:24;i=1/this.path.unitsPerEm*r;e.lineWidth=1;e.strokeStyle="black";p.line(e,t,-1e4,t,1e4);p.line(e,-1e4,n,1e4,n);var a=this.xMin||0;var s=this.yMin||0;var o=this.xMax||0;var l=this.yMax||0;var u=this.advanceWidth||0;e.strokeStyle="blue";p.line(e,t+a*i,-1e4,t+a*i,1e4);p.line(e,t+o*i,-1e4,t+o*i,1e4);p.line(e,-1e4,n+-s*i,1e4,n+-s*i);p.line(e,-1e4,n+-l*i,1e4,n+-l*i);e.strokeStyle="green";p.line(e,t+u*i,-1e4,t+u*i,1e4)};function rt(t,e,n){Object.defineProperty(t,e,{get:function(){t.path;return t[n]},set:function(e){t[n]=e},enumerable:true,configurable:true})}function it(e,t){this.font=e;this.glyphs={};if(Array.isArray(t)){for(var n=0;n<t.length;n++){var r=t[n];r.path.unitsPerEm=e.unitsPerEm;this.glyphs[n]=r}}this.length=t&&t.length||0}it.prototype.get=function(e){if(this.glyphs[e]===undefined){this.font._push(e);if(typeof this.glyphs[e]==="function"){this.glyphs[e]=this.glyphs[e]()}var t=this.glyphs[e];var n=this.font._IndexToUnicodeMap[e];if(n){for(var r=0;r<n.unicodes.length;r++){t.addUnicode(n.unicodes[r])}}if(this.font.cffEncoding){if(this.font.isCIDFont){t.name="gid"+e}else{t.name=this.font.cffEncoding.charset[e]}}else if(this.font.glyphNames.names){t.name=this.font.glyphNames.glyphIndexToName(e)}this.glyphs[e].advanceWidth=this.font._hmtxTableData[e].advanceWidth;this.glyphs[e].leftSideBearing=this.font._hmtxTableData[e].leftSideBearing}else{if(typeof this.glyphs[e]==="function"){this.glyphs[e]=this.glyphs[e]()}}return this.glyphs[e]};it.prototype.push=function(e,t){this.glyphs[e]=t;this.length++};function at(e,t){return new g({index:t,font:e})}function st(n,e,r,i,a,s){return function(){var t=new g({index:e,font:n});t.path=function(){r(t,i,a);var e=s(n.glyphs,t);e.unitsPerEm=n.unitsPerEm;return e};rt(t,"xMin","_xMin");rt(t,"xMax","_xMax");rt(t,"yMin","_yMin");rt(t,"yMax","_yMax");return t}}function ot(n,e,r,i){return function(){var t=new g({index:e,font:n});t.path=function(){var e=r(n,t,i);e.unitsPerEm=n.unitsPerEm;return e};return t}}var A={GlyphSet:it,glyphLoader:at,ttfGlyphLoader:st,cffGlyphLoader:ot};function lt(e,t){if(e===t){return true}else if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length){return false}for(var n=0;n<e.length;n+=1){if(!lt(e[n],t[n])){return false}}return true}else{return false}}function ut(e){var t;if(e.length<1240){t=107}else if(e.length<33900){t=1131}else{t=32768}return t}function T(e,t,n){var r=[];var i=[];var a=G.getCard16(e,t);var s;var o;if(a!==0){var l=G.getByte(e,t+2);s=t+(a+1)*l+2;var u=t+3;for(var c=0;c<a+1;c+=1){r.push(G.getOffset(e,u,l));u+=l}o=s+r[a]}else{o=t+2}for(var p=0;p<r.length-1;p+=1){var h=G.getBytes(e,s+r[p],s+r[p+1]);if(n){h=n(h)}i.push(h)}return{objects:i,startOffset:t,endOffset:o}}function ct(e,t){var n=[];var r=G.getCard16(e,t);var i;var a;if(r!==0){var s=G.getByte(e,t+2);i=t+(r+1)*s+2;var o=t+3;for(var l=0;l<r+1;l+=1){n.push(G.getOffset(e,o,s));o+=s}a=i+n[r]}else{a=t+2}return{offsets:n,startOffset:t,endOffset:a}}function pt(e,t,n,r,i){var a=G.getCard16(n,r);var s=0;if(a!==0){var o=G.getByte(n,r+2);s=r+(a+1)*o+2}var l=G.getBytes(n,s+t[e],s+t[e+1]);if(i){l=i(l)}return l}function ht(e){var t="";var n=15;var r=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"];while(true){var i=e.parseByte();var a=i>>4;var s=i&15;if(a===n){break}t+=r[a];if(s===n){break}t+=r[s]}return parseFloat(t)}function ft(e,t){var n;var r;var i;var a;if(t===28){n=e.parseByte();r=e.parseByte();return n<<8|r}if(t===29){n=e.parseByte();r=e.parseByte();i=e.parseByte();a=e.parseByte();return n<<24|r<<16|i<<8|a}if(t===30){return ht(e)}if(t>=32&&t<=246){return t-139}if(t>=247&&t<=250){n=e.parseByte();return(t-247)*256+n+108}if(t>=251&&t<=254){n=e.parseByte();return-(t-251)*256-n-108}throw new Error("Invalid b0 "+t)}function dt(e){var t={};for(var n=0;n<e.length;n+=1){var r=e[n][0];var i=e[n][1];var a=void 0;if(i.length===1){a=i[0]}else{a=i}if(t.hasOwnProperty(r)&&!isNaN(t[r])){throw new Error("Object "+t+" already has key "+r)}t[r]=a}return t}function gt(e,t,n){t=t!==undefined?t:0;var r=new G.Parser(e,t);var i=[];var a=[];n=n!==undefined?n:e.length;while(r.relativeOffset<n){var s=r.parseByte();if(s<=21){if(s===12){s=1200+r.parseByte()}i.push([s,a]);a=[]}else{a.push(ft(r,s))}}return dt(i)}function mt(e,t){if(t<=390){t=Xe[t]}else{t=e[t-391]}return t}function vt(e,t,n){var r={};var i;for(var a=0;a<t.length;a+=1){var s=t[a];if(Array.isArray(s.type)){var o=[];o.length=s.type.length;for(var l=0;l<s.type.length;l++){i=e[s.op]!==undefined?e[s.op][l]:undefined;if(i===undefined){i=s.value!==undefined&&s.value[l]!==undefined?s.value[l]:null}if(s.type[l]==="SID"){i=mt(n,i)}o[l]=i}r[s.name]=o}else{i=e[s.op];if(i===undefined){i=s.value!==undefined?s.value:null}if(s.type==="SID"){i=mt(n,i)}r[s.name]=i}}return r}function bt(e,t){var n={};n.formatMajor=G.getCard8(e,t);n.formatMinor=G.getCard8(e,t+1);n.size=G.getCard8(e,t+2);n.offsetSize=G.getCard8(e,t+3);n.startOffset=t;n.endOffset=t+4;return n}var yt=[{name:"version",op:0,type:"SID"},{name:"notice",op:1,type:"SID"},{name:"copyright",op:1200,type:"SID"},{name:"fullName",op:2,type:"SID"},{name:"familyName",op:3,type:"SID"},{name:"weight",op:4,type:"SID"},{name:"isFixedPitch",op:1201,type:"number",value:0},{name:"italicAngle",op:1202,type:"number",value:0},{name:"underlinePosition",op:1203,type:"number",value:-100},{name:"underlineThickness",op:1204,type:"number",value:50},{name:"paintType",op:1205,type:"number",value:0},{name:"charstringType",op:1206,type:"number",value:2},{name:"fontMatrix",op:1207,type:["real","real","real","real","real","real"],value:[.001,0,0,.001,0,0]},{name:"uniqueId",op:13,type:"number"},{name:"fontBBox",op:5,type:["number","number","number","number"],value:[0,0,0,0]},{name:"strokeWidth",op:1208,type:"number",value:0},{name:"xuid",op:14,type:[],value:null},{name:"charset",op:15,type:"offset",value:0},{name:"encoding",op:16,type:"offset",value:0},{name:"charStrings",op:17,type:"offset",value:0},{name:"private",op:18,type:["number","offset"],value:[0,0]},{name:"ros",op:1230,type:["SID","SID","number"]},{name:"cidFontVersion",op:1231,type:"number",value:0},{name:"cidFontRevision",op:1232,type:"number",value:0},{name:"cidFontType",op:1233,type:"number",value:0},{name:"cidCount",op:1234,type:"number",value:8720},{name:"uidBase",op:1235,type:"number"},{name:"fdArray",op:1236,type:"offset"},{name:"fdSelect",op:1237,type:"offset"},{name:"fontName",op:1238,type:"SID"}];var xt=[{name:"subrs",op:19,type:"offset",value:0},{name:"defaultWidthX",op:20,type:"number",value:0},{name:"nominalWidthX",op:21,type:"number",value:0}];function St(e,t){var n=gt(e,0,e.byteLength);return vt(n,yt,t)}function Ot(e,t,n,r){var i=gt(e,t,n);return vt(i,xt,r)}function _t(e,t,n,r){var i=[];for(var a=0;a<n.length;a+=1){var s=new DataView(new Uint8Array(n[a]).buffer);var o=St(s,r);o._subrs=[];o._subrsBias=0;o._defaultWidthX=0;o._nominalWidthX=0;var l=o.private[0];var u=o.private[1];if(l!==0&&u!==0){var c=Ot(e,u+t,l,r);o._defaultWidthX=c.defaultWidthX;o._nominalWidthX=c.nominalWidthX;if(c.subrs!==0){var p=u+c.subrs;var h=T(e,p+t);o._subrs=h.objects;o._subrsBias=ut(o._subrs)}o._privateDict=c}i.push(o)}return i}function At(e,t,n,r){var i;var a;var s=new G.Parser(e,t);n-=1;var o=[".notdef"];var l=s.parseCard8();if(l===0){for(var u=0;u<n;u+=1){i=s.parseSID();o.push(mt(r,i))}}else if(l===1){while(o.length<=n){i=s.parseSID();a=s.parseCard8();for(var c=0;c<=a;c+=1){o.push(mt(r,i));i+=1}}}else if(l===2){while(o.length<=n){i=s.parseSID();a=s.parseCard16();for(var p=0;p<=a;p+=1){o.push(mt(r,i));i+=1}}}else{throw new Error("Unknown charset format "+l)}return o}function Ct(e,t,n){var r;var i={};var a=new G.Parser(e,t);var s=a.parseCard8();if(s===0){var o=a.parseCard8();for(var l=0;l<o;l+=1){r=a.parseCard8();i[r]=l}}else if(s===1){var u=a.parseCard8();r=1;for(var c=0;c<u;c+=1){var p=a.parseCard8();var h=a.parseCard8();for(var f=p;f<=p+h;f+=1){i[f]=r;r+=1}}}else{throw new Error("Unknown encoding format "+s)}return new Ke(i,n)}function Tt(g,m,e){var v;var b;var y;var x;var S=new d;var O=[];var _=0;var A=false;var C=false;var T=0;var I=0;var E;var L;var t;var N;if(g.isCIDFont){var n=g.tables.cff.topDict._fdSelect[m.index];var r=g.tables.cff.topDict._fdArray[n];E=r._subrs;L=r._subrsBias;t=r._defaultWidthX;N=r._nominalWidthX}else{E=g.tables.cff.topDict._subrs;L=g.tables.cff.topDict._subrsBias;t=g.tables.cff.topDict._defaultWidthX;N=g.tables.cff.topDict._nominalWidthX}var U=t;function R(e,t){if(C){S.closePath()}S.moveTo(e,t);C=true}function P(){var e;e=O.length%2!==0;if(e&&!A){U=O.shift()+N}_+=O.length>>1;O.length=0;A=true}function M(e){var t;var n;var r;var i;var a;var s;var o;var l;var u;var c;var p;var h;var f=0;while(f<e.length){var d=e[f];f+=1;switch(d){case 1:P();break;case 3:P();break;case 4:if(O.length>1&&!A){U=O.shift()+N;A=true}I+=O.pop();R(T,I);break;case 5:while(O.length>0){T+=O.shift();I+=O.shift();S.lineTo(T,I)}break;case 6:while(O.length>0){T+=O.shift();S.lineTo(T,I);if(O.length===0){break}I+=O.shift();S.lineTo(T,I)}break;case 7:while(O.length>0){I+=O.shift();S.lineTo(T,I);if(O.length===0){break}T+=O.shift();S.lineTo(T,I)}break;case 8:while(O.length>0){v=T+O.shift();b=I+O.shift();y=v+O.shift();x=b+O.shift();T=y+O.shift();I=x+O.shift();S.curveTo(v,b,y,x,T,I)}break;case 10:a=O.pop()+L;s=E[a];if(s){M(s)}break;case 11:return;case 12:d=e[f];f+=1;switch(d){case 35:v=T+O.shift();b=I+O.shift();y=v+O.shift();x=b+O.shift();o=y+O.shift();l=x+O.shift();u=o+O.shift();c=l+O.shift();p=u+O.shift();h=c+O.shift();T=p+O.shift();I=h+O.shift();O.shift();S.curveTo(v,b,y,x,o,l);S.curveTo(u,c,p,h,T,I);break;case 34:v=T+O.shift();b=I;y=v+O.shift();x=b+O.shift();o=y+O.shift();l=x;u=o+O.shift();c=x;p=u+O.shift();h=I;T=p+O.shift();S.curveTo(v,b,y,x,o,l);S.curveTo(u,c,p,h,T,I);break;case 36:v=T+O.shift();b=I+O.shift();y=v+O.shift();x=b+O.shift();o=y+O.shift();l=x;u=o+O.shift();c=x;p=u+O.shift();h=c+O.shift();T=p+O.shift();S.curveTo(v,b,y,x,o,l);S.curveTo(u,c,p,h,T,I);break;case 37:v=T+O.shift();b=I+O.shift();y=v+O.shift();x=b+O.shift();o=y+O.shift();l=x+O.shift();u=o+O.shift();c=l+O.shift();p=u+O.shift();h=c+O.shift();if(Math.abs(p-T)>Math.abs(h-I)){T=p+O.shift()}else{I=h+O.shift()}S.curveTo(v,b,y,x,o,l);S.curveTo(u,c,p,h,T,I);break;default:console.log("Glyph "+m.index+": unknown operator "+1200+d);O.length=0}break;case 14:if(O.length>0&&!A){U=O.shift()+N;A=true}if(C){S.closePath();C=false}break;case 18:P();break;case 19:case 20:P();f+=_+7>>3;break;case 21:if(O.length>2&&!A){U=O.shift()+N;A=true}I+=O.pop();T+=O.pop();R(T,I);break;case 22:if(O.length>1&&!A){U=O.shift()+N;A=true}T+=O.pop();R(T,I);break;case 23:P();break;case 24:while(O.length>2){v=T+O.shift();b=I+O.shift();y=v+O.shift();x=b+O.shift();T=y+O.shift();I=x+O.shift();S.curveTo(v,b,y,x,T,I)}T+=O.shift();I+=O.shift();S.lineTo(T,I);break;case 25:while(O.length>6){T+=O.shift();I+=O.shift();S.lineTo(T,I)}v=T+O.shift();b=I+O.shift();y=v+O.shift();x=b+O.shift();T=y+O.shift();I=x+O.shift();S.curveTo(v,b,y,x,T,I);break;case 26:if(O.length%2){T+=O.shift()}while(O.length>0){v=T;b=I+O.shift();y=v+O.shift();x=b+O.shift();T=y;I=x+O.shift();S.curveTo(v,b,y,x,T,I)}break;case 27:if(O.length%2){I+=O.shift()}while(O.length>0){v=T+O.shift();b=I;y=v+O.shift();x=b+O.shift();T=y+O.shift();I=x;S.curveTo(v,b,y,x,T,I)}break;case 28:t=e[f];n=e[f+1];O.push((t<<24|n<<16)>>16);f+=2;break;case 29:a=O.pop()+g.gsubrsBias;s=g.gsubrs[a];if(s){M(s)}break;case 30:while(O.length>0){v=T;b=I+O.shift();y=v+O.shift();x=b+O.shift();T=y+O.shift();I=x+(O.length===1?O.shift():0);S.curveTo(v,b,y,x,T,I);if(O.length===0){break}v=T+O.shift();b=I;y=v+O.shift();x=b+O.shift();I=x+O.shift();T=y+(O.length===1?O.shift():0);S.curveTo(v,b,y,x,T,I)}break;case 31:while(O.length>0){v=T+O.shift();b=I;y=v+O.shift();x=b+O.shift();I=x+O.shift();T=y+(O.length===1?O.shift():0);S.curveTo(v,b,y,x,T,I);if(O.length===0){break}v=T;b=I+O.shift();y=v+O.shift();x=b+O.shift();T=y+O.shift();I=x+(O.length===1?O.shift():0);S.curveTo(v,b,y,x,T,I)}break;default:if(d<32){console.log("Glyph "+m.index+": unknown operator "+d)}else if(d<247){O.push(d-139)}else if(d<251){t=e[f];f+=1;O.push((d-247)*256+t+108)}else if(d<255){t=e[f];f+=1;O.push(-(d-251)*256-t-108)}else{t=e[f];n=e[f+1];r=e[f+2];i=e[f+3];f+=4;O.push((t<<24|n<<16|r<<8|i)/65536)}}}}M(e);m.advanceWidth=U;return S}function It(e,t,n,r){var i=[];var a;var s=new G.Parser(e,t);var o=s.parseCard8();if(o===0){for(var l=0;l<n;l++){a=s.parseCard8();if(a>=r){throw new Error("CFF table CID Font FDSelect has bad FD index value "+a+" (FD count "+r+")")}i.push(a)}}else if(o===3){var u=s.parseCard16();var c=s.parseCard16();if(c!==0){throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID "+c)}var p;for(var h=0;h<u;h++){a=s.parseCard8();p=s.parseCard16();if(a>=r){throw new Error("CFF table CID Font FDSelect has bad FD index value "+a+" (FD count "+r+")")}if(p>n){throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID "+p)}for(;c<p;c++){i.push(a)}c=p}if(p!==n){throw new Error("CFF Table CID Font FDSelect format 3 range has bad final GID "+p)}}else{throw new Error("CFF Table CID Font FDSelect table has unsupported format "+o)}return i}function Et(n,r,i,e){i.tables.cff={};var t=bt(n,r);var a=T(n,t.endOffset,G.bytesToString);var s=T(n,a.endOffset);var o=T(n,s.endOffset,G.bytesToString);var l=T(n,o.endOffset);i.gsubrs=l.objects;i.gsubrsBias=ut(i.gsubrs);var u=_t(n,r,s.objects,o.objects);if(u.length!==1){throw new Error("CFF table has too many fonts in 'FontSet' - count of fonts NameIndex.length = "+u.length)}var c=u[0];i.tables.cff.topDict=c;if(c._privateDict){i.defaultWidthX=c._privateDict.defaultWidthX;i.nominalWidthX=c._privateDict.nominalWidthX}if(c.ros[0]!==undefined&&c.ros[1]!==undefined){i.isCIDFont=true}if(i.isCIDFont){var p=c.fdArray;var h=c.fdSelect;if(p===0||h===0){throw new Error("Font is marked as a CID font, but FDArray and/or FDSelect information is missing")}p+=r;var f=T(n,p);var d=_t(n,r,f.objects,o.objects);c._fdArray=d;h+=r;c._fdSelect=It(n,h,i.numGlyphs,d.length)}var g=r+c.private[1];var m=Ot(n,g,c.private[0],o.objects);i.defaultWidthX=m.defaultWidthX;i.nominalWidthX=m.nominalWidthX;if(m.subrs!==0){var v=g+m.subrs;var b=T(n,v);i.subrs=b.objects;i.subrsBias=ut(i.subrs)}else{i.subrs=[];i.subrsBias=0}var y;if(e.lowMemory){y=ct(n,r+c.charStrings);i.nGlyphs=y.offsets.length}else{y=T(n,r+c.charStrings);i.nGlyphs=y.objects.length}var x=At(n,r+c.charset,i.nGlyphs,o.objects);if(c.encoding===0){i.cffEncoding=new Ke(Ye,x)}else if(c.encoding===1){i.cffEncoding=new Ke(We,x)}else{i.cffEncoding=Ct(n,r+c.encoding,x)}i.encoding=i.encoding||i.cffEncoding;i.glyphs=new A.GlyphSet(i);if(e.lowMemory){i._push=function(e){var t=pt(e,y.offsets,n,r+c.charStrings);i.glyphs.push(e,A.cffGlyphLoader(i,e,Tt,t))}}else{for(var S=0;S<i.nGlyphs;S+=1){var O=y.objects[S];i.glyphs.push(S,A.cffGlyphLoader(i,S,Tt,O))}}}function Lt(e,t){var n;var r=Xe.indexOf(e);if(r>=0){n=r}r=t.indexOf(e);if(r>=0){n=r+Xe.length}else{n=Xe.length+t.length;t.push(e)}return n}function Nt(){return new E.Record("Header",[{name:"major",type:"Card8",value:1},{name:"minor",type:"Card8",value:0},{name:"hdrSize",type:"Card8",value:4},{name:"major",type:"Card8",value:1}])}function Ut(e){var t=new E.Record("Name INDEX",[{name:"names",type:"INDEX",value:[]}]);t.names=[];for(var n=0;n<e.length;n+=1){t.names.push({name:"name_"+n,type:"NAME",value:e[n]})}return t}function Rt(e,t,n){var r={};for(var i=0;i<e.length;i+=1){var a=e[i];var s=t[a.name];if(s!==undefined&&!lt(s,a.value)){if(a.type==="SID"){s=Lt(s,n)}r[a.op]={name:a.name,type:a.type,value:s}}}return r}function Pt(e,t){var n=new E.Record("Top DICT",[{name:"dict",type:"DICT",value:{}}]);n.dict=Rt(yt,e,t);return n}function Mt(e){var t=new E.Record("Top DICT INDEX",[{name:"topDicts",type:"INDEX",value:[]}]);t.topDicts=[{name:"topDict_0",type:"TABLE",value:e}];return t}function kt(e){var t=new E.Record("String INDEX",[{name:"strings",type:"INDEX",value:[]}]);t.strings=[];for(var n=0;n<e.length;n+=1){t.strings.push({name:"string_"+n,type:"STRING",value:e[n]})}return t}function wt(){return new E.Record("Global Subr INDEX",[{name:"subrs",type:"INDEX",value:[]}])}function Bt(e,t){var n=new E.Record("Charsets",[{name:"format",type:"Card8",value:0}]);for(var r=0;r<e.length;r+=1){var i=e[r];var a=Lt(i,t);n.fields.push({name:"glyph_"+r,type:"SID",value:a})}return n}function Gt(e){var t=[];var n=e.path;t.push({name:"width",type:"NUMBER",value:e.advanceWidth});var r=0;var i=0;for(var a=0;a<n.commands.length;a+=1){var s=void 0;var o=void 0;var l=n.commands[a];if(l.type==="Q"){var u=1/3;var c=2/3;l={type:"C",x:l.x,y:l.y,x1:Math.round(u*r+c*l.x1),y1:Math.round(u*i+c*l.y1),x2:Math.round(u*l.x+c*l.x1),y2:Math.round(u*l.y+c*l.y1)}}if(l.type==="M"){s=Math.round(l.x-r);o=Math.round(l.y-i);t.push({name:"dx",type:"NUMBER",value:s});t.push({name:"dy",type:"NUMBER",value:o});t.push({name:"rmoveto",type:"OP",value:21});r=Math.round(l.x);i=Math.round(l.y)}else if(l.type==="L"){s=Math.round(l.x-r);o=Math.round(l.y-i);t.push({name:"dx",type:"NUMBER",value:s});t.push({name:"dy",type:"NUMBER",value:o});t.push({name:"rlineto",type:"OP",value:5});r=Math.round(l.x);i=Math.round(l.y)}else if(l.type==="C"){var p=Math.round(l.x1-r);var h=Math.round(l.y1-i);var f=Math.round(l.x2-l.x1);var d=Math.round(l.y2-l.y1);s=Math.round(l.x-l.x2);o=Math.round(l.y-l.y2);t.push({name:"dx1",type:"NUMBER",value:p});t.push({name:"dy1",type:"NUMBER",value:h});t.push({name:"dx2",type:"NUMBER",value:f});t.push({name:"dy2",type:"NUMBER",value:d});t.push({name:"dx",type:"NUMBER",value:s});t.push({name:"dy",type:"NUMBER",value:o});t.push({name:"rrcurveto",type:"OP",value:8});r=Math.round(l.x);i=Math.round(l.y)}}t.push({name:"endchar",type:"OP",value:14});return t}function Vt(e){var t=new E.Record("CharStrings INDEX",[{name:"charStrings",type:"INDEX",value:[]}]);for(var n=0;n<e.length;n+=1){var r=e.get(n);var i=Gt(r);t.charStrings.push({name:r.name,type:"CHARSTRING",value:i})}return t}function Dt(e,t){var n=new E.Record("Private DICT",[{name:"dict",type:"DICT",value:{}}]);n.dict=Rt(xt,e,t);return n}function Ft(e,t){var n=new E.Table("CFF ",[{name:"header",type:"RECORD"},{name:"nameIndex",type:"RECORD"},{name:"topDictIndex",type:"RECORD"},{name:"stringIndex",type:"RECORD"},{name:"globalSubrIndex",type:"RECORD"},{name:"charsets",type:"RECORD"},{name:"charStringsIndex",type:"RECORD"},{name:"privateDict",type:"RECORD"}]);var r=1/t.unitsPerEm;var i={version:t.version,fullName:t.fullName,familyName:t.familyName,weight:t.weightName,fontBBox:t.fontBBox||[0,0,0,0],fontMatrix:[r,0,0,r,0,0],charset:999,encoding:0,charStrings:999,private:[0,999]};var a={};var s=[];var o;for(var l=1;l<e.length;l+=1){o=e.get(l);s.push(o.name)}var u=[];n.header=Nt();n.nameIndex=Ut([t.postScriptName]);var c=Pt(i,u);n.topDictIndex=Mt(c);n.globalSubrIndex=wt();n.charsets=Bt(s,u);n.charStringsIndex=Vt(e);n.privateDict=Dt(a,u);n.stringIndex=kt(u);var p=n.header.sizeOf()+n.nameIndex.sizeOf()+n.topDictIndex.sizeOf()+n.stringIndex.sizeOf()+n.globalSubrIndex.sizeOf();i.charset=p;i.encoding=0;i.charStrings=i.charset+n.charsets.sizeOf();i.private[1]=i.charStrings+n.charStringsIndex.sizeOf();c=Pt(i,u);n.topDictIndex=Mt(c);return n}var jt={parse:Et,make:Ft};function zt(e,t){var n={};var r=new G.Parser(e,t);n.version=r.parseVersion();n.fontRevision=Math.round(r.parseFixed()*1e3)/1e3;n.checkSumAdjustment=r.parseULong();n.magicNumber=r.parseULong();_.argument(n.magicNumber===1594834165,"Font header has wrong magic number.");n.flags=r.parseUShort();n.unitsPerEm=r.parseUShort();n.created=r.parseLongDateTime();n.modified=r.parseLongDateTime();n.xMin=r.parseShort();n.yMin=r.parseShort();n.xMax=r.parseShort();n.yMax=r.parseShort();n.macStyle=r.parseUShort();n.lowestRecPPEM=r.parseUShort();n.fontDirectionHint=r.parseShort();n.indexToLocFormat=r.parseShort();n.glyphDataFormat=r.parseShort();return n}function Ht(e){var t=Math.round((new Date).getTime()/1e3)+2082844800;var n=t;if(e.createdTimestamp){n=e.createdTimestamp+2082844800}return new E.Table("head",[{name:"version",type:"FIXED",value:65536},{name:"fontRevision",type:"FIXED",value:65536},{name:"checkSumAdjustment",type:"ULONG",value:0},{name:"magicNumber",type:"ULONG",value:1594834165},{name:"flags",type:"USHORT",value:0},{name:"unitsPerEm",type:"USHORT",value:1e3},{name:"created",type:"LONGDATETIME",value:n},{name:"modified",type:"LONGDATETIME",value:t},{name:"xMin",type:"SHORT",value:0},{name:"yMin",type:"SHORT",value:0},{name:"xMax",type:"SHORT",value:0},{name:"yMax",type:"SHORT",value:0},{name:"macStyle",type:"USHORT",value:0},{name:"lowestRecPPEM",type:"USHORT",value:0},{name:"fontDirectionHint",type:"SHORT",value:2},{name:"indexToLocFormat",type:"SHORT",value:0},{name:"glyphDataFormat",type:"SHORT",value:0}],e)}var Xt={parse:zt,make:Ht};function Yt(e,t){var n={};var r=new G.Parser(e,t);n.version=r.parseVersion();n.ascender=r.parseShort();n.descender=r.parseShort();n.lineGap=r.parseShort();n.advanceWidthMax=r.parseUShort();n.minLeftSideBearing=r.parseShort();n.minRightSideBearing=r.parseShort();n.xMaxExtent=r.parseShort();n.caretSlopeRise=r.parseShort();n.caretSlopeRun=r.parseShort();n.caretOffset=r.parseShort();r.relativeOffset+=8;n.metricDataFormat=r.parseShort();n.numberOfHMetrics=r.parseUShort();return n}function Wt(e){return new E.Table("hhea",[{name:"version",type:"FIXED",value:65536},{name:"ascender",type:"FWORD",value:0},{name:"descender",type:"FWORD",value:0},{name:"lineGap",type:"FWORD",value:0},{name:"advanceWidthMax",type:"UFWORD",value:0},{name:"minLeftSideBearing",type:"FWORD",value:0},{name:"minRightSideBearing",type:"FWORD",value:0},{name:"xMaxExtent",type:"FWORD",value:0},{name:"caretSlopeRise",type:"SHORT",value:1},{name:"caretSlopeRun",type:"SHORT",value:0},{name:"caretOffset",type:"SHORT",value:0},{name:"reserved1",type:"SHORT",value:0},{name:"reserved2",type:"SHORT",value:0},{name:"reserved3",type:"SHORT",value:0},{name:"reserved4",type:"SHORT",value:0},{name:"metricDataFormat",type:"SHORT",value:0},{name:"numberOfHMetrics",type:"USHORT",value:0}],e)}var qt={parse:Yt,make:Wt};function Zt(e,t,n,r,i){var a;var s;var o=new G.Parser(e,t);for(var l=0;l<r;l+=1){if(l<n){a=o.parseUShort();s=o.parseShort()}var u=i.get(l);u.advanceWidth=a;u.leftSideBearing=s}}function Kt(e,t,n,r,i){e._hmtxTableData={};var a;var s;var o=new G.Parser(t,n);for(var l=0;l<i;l+=1){if(l<r){a=o.parseUShort();s=o.parseShort()}e._hmtxTableData[l]={advanceWidth:a,leftSideBearing:s}}}function Qt(e,t,n,r,i,a,s){if(s.lowMemory){Kt(e,t,n,r,i)}else{Zt(t,n,r,i,a)}}function Jt(e){var t=new E.Table("hmtx",[]);for(var n=0;n<e.length;n+=1){var r=e.get(n);var i=r.advanceWidth||0;var a=r.leftSideBearing||0;t.fields.push({name:"advanceWidth_"+n,type:"USHORT",value:i});t.fields.push({name:"leftSideBearing_"+n,type:"SHORT",value:a})}return t}var $t={parse:Qt,make:Jt};function en(e){var t=new E.Table("ltag",[{name:"version",type:"ULONG",value:1},{name:"flags",type:"ULONG",value:0},{name:"numTags",type:"ULONG",value:e.length}]);var n="";var r=12+e.length*4;for(var i=0;i<e.length;++i){var a=n.indexOf(e[i]);if(a<0){a=n.length;n+=e[i]}t.fields.push({name:"offset "+i,type:"USHORT",value:r+a});t.fields.push({name:"length "+i,type:"USHORT",value:e[i].length})}t.fields.push({name:"stringPool",type:"CHARARRAY",value:n});return t}function tn(e,t){var n=new G.Parser(e,t);var r=n.parseULong();_.argument(r===1,"Unsupported ltag table version.");n.skip("uLong",1);var i=n.parseULong();var a=[];for(var s=0;s<i;s++){var o="";var l=t+n.parseUShort();var u=n.parseUShort();for(var c=l;c<l+u;++c){o+=String.fromCharCode(e.getInt8(c))}a.push(o)}return a}var nn={make:en,parse:tn};function rn(e,t){var n={};var r=new G.Parser(e,t);n.version=r.parseVersion();n.numGlyphs=r.parseUShort();if(n.version===1){n.maxPoints=r.parseUShort();n.maxContours=r.parseUShort();n.maxCompositePoints=r.parseUShort();n.maxCompositeContours=r.parseUShort();n.maxZones=r.parseUShort();n.maxTwilightPoints=r.parseUShort();n.maxStorage=r.parseUShort();n.maxFunctionDefs=r.parseUShort();n.maxInstructionDefs=r.parseUShort();n.maxStackElements=r.parseUShort();n.maxSizeOfInstructions=r.parseUShort();n.maxComponentElements=r.parseUShort();n.maxComponentDepth=r.parseUShort()}return n}function an(e){return new E.Table("maxp",[{name:"version",type:"FIXED",value:20480},{name:"numGlyphs",type:"USHORT",value:e}])}var sn={parse:rn,make:an};var on=["copyright","fontFamily","fontSubfamily","uniqueID","fullName","version","postScriptName","trademark","manufacturer","designer","description","manufacturerURL","designerURL","license","licenseURL","reserved","preferredFamily","preferredSubfamily","compatibleFullName","sampleText","postScriptFindFontName","wwsFamily","wwsSubfamily"];var ln={0:"en",1:"fr",2:"de",3:"it",4:"nl",5:"sv",6:"es",7:"da",8:"pt",9:"no",10:"he",11:"ja",12:"ar",13:"fi",14:"el",15:"is",16:"mt",17:"tr",18:"hr",19:"zh-Hant",20:"ur",21:"hi",22:"th",23:"ko",24:"lt",25:"pl",26:"hu",27:"es",28:"lv",29:"se",30:"fo",31:"fa",32:"ru",33:"zh",34:"nl-BE",35:"ga",36:"sq",37:"ro",38:"cz",39:"sk",40:"si",41:"yi",42:"sr",43:"mk",44:"bg",45:"uk",46:"be",47:"uz",48:"kk",49:"az-Cyrl",50:"az-Arab",51:"hy",52:"ka",53:"mo",54:"ky",55:"tg",56:"tk",57:"mn-CN",58:"mn",59:"ps",60:"ks",61:"ku",62:"sd",63:"bo",64:"ne",65:"sa",66:"mr",67:"bn",68:"as",69:"gu",70:"pa",71:"or",72:"ml",73:"kn",74:"ta",75:"te",76:"si",77:"my",78:"km",79:"lo",80:"vi",81:"id",82:"tl",83:"ms",84:"ms-Arab",85:"am",86:"ti",87:"om",88:"so",89:"sw",90:"rw",91:"rn",92:"ny",93:"mg",94:"eo",128:"cy",129:"eu",130:"ca",131:"la",132:"qu",133:"gn",134:"ay",135:"tt",136:"ug",137:"dz",138:"jv",139:"su",140:"gl",141:"af",142:"br",143:"iu",144:"gd",145:"gv",146:"ga",147:"to",148:"el-polyton",149:"kl",150:"az",151:"nn"};var un={0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:5,11:1,12:4,13:0,14:6,15:0,16:0,17:0,18:0,19:2,20:4,21:9,22:21,23:3,24:29,25:29,26:29,27:29,28:29,29:0,30:0,31:4,32:7,33:25,34:0,35:0,36:0,37:0,38:29,39:29,40:0,41:5,42:7,43:7,44:7,45:7,46:7,47:7,48:7,49:7,50:4,51:24,52:23,53:7,54:7,55:7,56:7,57:27,58:7,59:4,60:4,61:4,62:4,63:26,64:9,65:9,66:9,67:13,68:13,69:11,70:10,71:12,72:17,73:16,74:14,75:15,76:18,77:19,78:20,79:22,80:30,81:0,82:0,83:0,84:4,85:28,86:28,87:28,88:0,89:0,90:0,91:0,92:0,93:0,94:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:7,136:4,137:26,138:0,139:0,140:0,141:0,142:0,143:28,144:0,145:0,146:0,147:0,148:6,149:0,150:0,151:0};var cn={1078:"af",1052:"sq",1156:"gsw",1118:"am",5121:"ar-DZ",15361:"ar-BH",3073:"ar",2049:"ar-IQ",11265:"ar-JO",13313:"ar-KW",12289:"ar-LB",4097:"ar-LY",6145:"ary",8193:"ar-OM",16385:"ar-QA",1025:"ar-SA",10241:"ar-SY",7169:"aeb",14337:"ar-AE",9217:"ar-YE",1067:"hy",1101:"as",2092:"az-Cyrl",1068:"az",1133:"ba",1069:"eu",1059:"be",2117:"bn",1093:"bn-IN",8218:"bs-Cyrl",5146:"bs",1150:"br",1026:"bg",1027:"ca",3076:"zh-HK",5124:"zh-MO",2052:"zh",4100:"zh-SG",1028:"zh-TW",1155:"co",1050:"hr",4122:"hr-BA",1029:"cs",1030:"da",1164:"prs",1125:"dv",2067:"nl-BE",1043:"nl",3081:"en-AU",10249:"en-BZ",4105:"en-CA",9225:"en-029",16393:"en-IN",6153:"en-IE",8201:"en-JM",17417:"en-MY",5129:"en-NZ",13321:"en-PH",18441:"en-SG",7177:"en-ZA",11273:"en-TT",2057:"en-GB",1033:"en",12297:"en-ZW",1061:"et",1080:"fo",1124:"fil",1035:"fi",2060:"fr-BE",3084:"fr-CA",1036:"fr",5132:"fr-LU",6156:"fr-MC",4108:"fr-CH",1122:"fy",1110:"gl",1079:"ka",3079:"de-AT",1031:"de",5127:"de-LI",4103:"de-LU",2055:"de-CH",1032:"el",1135:"kl",1095:"gu",1128:"ha",1037:"he",1081:"hi",1038:"hu",1039:"is",1136:"ig",1057:"id",1117:"iu",2141:"iu-Latn",2108:"ga",1076:"xh",1077:"zu",1040:"it",2064:"it-CH",1041:"ja",1099:"kn",1087:"kk",1107:"km",1158:"quc",1159:"rw",1089:"sw",1111:"kok",1042:"ko",1088:"ky",1108:"lo",1062:"lv",1063:"lt",2094:"dsb",1134:"lb",1071:"mk",2110:"ms-BN",1086:"ms",1100:"ml",1082:"mt",1153:"mi",1146:"arn",1102:"mr",1148:"moh",1104:"mn",2128:"mn-CN",1121:"ne",1044:"nb",2068:"nn",1154:"oc",1096:"or",1123:"ps",1045:"pl",1046:"pt",2070:"pt-PT",1094:"pa",1131:"qu-BO",2155:"qu-EC",3179:"qu",1048:"ro",1047:"rm",1049:"ru",9275:"smn",4155:"smj-NO",5179:"smj",3131:"se-FI",1083:"se",2107:"se-SE",8251:"sms",6203:"sma-NO",7227:"sms",1103:"sa",7194:"sr-Cyrl-BA",3098:"sr",6170:"sr-Latn-BA",2074:"sr-Latn",1132:"nso",1074:"tn",1115:"si",1051:"sk",1060:"sl",11274:"es-AR",16394:"es-BO",13322:"es-CL",9226:"es-CO",5130:"es-CR",7178:"es-DO",12298:"es-EC",17418:"es-SV",4106:"es-GT",18442:"es-HN",2058:"es-MX",19466:"es-NI",6154:"es-PA",15370:"es-PY",10250:"es-PE",20490:"es-PR",3082:"es",1034:"es",21514:"es-US",14346:"es-UY",8202:"es-VE",2077:"sv-FI",1053:"sv",1114:"syr",1064:"tg",2143:"tzm",1097:"ta",1092:"tt",1098:"te",1054:"th",1105:"bo",1055:"tr",1090:"tk",1152:"ug",1058:"uk",1070:"hsb",1056:"ur",2115:"uz-Cyrl",1091:"uz",1066:"vi",1106:"cy",1160:"wo",1157:"sah",1144:"ii",1130:"yo"};function pn(e,t,n){switch(e){case 0:if(t===65535){return"und"}else if(n){return n[t]}break;case 1:return ln[t];case 3:return cn[t]}return undefined}var hn="utf-16";var fn={0:"macintosh",1:"x-mac-japanese",2:"x-mac-chinesetrad",3:"x-mac-korean",6:"x-mac-greek",7:"x-mac-cyrillic",9:"x-mac-devanagai",10:"x-mac-gurmukhi",11:"x-mac-gujarati",12:"x-mac-oriya",13:"x-mac-bengali",14:"x-mac-tamil",15:"x-mac-telugu",16:"x-mac-kannada",17:"x-mac-malayalam",18:"x-mac-sinhalese",19:"x-mac-burmese",20:"x-mac-khmer",21:"x-mac-thai",22:"x-mac-lao",23:"x-mac-georgian",24:"x-mac-armenian",25:"x-mac-chinesesimp",26:"x-mac-tibetan",27:"x-mac-mongolian",28:"x-mac-ethiopic",29:"x-mac-ce",30:"x-mac-vietnamese",31:"x-mac-extarabic"};var dn={15:"x-mac-icelandic",17:"x-mac-turkish",18:"x-mac-croatian",24:"x-mac-ce",25:"x-mac-ce",26:"x-mac-ce",27:"x-mac-ce",28:"x-mac-ce",30:"x-mac-icelandic",37:"x-mac-romanian",38:"x-mac-ce",39:"x-mac-ce",40:"x-mac-ce",143:"x-mac-inuit",146:"x-mac-gaelic"};function gn(e,t,n){switch(e){case 0:return hn;case 1:return dn[n]||fn[t];case 3:if(t===1||t===10){return hn}break}return undefined}function mn(e,t,n){var r={};var i=new G.Parser(e,t);var a=i.parseUShort();var s=i.parseUShort();var o=i.offset+i.parseUShort();for(var l=0;l<s;l++){var u=i.parseUShort();var c=i.parseUShort();var p=i.parseUShort();var h=i.parseUShort();var f=on[h]||h;var d=i.parseUShort();var g=i.parseUShort();var m=pn(u,p,n);var v=gn(u,c,p);if(v!==undefined&&m!==undefined){var b=void 0;if(v===hn){b=ce.UTF16(e,o+g,d)}else{b=ce.MACSTRING(e,o+g,d,v)}if(b){var y=r[f];if(y===undefined){y=r[f]={}}y[m]=b}}}var x=0;if(a===1){x=i.parseUShort()}return r}function vn(e){var t={};for(var n in e){t[e[n]]=parseInt(n)}return t}function bn(e,t,n,r,i,a){return new E.Record("NameRecord",[{name:"platformID",type:"USHORT",value:e},{name:"encodingID",type:"USHORT",value:t},{name:"languageID",type:"USHORT",value:n},{name:"nameID",type:"USHORT",value:r},{name:"length",type:"USHORT",value:i},{name:"offset",type:"USHORT",value:a}])}function yn(e,t){var n=e.length;var r=t.length-n+1;e:for(var i=0;i<r;i++){for(;i<r;i++){for(var a=0;a<n;a++){if(t[i+a]!==e[a]){continue e}}return i}}return-1}function xn(e,t){var n=yn(e,t);if(n<0){n=t.length;var r=0;var i=e.length;for(;r<i;++r){t.push(e[r])}}return n}function Sn(e,t){var n;var r=[];var i={};var a=vn(on);for(var s in e){var o=a[s];if(o===undefined){o=s}n=parseInt(o);if(isNaN(n)){throw new Error('Name table entry "'+s+'" does not exist, see nameTableNames for complete list.')}i[n]=e[s];r.push(n)}var l=vn(ln);var u=vn(cn);var c=[];var p=[];for(var h=0;h<r.length;h++){n=r[h];var f=i[n];for(var d in f){var g=f[d];var m=1;var v=l[d];var b=un[v];var y=gn(m,b,v);var x=I.MACSTRING(g,y);if(x===undefined){m=0;v=t.indexOf(d);if(v<0){v=t.length;t.push(d)}b=4;x=I.UTF16(g)}var S=xn(x,p);c.push(bn(m,b,v,n,x.length,S));var O=u[d];if(O!==undefined){var _=I.UTF16(g);var A=xn(_,p);c.push(bn(3,1,O,n,_.length,A))}}}c.sort(function(e,t){return e.platformID-t.platformID||e.encodingID-t.encodingID||e.languageID-t.languageID||e.nameID-t.nameID});var C=new E.Table("name",[{name:"format",type:"USHORT",value:0},{name:"count",type:"USHORT",value:c.length},{name:"stringOffset",type:"USHORT",value:6+c.length*12}]);for(var T=0;T<c.length;T++){C.fields.push({name:"record_"+T,type:"RECORD",value:c[T]})}C.fields.push({name:"strings",type:"LITERAL",value:p});return C}var On={parse:mn,make:Sn};var _n=[{begin:0,end:127},{begin:128,end:255},{begin:256,end:383},{begin:384,end:591},{begin:592,end:687},{begin:688,end:767},{begin:768,end:879},{begin:880,end:1023},{begin:11392,end:11519},{begin:1024,end:1279},{begin:1328,end:1423},{begin:1424,end:1535},{begin:42240,end:42559},{begin:1536,end:1791},{begin:1984,end:2047},{begin:2304,end:2431},{begin:2432,end:2559},{begin:2560,end:2687},{begin:2688,end:2815},{begin:2816,end:2943},{begin:2944,end:3071},{begin:3072,end:3199},{begin:3200,end:3327},{begin:3328,end:3455},{begin:3584,end:3711},{begin:3712,end:3839},{begin:4256,end:4351},{begin:6912,end:7039},{begin:4352,end:4607},{begin:7680,end:7935},{begin:7936,end:8191},{begin:8192,end:8303},{begin:8304,end:8351},{begin:8352,end:8399},{begin:8400,end:8447},{begin:8448,end:8527},{begin:8528,end:8591},{begin:8592,end:8703},{begin:8704,end:8959},{begin:8960,end:9215},{begin:9216,end:9279},{begin:9280,end:9311},{begin:9312,end:9471},{begin:9472,end:9599},{begin:9600,end:9631},{begin:9632,end:9727},{begin:9728,end:9983},{begin:9984,end:10175},{begin:12288,end:12351},{begin:12352,end:12447},{begin:12448,end:12543},{begin:12544,end:12591},{begin:12592,end:12687},{begin:43072,end:43135},{begin:12800,end:13055},{begin:13056,end:13311},{begin:44032,end:55215},{begin:55296,end:57343},{begin:67840,end:67871},{begin:19968,end:40959},{begin:57344,end:63743},{begin:12736,end:12783},{begin:64256,end:64335},{begin:64336,end:65023},{begin:65056,end:65071},{begin:65040,end:65055},{begin:65104,end:65135},{begin:65136,end:65279},{begin:65280,end:65519},{begin:65520,end:65535},{begin:3840,end:4095},{begin:1792,end:1871},{begin:1920,end:1983},{begin:3456,end:3583},{begin:4096,end:4255},{begin:4608,end:4991},{begin:5024,end:5119},{begin:5120,end:5759},{begin:5760,end:5791},{begin:5792,end:5887},{begin:6016,end:6143},{begin:6144,end:6319},{begin:10240,end:10495},{begin:40960,end:42127},{begin:5888,end:5919},{begin:66304,end:66351},{begin:66352,end:66383},{begin:66560,end:66639},{begin:118784,end:119039},{begin:119808,end:120831},{begin:1044480,end:1048573},{begin:65024,end:65039},{begin:917504,end:917631},{begin:6400,end:6479},{begin:6480,end:6527},{begin:6528,end:6623},{begin:6656,end:6687},{begin:11264,end:11359},{begin:11568,end:11647},{begin:19904,end:19967},{begin:43008,end:43055},{begin:65536,end:65663},{begin:65856,end:65935},{begin:66432,end:66463},{begin:66464,end:66527},{begin:66640,end:66687},{begin:66688,end:66735},{begin:67584,end:67647},{begin:68096,end:68191},{begin:119552,end:119647},{begin:73728,end:74751},{begin:119648,end:119679},{begin:7040,end:7103},{begin:7168,end:7247},{begin:7248,end:7295},{begin:43136,end:43231},{begin:43264,end:43311},{begin:43312,end:43359},{begin:43520,end:43615},{begin:65936,end:65999},{begin:66e3,end:66047},{begin:66208,end:66271},{begin:127024,end:127135}];function An(e){for(var t=0;t<_n.length;t+=1){var n=_n[t];if(e>=n.begin&&e<n.end){return t}}return-1}function Cn(e,t){var n={};var r=new G.Parser(e,t);n.version=r.parseUShort();n.xAvgCharWidth=r.parseShort();n.usWeightClass=r.parseUShort();n.usWidthClass=r.parseUShort();n.fsType=r.parseUShort();n.ySubscriptXSize=r.parseShort();n.ySubscriptYSize=r.parseShort();n.ySubscriptXOffset=r.parseShort();n.ySubscriptYOffset=r.parseShort();n.ySuperscriptXSize=r.parseShort();n.ySuperscriptYSize=r.parseShort();n.ySuperscriptXOffset=r.parseShort();n.ySuperscriptYOffset=r.parseShort();n.yStrikeoutSize=r.parseShort();n.yStrikeoutPosition=r.parseShort();n.sFamilyClass=r.parseShort();n.panose=[];for(var i=0;i<10;i++){n.panose[i]=r.parseByte()}n.ulUnicodeRange1=r.parseULong();n.ulUnicodeRange2=r.parseULong();n.ulUnicodeRange3=r.parseULong();n.ulUnicodeRange4=r.parseULong();n.achVendID=String.fromCharCode(r.parseByte(),r.parseByte(),r.parseByte(),r.parseByte());n.fsSelection=r.parseUShort();n.usFirstCharIndex=r.parseUShort();n.usLastCharIndex=r.parseUShort();n.sTypoAscender=r.parseShort();n.sTypoDescender=r.parseShort();n.sTypoLineGap=r.parseShort();n.usWinAscent=r.parseUShort();n.usWinDescent=r.parseUShort();if(n.version>=1){n.ulCodePageRange1=r.parseULong();n.ulCodePageRange2=r.parseULong()}if(n.version>=2){n.sxHeight=r.parseShort();n.sCapHeight=r.parseShort();n.usDefaultChar=r.parseUShort();n.usBreakChar=r.parseUShort();n.usMaxContent=r.parseUShort()}return n}function Tn(e){return new E.Table("OS/2",[{name:"version",type:"USHORT",value:3},{name:"xAvgCharWidth",type:"SHORT",value:0},{name:"usWeightClass",type:"USHORT",value:0},{name:"usWidthClass",type:"USHORT",value:0},{name:"fsType",type:"USHORT",value:0},{name:"ySubscriptXSize",type:"SHORT",value:650},{name:"ySubscriptYSize",type:"SHORT",value:699},{name:"ySubscriptXOffset",type:"SHORT",value:0},{name:"ySubscriptYOffset",type:"SHORT",value:140},{name:"ySuperscriptXSize",type:"SHORT",value:650},{name:"ySuperscriptYSize",type:"SHORT",value:699},{name:"ySuperscriptXOffset",type:"SHORT",value:0},{name:"ySuperscriptYOffset",type:"SHORT",value:479},{name:"yStrikeoutSize",type:"SHORT",value:49},{name:"yStrikeoutPosition",type:"SHORT",value:258},{name:"sFamilyClass",type:"SHORT",value:0},{name:"bFamilyType",type:"BYTE",value:0},{name:"bSerifStyle",type:"BYTE",value:0},{name:"bWeight",type:"BYTE",value:0},{name:"bProportion",type:"BYTE",value:0},{name:"bContrast",type:"BYTE",value:0},{name:"bStrokeVariation",type:"BYTE",value:0},{name:"bArmStyle",type:"BYTE",value:0},{name:"bLetterform",type:"BYTE",value:0},{name:"bMidline",type:"BYTE",value:0},{name:"bXHeight",type:"BYTE",value:0},{name:"ulUnicodeRange1",type:"ULONG",value:0},{name:"ulUnicodeRange2",type:"ULONG",value:0},{name:"ulUnicodeRange3",type:"ULONG",value:0},{name:"ulUnicodeRange4",type:"ULONG",value:0},{name:"achVendID",type:"CHARARRAY",value:"XXXX"},{name:"fsSelection",type:"USHORT",value:0},{name:"usFirstCharIndex",type:"USHORT",value:0},{name:"usLastCharIndex",type:"USHORT",value:0},{name:"sTypoAscender",type:"SHORT",value:0},{name:"sTypoDescender",type:"SHORT",value:0},{name:"sTypoLineGap",type:"SHORT",value:0},{name:"usWinAscent",type:"USHORT",value:0},{name:"usWinDescent",type:"USHORT",value:0},{name:"ulCodePageRange1",type:"ULONG",value:0},{name:"ulCodePageRange2",type:"ULONG",value:0},{name:"sxHeight",type:"SHORT",value:0},{name:"sCapHeight",type:"SHORT",value:0},{name:"usDefaultChar",type:"USHORT",value:0},{name:"usBreakChar",type:"USHORT",value:0},{name:"usMaxContext",type:"USHORT",value:0}],e)}var In={parse:Cn,make:Tn,unicodeRanges:_n,getUnicodeRange:An};function En(e,t){var n={};var r=new G.Parser(e,t);n.version=r.parseVersion();n.italicAngle=r.parseFixed();n.underlinePosition=r.parseShort();n.underlineThickness=r.parseShort();n.isFixedPitch=r.parseULong();n.minMemType42=r.parseULong();n.maxMemType42=r.parseULong();n.minMemType1=r.parseULong();n.maxMemType1=r.parseULong();switch(n.version){case 1:n.names=u.slice();break;case 2:n.numberOfGlyphs=r.parseUShort();n.glyphNameIndex=new Array(n.numberOfGlyphs);for(var i=0;i<n.numberOfGlyphs;i++){n.glyphNameIndex[i]=r.parseUShort()}n.names=[];for(var a=0;a<n.numberOfGlyphs;a++){if(n.glyphNameIndex[a]>=u.length){var s=r.parseChar();n.names.push(r.parseString(s))}}break;case 2.5:n.numberOfGlyphs=r.parseUShort();n.offset=new Array(n.numberOfGlyphs);for(var o=0;o<n.numberOfGlyphs;o++){n.offset[o]=r.parseChar()}break}return n}function Ln(){return new E.Table("post",[{name:"version",type:"FIXED",value:196608},{name:"italicAngle",type:"FIXED",value:0},{name:"underlinePosition",type:"FWORD",value:0},{name:"underlineThickness",type:"FWORD",value:0},{name:"isFixedPitch",type:"ULONG",value:0},{name:"minMemType42",type:"ULONG",value:0},{name:"maxMemType42",type:"ULONG",value:0},{name:"minMemType1",type:"ULONG",value:0},{name:"maxMemType1",type:"ULONG",value:0}])}var Nn={parse:En,make:Ln};var a=new Array(9);a[1]=function e(){var t=this.offset+this.relativeOffset;var n=this.parseUShort();if(n===1){return{substFormat:1,coverage:this.parsePointer(c.coverage),deltaGlyphId:this.parseUShort()}}else if(n===2){return{substFormat:2,coverage:this.parsePointer(c.coverage),substitute:this.parseOffset16List()}}_.assert(false,"0x"+t.toString(16)+": lookup type 1 format must be 1 or 2.")};a[2]=function e(){var t=this.parseUShort();_.argument(t===1,"GSUB Multiple Substitution Subtable identifier-format must be 1");return{substFormat:t,coverage:this.parsePointer(c.coverage),sequences:this.parseListOfLists()}};a[3]=function e(){var t=this.parseUShort();_.argument(t===1,"GSUB Alternate Substitution Subtable identifier-format must be 1");return{substFormat:t,coverage:this.parsePointer(c.coverage),alternateSets:this.parseListOfLists()}};a[4]=function e(){var t=this.parseUShort();_.argument(t===1,"GSUB ligature table identifier-format must be 1");return{substFormat:t,coverage:this.parsePointer(c.coverage),ligatureSets:this.parseListOfLists(function(){return{ligGlyph:this.parseUShort(),components:this.parseUShortList(this.parseUShort()-1)}})}};var Un={sequenceIndex:c.uShort,lookupListIndex:c.uShort};a[5]=function e(){var t=this.offset+this.relativeOffset;var n=this.parseUShort();if(n===1){return{substFormat:n,coverage:this.parsePointer(c.coverage),ruleSets:this.parseListOfLists(function(){var e=this.parseUShort();var t=this.parseUShort();return{input:this.parseUShortList(e-1),lookupRecords:this.parseRecordList(t,Un)}})}}else if(n===2){return{substFormat:n,coverage:this.parsePointer(c.coverage),classDef:this.parsePointer(c.classDef),classSets:this.parseListOfLists(function(){var e=this.parseUShort();var t=this.parseUShort();return{classes:this.parseUShortList(e-1),lookupRecords:this.parseRecordList(t,Un)}})}}else if(n===3){var r=this.parseUShort();var i=this.parseUShort();return{substFormat:n,coverages:this.parseList(r,c.pointer(c.coverage)),lookupRecords:this.parseRecordList(i,Un)}}_.assert(false,"0x"+t.toString(16)+": lookup type 5 format must be 1, 2 or 3.")};a[6]=function e(){var t=this.offset+this.relativeOffset;var n=this.parseUShort();if(n===1){return{substFormat:1,coverage:this.parsePointer(c.coverage),chainRuleSets:this.parseListOfLists(function(){return{backtrack:this.parseUShortList(),input:this.parseUShortList(this.parseShort()-1),lookahead:this.parseUShortList(),lookupRecords:this.parseRecordList(Un)}})}}else if(n===2){return{substFormat:2,coverage:this.parsePointer(c.coverage),backtrackClassDef:this.parsePointer(c.classDef),inputClassDef:this.parsePointer(c.classDef),lookaheadClassDef:this.parsePointer(c.classDef),chainClassSet:this.parseListOfLists(function(){return{backtrack:this.parseUShortList(),input:this.parseUShortList(this.parseShort()-1),lookahead:this.parseUShortList(),lookupRecords:this.parseRecordList(Un)}})}}else if(n===3){return{substFormat:3,backtrackCoverage:this.parseList(c.pointer(c.coverage)),inputCoverage:this.parseList(c.pointer(c.coverage)),lookaheadCoverage:this.parseList(c.pointer(c.coverage)),lookupRecords:this.parseRecordList(Un)}}_.assert(false,"0x"+t.toString(16)+": lookup type 6 format must be 1, 2 or 3.")};a[7]=function e(){var t=this.parseUShort();_.argument(t===1,"GSUB Extension Substitution subtable identifier-format must be 1");var n=this.parseUShort();var r=new c(this.data,this.offset+this.parseULong());return{substFormat:1,lookupType:n,extension:a[n].call(r)}};a[8]=function e(){var t=this.parseUShort();_.argument(t===1,"GSUB Reverse Chaining Contextual Single Substitution Subtable identifier-format must be 1");return{substFormat:t,coverage:this.parsePointer(c.coverage),backtrackCoverage:this.parseList(c.pointer(c.coverage)),lookaheadCoverage:this.parseList(c.pointer(c.coverage)),substitutes:this.parseUShortList()}};function Rn(e,t){t=t||0;var n=new c(e,t);var r=n.parseVersion(1);_.argument(r===1||r===1.1,"Unsupported GSUB table version.");if(r===1){return{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(a)}}else{return{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(a),variations:n.parseFeatureVariationsList()}}}var Pn=new Array(9);Pn[1]=function e(t){if(t.substFormat===1){return new E.Table("substitutionTable",[{name:"substFormat",type:"USHORT",value:1},{name:"coverage",type:"TABLE",value:new E.Coverage(t.coverage)},{name:"deltaGlyphID",type:"USHORT",value:t.deltaGlyphId}])}else{return new E.Table("substitutionTable",[{name:"substFormat",type:"USHORT",value:2},{name:"coverage",type:"TABLE",value:new E.Coverage(t.coverage)}].concat(E.ushortList("substitute",t.substitute)))}};Pn[2]=function e(t){_.assert(t.substFormat===1,"Lookup type 2 substFormat must be 1.");return new E.Table("substitutionTable",[{name:"substFormat",type:"USHORT",value:1},{name:"coverage",type:"TABLE",value:new E.Coverage(t.coverage)}].concat(E.tableList("seqSet",t.sequences,function(e){return new E.Table("sequenceSetTable",E.ushortList("sequence",e))})))};Pn[3]=function e(t){_.assert(t.substFormat===1,"Lookup type 3 substFormat must be 1.");return new E.Table("substitutionTable",[{name:"substFormat",type:"USHORT",value:1},{name:"coverage",type:"TABLE",value:new E.Coverage(t.coverage)}].concat(E.tableList("altSet",t.alternateSets,function(e){return new E.Table("alternateSetTable",E.ushortList("alternate",e))})))};Pn[4]=function e(t){_.assert(t.substFormat===1,"Lookup type 4 substFormat must be 1.");return new E.Table("substitutionTable",[{name:"substFormat",type:"USHORT",value:1},{name:"coverage",type:"TABLE",value:new E.Coverage(t.coverage)}].concat(E.tableList("ligSet",t.ligatureSets,function(e){return new E.Table("ligatureSetTable",E.tableList("ligature",e,function(e){return new E.Table("ligatureTable",[{name:"ligGlyph",type:"USHORT",value:e.ligGlyph}].concat(E.ushortList("component",e.components,e.components.length+1)))}))})))};Pn[6]=function e(t){if(t.substFormat===1){var n=new E.Table("chainContextTable",[{name:"substFormat",type:"USHORT",value:t.substFormat},{name:"coverage",type:"TABLE",value:new E.Coverage(t.coverage)}].concat(E.tableList("chainRuleSet",t.chainRuleSets,function(e){return new E.Table("chainRuleSetTable",E.tableList("chainRule",e,function(e){var n=E.ushortList("backtrackGlyph",e.backtrack,e.backtrack.length).concat(E.ushortList("inputGlyph",e.input,e.input.length+1)).concat(E.ushortList("lookaheadGlyph",e.lookahead,e.lookahead.length)).concat(E.ushortList("substitution",[],e.lookupRecords.length));e.lookupRecords.forEach(function(e,t){n=n.concat({name:"sequenceIndex"+t,type:"USHORT",value:e.sequenceIndex}).concat({name:"lookupListIndex"+t,type:"USHORT",value:e.lookupListIndex})});return new E.Table("chainRuleTable",n)}))})));return n}else if(t.substFormat===2){_.assert(false,"lookup type 6 format 2 is not yet supported.")}else if(t.substFormat===3){var r=[{name:"substFormat",type:"USHORT",value:t.substFormat}];r.push({name:"backtrackGlyphCount",type:"USHORT",value:t.backtrackCoverage.length});t.backtrackCoverage.forEach(function(e,t){r.push({name:"backtrackCoverage"+t,type:"TABLE",value:new E.Coverage(e)})});r.push({name:"inputGlyphCount",type:"USHORT",value:t.inputCoverage.length});t.inputCoverage.forEach(function(e,t){r.push({name:"inputCoverage"+t,type:"TABLE",value:new E.Coverage(e)})});r.push({name:"lookaheadGlyphCount",type:"USHORT",value:t.lookaheadCoverage.length});t.lookaheadCoverage.forEach(function(e,t){r.push({name:"lookaheadCoverage"+t,type:"TABLE",value:new E.Coverage(e)})});r.push({name:"substitutionCount",type:"USHORT",value:t.lookupRecords.length});t.lookupRecords.forEach(function(e,t){r=r.concat({name:"sequenceIndex"+t,type:"USHORT",value:e.sequenceIndex}).concat({name:"lookupListIndex"+t,type:"USHORT",value:e.lookupListIndex})});var i=new E.Table("chainContextTable",r);return i}_.assert(false,"lookup type 6 format must be 1, 2 or 3.")};function Mn(e){return new E.Table("GSUB",[{name:"version",type:"ULONG",value:65536},{name:"scripts",type:"TABLE",value:new E.ScriptList(e.scripts)},{name:"features",type:"TABLE",value:new E.FeatureList(e.features)},{name:"lookups",type:"TABLE",value:new E.LookupList(e.lookups,Pn)}])}var kn={parse:Rn,make:Mn};function wn(e,t){var n=new G.Parser(e,t);var r=n.parseULong();_.argument(r===1,"Unsupported META table version.");n.parseULong();n.parseULong();var i=n.parseULong();var a={};for(var s=0;s<i;s++){var o=n.parseTag();var l=n.parseULong();var u=n.parseULong();var c=ce.UTF8(e,t+l,u);a[o]=c}return a}function Bn(e){var t=Object.keys(e).length;var n="";var r=16+t*12;var i=new E.Table("meta",[{name:"version",type:"ULONG",value:1},{name:"flags",type:"ULONG",value:0},{name:"offset",type:"ULONG",value:r},{name:"numTags",type:"ULONG",value:t}]);for(var a in e){var s=n.length;n+=e[a];i.fields.push({name:"tag "+a,type:"TAG",value:a});i.fields.push({name:"offset "+a,type:"ULONG",value:r+s});i.fields.push({name:"length "+a,type:"ULONG",value:e[a].length})}i.fields.push({name:"stringPool",type:"CHARARRAY",value:n});return i}var Gn={parse:wn,make:Bn};function Vn(e){return Math.log(e)/Math.log(2)|0}function Dn(e){while(e.length%4!==0){e.push(0)}var t=0;for(var n=0;n<e.length;n+=4){t+=(e[n]<<24)+(e[n+1]<<16)+(e[n+2]<<8)+e[n+3]}t%=Math.pow(2,32);return t}function Fn(e,t,n,r){return new E.Record("Table Record",[{name:"tag",type:"TAG",value:e!==undefined?e:""},{name:"checkSum",type:"ULONG",value:t!==undefined?t:0},{name:"offset",type:"ULONG",value:n!==undefined?n:0},{name:"length",type:"ULONG",value:r!==undefined?r:0}])}function jn(e){var t=new E.Table("sfnt",[{name:"version",type:"TAG",value:"OTTO"},{name:"numTables",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);t.tables=e;t.numTables=e.length;var n=Math.pow(2,Vn(t.numTables));t.searchRange=16*n;t.entrySelector=Vn(n);t.rangeShift=t.numTables*16-t.searchRange;var r=[];var i=[];var a=t.sizeOf()+Fn().sizeOf()*t.numTables;while(a%4!==0){a+=1;i.push({name:"padding",type:"BYTE",value:0})}for(var s=0;s<e.length;s+=1){var o=e[s];_.argument(o.tableName.length===4,"Table name"+o.tableName+" is invalid.");var l=o.sizeOf();var u=Fn(o.tableName,Dn(o.encode()),a,l);r.push({name:u.tag+" Table Record",type:"RECORD",value:u});i.push({name:o.tableName+" table",type:"RECORD",value:o});a+=l;_.argument(!isNaN(a),"Something went wrong calculating the offset.");while(a%4!==0){a+=1;i.push({name:"padding",type:"BYTE",value:0})}}r.sort(function(e,t){if(e.value.tag>t.value.tag){return 1}else{return-1}});t.fields=t.fields.concat(r);t.fields=t.fields.concat(i);return t}function zn(e,t,n){for(var r=0;r<t.length;r+=1){var i=e.charToGlyphIndex(t[r]);if(i>0){var a=e.glyphs.get(i);return a.getMetrics()}}return n}function Hn(e){var t=0;for(var n=0;n<e.length;n+=1){t+=e[n]}return t/e.length}function Xn(e){var t=[];var n=[];var r=[];var i=[];var a=[];var s=[];var o=[];var l;var u=0;var c=0;var p=0;var h=0;var f=0;for(var d=0;d<e.glyphs.length;d+=1){var g=e.glyphs.get(d);var m=g.unicode|0;if(isNaN(g.advanceWidth)){throw new Error("Glyph "+g.name+" ("+d+"): advanceWidth is not a number.")}if(l>m||l===undefined){if(m>0){l=m}}if(u<m){u=m}var v=In.getUnicodeRange(m);if(v<32){c|=1<<v}else if(v<64){p|=1<<v-32}else if(v<96){h|=1<<v-64}else if(v<123){f|=1<<v-96}else{throw new Error("Unicode ranges bits > 123 are reserved for internal usage")}if(g.name===".notdef"){continue}var b=g.getMetrics();t.push(b.xMin);n.push(b.yMin);r.push(b.xMax);i.push(b.yMax);s.push(b.leftSideBearing);o.push(b.rightSideBearing);a.push(g.advanceWidth)}var y={xMin:Math.min.apply(null,t),yMin:Math.min.apply(null,n),xMax:Math.max.apply(null,r),yMax:Math.max.apply(null,i),advanceWidthMax:Math.max.apply(null,a),advanceWidthAvg:Hn(a),minLeftSideBearing:Math.min.apply(null,s),maxLeftSideBearing:Math.max.apply(null,s),minRightSideBearing:Math.min.apply(null,o)};y.ascender=e.ascender;y.descender=e.descender;var x=Xt.make({flags:3,unitsPerEm:e.unitsPerEm,xMin:y.xMin,yMin:y.yMin,xMax:y.xMax,yMax:y.yMax,lowestRecPPEM:3,createdTimestamp:e.createdTimestamp});var S=qt.make({ascender:y.ascender,descender:y.descender,advanceWidthMax:y.advanceWidthMax,minLeftSideBearing:y.minLeftSideBearing,minRightSideBearing:y.minRightSideBearing,xMaxExtent:y.maxLeftSideBearing+(y.xMax-y.xMin),numberOfHMetrics:e.glyphs.length});var w=sn.make(e.glyphs.length);var B=In.make(Object.assign({xAvgCharWidth:Math.round(y.advanceWidthAvg),usFirstCharIndex:l,usLastCharIndex:u,ulUnicodeRange1:c,ulUnicodeRange2:p,ulUnicodeRange3:h,ulUnicodeRange4:f,sTypoAscender:y.ascender,sTypoDescender:y.descender,sTypoLineGap:0,usWinAscent:y.yMax,usWinDescent:Math.abs(y.yMin),ulCodePageRange1:1,sxHeight:zn(e,"xyvw",{yMax:Math.round(y.ascender/2)}).yMax,sCapHeight:zn(e,"HIKLEFJMNTZBDPRAGOQSUVWXY",y).yMax,usDefaultChar:e.hasChar(" ")?32:0,usBreakChar:e.hasChar(" ")?32:0},e.tables.os2));var G=$t.make(e.glyphs);var V=He.make(e.glyphs);var O=e.getEnglishName("fontFamily");var _=e.getEnglishName("fontSubfamily");var A=O+" "+_;var C=e.getEnglishName("postScriptName");if(!C){C=O.replace(/\s/g,"")+"-"+_}var T={};for(var I in e.names){T[I]=e.names[I]}if(!T.uniqueID){T.uniqueID={en:e.getEnglishName("manufacturer")+":"+A}}if(!T.postScriptName){T.postScriptName={en:C}}if(!T.preferredFamily){T.preferredFamily=e.names.fontFamily}if(!T.preferredSubfamily){T.preferredSubfamily=e.names.fontSubfamily}var E=[];var D=On.make(T,E);var L=E.length>0?nn.make(E):undefined;var F=Nn.make();var j=jt.make(e.glyphs,{version:e.getEnglishName("version"),fullName:A,familyName:O,weightName:_,postScriptName:C,unitsPerEm:e.unitsPerEm,fontBBox:[0,y.yMin,y.ascender,y.advanceWidthMax]});var N=e.metas&&Object.keys(e.metas).length>0?Gn.make(e.metas):undefined;var U=[x,S,w,B,D,V,F,j,G];if(L){U.push(L)}if(e.tables.gsub){U.push(kn.make(e.tables.gsub))}if(N){U.push(N)}var R=jn(U);var z=R.encode();var H=Dn(z);var P=R.fields;var M=false;for(var k=0;k<P.length;k+=1){if(P[k].name==="head table"){P[k].value.checkSumAdjustment=2981146554-H;M=true;break}}if(!M){throw new Error("Could not find head table with checkSum to adjust.")}return R}var Yn={make:jn,fontToTable:Xn,computeCheckSum:Dn};function Wn(e,t){var n=0;var r=e.length-1;while(n<=r){var i=n+r>>>1;var a=e[i].tag;if(a===t){return i}else if(a<t){n=i+1}else{r=i-1}}return-n-1}function qn(e,t){var n=0;var r=e.length-1;while(n<=r){var i=n+r>>>1;var a=e[i];if(a===t){return i}else if(a<t){n=i+1}else{r=i-1}}return-n-1}function Zn(e,t){var n;var r=0;var i=e.length-1;while(r<=i){var a=r+i>>>1;n=e[a];var s=n.start;if(s===t){return n}else if(s<t){r=a+1}else{i=a-1}}if(r>0){n=e[r-1];if(t>n.end){return 0}return n}}function Kn(e,t){this.font=e;this.tableName=t}Kn.prototype={searchTag:Wn,binSearch:qn,getTable:function(e){var t=this.font.tables[this.tableName];if(!t&&e){t=this.font.tables[this.tableName]=this.createDefaultTable()}return t},getScriptNames:function(){var e=this.getTable();if(!e){return[]}return e.scripts.map(function(e){return e.tag})},getDefaultScriptName:function(){var e=this.getTable();if(!e){return}var t=false;for(var n=0;n<e.scripts.length;n++){var r=e.scripts[n].tag;if(r==="DFLT"){return r}if(r==="latn"){t=true}}if(t){return"latn"}},getScriptTable:function(e,t){var n=this.getTable(t);if(n){e=e||"DFLT";var r=n.scripts;var i=Wn(n.scripts,e);if(i>=0){return r[i].script}else if(t){var a={tag:e,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};r.splice(-1-i,0,a);return a.script}}},getLangSysTable:function(e,t,n){var r=this.getScriptTable(e,n);if(r){if(!t||t==="dflt"||t==="DFLT"){return r.defaultLangSys}var i=Wn(r.langSysRecords,t);if(i>=0){return r.langSysRecords[i].langSys}else if(n){var a={tag:t,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};r.langSysRecords.splice(-1-i,0,a);return a.langSys}}},getFeatureTable:function(e,t,n,r){var i=this.getLangSysTable(e,t,r);if(i){var a;var s=i.featureIndexes;var o=this.font.tables[this.tableName].features;for(var l=0;l<s.length;l++){a=o[s[l]];if(a.tag===n){return a.feature}}if(r){var u=o.length;_.assert(u===0||n>=o[u-1].tag,"Features must be added in alphabetical order.");a={tag:n,feature:{params:0,lookupListIndexes:[]}};o.push(a);s.push(u);return a.feature}}},getLookupTables:function(e,t,n,r,i){var a=this.getFeatureTable(e,t,n,i);var s=[];if(a){var o;var l=a.lookupListIndexes;var u=this.font.tables[this.tableName].lookups;for(var c=0;c<l.length;c++){o=u[l[c]];if(o.lookupType===r){s.push(o)}}if(s.length===0&&i){o={lookupType:r,lookupFlag:0,subtables:[],markFilteringSet:undefined};var p=u.length;u.push(o);l.push(p);return[o]}}return s},getGlyphClass:function(e,t){switch(e.format){case 1:if(e.startGlyph<=t&&t<e.startGlyph+e.classes.length){return e.classes[t-e.startGlyph]}return 0;case 2:var n=Zn(e.ranges,t);return n?n.classId:0}},getCoverageIndex:function(e,t){switch(e.format){case 1:var n=qn(e.glyphs,t);return n>=0?n:-1;case 2:var r=Zn(e.ranges,t);return r?r.index+t-r.start:-1}},expandCoverage:function(e){if(e.format===1){return e.glyphs}else{var t=[];var n=e.ranges;for(var r=0;r<n.length;r++){var i=n[r];var a=i.start;var s=i.end;for(var o=a;o<=s;o++){t.push(o)}}return t}}};function Qn(e){Kn.call(this,e,"gpos")}Qn.prototype=Kn.prototype;Qn.prototype.init=function(){var e=this.getDefaultScriptName();this.defaultKerningTables=this.getKerningTables(e)};Qn.prototype.getKerningValue=function(e,t,n){for(var r=0;r<e.length;r++){var i=e[r].subtables;for(var a=0;a<i.length;a++){var s=i[a];var o=this.getCoverageIndex(s.coverage,t);if(o<0){continue}switch(s.posFormat){case 1:var l=s.pairSets[o];for(var u=0;u<l.length;u++){var c=l[u];if(c.secondGlyph===n){return c.value1&&c.value1.xAdvance||0}}break;case 2:var p=this.getGlyphClass(s.classDef1,t);var h=this.getGlyphClass(s.classDef2,n);var f=s.classRecords[p][h];return f.value1&&f.value1.xAdvance||0}}}return 0};Qn.prototype.getKerningTables=function(e,t){if(this.font.tables.gpos){return this.getLookupTables(e,t,"kern",2)}};function t(e){Kn.call(this,e,"gsub")}function Jn(e,t){var n=e.length;if(n!==t.length){return false}for(var r=0;r<n;r++){if(e[r]!==t[r]){return false}}return true}function $n(e,t,n){var r=e.subtables;for(var i=0;i<r.length;i++){var a=r[i];if(a.substFormat===t){return a}}if(n){r.push(n);return n}return undefined}t.prototype=Kn.prototype;t.prototype.createDefaultTable=function(){return{version:1,scripts:[{tag:"DFLT",script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}}],features:[],lookups:[]}};t.prototype.getSingle=function(e,t,n){var r=[];var i=this.getLookupTables(t,n,e,1);for(var a=0;a<i.length;a++){var s=i[a].subtables;for(var o=0;o<s.length;o++){var l=s[o];var u=this.expandCoverage(l.coverage);var c=void 0;if(l.substFormat===1){var p=l.deltaGlyphId;for(c=0;c<u.length;c++){var h=u[c];r.push({sub:h,by:h+p})}}else{var f=l.substitute;for(c=0;c<u.length;c++){r.push({sub:u[c],by:f[c]})}}}}return r};t.prototype.getMultiple=function(e,t,n){var r=[];var i=this.getLookupTables(t,n,e,2);for(var a=0;a<i.length;a++){var s=i[a].subtables;for(var o=0;o<s.length;o++){var l=s[o];var u=this.expandCoverage(l.coverage);var c=void 0;for(c=0;c<u.length;c++){var p=u[c];var h=l.sequences[c];r.push({sub:p,by:h})}}}return r};t.prototype.getAlternates=function(e,t,n){var r=[];var i=this.getLookupTables(t,n,e,3);for(var a=0;a<i.length;a++){var s=i[a].subtables;for(var o=0;o<s.length;o++){var l=s[o];var u=this.expandCoverage(l.coverage);var c=l.alternateSets;for(var p=0;p<u.length;p++){r.push({sub:u[p],by:c[p]})}}}return r};t.prototype.getLigatures=function(e,t,n){var r=[];var i=this.getLookupTables(t,n,e,4);for(var a=0;a<i.length;a++){var s=i[a].subtables;for(var o=0;o<s.length;o++){var l=s[o];var u=this.expandCoverage(l.coverage);var c=l.ligatureSets;for(var p=0;p<u.length;p++){var h=u[p];var f=c[p];for(var d=0;d<f.length;d++){var g=f[d];r.push({sub:[h].concat(g.components),by:g.ligGlyph})}}}}return r};t.prototype.addSingle=function(e,t,n,r){var i=this.getLookupTables(n,r,e,1,true)[0];var a=$n(i,2,{substFormat:2,coverage:{format:1,glyphs:[]},substitute:[]});_.assert(a.coverage.format===1,"Single: unable to modify coverage table format "+a.coverage.format);var s=t.sub;var o=this.binSearch(a.coverage.glyphs,s);if(o<0){o=-1-o;a.coverage.glyphs.splice(o,0,s);a.substitute.splice(o,0,0)}a.substitute[o]=t.by};t.prototype.addMultiple=function(e,t,n,r){_.assert(t.by instanceof Array&&t.by.length>1,'Multiple: "by" must be an array of two or more ids');var i=this.getLookupTables(n,r,e,2,true)[0];var a=$n(i,1,{substFormat:1,coverage:{format:1,glyphs:[]},sequences:[]});_.assert(a.coverage.format===1,"Multiple: unable to modify coverage table format "+a.coverage.format);var s=t.sub;var o=this.binSearch(a.coverage.glyphs,s);if(o<0){o=-1-o;a.coverage.glyphs.splice(o,0,s);a.sequences.splice(o,0,0)}a.sequences[o]=t.by};t.prototype.addAlternate=function(e,t,n,r){var i=this.getLookupTables(n,r,e,3,true)[0];var a=$n(i,1,{substFormat:1,coverage:{format:1,glyphs:[]},alternateSets:[]});_.assert(a.coverage.format===1,"Alternate: unable to modify coverage table format "+a.coverage.format);var s=t.sub;var o=this.binSearch(a.coverage.glyphs,s);if(o<0){o=-1-o;a.coverage.glyphs.splice(o,0,s);a.alternateSets.splice(o,0,0)}a.alternateSets[o]=t.by};t.prototype.addLigature=function(e,t,n,r){var i=this.getLookupTables(n,r,e,4,true)[0];var a=i.subtables[0];if(!a){a={substFormat:1,coverage:{format:1,glyphs:[]},ligatureSets:[]};i.subtables[0]=a}_.assert(a.coverage.format===1,"Ligature: unable to modify coverage table format "+a.coverage.format);var s=t.sub[0];var o=t.sub.slice(1);var l={ligGlyph:t.by,components:o};var u=this.binSearch(a.coverage.glyphs,s);if(u>=0){var c=a.ligatureSets[u];for(var p=0;p<c.length;p++){if(Jn(c[p].components,o)){return}}c.push(l)}else{u=-1-u;a.coverage.glyphs.splice(u,0,s);a.ligatureSets.splice(u,0,[l])}};t.prototype.getFeature=function(e,t,n){if(/ss\d\d/.test(e)){return this.getSingle(e,t,n)}switch(e){case"aalt":case"salt":return this.getSingle(e,t,n).concat(this.getAlternates(e,t,n));case"dlig":case"liga":case"rlig":return this.getLigatures(e,t,n);case"ccmp":return this.getMultiple(e,t,n).concat(this.getLigatures(e,t,n));case"stch":return this.getMultiple(e,t,n)}return undefined};t.prototype.add=function(e,t,n,r){if(/ss\d\d/.test(e)){return this.addSingle(e,t,n,r)}switch(e){case"aalt":case"salt":if(typeof t.by==="number"){return this.addSingle(e,t,n,r)}return this.addAlternate(e,t,n,r);case"dlig":case"liga":case"rlig":return this.addLigature(e,t,n,r);case"ccmp":if(t.by instanceof Array){return this.addMultiple(e,t,n,r)}return this.addLigature(e,t,n,r)}return undefined};function er(){return typeof window!=="undefined"}function tr(e){var t=new ArrayBuffer(e.length);var n=new Uint8Array(t);for(var r=0;r<e.length;++r){n[r]=e[r]}return t}function nr(e){var t=new Buffer(e.byteLength);var n=new Uint8Array(e);for(var r=0;r<t.length;++r){t[r]=n[r]}return t}function rr(e,t){if(!e){throw t}}function ir(e,t,n,r,i){var a;if((t&r)>0){a=e.parseByte();if((t&i)===0){a=-a}a=n+a}else{if((t&i)>0){a=n}else{a=n+e.parseShort()}}return a}function ar(e,t,n){var r=new G.Parser(t,n);e.numberOfContours=r.parseShort();e._xMin=r.parseShort();e._yMin=r.parseShort();e._xMax=r.parseShort();e._yMax=r.parseShort();var i;var a;if(e.numberOfContours>0){var s=e.endPointIndices=[];for(var o=0;o<e.numberOfContours;o+=1){s.push(r.parseUShort())}e.instructionLength=r.parseUShort();e.instructions=[];for(var l=0;l<e.instructionLength;l+=1){e.instructions.push(r.parseByte())}var u=s[s.length-1]+1;i=[];for(var c=0;c<u;c+=1){a=r.parseByte();i.push(a);if((a&8)>0){var p=r.parseByte();for(var h=0;h<p;h+=1){i.push(a);c+=1}}}_.argument(i.length===u,"Bad flags.");if(s.length>0){var f=[];var d;if(u>0){for(var g=0;g<u;g+=1){a=i[g];d={};d.onCurve=!!(a&1);d.lastPointOfContour=s.indexOf(g)>=0;f.push(d)}var m=0;for(var v=0;v<u;v+=1){a=i[v];d=f[v];d.x=ir(r,a,m,2,16);m=d.x}var b=0;for(var y=0;y<u;y+=1){a=i[y];d=f[y];d.y=ir(r,a,b,4,32);b=d.y}}e.points=f}else{e.points=[]}}else if(e.numberOfContours===0){e.points=[]}else{e.isComposite=true;e.points=[];e.components=[];var x=true;while(x){i=r.parseUShort();var S={glyphIndex:r.parseUShort(),xScale:1,scale01:0,scale10:0,yScale:1,dx:0,dy:0};if((i&1)>0){if((i&2)>0){S.dx=r.parseShort();S.dy=r.parseShort()}else{S.matchedPoints=[r.parseUShort(),r.parseUShort()]}}else{if((i&2)>0){S.dx=r.parseChar();S.dy=r.parseChar()}else{S.matchedPoints=[r.parseByte(),r.parseByte()]}}if((i&8)>0){S.xScale=S.yScale=r.parseF2Dot14()}else if((i&64)>0){S.xScale=r.parseF2Dot14();S.yScale=r.parseF2Dot14()}else if((i&128)>0){S.xScale=r.parseF2Dot14();S.scale01=r.parseF2Dot14();S.scale10=r.parseF2Dot14();S.yScale=r.parseF2Dot14()}e.components.push(S);x=!!(i&32)}if(i&256){e.instructionLength=r.parseUShort();e.instructions=[];for(var O=0;O<e.instructionLength;O+=1){e.instructions.push(r.parseByte())}}}}function sr(e,t){var n=[];for(var r=0;r<e.length;r+=1){var i=e[r];var a={x:t.xScale*i.x+t.scale01*i.y+t.dx,y:t.scale10*i.x+t.yScale*i.y+t.dy,onCurve:i.onCurve,lastPointOfContour:i.lastPointOfContour};n.push(a)}return n}function or(e){var t=[];var n=[];for(var r=0;r<e.length;r+=1){var i=e[r];n.push(i);if(i.lastPointOfContour){t.push(n);n=[]}}_.argument(n.length===0,"There are still points left in the current contour.");return t}function lr(e){var t=new d;if(!e){return t}var n=or(e);for(var r=0;r<n.length;++r){var i=n[r];var a=null;var s=i[i.length-1];var o=i[0];if(s.onCurve){t.moveTo(s.x,s.y)}else{if(o.onCurve){t.moveTo(o.x,o.y)}else{var l={x:(s.x+o.x)*.5,y:(s.y+o.y)*.5};t.moveTo(l.x,l.y)}}for(var u=0;u<i.length;++u){a=s;s=o;o=i[(u+1)%i.length];if(s.onCurve){t.lineTo(s.x,s.y)}else{var c=a;var p=o;if(!a.onCurve){c={x:(s.x+a.x)*.5,y:(s.y+a.y)*.5}}if(!o.onCurve){p={x:(s.x+o.x)*.5,y:(s.y+o.y)*.5}}t.quadraticCurveTo(s.x,s.y,p.x,p.y)}}t.closePath()}return t}function ur(e,t){if(t.isComposite){for(var n=0;n<t.components.length;n+=1){var r=t.components[n];var i=e.get(r.glyphIndex);i.getPath();if(i.points){var a=void 0;if(r.matchedPoints===undefined){a=sr(i.points,r)}else{if(r.matchedPoints[0]>t.points.length-1||r.matchedPoints[1]>i.points.length-1){throw Error("Matched points out of range in "+t.name)}var s=t.points[r.matchedPoints[0]];var o=i.points[r.matchedPoints[1]];var l={xScale:r.xScale,scale01:r.scale01,scale10:r.scale10,yScale:r.yScale,dx:0,dy:0};o=sr([o],l)[0];l.dx=s.x-o.x;l.dy=s.y-o.y;a=sr(i.points,l)}t.points=t.points.concat(a)}}}return lr(t.points)}function cr(e,t,n,r){var i=new A.GlyphSet(r);for(var a=0;a<n.length-1;a+=1){var s=n[a];var o=n[a+1];if(s!==o){i.push(a,A.ttfGlyphLoader(r,a,ar,e,t+s,ur))}else{i.push(a,A.glyphLoader(r,a))}}return i}function pr(r,i,a,s){var o=new A.GlyphSet(s);s._push=function(e){var t=a[e];var n=a[e+1];if(t!==n){o.push(e,A.ttfGlyphLoader(s,e,ar,r,i+t,ur))}else{o.push(e,A.glyphLoader(s,e))}};return o}function hr(e,t,n,r,i){if(i.lowMemory){return pr(e,t,n,r)}else{return cr(e,t,n,r)}}var fr={getPath:lr,parse:hr};var dr;var gr;var mr;var vr;function br(e){this.font=e;this.getCommands=function(e){return fr.getPath(e).commands};this._fpgmState=this._prepState=undefined;this._errorState=0}function yr(e){return e}function xr(e){return Math.sign(e)*Math.round(Math.abs(e))}function Sr(e){return Math.sign(e)*Math.round(Math.abs(e*2))/2}function Or(e){return Math.sign(e)*(Math.round(Math.abs(e)+.5)-.5)}function _r(e){return Math.sign(e)*Math.ceil(Math.abs(e))}function Ar(e){return Math.sign(e)*Math.floor(Math.abs(e))}var Cr=function(e){var t=this.srPeriod;var n=this.srPhase;var r=this.srThreshold;var i=1;if(e<0){e=-e;i=-1}e+=r-n;e=Math.trunc(e/t)*t;e+=n;if(e<0){return n*i}return e*i};var m={x:1,y:0,axis:"x",distance:function(e,t,n,r){return(n?e.xo:e.x)-(r?t.xo:t.x)},interpolate:function(e,t,n,r){var i;var a;var s;var o;var l;var u;var c;if(!r||r===this){i=e.xo-t.xo;a=e.xo-n.xo;l=t.x-t.xo;u=n.x-n.xo;s=Math.abs(i);o=Math.abs(a);c=s+o;if(c===0){e.x=e.xo+(l+u)/2;return}e.x=e.xo+(l*o+u*s)/c;return}i=r.distance(e,t,true,true);a=r.distance(e,n,true,true);l=r.distance(t,t,false,true);u=r.distance(n,n,false,true);s=Math.abs(i);o=Math.abs(a);c=s+o;if(c===0){m.setRelative(e,e,(l+u)/2,r,true);return}m.setRelative(e,e,(l*o+u*s)/c,r,true)},normalSlope:Number.NEGATIVE_INFINITY,setRelative:function(e,t,n,r,i){if(!r||r===this){e.x=(i?t.xo:t.x)+n;return}var a=i?t.xo:t.x;var s=i?t.yo:t.y;var o=a+n*r.x;var l=s+n*r.y;e.x=o+(e.y-l)/r.normalSlope},slope:0,touch:function(e){e.xTouched=true},touched:function(e){return e.xTouched},untouch:function(e){e.xTouched=false}};var v={x:0,y:1,axis:"y",distance:function(e,t,n,r){return(n?e.yo:e.y)-(r?t.yo:t.y)},interpolate:function(e,t,n,r){var i;var a;var s;var o;var l;var u;var c;if(!r||r===this){i=e.yo-t.yo;a=e.yo-n.yo;l=t.y-t.yo;u=n.y-n.yo;s=Math.abs(i);o=Math.abs(a);c=s+o;if(c===0){e.y=e.yo+(l+u)/2;return}e.y=e.yo+(l*o+u*s)/c;return}i=r.distance(e,t,true,true);a=r.distance(e,n,true,true);l=r.distance(t,t,false,true);u=r.distance(n,n,false,true);s=Math.abs(i);o=Math.abs(a);c=s+o;if(c===0){v.setRelative(e,e,(l+u)/2,r,true);return}v.setRelative(e,e,(l*o+u*s)/c,r,true)},normalSlope:0,setRelative:function(e,t,n,r,i){if(!r||r===this){e.y=(i?t.yo:t.y)+n;return}var a=i?t.xo:t.x;var s=i?t.yo:t.y;var o=a+n*r.x;var l=s+n*r.y;e.y=l+r.normalSlope*(e.x-o)},slope:Number.POSITIVE_INFINITY,touch:function(e){e.yTouched=true},touched:function(e){return e.yTouched},untouch:function(e){e.yTouched=false}};Object.freeze(m);Object.freeze(v);function Tr(e,t){this.x=e;this.y=t;this.axis=undefined;this.slope=t/e;this.normalSlope=-e/t;Object.freeze(this)}Tr.prototype.distance=function(e,t,n,r){return this.x*m.distance(e,t,n,r)+this.y*v.distance(e,t,n,r)};Tr.prototype.interpolate=function(e,t,n,r){var i;var a;var s;var o;var l;var u;var c;s=r.distance(e,t,true,true);o=r.distance(e,n,true,true);i=r.distance(t,t,false,true);a=r.distance(n,n,false,true);l=Math.abs(s);u=Math.abs(o);c=l+u;if(c===0){this.setRelative(e,e,(i+a)/2,r,true);return}this.setRelative(e,e,(i*u+a*l)/c,r,true)};Tr.prototype.setRelative=function(e,t,n,r,i){r=r||this;var a=i?t.xo:t.x;var s=i?t.yo:t.y;var o=a+n*r.x;var l=s+n*r.y;var u=r.normalSlope;var c=this.slope;var p=e.x;var h=e.y;e.x=(c*p-u*o+l-h)/(c-u);e.y=c*(e.x-p)+h};Tr.prototype.touch=function(e){e.xTouched=true;e.yTouched=true};function Ir(e,t){var n=Math.sqrt(e*e+t*t);e/=n;t/=n;if(e===1&&t===0){return m}else if(e===0&&t===1){return v}else{return new Tr(e,t)}}function x(e,t,n,r){this.x=this.xo=Math.round(e*64)/64;this.y=this.yo=Math.round(t*64)/64;this.lastPointOfContour=n;this.onCurve=r;this.prevPointOnContour=undefined;this.nextPointOnContour=undefined;this.xTouched=false;this.yTouched=false;Object.preventExtensions(this)}x.prototype.nextTouched=function(e){var t=this.nextPointOnContour;while(!e.touched(t)&&t!==this){t=t.nextPointOnContour}return t};x.prototype.prevTouched=function(e){var t=this.prevPointOnContour;while(!e.touched(t)&&t!==this){t=t.prevPointOnContour}return t};var Er=Object.freeze(new x(0,0));var Lr={cvCutIn:17/16,deltaBase:9,deltaShift:.125,loop:1,minDis:1,autoFlip:true};function S(e,t){this.env=e;this.stack=[];this.prog=t;switch(e){case"glyf":this.zp0=this.zp1=this.zp2=1;this.rp0=this.rp1=this.rp2=0;case"prep":this.fv=this.pv=this.dpv=m;this.round=xr}}br.prototype.exec=function(e,t){if(typeof t!=="number"){throw new Error("Point size is not a number!")}if(this._errorState>2){return}var n=this.font;var r=this._prepState;if(!r||r.ppem!==t){var i=this._fpgmState;if(!i){S.prototype=Lr;i=this._fpgmState=new S("fpgm",n.tables.fpgm);i.funcs=[];i.font=n;if(C.DEBUG){console.log("---EXEC FPGM---");i.step=-1}try{gr(i)}catch(e){console.log("Hinting error in FPGM:"+e);this._errorState=3;return}}S.prototype=i;r=this._prepState=new S("prep",n.tables.prep);r.ppem=t;var a=n.tables.cvt;if(a){var s=r.cvt=new Array(a.length);var o=t/n.unitsPerEm;for(var l=0;l<a.length;l++){s[l]=a[l]*o}}else{r.cvt=[]}if(C.DEBUG){console.log("---EXEC PREP---");r.step=-1}try{gr(r)}catch(e){if(this._errorState<2){console.log("Hinting error in PREP:"+e)}this._errorState=2}}if(this._errorState>1){return}try{return mr(e,r)}catch(e){if(this._errorState<1){console.log("Hinting error:"+e);console.log("Note: further hinting errors are silenced")}this._errorState=1;return undefined}};mr=function(e,t){var n=t.ppem/t.font.unitsPerEm;var r=n;var i=e.components;var a;var s;var o;S.prototype=t;if(!i){o=new S("glyf",e.instructions);if(C.DEBUG){console.log("---EXEC GLYPH---");o.step=-1}vr(e,o,n,r);s=o.gZone}else{var l=t.font;s=[];a=[];for(var u=0;u<i.length;u++){var c=i[u];var p=l.glyphs.get(c.glyphIndex);o=new S("glyf",p.instructions);if(C.DEBUG){console.log("---EXEC COMP "+u+"---");o.step=-1}vr(p,o,n,r);var h=Math.round(c.dx*n);var f=Math.round(c.dy*r);var d=o.gZone;var g=o.contours;for(var m=0;m<d.length;m++){var v=d[m];v.xTouched=v.yTouched=false;v.xo=v.x=v.x+h;v.yo=v.y=v.y+f}var b=s.length;s.push.apply(s,d);for(var y=0;y<g.length;y++){a.push(g[y]+b)}}if(e.instructions&&!o.inhibitGridFit){o=new S("glyf",e.instructions);o.gZone=o.z0=o.z1=o.z2=s;o.contours=a;s.push(new x(0,0),new x(Math.round(e.advanceWidth*n),0));if(C.DEBUG){console.log("---EXEC COMPOSITE---");o.step=-1}gr(o);s.length-=2}}return s};vr=function(e,t,n,r){var i=e.points||[];var a=i.length;var s=t.gZone=t.z0=t.z1=t.z2=[];var o=t.contours=[];var l;for(var u=0;u<a;u++){l=i[u];s[u]=new x(l.x*n,l.y*r,l.lastPointOfContour,l.onCurve)}var c;var p;for(var h=0;h<a;h++){l=s[h];if(!c){c=l;o.push(h)}if(l.lastPointOfContour){l.nextPointOnContour=c;c.prevPointOnContour=l;c=undefined}else{p=s[h+1];l.nextPointOnContour=p;p.prevPointOnContour=l}}if(t.inhibitGridFit){return}if(C.DEBUG){console.log("PROCESSING GLYPH",t.stack);for(var f=0;f<a;f++){console.log(f,s[f].x,s[f].y)}}s.push(new x(0,0),new x(Math.round(e.advanceWidth*n),0));gr(t);s.length-=2;if(C.DEBUG){console.log("FINISHED GLYPH",t.stack);for(var d=0;d<a;d++){console.log(d,s[d].x,s[d].y)}}};gr=function(e){var t=e.prog;if(!t){return}var n=t.length;var r;for(e.ip=0;e.ip<n;e.ip++){if(C.DEBUG){e.step++}r=dr[t[e.ip]];if(!r){throw new Error("unknown instruction: 0x"+Number(t[e.ip]).toString(16))}r(e)}};function Nr(e){var t=e.tZone=new Array(e.gZone.length);for(var n=0;n<t.length;n++){t[n]=new x(0,0)}}function Ur(e,t){var n=e.prog;var r=e.ip;var i=1;var a;do{a=n[++r];if(a===88){i++}else if(a===89){i--}else if(a===64){r+=n[r+1]+1}else if(a===65){r+=2*n[r+1]+1}else if(a>=176&&a<=183){r+=a-176+1}else if(a>=184&&a<=191){r+=(a-184+1)*2}else if(t&&i===1&&a===27){break}}while(i>0);e.ip=r}function Rr(e,t){if(C.DEBUG){console.log(t.step,"SVTCA["+e.axis+"]")}t.fv=t.pv=t.dpv=e}function Pr(e,t){if(C.DEBUG){console.log(t.step,"SPVTCA["+e.axis+"]")}t.pv=t.dpv=e}function Mr(e,t){if(C.DEBUG){console.log(t.step,"SFVTCA["+e.axis+"]")}t.fv=e}function kr(e,t){var n=t.stack;var r=n.pop();var i=n.pop();var a=t.z2[r];var s=t.z1[i];if(C.DEBUG){console.log("SPVTL["+e+"]",r,i)}var o;var l;if(!e){o=s.x-a.x;l=s.y-a.y}else{o=a.y-s.y;l=s.x-a.x}t.pv=t.dpv=Ir(o,l)}function wr(e,t){var n=t.stack;var r=n.pop();var i=n.pop();var a=t.z2[r];var s=t.z1[i];if(C.DEBUG){console.log("SFVTL["+e+"]",r,i)}var o;var l;if(!e){o=s.x-a.x;l=s.y-a.y}else{o=a.y-s.y;l=s.x-a.x}t.fv=Ir(o,l)}function Br(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"SPVFS[]",n,r)}e.pv=e.dpv=Ir(r,n)}function Gr(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"SPVFS[]",n,r)}e.fv=Ir(r,n)}function Vr(e){var t=e.stack;var n=e.pv;if(C.DEBUG){console.log(e.step,"GPV[]")}t.push(n.x*16384);t.push(n.y*16384)}function Dr(e){var t=e.stack;var n=e.fv;if(C.DEBUG){console.log(e.step,"GFV[]")}t.push(n.x*16384);t.push(n.y*16384)}function Fr(e){e.fv=e.pv;if(C.DEBUG){console.log(e.step,"SFVTPV[]")}}function jr(e){var t=e.stack;var n=t.pop();var r=t.pop();var i=t.pop();var a=t.pop();var s=t.pop();var o=e.z0;var l=e.z1;var u=o[n];var c=o[r];var p=l[i];var h=l[a];var f=e.z2[s];if(C.DEBUG){console.log("ISECT[], ",n,r,i,a,s)}var d=u.x;var g=u.y;var m=c.x;var v=c.y;var b=p.x;var y=p.y;var x=h.x;var S=h.y;var O=(d-m)*(y-S)-(g-v)*(b-x);var _=d*v-g*m;var A=b*S-y*x;f.x=(_*(b-x)-A*(d-m))/O;f.y=(_*(y-S)-A*(g-v))/O}function zr(e){e.rp0=e.stack.pop();if(C.DEBUG){console.log(e.step,"SRP0[]",e.rp0)}}function Hr(e){e.rp1=e.stack.pop();if(C.DEBUG){console.log(e.step,"SRP1[]",e.rp1)}}function Xr(e){e.rp2=e.stack.pop();if(C.DEBUG){console.log(e.step,"SRP2[]",e.rp2)}}function Yr(e){var t=e.stack.pop();if(C.DEBUG){console.log(e.step,"SZP0[]",t)}e.zp0=t;switch(t){case 0:if(!e.tZone){Nr(e)}e.z0=e.tZone;break;case 1:e.z0=e.gZone;break;default:throw new Error("Invalid zone pointer")}}function Wr(e){var t=e.stack.pop();if(C.DEBUG){console.log(e.step,"SZP1[]",t)}e.zp1=t;switch(t){case 0:if(!e.tZone){Nr(e)}e.z1=e.tZone;break;case 1:e.z1=e.gZone;break;default:throw new Error("Invalid zone pointer")}}function qr(e){var t=e.stack.pop();if(C.DEBUG){console.log(e.step,"SZP2[]",t)}e.zp2=t;switch(t){case 0:if(!e.tZone){Nr(e)}e.z2=e.tZone;break;case 1:e.z2=e.gZone;break;default:throw new Error("Invalid zone pointer")}}function Zr(e){var t=e.stack.pop();if(C.DEBUG){console.log(e.step,"SZPS[]",t)}e.zp0=e.zp1=e.zp2=t;switch(t){case 0:if(!e.tZone){Nr(e)}e.z0=e.z1=e.z2=e.tZone;break;case 1:e.z0=e.z1=e.z2=e.gZone;break;default:throw new Error("Invalid zone pointer")}}function Kr(e){e.loop=e.stack.pop();if(C.DEBUG){console.log(e.step,"SLOOP[]",e.loop)}}function Qr(e){if(C.DEBUG){console.log(e.step,"RTG[]")}e.round=xr}function Jr(e){if(C.DEBUG){console.log(e.step,"RTHG[]")}e.round=Or}function $r(e){var t=e.stack.pop();if(C.DEBUG){console.log(e.step,"SMD[]",t)}e.minDis=t/64}function ei(e){if(C.DEBUG){console.log(e.step,"ELSE[]")}Ur(e,false)}function ti(e){var t=e.stack.pop();if(C.DEBUG){console.log(e.step,"JMPR[]",t)}e.ip+=t-1}function ni(e){var t=e.stack.pop();if(C.DEBUG){console.log(e.step,"SCVTCI[]",t)}e.cvCutIn=t/64}function ri(e){var t=e.stack;if(C.DEBUG){console.log(e.step,"DUP[]")}t.push(t[t.length-1])}function ii(e){if(C.DEBUG){console.log(e.step,"POP[]")}e.stack.pop()}function ai(e){if(C.DEBUG){console.log(e.step,"CLEAR[]")}e.stack.length=0}function si(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"SWAP[]")}t.push(n);t.push(r)}function oi(e){var t=e.stack;if(C.DEBUG){console.log(e.step,"DEPTH[]")}t.push(t.length)}function li(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"LOOPCALL[]",n,r)}var i=e.ip;var a=e.prog;e.prog=e.funcs[n];for(var s=0;s<r;s++){gr(e);if(C.DEBUG){console.log(++e.step,s+1<r?"next loopcall":"done loopcall",s)}}e.ip=i;e.prog=a}function ui(e){var t=e.stack.pop();if(C.DEBUG){console.log(e.step,"CALL[]",t)}var n=e.ip;var r=e.prog;e.prog=e.funcs[t];gr(e);e.ip=n;e.prog=r;if(C.DEBUG){console.log(++e.step,"returning from",t)}}function ci(e){var t=e.stack;var n=t.pop();if(C.DEBUG){console.log(e.step,"CINDEX[]",n)}t.push(t[t.length-n])}function pi(e){var t=e.stack;var n=t.pop();if(C.DEBUG){console.log(e.step,"MINDEX[]",n)}t.push(t.splice(t.length-n,1)[0])}function hi(e){if(e.env!=="fpgm"){throw new Error("FDEF not allowed here")}var t=e.stack;var n=e.prog;var r=e.ip;var i=t.pop();var a=r;if(C.DEBUG){console.log(e.step,"FDEF[]",i)}while(n[++r]!==45){}e.ip=r;e.funcs[i]=n.slice(a+1,r)}function fi(e,t){var n=t.stack.pop();var r=t.z0[n];var i=t.fv;var a=t.pv;if(C.DEBUG){console.log(t.step,"MDAP["+e+"]",n)}var s=a.distance(r,Er);if(e){s=t.round(s)}i.setRelative(r,Er,s,a);i.touch(r);t.rp0=t.rp1=n}function di(e,t){var n=t.z2;var r=n.length-2;var i;var a;var s;if(C.DEBUG){console.log(t.step,"IUP["+e.axis+"]")}for(var o=0;o<r;o++){i=n[o];if(e.touched(i)){continue}a=i.prevTouched(e);if(a===i){continue}s=i.nextTouched(e);if(a===s){e.setRelative(i,i,e.distance(a,a,false,true),e,true)}e.interpolate(i,a,s,e)}}function gi(e,t){var n=t.stack;var r=e?t.rp1:t.rp2;var i=(e?t.z0:t.z1)[r];var a=t.fv;var s=t.pv;var o=t.loop;var l=t.z2;while(o--){var u=n.pop();var c=l[u];var p=s.distance(i,i,false,true);a.setRelative(c,c,p,s);a.touch(c);if(C.DEBUG){console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"SHP["+(e?"rp1":"rp2")+"]",u)}}t.loop=1}function mi(e,t){var n=t.stack;var r=e?t.rp1:t.rp2;var i=(e?t.z0:t.z1)[r];var a=t.fv;var s=t.pv;var o=n.pop();var l=t.z2[t.contours[o]];var u=l;if(C.DEBUG){console.log(t.step,"SHC["+e+"]",o)}var c=s.distance(i,i,false,true);do{if(u!==i){a.setRelative(u,u,c,s)}u=u.nextPointOnContour}while(u!==l)}function vi(e,t){var n=t.stack;var r=e?t.rp1:t.rp2;var i=(e?t.z0:t.z1)[r];var a=t.fv;var s=t.pv;var o=n.pop();if(C.DEBUG){console.log(t.step,"SHZ["+e+"]",o)}var l;switch(o){case 0:l=t.tZone;break;case 1:l=t.gZone;break;default:throw new Error("Invalid zone")}var u;var c=s.distance(i,i,false,true);var p=l.length-2;for(var h=0;h<p;h++){u=l[h];a.setRelative(u,u,c,s)}}function bi(e){var t=e.stack;var n=e.loop;var r=e.fv;var i=t.pop()/64;var a=e.z2;while(n--){var s=t.pop();var o=a[s];if(C.DEBUG){console.log(e.step,(e.loop>1?"loop "+(e.loop-n)+": ":"")+"SHPIX[]",s,i)}r.setRelative(o,o,i);r.touch(o)}e.loop=1}function yi(e){var t=e.stack;var n=e.rp1;var r=e.rp2;var i=e.loop;var a=e.z0[n];var s=e.z1[r];var o=e.fv;var l=e.dpv;var u=e.z2;while(i--){var c=t.pop();var p=u[c];if(C.DEBUG){console.log(e.step,(e.loop>1?"loop "+(e.loop-i)+": ":"")+"IP[]",c,n,"<->",r)}o.interpolate(p,a,s,l);o.touch(p)}e.loop=1}function xi(e,t){var n=t.stack;var r=n.pop()/64;var i=n.pop();var a=t.z1[i];var s=t.z0[t.rp0];var o=t.fv;var l=t.pv;o.setRelative(a,s,r,l);o.touch(a);if(C.DEBUG){console.log(t.step,"MSIRP["+e+"]",r,i)}t.rp1=t.rp0;t.rp2=i;if(e){t.rp0=i}}function Si(e){var t=e.stack;var n=e.rp0;var r=e.z0[n];var i=e.loop;var a=e.fv;var s=e.pv;var o=e.z1;while(i--){var l=t.pop();var u=o[l];if(C.DEBUG){console.log(e.step,(e.loop>1?"loop "+(e.loop-i)+": ":"")+"ALIGNRP[]",l)}a.setRelative(u,r,0,s);a.touch(u)}e.loop=1}function Oi(e){if(C.DEBUG){console.log(e.step,"RTDG[]")}e.round=Sr}function _i(e,t){var n=t.stack;var r=n.pop();var i=n.pop();var a=t.z0[i];var s=t.fv;var o=t.pv;var l=t.cvt[r];if(C.DEBUG){console.log(t.step,"MIAP["+e+"]",r,"(",l,")",i)}var u=o.distance(a,Er);if(e){if(Math.abs(u-l)<t.cvCutIn){u=l}u=t.round(u)}s.setRelative(a,Er,u,o);if(t.zp0===0){a.xo=a.x;a.yo=a.y}s.touch(a);t.rp0=t.rp1=i}function Ai(e){var t=e.prog;var n=e.ip;var r=e.stack;var i=t[++n];if(C.DEBUG){console.log(e.step,"NPUSHB[]",i)}for(var a=0;a<i;a++){r.push(t[++n])}e.ip=n}function Ci(e){var t=e.ip;var n=e.prog;var r=e.stack;var i=n[++t];if(C.DEBUG){console.log(e.step,"NPUSHW[]",i)}for(var a=0;a<i;a++){var s=n[++t]<<8|n[++t];if(s&32768){s=-((s^65535)+1)}r.push(s)}e.ip=t}function Ti(e){var t=e.stack;var n=e.store;if(!n){n=e.store=[]}var r=t.pop();var i=t.pop();if(C.DEBUG){console.log(e.step,"WS",r,i)}n[i]=r}function Ii(e){var t=e.stack;var n=e.store;var r=t.pop();if(C.DEBUG){console.log(e.step,"RS",r)}var i=n&&n[r]||0;t.push(i)}function Ei(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"WCVTP",n,r)}e.cvt[r]=n/64}function Li(e){var t=e.stack;var n=t.pop();if(C.DEBUG){console.log(e.step,"RCVT",n)}t.push(e.cvt[n]*64)}function Ni(e,t){var n=t.stack;var r=n.pop();var i=t.z2[r];if(C.DEBUG){console.log(t.step,"GC["+e+"]",r)}n.push(t.dpv.distance(i,Er,e,false)*64)}function Ui(e,t){var n=t.stack;var r=n.pop();var i=n.pop();var a=t.z1[r];var s=t.z0[i];var o=t.dpv.distance(s,a,e,e);if(C.DEBUG){console.log(t.step,"MD["+e+"]",r,i,"->",o)}t.stack.push(Math.round(o*64))}function Ri(e){if(C.DEBUG){console.log(e.step,"MPPEM[]")}e.stack.push(e.ppem)}function Pi(e){if(C.DEBUG){console.log(e.step,"FLIPON[]")}e.autoFlip=true}function Mi(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"LT[]",n,r)}t.push(r<n?1:0)}function ki(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"LTEQ[]",n,r)}t.push(r<=n?1:0)}function wi(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"GT[]",n,r)}t.push(r>n?1:0)}function Bi(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"GTEQ[]",n,r)}t.push(r>=n?1:0)}function Gi(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"EQ[]",n,r)}t.push(n===r?1:0)}function Vi(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"NEQ[]",n,r)}t.push(n!==r?1:0)}function Di(e){var t=e.stack;var n=t.pop();if(C.DEBUG){console.log(e.step,"ODD[]",n)}t.push(Math.trunc(n)%2?1:0)}function Fi(e){var t=e.stack;var n=t.pop();if(C.DEBUG){console.log(e.step,"EVEN[]",n)}t.push(Math.trunc(n)%2?0:1)}function ji(e){var t=e.stack.pop();if(C.DEBUG){console.log(e.step,"IF[]",t)}if(!t){Ur(e,true);if(C.DEBUG){console.log(e.step,"EIF[]")}}}function zi(e){if(C.DEBUG){console.log(e.step,"EIF[]")}}function Hi(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"AND[]",n,r)}t.push(n&&r?1:0)}function Xi(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"OR[]",n,r)}t.push(n||r?1:0)}function Yi(e){var t=e.stack;var n=t.pop();if(C.DEBUG){console.log(e.step,"NOT[]",n)}t.push(n?0:1)}function Wi(e,t){var n=t.stack;var r=n.pop();var i=t.fv;var a=t.pv;var s=t.ppem;var o=t.deltaBase+(e-1)*16;var l=t.deltaShift;var u=t.z0;if(C.DEBUG){console.log(t.step,"DELTAP["+e+"]",r,n)}for(var c=0;c<r;c++){var p=n.pop();var h=n.pop();var f=o+((h&240)>>4);if(f!==s){continue}var d=(h&15)-8;if(d>=0){d++}if(C.DEBUG){console.log(t.step,"DELTAPFIX",p,"by",d*l)}var g=u[p];i.setRelative(g,g,d*l,a)}}function qi(e){var t=e.stack;var n=t.pop();if(C.DEBUG){console.log(e.step,"SDB[]",n)}e.deltaBase=n}function Zi(e){var t=e.stack;var n=t.pop();if(C.DEBUG){console.log(e.step,"SDS[]",n)}e.deltaShift=Math.pow(.5,n)}function Ki(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"ADD[]",n,r)}t.push(r+n)}function Qi(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"SUB[]",n,r)}t.push(r-n)}function Ji(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"DIV[]",n,r)}t.push(r*64/n)}function $i(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"MUL[]",n,r)}t.push(r*n/64)}function ea(e){var t=e.stack;var n=t.pop();if(C.DEBUG){console.log(e.step,"ABS[]",n)}t.push(Math.abs(n))}function ta(e){var t=e.stack;var n=t.pop();if(C.DEBUG){console.log(e.step,"NEG[]",n)}t.push(-n)}function na(e){var t=e.stack;var n=t.pop();if(C.DEBUG){console.log(e.step,"FLOOR[]",n)}t.push(Math.floor(n/64)*64)}function ra(e){var t=e.stack;var n=t.pop();if(C.DEBUG){console.log(e.step,"CEILING[]",n)}t.push(Math.ceil(n/64)*64)}function ia(e,t){var n=t.stack;var r=n.pop();if(C.DEBUG){console.log(t.step,"ROUND[]")}n.push(t.round(r/64)*64)}function aa(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"WCVTF[]",n,r)}e.cvt[r]=n*e.ppem/e.font.unitsPerEm}function sa(e,t){var n=t.stack;var r=n.pop();var i=t.ppem;var a=t.deltaBase+(e-1)*16;var s=t.deltaShift;if(C.DEBUG){console.log(t.step,"DELTAC["+e+"]",r,n)}for(var o=0;o<r;o++){var l=n.pop();var u=n.pop();var c=a+((u&240)>>4);if(c!==i){continue}var p=(u&15)-8;if(p>=0){p++}var h=p*s;if(C.DEBUG){console.log(t.step,"DELTACFIX",l,"by",h)}t.cvt[l]+=h}}function oa(e){var t=e.stack.pop();if(C.DEBUG){console.log(e.step,"SROUND[]",t)}e.round=Cr;var n;switch(t&192){case 0:n=.5;break;case 64:n=1;break;case 128:n=2;break;default:throw new Error("invalid SROUND value")}e.srPeriod=n;switch(t&48){case 0:e.srPhase=0;break;case 16:e.srPhase=.25*n;break;case 32:e.srPhase=.5*n;break;case 48:e.srPhase=.75*n;break;default:throw new Error("invalid SROUND value")}t&=15;if(t===0){e.srThreshold=0}else{e.srThreshold=(t/8-.5)*n}}function la(e){var t=e.stack.pop();if(C.DEBUG){console.log(e.step,"S45ROUND[]",t)}e.round=Cr;var n;switch(t&192){case 0:n=Math.sqrt(2)/2;break;case 64:n=Math.sqrt(2);break;case 128:n=2*Math.sqrt(2);break;default:throw new Error("invalid S45ROUND value")}e.srPeriod=n;switch(t&48){case 0:e.srPhase=0;break;case 16:e.srPhase=.25*n;break;case 32:e.srPhase=.5*n;break;case 48:e.srPhase=.75*n;break;default:throw new Error("invalid S45ROUND value")}t&=15;if(t===0){e.srThreshold=0}else{e.srThreshold=(t/8-.5)*n}}function ua(e){if(C.DEBUG){console.log(e.step,"ROFF[]")}e.round=yr}function ca(e){if(C.DEBUG){console.log(e.step,"RUTG[]")}e.round=_r}function pa(e){if(C.DEBUG){console.log(e.step,"RDTG[]")}e.round=Ar}function ha(e){var t=e.stack.pop();if(C.DEBUG){console.log(e.step,"SCANCTRL[]",t)}}function fa(e,t){var n=t.stack;var r=n.pop();var i=n.pop();var a=t.z2[r];var s=t.z1[i];if(C.DEBUG){console.log(t.step,"SDPVTL["+e+"]",r,i)}var o;var l;if(!e){o=s.x-a.x;l=s.y-a.y}else{o=a.y-s.y;l=s.x-a.x}t.dpv=Ir(o,l)}function da(e){var t=e.stack;var n=t.pop();var r=0;if(C.DEBUG){console.log(e.step,"GETINFO[]",n)}if(n&1){r=35}if(n&32){r|=4096}t.push(r)}function ga(e){var t=e.stack;var n=t.pop();var r=t.pop();var i=t.pop();if(C.DEBUG){console.log(e.step,"ROLL[]")}t.push(r);t.push(n);t.push(i)}function ma(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"MAX[]",n,r)}t.push(Math.max(r,n))}function va(e){var t=e.stack;var n=t.pop();var r=t.pop();if(C.DEBUG){console.log(e.step,"MIN[]",n,r)}t.push(Math.min(r,n))}function ba(e){var t=e.stack.pop();if(C.DEBUG){console.log(e.step,"SCANTYPE[]",t)}}function ya(e){var t=e.stack.pop();var n=e.stack.pop();if(C.DEBUG){console.log(e.step,"INSTCTRL[]",t,n)}switch(t){case 1:e.inhibitGridFit=!!n;return;case 2:e.ignoreCvt=!!n;return;default:throw new Error("invalid INSTCTRL[] selector")}}function n(e,t){var n=t.stack;var r=t.prog;var i=t.ip;if(C.DEBUG){console.log(t.step,"PUSHB["+e+"]")}for(var a=0;a<e;a++){n.push(r[++i])}t.ip=i}function r(e,t){var n=t.ip;var r=t.prog;var i=t.stack;if(C.DEBUG){console.log(t.ip,"PUSHW["+e+"]")}for(var a=0;a<e;a++){var s=r[++n]<<8|r[++n];if(s&32768){s=-((s^65535)+1)}i.push(s)}t.ip=n}function s(e,t,n,r,i,a){var s=a.stack;var o=e&&s.pop();var l=s.pop();var u=a.rp0;var c=a.z0[u];var p=a.z1[l];var h=a.minDis;var f=a.fv;var d=a.dpv;var g;var m;var v;var b;m=g=d.distance(p,c,true,true);v=m>=0?1:-1;m=Math.abs(m);if(e){b=a.cvt[o];if(r&&Math.abs(m-b)<a.cvCutIn){m=b}}if(n&&m<h){m=h}if(r){m=a.round(m)}f.setRelative(p,c,v*m,d);f.touch(p);if(C.DEBUG){console.log(a.step,(e?"MIRP[":"MDRP[")+(t?"M":"m")+(n?">":"_")+(r?"R":"_")+(i===0?"Gr":i===1?"Bl":i===2?"Wh":"")+"]",e?o+"("+a.cvt[o]+","+b+")":"",l,"(d =",g,"->",v*m,")")}a.rp1=a.rp0;a.rp2=l;if(t){a.rp0=l}}dr=[Rr.bind(undefined,v),Rr.bind(undefined,m),Pr.bind(undefined,v),Pr.bind(undefined,m),Mr.bind(undefined,v),Mr.bind(undefined,m),kr.bind(undefined,0),kr.bind(undefined,1),wr.bind(undefined,0),wr.bind(undefined,1),Br,Gr,Vr,Dr,Fr,jr,zr,Hr,Xr,Yr,Wr,qr,Zr,Kr,Qr,Jr,$r,ei,ti,ni,undefined,undefined,ri,ii,ai,si,oi,ci,pi,undefined,undefined,undefined,li,ui,hi,undefined,fi.bind(undefined,0),fi.bind(undefined,1),di.bind(undefined,v),di.bind(undefined,m),gi.bind(undefined,0),gi.bind(undefined,1),mi.bind(undefined,0),mi.bind(undefined,1),vi.bind(undefined,0),vi.bind(undefined,1),bi,yi,xi.bind(undefined,0),xi.bind(undefined,1),Si,Oi,_i.bind(undefined,0),_i.bind(undefined,1),Ai,Ci,Ti,Ii,Ei,Li,Ni.bind(undefined,0),Ni.bind(undefined,1),undefined,Ui.bind(undefined,0),Ui.bind(undefined,1),Ri,undefined,Pi,undefined,undefined,Mi,ki,wi,Bi,Gi,Vi,Di,Fi,ji,zi,Hi,Xi,Yi,Wi.bind(undefined,1),qi,Zi,Ki,Qi,Ji,$i,ea,ta,na,ra,ia.bind(undefined,0),ia.bind(undefined,1),ia.bind(undefined,2),ia.bind(undefined,3),undefined,undefined,undefined,undefined,aa,Wi.bind(undefined,2),Wi.bind(undefined,3),sa.bind(undefined,1),sa.bind(undefined,2),sa.bind(undefined,3),oa,la,undefined,undefined,ua,undefined,ca,pa,ii,ii,undefined,undefined,undefined,undefined,undefined,ha,fa.bind(undefined,0),fa.bind(undefined,1),da,undefined,ga,ma,va,ba,ya,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,n.bind(undefined,1),n.bind(undefined,2),n.bind(undefined,3),n.bind(undefined,4),n.bind(undefined,5),n.bind(undefined,6),n.bind(undefined,7),n.bind(undefined,8),r.bind(undefined,1),r.bind(undefined,2),r.bind(undefined,3),r.bind(undefined,4),r.bind(undefined,5),r.bind(undefined,6),r.bind(undefined,7),r.bind(undefined,8),s.bind(undefined,0,0,0,0,0),s.bind(undefined,0,0,0,0,1),s.bind(undefined,0,0,0,0,2),s.bind(undefined,0,0,0,0,3),s.bind(undefined,0,0,0,1,0),s.bind(undefined,0,0,0,1,1),s.bind(undefined,0,0,0,1,2),s.bind(undefined,0,0,0,1,3),s.bind(undefined,0,0,1,0,0),s.bind(undefined,0,0,1,0,1),s.bind(undefined,0,0,1,0,2),s.bind(undefined,0,0,1,0,3),s.bind(undefined,0,0,1,1,0),s.bind(undefined,0,0,1,1,1),s.bind(undefined,0,0,1,1,2),s.bind(undefined,0,0,1,1,3),s.bind(undefined,0,1,0,0,0),s.bind(undefined,0,1,0,0,1),s.bind(undefined,0,1,0,0,2),s.bind(undefined,0,1,0,0,3),s.bind(undefined,0,1,0,1,0),s.bind(undefined,0,1,0,1,1),s.bind(undefined,0,1,0,1,2),s.bind(undefined,0,1,0,1,3),s.bind(undefined,0,1,1,0,0),s.bind(undefined,0,1,1,0,1),s.bind(undefined,0,1,1,0,2),s.bind(undefined,0,1,1,0,3),s.bind(undefined,0,1,1,1,0),s.bind(undefined,0,1,1,1,1),s.bind(undefined,0,1,1,1,2),s.bind(undefined,0,1,1,1,3),s.bind(undefined,1,0,0,0,0),s.bind(undefined,1,0,0,0,1),s.bind(undefined,1,0,0,0,2),s.bind(undefined,1,0,0,0,3),s.bind(undefined,1,0,0,1,0),s.bind(undefined,1,0,0,1,1),s.bind(undefined,1,0,0,1,2),s.bind(undefined,1,0,0,1,3),s.bind(undefined,1,0,1,0,0),s.bind(undefined,1,0,1,0,1),s.bind(undefined,1,0,1,0,2),s.bind(undefined,1,0,1,0,3),s.bind(undefined,1,0,1,1,0),s.bind(undefined,1,0,1,1,1),s.bind(undefined,1,0,1,1,2),s.bind(undefined,1,0,1,1,3),s.bind(undefined,1,1,0,0,0),s.bind(undefined,1,1,0,0,1),s.bind(undefined,1,1,0,0,2),s.bind(undefined,1,1,0,0,3),s.bind(undefined,1,1,0,1,0),s.bind(undefined,1,1,0,1,1),s.bind(undefined,1,1,0,1,2),s.bind(undefined,1,1,0,1,3),s.bind(undefined,1,1,1,0,0),s.bind(undefined,1,1,1,0,1),s.bind(undefined,1,1,1,0,2),s.bind(undefined,1,1,1,0,3),s.bind(undefined,1,1,1,1,0),s.bind(undefined,1,1,1,1,1),s.bind(undefined,1,1,1,1,2),s.bind(undefined,1,1,1,1,3)];function xa(e){this.char=e;this.state={};this.activeState=null}function Sa(e,t,n){this.contextName=n;this.startIndex=e;this.endOffset=t}function Oa(e,t,n){this.contextName=e;this.openRange=null;this.ranges=[];this.checkStart=t;this.checkEnd=n}function L(e,t){this.context=e;this.index=t;this.length=e.length;this.current=e[t];this.backtrack=e.slice(0,t);this.lookahead=e.slice(t+1)}function _a(e){this.eventId=e;this.subscribers=[]}function Aa(n){var r=this;var e=["start","end","next","newToken","contextStart","contextEnd","insertToken","removeToken","removeRange","replaceToken","replaceRange","composeRUD","updateContextsRanges"];e.forEach(function(e){Object.defineProperty(r.events,e,{value:new _a(e)})});if(!!n){e.forEach(function(e){var t=n[e];if(typeof t==="function"){r.events[e].subscribe(t)}})}var t=["insertToken","removeToken","removeRange","replaceToken","replaceRange","composeRUD"];t.forEach(function(e){r.events[e].subscribe(r.updateContextsRanges)})}function b(e){this.tokens=[];this.registeredContexts={};this.contextCheckers=[];this.events={};this.registeredModifiers=[];Aa.call(this,e)}xa.prototype.setState=function(e,t){this.state[e]=t;this.activeState={key:e,value:this.state[e]};return this.activeState};xa.prototype.getState=function(e){return this.state[e]||null};b.prototype.inboundIndex=function(e){return e>=0&&e<this.tokens.length};b.prototype.composeRUD=function(e){var t=this;var n=true;var r=e.map(function(e){return t[e[0]].apply(t,e.slice(1).concat(n))});var i=function(e){return typeof e==="object"&&e.hasOwnProperty("FAIL")};if(r.every(i)){return{FAIL:"composeRUD: one or more operations hasn't completed successfully",report:r.filter(i)}}this.dispatch("composeRUD",[r.filter(function(e){return!i(e)})])};b.prototype.replaceRange=function(e,t,n,r){t=t!==null?t:this.tokens.length;var i=n.every(function(e){return e instanceof xa});if(!isNaN(e)&&this.inboundIndex(e)&&i){var a=this.tokens.splice.apply(this.tokens,[e,t].concat(n));if(!r){this.dispatch("replaceToken",[e,t,n])}return[a,n]}else{return{FAIL:"replaceRange: invalid tokens or startIndex."}}};b.prototype.replaceToken=function(e,t,n){if(!isNaN(e)&&this.inboundIndex(e)&&t instanceof xa){var r=this.tokens.splice(e,1,t);if(!n){this.dispatch("replaceToken",[e,t])}return[r[0],t]}else{return{FAIL:"replaceToken: invalid token or index."}}};b.prototype.removeRange=function(e,t,n){t=!isNaN(t)?t:this.tokens.length;var r=this.tokens.splice(e,t);if(!n){this.dispatch("removeRange",[r,e,t])}return r};b.prototype.removeToken=function(e,t){if(!isNaN(e)&&this.inboundIndex(e)){var n=this.tokens.splice(e,1);if(!t){this.dispatch("removeToken",[n,e])}return n}else{return{FAIL:"removeToken: invalid token index."}}};b.prototype.insertToken=function(e,t,n){var r=e.every(function(e){return e instanceof xa});if(r){this.tokens.splice.apply(this.tokens,[t,0].concat(e));if(!n){this.dispatch("insertToken",[e,t])}return e}else{return{FAIL:"insertToken: invalid token(s)."}}};b.prototype.registerModifier=function(s,o,l){this.events.newToken.subscribe(function(e,t){var n=[e,t];var r=o===null||o.apply(this,n)===true;var i=[e,t];if(r){var a=l.apply(this,i);e.setState(s,a)}});this.registeredModifiers.push(s)};_a.prototype.subscribe=function(e){if(typeof e==="function"){return this.subscribers.push(e)-1}else{return{FAIL:"invalid '"+this.eventId+"' event handler"}}};_a.prototype.unsubscribe=function(e){this.subscribers.splice(e,1)};L.prototype.setCurrentIndex=function(e){this.index=e;this.current=this.context[e];this.backtrack=this.context.slice(0,e);this.lookahead=this.context.slice(e+1)};L.prototype.get=function(e){switch(true){case e===0:return this.current;case e<0&&Math.abs(e)<=this.backtrack.length:return this.backtrack.slice(e)[0];case e>0&&e<=this.lookahead.length:return this.lookahead[e-1];default:return null}};b.prototype.rangeToText=function(e){if(e instanceof Sa){return this.getRangeTokens(e).map(function(e){return e.char}).join("")}};b.prototype.getText=function(){return this.tokens.map(function(e){return e.char}).join("")};b.prototype.getContext=function(e){var t=this.registeredContexts[e];return!!t?t:null};b.prototype.on=function(e,t){var n=this.events[e];if(!!n){return n.subscribe(t)}else{return null}};b.prototype.dispatch=function(e,t){var n=this;var r=this.events[e];if(r instanceof _a){r.subscribers.forEach(function(e){e.apply(n,t||[])})}};b.prototype.registerContextChecker=function(e,t,n){if(!!this.getContext(e)){return{FAIL:"context name '"+e+"' is already registered."}}if(typeof t!=="function"){return{FAIL:"missing context start check."}}if(typeof n!=="function"){return{FAIL:"missing context end check."}}var r=new Oa(e,t,n);this.registeredContexts[e]=r;this.contextCheckers.push(r);return r};b.prototype.getRangeTokens=function(e){var t=e.startIndex+e.endOffset;return[].concat(this.tokens.slice(e.startIndex,t))};b.prototype.getContextRanges=function(e){var t=this.getContext(e);if(!!t){return t.ranges}else{return{FAIL:"context checker '"+e+"' is not registered."}}};b.prototype.resetContextsRanges=function(){var e=this.registeredContexts;for(var t in e){if(e.hasOwnProperty(t)){var n=e[t];n.ranges=[]}}};b.prototype.updateContextsRanges=function(){this.resetContextsRanges();var e=this.tokens.map(function(e){return e.char});for(var t=0;t<e.length;t++){var n=new L(e,t);this.runContextCheck(n)}this.dispatch("updateContextsRanges",[this.registeredContexts])};b.prototype.setEndOffset=function(e,t){var n=this.getContext(t).openRange.startIndex;var r=new Sa(n,e,t);var i=this.getContext(t).ranges;r.rangeId=t+"."+i.length;i.push(r);this.getContext(t).openRange=null;return r};b.prototype.runContextCheck=function(a){var s=this;var o=a.index;this.contextCheckers.forEach(function(e){var t=e.contextName;var n=s.getContext(t).openRange;if(!n&&e.checkStart(a)){n=new Sa(o,null,t);s.getContext(t).openRange=n;s.dispatch("contextStart",[t,o])}if(!!n&&e.checkEnd(a)){var r=o-n.startIndex+1;var i=s.setEndOffset(r,t);s.dispatch("contextEnd",[t,i])}})};b.prototype.tokenize=function(e){this.tokens=[];this.resetContextsRanges();var t=Array.from(e);this.dispatch("start");for(var n=0;n<t.length;n++){var r=t[n];var i=new L(t,n);this.dispatch("next",[i]);this.runContextCheck(i);var a=new xa(r);this.tokens.push(a);this.dispatch("newToken",[a,i])}this.dispatch("end",[this.tokens]);return this.tokens};function y(e){return/[\u0600-\u065F\u066A-\u06D2\u06FA-\u06FF]/.test(e)}function Ca(e){return/[\u0630\u0690\u0621\u0631\u0661\u0671\u0622\u0632\u0672\u0692\u06C2\u0623\u0673\u0693\u06C3\u0624\u0694\u06C4\u0625\u0675\u0695\u06C5\u06E5\u0676\u0696\u06C6\u0627\u0677\u0697\u06C7\u0648\u0688\u0698\u06C8\u0689\u0699\u06C9\u068A\u06CA\u066B\u068B\u06CB\u068C\u068D\u06CD\u06FD\u068E\u06EE\u06FE\u062F\u068F\u06CF\u06EF]/.test(e)}function N(e){return/[\u0600-\u0605\u060C-\u060E\u0610-\u061B\u061E\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED]/.test(e)}function Ta(e){return/[A-z]/.test(e)}function Ia(e){return/\s/.test(e)}function O(e){this.font=e;this.features={}}function Ea(e){this.id=e.id;this.tag=e.tag;this.substitution=e.substitution}function La(e,t){if(!e){return-1}switch(t.format){case 1:return t.glyphs.indexOf(e);case 2:var n=t.ranges;for(var r=0;r<n.length;r++){var i=n[r];if(e>=i.start&&e<=i.end){var a=e-i.start;return i.index+a}}break;default:return-1}return-1}function Na(e,t){var n=La(e,t.coverage);if(n===-1){return null}return e+t.deltaGlyphId}function Ua(e,t){var n=La(e,t.coverage);if(n===-1){return null}return t.substitute[n]}function Ra(e,t){var n=[];for(var r=0;r<e.length;r++){var i=e[r];var a=t.current;a=Array.isArray(a)?a[0]:a;var s=La(a,i);if(s!==-1){n.push(s)}}if(n.length!==e.length){return-1}return n}function Pa(e,t){var n=t.inputCoverage.length+t.lookaheadCoverage.length+t.backtrackCoverage.length;if(e.context.length<n){return[]}var r=Ra(t.inputCoverage,e);if(r===-1){return[]}var i=t.inputCoverage.length-1;if(e.lookahead.length<t.lookaheadCoverage.length){return[]}var a=e.lookahead.slice(i);while(a.length&&N(a[0].char)){a.shift()}var s=new L(a,0);var o=Ra(t.lookaheadCoverage,s);var l=[].concat(e.backtrack);l.reverse();while(l.length&&N(l[0].char)){l.shift()}if(l.length<t.backtrackCoverage.length){return[]}var u=new L(l,0);var c=Ra(t.backtrackCoverage,u);var p=r.length===t.inputCoverage.length&&o.length===t.lookaheadCoverage.length&&c.length===t.backtrackCoverage.length;var h=[];if(p){for(var f=0;f<t.lookupRecords.length;f++){var d=t.lookupRecords[f];var g=d.lookupListIndex;var m=this.getLookupByIndex(g);for(var v=0;v<m.subtables.length;v++){var b=m.subtables[v];var y=this.getLookupMethod(m,b);var x=this.getSubstitutionType(m,b);if(x==="12"){for(var S=0;S<r.length;S++){var O=e.get(S);var _=y(O);if(_){h.push(_)}}}}}}return h}function Ma(e,t){var n=e.current;var r=La(n,t.coverage);if(r===-1){return null}var i;var a=t.ligatureSets[r];for(var s=0;s<a.length;s++){i=a[s];for(var o=0;o<i.components.length;o++){var l=e.lookahead[o];var u=i.components[o];if(l!==u){break}if(o===i.components.length-1){return i}}}return null}function ka(e,t){var n=La(e,t.coverage);if(n===-1){return null}return t.sequences[n]}O.prototype.getDefaultScriptFeaturesIndexes=function(){var e=this.font.tables.gsub.scripts;for(var t=0;t<e.length;t++){var n=e[t];if(n.tag==="DFLT"){return n.script.defaultLangSys.featureIndexes}}return[]};O.prototype.getScriptFeaturesIndexes=function(e){var t=this.font.tables;if(!t.gsub){return[]}if(!e){return this.getDefaultScriptFeaturesIndexes()}var n=this.font.tables.gsub.scripts;for(var r=0;r<n.length;r++){var i=n[r];if(i.tag===e&&i.script.defaultLangSys){return i.script.defaultLangSys.featureIndexes}else{var a=i.langSysRecords;if(!!a){for(var s=0;s<a.length;s++){var o=a[s];if(o.tag===e){var l=o.langSys;return l.featureIndexes}}}}}return this.getDefaultScriptFeaturesIndexes()};O.prototype.mapTagsToFeatures=function(e,t){var n={};for(var r=0;r<e.length;r++){var i=e[r].tag;var a=e[r].feature;n[i]=a}this.features[t].tags=n};O.prototype.getScriptFeatures=function(e){var t=this.features[e];if(this.features.hasOwnProperty(e)){return t}var n=this.getScriptFeaturesIndexes(e);if(!n){return null}var r=this.font.tables.gsub;t=n.map(function(e){return r.features[e]});this.features[e]=t;this.mapTagsToFeatures(t,e);return t};O.prototype.getSubstitutionType=function(e,t){var n=e.lookupType.toString();var r=t.substFormat.toString();return n+r};O.prototype.getLookupMethod=function(e,t){var n=this;var r=this.getSubstitutionType(e,t);switch(r){case"11":return function(e){return Na.apply(n,[e,t])};case"12":return function(e){return Ua.apply(n,[e,t])};case"63":return function(e){return Pa.apply(n,[e,t])};case"41":return function(e){return Ma.apply(n,[e,t])};case"21":return function(e){return ka.apply(n,[e,t])};default:throw new Error("lookupType: "+e.lookupType+" - "+"substFormat: "+t.substFormat+" "+"is not yet supported")}};O.prototype.lookupFeature=function(e){var t=e.contextParams;var n=t.index;var r=this.getFeature({tag:e.tag,script:e.script});if(!r){return new Error("font '"+this.font.names.fullName.en+"' "+"doesn't support feature '"+e.tag+"' "+"for script '"+e.script+"'.")}var i=this.getFeatureLookups(r);var a=[].concat(t.context);for(var s=0;s<i.length;s++){var o=i[s];var l=this.getLookupSubtables(o);for(var u=0;u<l.length;u++){var c=l[u];var p=this.getSubstitutionType(o,c);var h=this.getLookupMethod(o,c);var f=void 0;switch(p){case"11":f=h(t.current);if(f){a.splice(n,1,new Ea({id:11,tag:e.tag,substitution:f}))}break;case"12":f=h(t.current);if(f){a.splice(n,1,new Ea({id:12,tag:e.tag,substitution:f}))}break;case"63":f=h(t);if(Array.isArray(f)&&f.length){a.splice(n,1,new Ea({id:63,tag:e.tag,substitution:f}))}break;case"41":f=h(t);if(f){a.splice(n,1,new Ea({id:41,tag:e.tag,substitution:f}))}break;case"21":f=h(t.current);if(f){a.splice(n,1,new Ea({id:21,tag:e.tag,substitution:f}))}break}t=new L(a,n);if(Array.isArray(f)&&!f.length){continue}f=null}}return a.length?a:null};O.prototype.supports=function(t){if(!t.script){return false}this.getScriptFeatures(t.script);var e=this.features.hasOwnProperty(t.script);if(!t.tag){return e}var n=this.features[t.script].some(function(e){return e.tag===t.tag});return e&&n};O.prototype.getLookupSubtables=function(e){return e.subtables||null};O.prototype.getLookupByIndex=function(e){var t=this.font.tables.gsub.lookups;return t[e]||null};O.prototype.getFeatureLookups=function(e){return e.lookupListIndexes.map(this.getLookupByIndex.bind(this))};O.prototype.getFeature=function e(t){if(!this.font){return{FAIL:"No font was found"}}if(!this.features.hasOwnProperty(t.script)){this.getScriptFeatures(t.script)}var n=this.features[t.script];if(!n){return{FAIL:"No feature for script "+t.script}}if(!n.tags[t.tag]){return null}return this.features[t.script].tags[t.tag]};function wa(e){var t=e.current;var n=e.get(-1);return n===null&&y(t)||!y(n)&&y(t)}function Ba(e){var t=e.get(1);return t===null||!y(t)}var Ga={startCheck:wa,endCheck:Ba};function Va(e){var t=e.current;var n=e.get(-1);return(y(t)||N(t))&&!y(n)}function Da(e){var t=e.get(1);switch(true){case t===null:return true;case!y(t)&&!N(t):var n=Ia(t);if(!n){return true}if(n){var r=false;r=e.lookahead.some(function(e){return y(e)||N(e)});if(!r){return true}}break;default:return false}}var Fa={startCheck:Va,endCheck:Da};function ja(e,t,n){t[n].setState(e.tag,e.substitution)}function za(e,t,n){t[n].setState(e.tag,e.substitution)}function Ha(r,i,a){r.substitution.forEach(function(e,t){var n=i[a+t];n.setState(r.tag,e)})}function Xa(e,t,n){var r=t[n];r.setState(e.tag,e.substitution.ligGlyph);var i=e.substitution.components.length;for(var a=0;a<i;a++){r=t[n+a+1];r.setState("deleted",true)}}var Ya={11:ja,12:za,63:Ha,41:Xa};function Wa(e,t,n){if(e instanceof Ea&&Ya[e.id]){Ya[e.id](e,t,n)}}function qa(e){var t=[].concat(e.backtrack);for(var n=t.length-1;n>=0;n--){var r=t[n];var i=Ca(r);var a=N(r);if(!i&&!a){return true}if(i){return false}}return false}function Za(e){if(Ca(e.current)){return false}for(var t=0;t<e.lookahead.length;t++){var n=e.lookahead[t];var r=N(n);if(!r){return true}}return false}function Ka(e){var a=this;var s="arab";var o=this.featuresTags[s];var l=this.tokenizer.getRangeTokens(e);if(l.length===1){return}var u=new L(l.map(function(e){return e.getState("glyphIndex")}),0);var c=new L(l.map(function(e){return e.char}),0);l.forEach(function(e,t){if(N(e.char)){return}u.setCurrentIndex(t);c.setCurrentIndex(t);var n=0;if(qa(c)){n|=1}if(Za(c)){n|=2}var r;switch(n){case 1:r="fina";break;case 2:r="init";break;case 3:r="medi";break}if(o.indexOf(r)===-1){return}var i=a.query.lookupFeature({tag:r,script:s,contextParams:u});if(i instanceof Error){return console.info(i.message)}i.forEach(function(e,t){if(e instanceof Ea){Wa(e,l,t);u.context[t]=e.substitution}})})}function Qa(e,t){var n=e.map(function(e){return e.activeState.value});return new L(n,t||0)}function Ja(e){var r=this;var i="arab";var a=this.tokenizer.getRangeTokens(e);var s=Qa(a);s.context.forEach(function(e,t){s.setCurrentIndex(t);var n=r.query.lookupFeature({tag:"rlig",script:i,contextParams:s});if(n.length){n.forEach(function(e){return Wa(e,a,t)});s=Qa(a)}})}function $a(e){var t=e.current;var n=e.get(-1);return n===null&&Ta(t)||!Ta(n)&&Ta(t)}function es(e){var t=e.get(1);return t===null||!Ta(t)}var ts={startCheck:$a,endCheck:es};function ns(e,t){var n=e.map(function(e){return e.activeState.value});return new L(n,t||0)}function rs(e){var r=this;var i="latn";var a=this.tokenizer.getRangeTokens(e);var s=ns(a);s.context.forEach(function(e,t){s.setCurrentIndex(t);var n=r.query.lookupFeature({tag:"liga",script:i,contextParams:s});if(n.length){n.forEach(function(e){return Wa(e,a,t)});s=ns(a)}})}function U(e){this.baseDir=e||"ltr";this.tokenizer=new b;this.featuresTags={}}U.prototype.setText=function(e){this.text=e};U.prototype.contextChecks={latinWordCheck:ts,arabicWordCheck:Ga,arabicSentenceCheck:Fa};function is(e){var t=this.contextChecks[e+"Check"];return this.tokenizer.registerContextChecker(e,t.startCheck,t.endCheck)}function as(){is.call(this,"latinWord");is.call(this,"arabicWord");is.call(this,"arabicSentence");return this.tokenizer.tokenize(this.text)}function ss(){var n=this;var e=this.tokenizer.getContextRanges("arabicSentence");e.forEach(function(e){var t=n.tokenizer.getRangeTokens(e);n.tokenizer.replaceRange(e.startIndex,e.endOffset,t.reverse())})}U.prototype.registerFeatures=function(t,e){var n=this;var r=e.filter(function(e){return n.query.supports({script:t,tag:e})});if(!this.featuresTags.hasOwnProperty(t)){this.featuresTags[t]=r}else{this.featuresTags[t]=this.featuresTags[t].concat(r)}};U.prototype.applyFeatures=function(e,t){if(!e){throw new Error("No valid font was provided to apply features")}if(!this.query){this.query=new O(e)}for(var n=0;n<t.length;n++){var r=t[n];if(!this.query.supports({script:r.script})){continue}this.registerFeatures(r.script,r.tags)}};U.prototype.registerModifier=function(e,t,n){this.tokenizer.registerModifier(e,t,n)};function os(){if(this.tokenizer.registeredModifiers.indexOf("glyphIndex")===-1){throw new Error("glyphIndex modifier is required to apply "+"arabic presentation features.")}}function ls(){var t=this;var e="arab";if(!this.featuresTags.hasOwnProperty(e)){return}os.call(this);var n=this.tokenizer.getContextRanges("arabicWord");n.forEach(function(e){Ka.call(t,e)})}function us(){var t=this;var e="arab";if(!this.featuresTags.hasOwnProperty(e)){return}var n=this.featuresTags[e];if(n.indexOf("rlig")===-1){return}os.call(this);var r=this.tokenizer.getContextRanges("arabicWord");r.forEach(function(e){Ja.call(t,e)})}function cs(){var t=this;var e="latn";if(!this.featuresTags.hasOwnProperty(e)){return}var n=this.featuresTags[e];if(n.indexOf("liga")===-1){return}os.call(this);var r=this.tokenizer.getContextRanges("latinWord");r.forEach(function(e){rs.call(t,e)})}U.prototype.checkContextReady=function(e){return!!this.tokenizer.getContext(e)};U.prototype.applyFeaturesToContexts=function(){if(this.checkContextReady("arabicWord")){ls.call(this);us.call(this)}if(this.checkContextReady("latinWord")){cs.call(this)}if(this.checkContextReady("arabicSentence")){ss.call(this)}};U.prototype.processText=function(e){if(!this.text||this.text!==e){this.setText(e);as.call(this);this.applyFeaturesToContexts()}};U.prototype.getBidiText=function(e){this.processText(e);return this.tokenizer.getText()};U.prototype.getTextGlyphs=function(e){this.processText(e);var t=[];for(var n=0;n<this.tokenizer.tokens.length;n++){var r=this.tokenizer.tokens[n];if(r.state.deleted){continue}var i=r.activeState.value;t.push(Array.isArray(i)?i[0]:i)}return t};function V(e){e=e||{};e.tables=e.tables||{};if(!e.empty){rr(e.familyName,"When creating a new Font object, familyName is required.");rr(e.styleName,"When creating a new Font object, styleName is required.");rr(e.unitsPerEm,"When creating a new Font object, unitsPerEm is required.");rr(e.ascender,"When creating a new Font object, ascender is required.");rr(e.descender<=0,"When creating a new Font object, negative descender value is required.");this.names={fontFamily:{en:e.familyName||" "},fontSubfamily:{en:e.styleName||" "},fullName:{en:e.fullName||e.familyName+" "+e.styleName},postScriptName:{en:e.postScriptName||(e.familyName+e.styleName).replace(/\s/g,"")},designer:{en:e.designer||" "},designerURL:{en:e.designerURL||" "},manufacturer:{en:e.manufacturer||" "},manufacturerURL:{en:e.manufacturerURL||" "},license:{en:e.license||" "},licenseURL:{en:e.licenseURL||" "},version:{en:e.version||"Version 0.1"},description:{en:e.description||" "},copyright:{en:e.copyright||" "},trademark:{en:e.trademark||" "}};this.unitsPerEm=e.unitsPerEm||1e3;this.ascender=e.ascender;this.descender=e.descender;this.createdTimestamp=e.createdTimestamp;this.tables=Object.assign(e.tables,{os2:Object.assign({usWeightClass:e.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:e.widthClass||this.usWidthClasses.MEDIUM,fsSelection:e.fsSelection||this.fsSelectionValues.REGULAR},e.tables.os2)})}this.supported=true;this.glyphs=new A.GlyphSet(this,e.glyphs||[]);this.encoding=new qe(this);this.position=new Qn(this);this.substitution=new t(this);this.tables=this.tables||{};this._push=null;this._hmtxTableData={};Object.defineProperty(this,"hinting",{get:function(){if(this._hinting){return this._hinting}if(this.outlinesFormat==="truetype"){return this._hinting=new br(this)}}})}V.prototype.hasChar=function(e){return this.encoding.charToGlyphIndex(e)!==null};V.prototype.charToGlyphIndex=function(e){return this.encoding.charToGlyphIndex(e)};V.prototype.charToGlyph=function(e){var t=this.charToGlyphIndex(e);var n=this.glyphs.get(t);if(!n){n=this.glyphs.get(0)}return n};V.prototype.updateFeatures=function(t){return this.defaultRenderOptions.features.map(function(e){if(e.script==="latn"){return{script:"latn",tags:e.tags.filter(function(e){return t[e]})}}else{return e}})};V.prototype.stringToGlyphs=function(e,t){var n=this;var r=new U;var i=function(e){return n.charToGlyphIndex(e.char)};r.registerModifier("glyphIndex",null,i);var a=t?this.updateFeatures(t.features):this.defaultRenderOptions.features;r.applyFeatures(this,a);var s=r.getTextGlyphs(e);var o=s.length;var l=new Array(o);var u=this.glyphs.get(0);for(var c=0;c<o;c+=1){l[c]=this.glyphs.get(s[c])||u}return l};V.prototype.nameToGlyphIndex=function(e){return this.glyphNames.nameToGlyphIndex(e)};V.prototype.nameToGlyph=function(e){var t=this.nameToGlyphIndex(e);var n=this.glyphs.get(t);if(!n){n=this.glyphs.get(0)}return n};V.prototype.glyphIndexToName=function(e){if(!this.glyphNames.glyphIndexToName){return""}return this.glyphNames.glyphIndexToName(e)};V.prototype.getKerningValue=function(e,t){e=e.index||e;t=t.index||t;var n=this.position.defaultKerningTables;if(n){return this.position.getKerningValue(n,e,t)}return this.kerningPairs[e+","+t]||0};V.prototype.defaultRenderOptions={kerning:true,features:[{script:"arab",tags:["init","medi","fina","rlig"]},{script:"latn",tags:["liga","rlig"]}]};V.prototype.forEachGlyph=function(e,t,n,r,i,a){t=t!==undefined?t:0;n=n!==undefined?n:0;r=r!==undefined?r:72;i=Object.assign({},this.defaultRenderOptions,i);var s=1/this.unitsPerEm*r;var o=this.stringToGlyphs(e,i);var l;if(i.kerning){var u=i.script||this.position.getDefaultScriptName();l=this.position.getKerningTables(u,i.language)}for(var c=0;c<o.length;c+=1){var p=o[c];a.call(this,p,t,n,r,i);if(p.advanceWidth){t+=p.advanceWidth*s}if(i.kerning&&c<o.length-1){var h=l?this.position.getKerningValue(l,p.index,o[c+1].index):this.getKerningValue(p,o[c+1]);t+=h*s}if(i.letterSpacing){t+=i.letterSpacing*r}else if(i.tracking){t+=i.tracking/1e3*r}}return t};V.prototype.getPath=function(e,t,n,r,a){var s=new d;this.forEachGlyph(e,t,n,r,a,function(e,t,n,r){var i=e.getPath(t,n,r,a,this);s.extend(i)});return s};V.prototype.getPaths=function(e,t,n,r,a){var s=[];this.forEachGlyph(e,t,n,r,a,function(e,t,n,r){var i=e.getPath(t,n,r,a,this);s.push(i)});return s};V.prototype.getAdvanceWidth=function(e,t,n){return this.forEachGlyph(e,0,0,t,n,function(){})};V.prototype.draw=function(e,t,n,r,i,a){this.getPath(t,n,r,i,a).draw(e)};V.prototype.drawPoints=function(i,e,t,n,r,a){this.forEachGlyph(e,t,n,r,a,function(e,t,n,r){e.drawPoints(i,t,n,r)})};V.prototype.drawMetrics=function(i,e,t,n,r,a){this.forEachGlyph(e,t,n,r,a,function(e,t,n,r){e.drawMetrics(i,t,n,r)})};V.prototype.getEnglishName=function(e){var t=this.names[e];if(t){return t.en}};V.prototype.validate=function(){var n=this;function r(e,t){}function e(e){var t=n.getEnglishName(e);r(t&&t.trim().length>0)}e("fontFamily");e("weightName");e("manufacturer");e("copyright");e("version");r(this.unitsPerEm>0)};V.prototype.toTables=function(){return Yn.fontToTable(this)};V.prototype.toBuffer=function(){console.warn("Font.toBuffer is deprecated. Use Font.toArrayBuffer instead.");return this.toArrayBuffer()};V.prototype.toArrayBuffer=function(){var e=this.toTables();var t=e.encode();var n=new ArrayBuffer(t.length);var r=new Uint8Array(n);for(var i=0;i<t.length;i++){r[i]=t[i]}return n};V.prototype.download=function(e){var t=this.getEnglishName("fontFamily");var n=this.getEnglishName("fontSubfamily");e=e||t.replace(/\s/g,"")+"-"+n+".otf";var r=this.toArrayBuffer();if(er()){window.URL=window.URL||window.webkitURL;if(window.URL){var i=new DataView(r);var a=new Blob([i],{type:"font/opentype"});var s=document.createElement("a");s.href=window.URL.createObjectURL(a);s.download=e;var o=document.createEvent("MouseEvents");o.initEvent("click",true,false);s.dispatchEvent(o)}else{console.warn("Font file could not be downloaded. Try using a different browser.")}}else{var l=require("fs");var u=nr(r);l.writeFileSync(e,u)}};V.prototype.fsSelectionValues={ITALIC:1,UNDERSCORE:2,NEGATIVE:4,OUTLINED:8,STRIKEOUT:16,BOLD:32,REGULAR:64,USER_TYPO_METRICS:128,WWS:256,OBLIQUE:512};V.prototype.usWidthClasses={ULTRA_CONDENSED:1,EXTRA_CONDENSED:2,CONDENSED:3,SEMI_CONDENSED:4,MEDIUM:5,SEMI_EXPANDED:6,EXPANDED:7,EXTRA_EXPANDED:8,ULTRA_EXPANDED:9};V.prototype.usWeightClasses={THIN:100,EXTRA_LIGHT:200,LIGHT:300,NORMAL:400,MEDIUM:500,SEMI_BOLD:600,BOLD:700,EXTRA_BOLD:800,BLACK:900};function ps(e,t){var n=JSON.stringify(e);var r=256;for(var i in t){var a=parseInt(i);if(!a||a<256){continue}if(JSON.stringify(t[i])===n){return a}if(r<=a){r=a+1}}t[r]=e;return r}function hs(e,t,n){var r=ps(t.name,n);return[{name:"tag_"+e,type:"TAG",value:t.tag},{name:"minValue_"+e,type:"FIXED",value:t.minValue<<16},{name:"defaultValue_"+e,type:"FIXED",value:t.defaultValue<<16},{name:"maxValue_"+e,type:"FIXED",value:t.maxValue<<16},{name:"flags_"+e,type:"USHORT",value:0},{name:"nameID_"+e,type:"USHORT",value:r}]}function fs(e,t,n){var r={};var i=new G.Parser(e,t);r.tag=i.parseTag();r.minValue=i.parseFixed();r.defaultValue=i.parseFixed();r.maxValue=i.parseFixed();i.skip("uShort",1);r.name=n[i.parseUShort()]||{};return r}function ds(e,t,n,r){var i=ps(t.name,r);var a=[{name:"nameID_"+e,type:"USHORT",value:i},{name:"flags_"+e,type:"USHORT",value:0}];for(var s=0;s<n.length;++s){var o=n[s].tag;a.push({name:"axis_"+e+" "+o,type:"FIXED",value:t.coordinates[o]<<16})}return a}function gs(e,t,n,r){var i={};var a=new G.Parser(e,t);i.name=r[a.parseUShort()]||{};a.skip("uShort",1);i.coordinates={};for(var s=0;s<n.length;++s){i.coordinates[n[s].tag]=a.parseFixed()}return i}function ms(e,t){var n=new E.Table("fvar",[{name:"version",type:"ULONG",value:65536},{name:"offsetToData",type:"USHORT",value:0},{name:"countSizePairs",type:"USHORT",value:2},{name:"axisCount",type:"USHORT",value:e.axes.length},{name:"axisSize",type:"USHORT",value:20},{name:"instanceCount",type:"USHORT",value:e.instances.length},{name:"instanceSize",type:"USHORT",value:4+e.axes.length*4}]);n.offsetToData=n.sizeOf();for(var r=0;r<e.axes.length;r++){n.fields=n.fields.concat(hs(r,e.axes[r],t))}for(var i=0;i<e.instances.length;i++){n.fields=n.fields.concat(ds(i,e.instances[i],e.axes,t))}return n}function vs(e,t,n){var r=new G.Parser(e,t);var i=r.parseULong();_.argument(i===65536,"Unsupported fvar table version.");var a=r.parseOffset16();r.skip("uShort",1);var s=r.parseUShort();var o=r.parseUShort();var l=r.parseUShort();var u=r.parseUShort();var c=[];for(var p=0;p<s;p++){c.push(fs(e,t+a+p*o,n))}var h=[];var f=t+a+s*o;for(var d=0;d<l;d++){h.push(gs(e,f+d*u,c,n))}return{axes:c,instances:h}}var bs={make:ms,parse:vs};var ys=function(){return{coverage:this.parsePointer(c.coverage),attachPoints:this.parseList(c.pointer(c.uShortList))}};var xs=function(){var e=this.parseUShort();_.argument(e===1||e===2||e===3,"Unsupported CaretValue table version.");if(e===1){return{coordinate:this.parseShort()}}else if(e===2){return{pointindex:this.parseShort()}}else if(e===3){return{coordinate:this.parseShort()}}};var Ss=function(){return this.parseList(c.pointer(xs))};var Os=function(){return{coverage:this.parsePointer(c.coverage),ligGlyphs:this.parseList(c.pointer(Ss))}};var _s=function(){this.parseUShort();return this.parseList(c.pointer(c.coverage))};function As(e,t){t=t||0;var n=new c(e,t);var r=n.parseVersion(1);_.argument(r===1||r===1.2||r===1.3,"Unsupported GDEF table version.");var i={version:r,classDef:n.parsePointer(c.classDef),attachList:n.parsePointer(ys),ligCaretList:n.parsePointer(Os),markAttachClassDef:n.parsePointer(c.classDef)};if(r>=1.2){i.markGlyphSets=n.parsePointer(_s)}return i}var Cs={parse:As};var R=new Array(10);R[1]=function e(){var t=this.offset+this.relativeOffset;var n=this.parseUShort();if(n===1){return{posFormat:1,coverage:this.parsePointer(c.coverage),value:this.parseValueRecord()}}else if(n===2){return{posFormat:2,coverage:this.parsePointer(c.coverage),values:this.parseValueRecordList()}}_.assert(false,"0x"+t.toString(16)+": GPOS lookup type 1 format must be 1 or 2.")};R[2]=function e(){var t=this.offset+this.relativeOffset;var n=this.parseUShort();_.assert(n===1||n===2,"0x"+t.toString(16)+": GPOS lookup type 2 format must be 1 or 2.");var r=this.parsePointer(c.coverage);var i=this.parseUShort();var a=this.parseUShort();if(n===1){return{posFormat:n,coverage:r,valueFormat1:i,valueFormat2:a,pairSets:this.parseList(c.pointer(c.list(function(){return{secondGlyph:this.parseUShort(),value1:this.parseValueRecord(i),value2:this.parseValueRecord(a)}})))}}else if(n===2){var s=this.parsePointer(c.classDef);var o=this.parsePointer(c.classDef);var l=this.parseUShort();var u=this.parseUShort();return{posFormat:n,coverage:r,valueFormat1:i,valueFormat2:a,classDef1:s,classDef2:o,class1Count:l,class2Count:u,classRecords:this.parseList(l,c.list(u,function(){return{value1:this.parseValueRecord(i),value2:this.parseValueRecord(a)}}))}}};R[3]=function e(){return{error:"GPOS Lookup 3 not supported"}};R[4]=function e(){return{error:"GPOS Lookup 4 not supported"}};R[5]=function e(){return{error:"GPOS Lookup 5 not supported"}};R[6]=function e(){return{error:"GPOS Lookup 6 not supported"}};R[7]=function e(){return{error:"GPOS Lookup 7 not supported"}};R[8]=function e(){return{error:"GPOS Lookup 8 not supported"}};R[9]=function e(){return{error:"GPOS Lookup 9 not supported"}};function Ts(e,t){t=t||0;var n=new c(e,t);var r=n.parseVersion(1);_.argument(r===1||r===1.1,"Unsupported GPOS table version "+r);if(r===1){return{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(R)}}else{return{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(R),variations:n.parseFeatureVariationsList()}}}var Is=new Array(10);function Es(e){return new E.Table("GPOS",[{name:"version",type:"ULONG",value:65536},{name:"scripts",type:"TABLE",value:new E.ScriptList(e.scripts)},{name:"features",type:"TABLE",value:new E.FeatureList(e.features)},{name:"lookups",type:"TABLE",value:new E.LookupList(e.lookups,Is)}])}var Ls={parse:Ts,make:Es};function Ns(e){var t={};e.skip("uShort");var n=e.parseUShort();_.argument(n===0,"Unsupported kern sub-table version.");e.skip("uShort",2);var r=e.parseUShort();e.skip("uShort",3);for(var i=0;i<r;i+=1){var a=e.parseUShort();var s=e.parseUShort();var o=e.parseShort();t[a+","+s]=o}return t}function Us(e){var t={};e.skip("uShort");var n=e.parseULong();if(n>1){console.warn("Only the first kern subtable is supported.")}e.skip("uLong");var r=e.parseUShort();var i=r&255;e.skip("uShort");if(i===0){var a=e.parseUShort();e.skip("uShort",3);for(var s=0;s<a;s+=1){var o=e.parseUShort();var l=e.parseUShort();var u=e.parseShort();t[o+","+l]=u}}return t}function Rs(e,t){var n=new G.Parser(e,t);var r=n.parseUShort();if(r===0){return Ns(n)}else if(r===1){return Us(n)}else{throw new Error("Unsupported kern table version ("+r+").")}}var Ps={parse:Rs};function Ms(e,t,n,r){var i=new G.Parser(e,t);var a=r?i.parseUShort:i.parseULong;var s=[];for(var o=0;o<n+1;o+=1){var l=a.call(i);if(r){l*=2}s.push(l)}return s}var ks={parse:Ms};function ws(e,n){var t=require("fs");t.readFile(e,function(e,t){if(e){return n(e.message)}n(null,tr(t))})}function Bs(e,t){var n=new XMLHttpRequest;n.open("get",e,true);n.responseType="arraybuffer";n.onload=function(){if(n.response){return t(null,n.response)}else{return t("Font could not be loaded: "+n.statusText)}};n.onerror=function(){t("Font could not be loaded")};n.send()}function Gs(e,t){var n=[];var r=12;for(var i=0;i<t;i+=1){var a=G.getTag(e,r);var s=G.getULong(e,r+4);var o=G.getULong(e,r+8);var l=G.getULong(e,r+12);n.push({tag:a,checksum:s,offset:o,length:l,compression:false});r+=16}return n}function Vs(e,t){var n=[];var r=44;for(var i=0;i<t;i+=1){var a=G.getTag(e,r);var s=G.getULong(e,r+4);var o=G.getULong(e,r+8);var l=G.getULong(e,r+12);var u=void 0;if(o<l){u="WOFF"}else{u=false}n.push({tag:a,offset:s,compression:u,compressedLength:o,length:l});r+=20}return n}function D(e,t){if(t.compression==="WOFF"){var n=new Uint8Array(e.buffer,t.offset+2,t.compressedLength-2);var r=new Uint8Array(t.length);ie(n,r);if(r.byteLength!==t.length){throw new Error("Decompression error: "+t.tag+" decompressed length doesn't match recorded length")}var i=new DataView(r.buffer,0);return{data:i,offset:0}}else{return{data:e,offset:t.offset}}}function Ds(e,t){t=t===undefined||t===null?{}:t;var n;var r;var i=new V({empty:true});var a=new DataView(e,0);var s;var o=[];var l=G.getTag(a,0);if(l===String.fromCharCode(0,1,0,0)||l==="true"||l==="typ1"){i.outlinesFormat="truetype";s=G.getUShort(a,4);o=Gs(a,s)}else if(l==="OTTO"){i.outlinesFormat="cff";s=G.getUShort(a,4);o=Gs(a,s)}else if(l==="wOFF"){var u=G.getTag(a,4);if(u===String.fromCharCode(0,1,0,0)){i.outlinesFormat="truetype"}else if(u==="OTTO"){i.outlinesFormat="cff"}else{throw new Error("Unsupported OpenType flavor "+l)}s=G.getUShort(a,12);o=Vs(a,s)}else{throw new Error("Unsupported OpenType signature "+l)}var c;var p;var h;var f;var d;var g;var m;var v;var b;var y;var x;var S;for(var O=0;O<s;O+=1){var _=o[O];var A=void 0;switch(_.tag){case"cmap":A=D(a,_);i.tables.cmap=He.parse(A.data,A.offset);i.encoding=new Ze(i.tables.cmap);break;case"cvt ":A=D(a,_);S=new G.Parser(A.data,A.offset);i.tables.cvt=S.parseShortList(_.length/2);break;case"fvar":p=_;break;case"fpgm":A=D(a,_);S=new G.Parser(A.data,A.offset);i.tables.fpgm=S.parseByteList(_.length);break;case"head":A=D(a,_);i.tables.head=Xt.parse(A.data,A.offset);i.unitsPerEm=i.tables.head.unitsPerEm;n=i.tables.head.indexToLocFormat;break;case"hhea":A=D(a,_);i.tables.hhea=qt.parse(A.data,A.offset);i.ascender=i.tables.hhea.ascender;i.descender=i.tables.hhea.descender;i.numberOfHMetrics=i.tables.hhea.numberOfHMetrics;break;case"hmtx":m=_;break;case"ltag":A=D(a,_);r=nn.parse(A.data,A.offset);break;case"maxp":A=D(a,_);i.tables.maxp=sn.parse(A.data,A.offset);i.numGlyphs=i.tables.maxp.numGlyphs;break;case"name":y=_;break;case"OS/2":A=D(a,_);i.tables.os2=In.parse(A.data,A.offset);break;case"post":A=D(a,_);i.tables.post=Nn.parse(A.data,A.offset);i.glyphNames=new Qe(i.tables.post);break;case"prep":A=D(a,_);S=new G.Parser(A.data,A.offset);i.tables.prep=S.parseByteList(_.length);break;case"glyf":h=_;break;case"loca":b=_;break;case"CFF ":c=_;break;case"kern":v=_;break;case"GDEF":f=_;break;case"GPOS":d=_;break;case"GSUB":g=_;break;case"meta":x=_;break}}var C=D(a,y);i.tables.name=On.parse(C.data,C.offset,r);i.names=i.tables.name;if(h&&b){var w=n===0;var T=D(a,b);var B=ks.parse(T.data,T.offset,i.numGlyphs,w);var I=D(a,h);i.glyphs=fr.parse(I.data,I.offset,B,i,t)}else if(c){var E=D(a,c);jt.parse(E.data,E.offset,i,t)}else{throw new Error("Font doesn't contain TrueType or CFF outlines.")}var L=D(a,m);$t.parse(i,L.data,L.offset,i.numberOfHMetrics,i.numGlyphs,i.glyphs,t);et(i,t);if(v){var N=D(a,v);i.kerningPairs=Ps.parse(N.data,N.offset)}else{i.kerningPairs={}}if(f){var U=D(a,f);i.tables.gdef=Cs.parse(U.data,U.offset)}if(d){var R=D(a,d);i.tables.gpos=Ls.parse(R.data,R.offset);i.position.init()}if(g){var P=D(a,g);i.tables.gsub=kn.parse(P.data,P.offset)}if(p){var M=D(a,p);i.tables.fvar=bs.parse(M.data,M.offset,i.names)}if(x){var k=D(a,x);i.tables.meta=Gn.parse(k.data,k.offset);i.metas=i.tables.meta}return i}function Fs(e,a,s){s=s===undefined||s===null?{}:s;var t=typeof window==="undefined";var n=t&&!s.isUrl?ws:Bs;return new Promise(function(r,i){n(e,function(e,t){if(e){if(a){return a(e)}else{i(e)}}var n;try{n=Ds(t,s)}catch(e){if(a){return a(e,null)}else{i(e)}}if(a){return a(null,n)}else{r(n)}})})}function js(e,t){var n=require("fs");var r=n.readFileSync(e);return Ds(tr(r),t)}var zs=Object.freeze({__proto__:null,Font:V,Glyph:g,Path:d,BoundingBox:o,_parse:G,parse:Ds,load:Fs,loadSync:js});C.BoundingBox=o;C.Font=V;C.Glyph=g;C.Path=d;C._parse=G;C.default=zs;C.load=Fs;C.loadSync=js;C.parse=Ds;Object.defineProperty(C,"__esModule",{value:true})});(function(e){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=e()}else if(typeof define==="function"&&define.amd){define([],e)}else{var t;if(typeof window!=="undefined"){t=window}else if(typeof global!=="undefined"){t=global}else if(typeof self!=="undefined"){t=self}else{t=this}t.earcut=e()}})(function(){var e,t,n;return function(){function c(a,s,o){function l(n,e){if(!s[n]){if(!a[n]){var t="function"==typeof require&&require;if(!e&&t)return t(n,!0);if(u)return u(n,!0);var r=new Error("Cannot find module '"+n+"'");throw r.code="MODULE_NOT_FOUND",r}var i=s[n]={exports:{}};a[n][0].call(i.exports,function(e){var t=a[n][1][e];return l(t||e)},i,i.exports,c,a,s,o)}return s[n].exports}for(var u="function"==typeof require&&require,e=0;e<o.length;e++)l(o[e]);return l}return c}()({1:[function(e,t,n){"use strict";t.exports=r;t.exports.default=r;function r(e,t,n){n=n||2;var r=t&&t.length,i=r?t[0]*n:e.length,a=g(e,0,i,n,true),s=[];if(!a||a.next===a.prev)return s;var o,l,u,c,p,h,f;if(r)a=v(e,t,a,n);if(e.length>80*n){o=u=e[0];l=c=e[1];for(var d=n;d<i;d+=n){p=e[d];h=e[d+1];if(p<o)o=p;if(h<l)l=h;if(p>u)u=p;if(h>c)c=h}f=Math.max(u-o,c-l);f=f!==0?1/f:0}m(a,s,n,o,l,f);return s}function g(e,t,n,r,i){var a,s;if(i===M(e,t,n,r)>0){for(a=t;a<n;a+=r)s=U(a,e[a],e[a+1],s)}else{for(a=n-r;a>=t;a-=r)s=U(a,e[a],e[a+1],s)}if(s&&o(s,s.next)){R(s);s=s.next}return s}function c(e,t){if(!e)return e;if(!t)t=e;var n=e,r;do{r=false;if(!n.steiner&&(o(n,n.next)||C(n.prev,n,n.next)===0)){R(n);n=t=n.prev;if(n===n.next)break;r=true}else{n=n.next}}while(r||n!==t);return t}function m(e,t,n,r,i,a,s){if(!e)return;if(!s&&a)S(e,r,i,a);var o=e,l,u;while(e.prev!==e.next){l=e.prev;u=e.next;if(a?h(e,r,i,a):p(e)){t.push(l.i/n);t.push(e.i/n);t.push(u.i/n);R(e);e=u.next;o=u.next;continue}e=u;if(e===o){if(!s){m(c(e),t,n,r,i,a,1)}else if(s===1){e=f(c(e),t,n);m(e,t,n,r,i,a,2)}else if(s===2){d(e,t,n,r,i,a)}break}}}function p(e){var t=e.prev,n=e,r=e.next;if(C(t,n,r)>=0)return false;var i=e.next.next;while(i!==e.prev){if(A(t.x,t.y,n.x,n.y,r.x,r.y,i.x,i.y)&&C(i.prev,i,i.next)>=0)return false;i=i.next}return true}function h(e,t,n,r){var i=e.prev,a=e,s=e.next;if(C(i,a,s)>=0)return false;var o=i.x<a.x?i.x<s.x?i.x:s.x:a.x<s.x?a.x:s.x,l=i.y<a.y?i.y<s.y?i.y:s.y:a.y<s.y?a.y:s.y,u=i.x>a.x?i.x>s.x?i.x:s.x:a.x>s.x?a.x:s.x,c=i.y>a.y?i.y>s.y?i.y:s.y:a.y>s.y?a.y:s.y;var p=O(o,l,t,n,r),h=O(u,c,t,n,r);var f=e.prevZ,d=e.nextZ;while(f&&f.z>=p&&d&&d.z<=h){if(f!==e.prev&&f!==e.next&&A(i.x,i.y,a.x,a.y,s.x,s.y,f.x,f.y)&&C(f.prev,f,f.next)>=0)return false;f=f.prevZ;if(d!==e.prev&&d!==e.next&&A(i.x,i.y,a.x,a.y,s.x,s.y,d.x,d.y)&&C(d.prev,d,d.next)>=0)return false;d=d.nextZ}while(f&&f.z>=p){if(f!==e.prev&&f!==e.next&&A(i.x,i.y,a.x,a.y,s.x,s.y,f.x,f.y)&&C(f.prev,f,f.next)>=0)return false;f=f.prevZ}while(d&&d.z<=h){if(d!==e.prev&&d!==e.next&&A(i.x,i.y,a.x,a.y,s.x,s.y,d.x,d.y)&&C(d.prev,d,d.next)>=0)return false;d=d.nextZ}return true}function f(e,t,n){var r=e;do{var i=r.prev,a=r.next.next;if(!o(i,a)&&l(i,r,r.next,a)&&E(i,a)&&E(a,i)){t.push(i.i/n);t.push(r.i/n);t.push(a.i/n);R(r);R(r.next);r=e=a}r=r.next}while(r!==e);return c(r)}function d(e,t,n,r,i,a){var s=e;do{var o=s.next.next;while(o!==s.prev){if(s.i!==o.i&&u(s,o)){var l=N(s,o);s=c(s,s.next);l=c(l,l.next);m(s,t,n,r,i,a);m(l,t,n,r,i,a);return}o=o.next}s=s.next}while(s!==e)}function v(e,t,n,r){var i=[],a,s,o,l,u;for(a=0,s=t.length;a<s;a++){o=t[a]*r;l=a<s-1?t[a+1]*r:e.length;u=g(e,o,l,r,false);if(u===u.next)u.steiner=true;i.push(_(u))}i.sort(b);for(a=0;a<i.length;a++){n=y(i[a],n);n=c(n,n.next)}return n}function b(e,t){return e.x-t.x}function y(e,t){var n=a(e,t);if(!n){return t}var r=N(n,e);var i=c(n,n.next);c(r,r.next);return t===n?i:t}function a(e,t){var n=t,r=e.x,i=e.y,a=-Infinity,s;do{if(i<=n.y&&i>=n.next.y&&n.next.y!==n.y){var o=n.x+(i-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(o<=r&&o>a){a=o;if(o===r){if(i===n.y)return n;if(i===n.next.y)return n.next}s=n.x<n.next.x?n:n.next}}n=n.next}while(n!==t);if(!s)return null;if(r===a)return s;var l=s,u=s.x,c=s.y,p=Infinity,h;n=s;do{if(r>=n.x&&n.x>=u&&r!==n.x&&A(i<c?r:a,i,u,c,i<c?a:r,i,n.x,n.y)){h=Math.abs(i-n.y)/(r-n.x);if(E(n,e)&&(h<p||h===p&&(n.x>s.x||n.x===s.x&&x(s,n)))){s=n;p=h}}n=n.next}while(n!==l);return s}function x(e,t){return C(e.prev,e,t.prev)<0&&C(t.next,e,e.next)<0}function S(e,t,n,r){var i=e;do{if(i.z===null)i.z=O(i.x,i.y,t,n,r);i.prevZ=i.prev;i.nextZ=i.next;i=i.next}while(i!==e);i.prevZ.nextZ=null;i.prevZ=null;s(i)}function s(e){var t,n,r,i,a,s,o,l,u=1;do{n=e;e=null;a=null;s=0;while(n){s++;r=n;o=0;for(t=0;t<u;t++){o++;r=r.nextZ;if(!r)break}l=u;while(o>0||l>0&&r){if(o!==0&&(l===0||!r||n.z<=r.z)){i=n;n=n.nextZ;o--}else{i=r;r=r.nextZ;l--}if(a)a.nextZ=i;else e=i;i.prevZ=a;a=i}n=r}a.nextZ=null;u*=2}while(s>1);return e}function O(e,t,n,r,i){e=32767*(e-n)*i;t=32767*(t-r)*i;e=(e|e<<8)&16711935;e=(e|e<<4)&252645135;e=(e|e<<2)&858993459;e=(e|e<<1)&1431655765;t=(t|t<<8)&16711935;t=(t|t<<4)&252645135;t=(t|t<<2)&858993459;t=(t|t<<1)&1431655765;return e|t<<1}function _(e){var t=e,n=e;do{if(t.x<n.x||t.x===n.x&&t.y<n.y)n=t;t=t.next}while(t!==e);return n}function A(e,t,n,r,i,a,s,o){return(i-s)*(t-o)-(e-s)*(a-o)>=0&&(e-s)*(r-o)-(n-s)*(t-o)>=0&&(n-s)*(a-o)-(i-s)*(r-o)>=0}function u(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!i(e,t)&&(E(e,t)&&E(t,e)&&L(e,t)&&(C(e.prev,e,t.prev)||C(e,t.prev,t))||o(e,t)&&C(e.prev,e,e.next)>0&&C(t.prev,t,t.next)>0)}function C(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function o(e,t){return e.x===t.x&&e.y===t.y}function l(e,t,n,r){var i=I(C(e,t,n));var a=I(C(e,t,r));var s=I(C(n,r,e));var o=I(C(n,r,t));if(i!==a&&s!==o)return true;if(i===0&&T(e,n,t))return true;if(a===0&&T(e,r,t))return true;if(s===0&&T(n,e,r))return true;if(o===0&&T(n,t,r))return true;return false}function T(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function I(e){return e>0?1:e<0?-1:0}function i(e,t){var n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&l(n,n.next,e,t))return true;n=n.next}while(n!==e);return false}function E(e,t){return C(e.prev,e,e.next)<0?C(e,t,e.next)>=0&&C(e,e.prev,t)>=0:C(e,t,e.prev)<0||C(e,e.next,t)<0}function L(e,t){var n=e,r=false,i=(e.x+t.x)/2,a=(e.y+t.y)/2;do{if(n.y>a!==n.next.y>a&&n.next.y!==n.y&&i<(n.next.x-n.x)*(a-n.y)/(n.next.y-n.y)+n.x)r=!r;n=n.next}while(n!==e);return r}function N(e,t){var n=new P(e.i,e.x,e.y),r=new P(t.i,t.x,t.y),i=e.next,a=t.prev;e.next=t;t.prev=e;n.next=i;i.prev=n;r.next=n;n.prev=r;a.next=r;r.prev=a;return r}function U(e,t,n,r){var i=new P(e,t,n);if(!r){i.prev=i;i.next=i}else{i.next=r.next;i.prev=r;r.next.prev=i;r.next=i}return i}function R(e){e.next.prev=e.prev;e.prev.next=e.next;if(e.prevZ)e.prevZ.nextZ=e.nextZ;if(e.nextZ)e.nextZ.prevZ=e.prevZ}function P(e,t,n){this.i=e;this.x=t;this.y=n;this.prev=null;this.next=null;this.z=null;this.prevZ=null;this.nextZ=null;this.steiner=false}r.deviation=function(e,t,n,r){var i=t&&t.length;var a=i?t[0]*n:e.length;var s=Math.abs(M(e,0,a,n));if(i){for(var o=0,l=t.length;o<l;o++){var u=t[o]*n;var c=o<l-1?t[o+1]*n:e.length;s-=Math.abs(M(e,u,c,n))}}var p=0;for(o=0;o<r.length;o+=3){var h=r[o]*n;var f=r[o+1]*n;var d=r[o+2]*n;p+=Math.abs((e[h]-e[d])*(e[f+1]-e[h+1])-(e[h]-e[f])*(e[d+1]-e[h+1]))}return s===0&&p===0?0:Math.abs((p-s)/s)};function M(e,t,n,r){var i=0;for(var a=t,s=n-r;a<n;a+=r){i+=(e[s]-e[a])*(e[a+1]+e[s+1]);s=a}return i}r.flatten=function(e){var t=e[0][0].length,n={vertices:[],holes:[],dimensions:t},r=0;for(var i=0;i<e.length;i++){for(var a=0;a<e[i].length;a++){for(var s=0;s<t;s++)n.vertices.push(e[i][a][s])}if(i>0){r+=e[i-1].length;n.holes.push(r)}}return n}},{}]},{},[1])(1)});(()=>{"use strict";var e={};const s={ANIM:{EASINGS:["linear","absolute","smoothstep","smootherstep","Cubic In","Cubic Out","Cubic In Out","Expo In","Expo Out","Expo In Out","Sin In","Sin Out","Sin In Out","Quart In","Quart Out","Quart In Out","Quint In","Quint Out","Quint In Out","Back In","Back Out","Back In Out","Elastic In","Elastic Out","Bounce In","Bounce Out"],EASING_LINEAR:0,EASING_ABSOLUTE:1,EASING_SMOOTHSTEP:2,EASING_SMOOTHERSTEP:3,EASING_CUBICSPLINE:4,EASING_CUBIC_IN:5,EASING_CUBIC_OUT:6,EASING_CUBIC_INOUT:7,EASING_EXPO_IN:8,EASING_EXPO_OUT:9,EASING_EXPO_INOUT:10,EASING_SIN_IN:11,EASING_SIN_OUT:12,EASING_SIN_INOUT:13,EASING_BACK_IN:14,EASING_BACK_OUT:15,EASING_BACK_INOUT:16,EASING_ELASTIC_IN:17,EASING_ELASTIC_OUT:18,EASING_BOUNCE_IN:19,EASING_BOUNCE_OUT:21,EASING_QUART_IN:22,EASING_QUART_OUT:23,EASING_QUART_INOUT:24,EASING_QUINT_IN:25,EASING_QUINT_OUT:26,EASING_QUINT_INOUT:27},OP:{OP_PORT_TYPE_VALUE:0,OP_PORT_TYPE_NUMBER:0,OP_PORT_TYPE_FUNCTION:1,OP_PORT_TYPE_TRIGGER:1,OP_PORT_TYPE_OBJECT:2,OP_PORT_TYPE_TEXTURE:2,OP_PORT_TYPE_ARRAY:3,OP_PORT_TYPE_DYNAMIC:4,OP_PORT_TYPE_STRING:5,OP_VERSION_PREFIX:"_v"},PORT:{PORT_DIR_IN:0,PORT_DIR_OUT:1},PACO:{PACO_CLEAR:0,PACO_VALUECHANGE:1,PACO_OP_DELETE:2,PACO_UNLINK:3,PACO_LINK:4,PACO_LOAD:5,PACO_OP_CREATE:6,PACO_OP_ENABLE:7,PACO_OP_DISABLE:8,PACO_UIATTRIBS:9,PACO_VARIABLES:10,PACO_TRIGGERS:11,PACO_PORT_SETVARIABLE:12,PACO_PORT_SETANIMATED:13,PACO_PORT_ANIM_UPDATED:14,PACO_DESERIALIZE:15}};const t=class{constructor(t,e,n,r,i,a){this._valuePort=n;this._varNamePort=r;this._op=t;this._type=e;this._typeId=-1;this._triggerPort=i;this._nextPort=a;this._btnCreate=t.inTriggerButton("Create new variable");this._btnCreate.setUiAttribs({hidePort:true});this._btnCreate.onTriggered=this._createVar.bind(this);this._helper=t.inUiTriggerButtons("",["Rename"]);this._helper.setUiAttribs({hidePort:true});this._helper.onTriggered=e=>{if(e=="Rename")CABLES.CMD.PATCH.renameVariable(t.varName.get())};this._op.setPortGroup("Variable",[this._helper,this._varNamePort,this._btnCreate]);this._op.on("uiParamPanel",this._updateVarNamesDropdown.bind(this));this._op.patch.addEventListener("variablesChanged",this._updateName.bind(this));this._op.patch.addEventListener("variableRename",this._renameVar.bind(this));this._varNamePort.onChange=this._updateName.bind(this);this._isTexture=this._valuePort.uiAttribs.objType==="texture";this._valuePort.changeAlways=true;if(this._triggerPort){this._triggerPort.onTriggered=()=>{this._setVarValue(true)}}else{this._valuePort.onChange=this._setVarValue.bind(this)}this._op.init=()=>{this._updateName();if(!this._triggerPort)this._setVarValue();this._updateErrorUi()};if(e=="array")this._typeId=s.OP.OP_PORT_TYPE_ARRAY;else if(e=="object")this._typeId=s.OP.OP_PORT_TYPE_OBJECT;else if(e=="string")this._typeId=s.OP.OP_PORT_TYPE_STRING;else if(e=="texture")this._typeId=s.OP.OP_PORT_TYPE_TEXTURE;else this._typeId=s.OP.OP_PORT_TYPE_VALUE}_updateErrorUi(){if(CABLES.UI){if(!this._varNamePort.get())this._op.setUiError("novarname","no variable selected");else{if(this._op.hasUiErrors){this._op.setUiError("novarname",null)}}}}_updateName(){const e=this._varNamePort.get();this._op.setTitle("var set");this._op.setUiAttrib({extendTitle:"#"+e});this._updateErrorUi();const t=this._op.patch.getVar(e);if(t&&!t.type)t.type=this._type;if(!this._op.patch.hasVar(e)&&e!=0&&!this._triggerPort){this._setVarValue()}if(!this._op.patch.hasVar(e)&&e!=0&&this._triggerPort){if(this._type=="string")this._op.patch.setVarValue(e,"");else if(this._type=="number")this._op.patch.setVarValue(e,"");else this._op.patch.setVarValue(e,null)}if(this._op.isCurrentUiOp()){this._updateVarNamesDropdown();this._op.refreshParams()}this._updateDisplay();this._op.patch.emitEvent("opVariableNameChanged",this._op,this._varNamePort.get())}_createVar(){CABLES.CMD.PATCH.createVariable(this._op,this._type,()=>{this._updateName()})}_updateDisplay(){this._valuePort.setUiAttribs({greyout:!this._varNamePort.get()})}_updateVarNamesDropdown(){if(CABLES.UI&&CABLES.UI.loaded&&CABLES.UI.loaded){const e=CABLES.UI.uiProfiler.start("[vars] _updateVarNamesDropdown");const t=[];const n=this._op.patch.getVars();for(const r in n)if(n[r].type==this._type&&r!="0")t.push(r);this._varNamePort.uiAttribs.values=t;e.finish()}}_renameVar(e,t){if(e!=this._varNamePort.get())return;this._varNamePort.set(t);this._updateName()}_setVarValue(e){const t=this._varNamePort.get();if(!t)return;const n=this._valuePort.get();if(this._typeId==s.OP.OP_PORT_TYPE_VALUE||this._typeId==s.OP.OP_PORT_TYPE_STRING){this._op.patch.setVarValue(t,n)}else if(this._typeId==s.OP.OP_PORT_TYPE_ARRAY){this._arr=[];CABLES.copyArray(n,this._arr);this._op.patch.setVarValue(t,this._arr)}else{if(this._typeId==s.OP.OP_PORT_TYPE_OBJECT){if(this._isTexture)this._op.patch.setVarValue(t,CGL.Texture.getEmptyTexture(this._op.patch.cgl));else this._op.patch.setVarValue(t,null);if(n&&n.tex&&n._cgl&&!this._isTexture)this._op.setUiError("texobj","Dont use object variables for textures, use varSetTexture");else this._op.setUiError("texobj",null)}this._op.patch.setVarValue(t,n)}if(e&&this._nextPort)this._nextPort.trigger()}};const n=class{constructor(e,t,n,r){this._op=e;this._type=t;this._varnamePort=n;this._variable=null;this._valueOutPort=r;this._listenerId=null;this._op.on("uiParamPanel",this._updateVarNamesDropdown.bind(this));this._op.on("uiErrorChange",this._updateTitle.bind(this));this._op.patch.on("variableRename",this._renameVar.bind(this));this._op.patch.on("variableDeleted",e=>{if(this._op.isCurrentUiOp())this._op.refreshParams()});this._varnamePort.onChange=this._changeVar.bind(this);this._op.patch.addEventListener("variablesChanged",this._init.bind(this));this._op.onDelete=()=>{if(this._variable&&this._listenerId)this._variable.off(this._listenerId)};this._op.init=()=>{this._init()}}get variable(){return this._variable}_changeVar(){if(this._variable&&this._listenerId){this._variable.off(this._listenerId)}this._init()}_renameVar(e,t){if(e!=this._varnamePort.get())return;this._varnamePort.set(t);this._updateVarNamesDropdown();this._updateTitle();this._listenerId=this._variable.on("change",this._setValueOut.bind(this))}_updateVarNamesDropdown(){if(CABLES.UI&&CABLES.UI.loaded){const e=[];const t=this._op.patch.getVars();for(const n in t)if(t[n].type==this._type&&n!="0")e.push(n);this._op.varName.uiAttribs.values=e}}_setValueOut(e){if(this._valueOutPort)this._valueOutPort.set(e)}_updateTitle(){if(this._variable){this._op.setUiError("unknownvar",null);this._op.setTitle("var get");this._op.setUiAttrib({extendTitle:"#"+this._varnamePort.get()});if(this._valueOutPort)this._valueOutPort.set(this._variable.getValue())}else{this._op.setUiError("unknownvar","unknown variable! - there is no setVariable with this name ("+this._varnamePort.get()+")");this._op.setUiAttrib({extendTitle:"#invalid"});if(this._valueOutPort)this._valueOutPort.set(0)}}_init(){this._updateVarNamesDropdown();if(this._variable&&this._listenerId)this._variable.off(this._listenerId);this._variable=this._op.patch.getVar(this._op.varName.get());if(this._variable)this._listenerId=this._variable.on("change",this._setValueOut.bind(this));this._updateTitle();this._op.patch.emitEvent("opVariableNameChanged",this._op,this._varnamePort.get())}};CABLES.VarSetOpWrapper=t;CABLES.VarGetOpWrapper=n;((this.CABLES=this.CABLES||{}).COREMODULES=this.CABLES.COREMODULES||{}).Vargetset=e.Cables})();(()=>{"use strict";var e={};const n="Ops.Ui.SubPatchInput";const r="Ops.Ui.SubPatchOutput";const t=class{constructor(n,e){e=e||{};this._op=n;n.patchId=n.addInPort(new CABLES.Port(n,"patchId",CABLES.OP_PORT_TYPE_STRING,{display:"readonly",hidePort:true}));n.setUiAttribs({subPatchOp:{version:2}});if(n.uiAttribs.parentOfSubpatch){n.patchId.set(n.uiAttribs.parentOfSubpatch)}else{if(e.subId)n.patchId.set(e.subId);else n.patchId.set(CABLES.generateUUID())}n.patchId.onChange=()=>{if(e.subId)n.patchId.value=e.subId};n.patch.on("subpatchCreated",()=>{this.createInOutOps()});n.on("loadedValueSet",()=>{this.createInOutOps()});n.init=()=>{n.setStorage({subPatchVer:2})};n.loadDependencies=(e,t)=>{if(CABLES.UI){gui.serverOps.loadProjectDependencies(e,()=>{if(t)t()})}else if(t)t()};n.on("delete",()=>{if(n.patch.clearSubPatchCache)n.patch.clearSubPatchCache(this.patchId);const t=n.patch.ops;for(let e=t.length-1;e>=0;e--)if(t[e]&&t[e].uiAttribs&&t[e].uiAttribs.subPatch==n.patchId.get())n.patch.deleteOp(t[e].id)});this._op.isExposableSubpatchOp=()=>{return true}}get patchId(){return this._op.patchId.get()}createInOutOps(){if(this._op.patch.clearSubPatchCache)this._op.patch.clearSubPatchCache(this.patchId);let e=this._op.patch.getSubPatchOp(this.patchId,n);let t=this._op.patch.getSubPatchOp(this.patchId,r);if(!e)this._op.patch.addOp(n,{subPatch:this.patchId,translate:{x:0,y:0}});if(!t)this._op.patch.addOp(r,{subPatch:this.patchId,translate:{x:0,y:0}})}};CABLES.SubPatchOp=t;((this.CABLES=this.CABLES||{}).COREMODULES=this.CABLES.COREMODULES||{}).Subpatchop=e.Cables})();(()=>{"use strict";var e={};class c{constructor(e){this._logs=[];this.initiator=e}stack(e){console.info("["+this.initiator+"] ",e);console.log((new Error).stack)}groupCollapsed(e){console.groupCollapsed("["+this.initiator+"] "+e)}table(e){console.table(e)}groupEnd(){console.groupEnd()}error(e){console.error("["+this.initiator+"]",...arguments);if(window.gui)window.gui.emitEvent("coreLogEvent",this.initiator,"error",arguments)}info(e){console.error("["+this.initiator+"]",...arguments);if(window.gui)window.gui.emitEvent("coreLogEvent",this.initiator,"info",arguments)}warn(e){console.warn("["+this.initiator+"]",...arguments);if(window.gui)window.gui.emitEvent("coreLogEvent",this.initiator,"warn",arguments)}verbose(){if(CABLES.UI&&CABLES.UI.logFilter.shouldPrint(this.initiator,...arguments)||!CABLES.logSilent)console.log("["+this.initiator+"]",...arguments);if(window.gui)window.gui.emitEvent("coreLogEvent",this.initiator,"verbose",arguments)}log(e){if(CABLES.UI&&CABLES.UI.logFilter.shouldPrint(this.initiator,...arguments)||!CABLES.logSilent)console.log("["+this.initiator+"]",...arguments);if(window.gui)window.gui.emitEvent("coreLogEvent",this.initiator,"log",arguments)}userInteraction(e){}}const i={};i.float32Concat=function(e,t){if(!(e instanceof Float32Array))e=new Float32Array(e);if(!(t instanceof Float32Array))t=new Float32Array(t);const n=new Float32Array(e.length+t.length);n.set(e);n.set(t,e.length);return n};const w=function(e){let t=e.split(".")[e.split(".").length-1];if(t.contains(CONSTANTS.OP.OP_VERSION_PREFIX)){const n=t.split(CONSTANTS.OP.OP_VERSION_PREFIX)[1];t=t.substring(0,t.length-(CONSTANTS.OP.OP_VERSION_PREFIX+n).length)}return t};const B=function(t){for(let e=t.length-1;e>0;e--){const n=Math.floor(Math.seededRandom()*(e+1));const r=t[e];t[e]=t[n];t[n]=r}return t};const t={};const n=function(){let e=Math.random().toString(36).substr(2,9);if(t.hasOwnProperty(e))e=n();t[e]=true;return e};const G=null&&n;const r=function(){let n=(new Date).getTime();const e="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=(n+Math.random()*16)%16|0;n=Math.floor(n/16);return(e=="x"?t:t&3|8).toString(16)});return e};const V=null&&r;const D=null&&r;function a(e){for(const t in e){if(e[t]&&typeof objValue==="object"&&e[t].constructor===Object)e[t]=a(e[t]);if(e[t]===null||e[t]===undefined)delete e[t];else if(Array.isArray(e[t])&&e[t].length==0)delete e[t]}return e}const s=function(n,e="id"){let r=0;if(Array.prototype.reduce){r=n.split("").reduce((e,t)=>{e=(e<<5)-e+t.charCodeAt(0);return e&e},0)}else{if(n.length>0){for(let t=0;t<n.length;t++){let e=n.charCodeAt(t);r=(r<<5)-r+e;r&=r}}}return e+""+r};const F=null&&s;let o=0;const j=function(){o++;return o};const z=function(e){const t=Math.max(0,Math.min(1,(e-0)/(1-0)));e=t*t*(3-2*t);return e};const H=function(e){const t=Math.max(0,Math.min(1,(e-0)/(1-0)));e=t*t*t*(t*(t*6-15)+10);return e};const X=function(e,t,n){return Math.min(Math.max(e,t),n)};const Y=function(e,t,n,r,i,a){if(e>=n)return i;if(e<=t)return r;let s=false;const o=Math.min(t,n);const l=Math.max(t,n);if(o!=t)s=true;let u=false;const c=Math.min(r,i);const p=Math.max(r,i);if(c!=r)u=true;let h=0;let f=0;if(s)h=(l-e)*(p-c)/(l-o);else h=(e-o)*(p-c)/(l-o);if(u)f=p-h;else f=h+c;if(!a)return f;if(a==1){e=Math.max(0,Math.min(1,(f-r)/(i-r)));return r+e*e*(3-2*e)*(i-r)}if(a==2){e=Math.max(0,Math.min(1,(f-r)/(i-r)));return r+e*e*e*(e*(e*6-15)+10)*(i-r)}return f};Math.randomSeed=1;Math.setRandomSeed=function(e){Math.randomSeed=e*50728129;if(e!=0){Math.randomSeed=Math.seededRandom()*17624813;Math.randomSeed=Math.seededRandom()*9737333}};Math.seededRandom=function(e,t){if(Math.randomSeed===0)Math.randomSeed=Math.random()*999;e=e||1;t=t||0;Math.randomSeed=(Math.randomSeed*9301+49297)%233280;const n=Math.randomSeed/233280;return t+n*(e-t)};i.isNumeric=function(e){return!isNaN(parseFloat(e))&&isFinite(e)};i.isArray=function(e){return Object.prototype.toString.call(e)==="[object Array]"};String.prototype.endl=function(){return this+"\n"};String.prototype.startsWith=function(e){return this.indexOf(e)===0};String.prototype.endsWith=String.prototype.endsWith||function(e){return this.match(e+"$")==e};String.prototype.contains=String.prototype.contains||function(e){return this.indexOf(e)>-1};const W=function(e){if(e.contains("?"))e+="&";else e+="?";return e+"cache="+CABLES.uuid()};const q=function(t,n){if(!t)return null;n=n||[];n.length=t.length;for(let e=0;e<t.length;e++){n[e]=t[e]}return n};const Z=function(e){let t=CABLES.filename(e);const n=t.split(".");t=n[0];return t};const K=function(){console.log("logstack",(new Error).stack)};const Q=function(e){let t="";if(!e)return"";if(e.startsWith("data:")&&e.contains(":")){const n=e.split(",");return n[0]}const n=(e+"").split("/");if(n.length>0){const r=n[n.length-1];let e=r.split("?");t=e[0]}return t||""};const J=function(e,t,n,r,i){u({url:e,cb:t,method:n,data:r,contenttype:i,sync:true})};const $=function(e,t,n,r,i,a,s={},o={}){const l={url:e,cb:t,method:n,data:r,contenttype:i,sync:false,jsonP:a,headers:s};if(o&&o.credentials)l.credentials=o.credentials;u(l)};const u=function(t){if(!t.hasOwnProperty("asynch"))t.asynch=true;let n;try{n=new XMLHttpRequest}catch(e){}n.onreadystatechange=function(){if(n.readyState!=4)return;if(t.cb){if(n.status==200||n.status==0)t.cb(false,n.responseText,n);else t.cb(true,n.responseText,n)}};try{n.open(t.method?t.method.toUpperCase():"GET",t.url,!t.sync)}catch(e){if(t.cb&&e)t.cb(true,e.msg,n)}if(typeof t.headers==="object"){const r=Object.keys(t.headers);for(let e=0;e<r.length;e++){const i=r[e];const a=t.headers[i];n.setRequestHeader(i,a)}}if(t.credentials&&t.credentials!=="omit"){n.withCredentials=true}try{if(!t.post&&!t.data){n.send()}else{n.setRequestHeader("Content-type",t.contenttype?t.contenttype:"application/x-www-form-urlencoded");n.send(t.data||t.post)}}catch(e){if(t.cb)t.cb(true,e.msg,n)}};const ee=function(e){if(!e&&e!==0)return"Unidentified";const t={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"};if(t[e]){return t[e]}else{return String.fromCharCode(e)}};window.performance=window.performance||{offset:Date.now(),now:function e(){return Date.now()-this.offset}};const l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";const p=new Uint8Array(256);for(let e=0;e<l.length;e++)p[l.charCodeAt(e)]=e;const h=p;const te=function(e){if(e.buffer)e=e.buffer;let t=new Uint8Array(e),n,r=t.length,i="";for(n=0;n<r;n+=3){i+=l[t[n]>>2];i+=l[(t[n]&3)<<4|t[n+1]>>4];i+=l[(t[n+1]&15)<<2|t[n+2]>>6];i+=l[t[n+2]&63]}if(r%3===2)i=i.substring(0,i.length-1)+"=";else if(r%3===1)i=i.substring(0,i.length-2)+"==";return i};const f=function(e){let t=e.length*.75,n=e.length,r,i=0,a,s,o,l;if(e[e.length-1]==="="){t--;if(e[e.length-2]==="=")t--}let u=new ArrayBuffer(t),c=new Uint8Array(u);for(r=0;r<n;r+=4){a=h[e.charCodeAt(r)];s=h[e.charCodeAt(r+1)];o=h[e.charCodeAt(r+2)];l=h[e.charCodeAt(r+3)];c[i++]=a<<2|s>>4;c[i++]=(s&15)<<4|o>>2;c[i++]=(o&3)<<6|l&63}return u};class d{constructor(e){this._init();this._first=true;this._wireMesh=null;if(e)this.apply(e)}_init(){this._max=[-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE];this._min=[Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE];this._center=[0,0,0];this._size=[0,0,0];this._maxAxis=0;this._first=true}get maxAxis(){return this._maxAxis||1}get size(){return this._size}get center(){return this._center}get x(){return this._center[0]}get y(){return this._center[1]}get z(){return this._center[2]}get minX(){return this._min[0]}get minY(){return this._min[1]}get minZ(){return this._min[2]}get maxX(){return this._max[0]}get maxY(){return this._max[1]}get maxZ(){return this._max[2]}apply(t,e){if(!t){return}if(t instanceof d){const n=t;this.applyPos(n.maxX,n.maxY,n.maxZ);this.applyPos(n.minX,n.minY,n.minZ)}else{for(let e=0;e<t.vertices.length;e+=3)this.applyPos(t.vertices[e],t.vertices[e+1],t.vertices[e+2])}this.calcCenterSize()}copy(){return new d(this)}get changed(){return!(this._max[0]==-Number.MAX_VALUE&&this._max[1]==-Number.MAX_VALUE&&this._max[2]==-Number.MAX_VALUE)}applyPos(e,t,n){if(e==Number.MAX_VALUE||e==-Number.MAX_VALUE||t==Number.MAX_VALUE||t==-Number.MAX_VALUE||n==Number.MAX_VALUE||n==-Number.MAX_VALUE)return;if(!CABLES.UTILS.isNumeric(e)||!CABLES.UTILS.isNumeric(t)||!CABLES.UTILS.isNumeric(n))return;if(this._first){this._max[0]=e;this._max[1]=t;this._max[2]=n;this._min[0]=e;this._min[1]=t;this._min[2]=n;this._first=false;return}this._max[0]=Math.max(this._max[0],e);this._max[1]=Math.max(this._max[1],t);this._max[2]=Math.max(this._max[2],n);this._min[0]=Math.min(this._min[0],e);this._min[1]=Math.min(this._min[1],t);this._min[2]=Math.min(this._min[2],n)}calcCenterSize(){if(this._first)return;this._size[0]=this._max[0]-this._min[0];this._size[1]=this._max[1]-this._min[1];this._size[2]=this._max[2]-this._min[2];this._center[0]=(this._min[0]+this._max[0])/2;this._center[1]=(this._min[1]+this._max[1])/2;this._center[2]=(this._min[2]+this._max[2])/2;this._maxAxis=Math.max(this._size[2],Math.max(this._size[0],this._size[1]))}mulMat4(e){if(this._first){this._max[0]=0;this._max[1]=0;this._max[2]=0;this._min[0]=0;this._min[1]=0;this._min[2]=0;this._first=false}vec3.transformMat4(this._max,this._max,e);vec3.transformMat4(this._min,this._min,e);this.calcCenterSize()}render(e,t,n){if(!this._wireMesh)this._wireMesh=new CGL.WireCube(e);e.pushModelMatrix();mat4.translate(e.mMatrix,e.mMatrix,this._center);if(CABLES.UI&&n){CABLES.UI.OverlayMeshes.drawCube(n,this._size[0]/2,this._size[1]/2,this._size[2]/2)}e.popModelMatrix()}}const g=function(e){this.name=e||"unknown";this._log=new c("cgl_geometry");this.faceVertCount=3;this.glPrimitive=null;this._attributes={};this._vertices=[];this.verticesIndices=[];this.isGeometry=true;this.morphTargets=[];Object.defineProperty(this,"vertices",{get(){return this._vertices},set(e){this.setVertices(e)}});Object.defineProperty(this,"texCoords",{get(){const e=this.getAttribute("texCoords");if(!e)return[];return e.data},set(e){this.setAttribute("texCoords",e,2)}});Object.defineProperty(this,"vertexNormals",{get(){const e=this.getAttribute("vertexNormals");if(!e)return[];return e.data},set(e){this.setAttribute("vertexNormals",e,3)}});Object.defineProperty(this,"tangents",{get(){const e=this.getAttribute("tangents");if(!e)return[];return e.data},set(e){this.setAttribute("tangents",e,3)}});Object.defineProperty(this,"biTangents",{get(){const e=this.getAttribute("biTangents");if(!e)return[];return e.data},set(e){this.setAttribute("biTangents",e,3)}});Object.defineProperty(this,"vertexColors",{get(){const e=this.getAttribute("vertexColors");if(!e)return[];return e.data},set(e){this.setAttribute("vertexColors",e,4)}})};g.prototype.clear=function(){this._vertices=new Float32Array([]);this.verticesIndices=[];this.texCoords=new Float32Array([]);this.vertexNormals=new Float32Array([]);this.tangents=[];this.biTangents=[];this._attributes={}};g.prototype.getAttributes=function(){return this._attributes};g.prototype.getAttribute=function(e){for(const t in this._attributes){if(this._attributes[t].name==e)return this._attributes[t]}return null};g.prototype.setAttribute=function(e,t,n){let r="";if(!n||n>4){console.log("itemsize wrong?",n,e);this._log.stack("itemsize");n=3}if(n==1)r="float";else if(n==2)r="vec2";else if(n==3)r="vec3";else if(n==4)r="vec4";const i={name:e,data:t,itemSize:n,type:r};this._attributes[e]=i};g.prototype.copyAttribute=function(e,t){const n=this.getAttribute(e);t.setAttribute(e,new Float32Array(n.data),n.itemSize)};g.prototype.setVertices=function(e){if(e instanceof Float32Array)this._vertices=e;else this._vertices=new Float32Array(e)};g.prototype.setTexCoords=function(e){if(e instanceof Float32Array)this.texCoords=e;else this.texCoords=new Float32Array(e)};g.prototype.calcNormals=function(e){const t={smooth:e};this.calculateNormals(t)};g.prototype.flipNormals=function(t,n,r){let i=vec3.create();if(t==undefined)t=1;if(n==undefined)n=1;if(r==undefined)r=1;for(let e=0;e<this.vertexNormals.length;e+=3){vec3.set(i,this.vertexNormals[e+0],this.vertexNormals[e+1],this.vertexNormals[e+2]);i[0]*=-t;i[1]*=-n;i[2]*=-r;vec3.normalize(i,i);this.vertexNormals[e+0]=i[0];this.vertexNormals[e+1]=i[1];this.vertexNormals[e+2]=i[2]}};g.prototype.getNumTriangles=function(){if(this.verticesIndices&&this.verticesIndices.length)return this.verticesIndices.length/3;return this.vertices.length/3};g.prototype.flipVertDir=function(){const t=[];t.length=this.verticesIndices.length;for(let e=0;e<this.verticesIndices.length;e+=3){t[e]=this.verticesIndices[e+2];t[e+1]=this.verticesIndices[e+1];t[e+2]=this.verticesIndices[e]}this.verticesIndices=t};g.prototype.setPointVertices=function(t){if(t.length%3!==0){this._log.error("SetPointVertices: Array must be multiple of three.");return}if(!(t instanceof Float32Array))this.vertices=new Float32Array(t);else this.vertices=t;if(!(this.texCoords instanceof Float32Array))this.texCoords=new Float32Array(t.length/3*2);this.verticesIndices.length=t.length/3;for(let e=0;e<t.length/3;e++){this.verticesIndices[e]=e;this.texCoords[e*2]=0;this.texCoords[e*2+1]=0}};g.prototype.merge=function(t){if(!t)return;if(this.isIndexed()!=t.isIndexed()){if(this.isIndexed()){this.unIndex(false,true)}if(t.isIndexed()){const e=t.copy();e.unIndex(false,true);t=e}}const n=this.verticesIndices.length;const r=this._vertices.length/3;this.verticesIndices.length+=t.verticesIndices.length;for(let e=0;e<t.verticesIndices.length;e++)this.verticesIndices[n+e]=t.verticesIndices[e]+r;this.vertices=i.float32Concat(this._vertices,t.vertices);this.texCoords=i.float32Concat(this.texCoords,t.texCoords);this.vertexNormals=i.float32Concat(this.vertexNormals,t.vertexNormals);this.tangents=i.float32Concat(this.tangents,t.tangents);this.biTangents=i.float32Concat(this.biTangents,t.biTangents)};g.prototype.copy=function(){const t=new g(this.name+" copy");t.faceVertCount=this.faceVertCount;t.glPrimitive=this.glPrimitive;t.setVertices(this._vertices.slice(0));if(this.verticesIndices){t.verticesIndices.length=this.verticesIndices.length;for(let e=0;e<this.verticesIndices.length;e++)t.verticesIndices[e]=this.verticesIndices[e]}for(let e in this._attributes)this.copyAttribute(e,t);t.morphTargets.length=this.morphTargets.length;for(let e=0;e<this.morphTargets.length;e++)t.morphTargets[e]=this.morphTargets[e];return t};g.prototype.calculateNormals=function(t){t=t||{};if(t.smooth===false)this.unIndex();const n=vec3.create();const r=vec3.create();const i=vec3.create();function a(e){vec3.subtract(n,e[0],e[1]);vec3.subtract(r,e[0],e[2]);vec3.cross(i,n,r);vec3.normalize(i,i);if(t&&t.forceZUp){if(i[2]<0){i[0]*=-1;i[1]*=-1;i[2]*=-1}}return i}this.getVertexVec=function(e){const t=[0,0,0];t[0]=this.vertices[e*3+0];t[1]=this.vertices[e*3+1];t[2]=this.vertices[e*3+2];return t};if(!(this.vertexNormals instanceof Float32Array)||this.vertexNormals.length!=this.vertices.length)this.vertexNormals=new Float32Array(this.vertices.length);for(let e=0;e<this.vertices.length;e++){this.vertexNormals[e]=0}if(!this.isIndexed()){const s=[];for(let e=0;e<this.vertices.length;e+=9){const o=[[this.vertices[e+0],this.vertices[e+1],this.vertices[e+2]],[this.vertices[e+3],this.vertices[e+4],this.vertices[e+5]],[this.vertices[e+6],this.vertices[e+7],this.vertices[e+8]]];const l=a(o);s.push(l[0],l[1],l[2],l[0],l[1],l[2],l[0],l[1],l[2])}this.vertexNormals=s}else{const u=[];u.length=Math.floor(this.verticesIndices.length/3);for(let e=0;e<this.verticesIndices.length;e+=3){const o=[this.getVertexVec(this.verticesIndices[e+0]),this.getVertexVec(this.verticesIndices[e+1]),this.getVertexVec(this.verticesIndices[e+2])];u[e/3]=a(o);this.vertexNormals[this.verticesIndices[e+0]*3+0]+=u[e/3][0];this.vertexNormals[this.verticesIndices[e+0]*3+1]+=u[e/3][1];this.vertexNormals[this.verticesIndices[e+0]*3+2]+=u[e/3][2];this.vertexNormals[this.verticesIndices[e+1]*3+0]+=u[e/3][0];this.vertexNormals[this.verticesIndices[e+1]*3+1]+=u[e/3][1];this.vertexNormals[this.verticesIndices[e+1]*3+2]+=u[e/3][2];this.vertexNormals[this.verticesIndices[e+2]*3+0]+=u[e/3][0];this.vertexNormals[this.verticesIndices[e+2]*3+1]+=u[e/3][1];this.vertexNormals[this.verticesIndices[e+2]*3+2]+=u[e/3][2]}for(let t=0;t<this.verticesIndices.length;t+=3){for(let e=0;e<3;e++){const c=[this.vertexNormals[this.verticesIndices[t+e]*3+0],this.vertexNormals[this.verticesIndices[t+e]*3+1],this.vertexNormals[this.verticesIndices[t+e]*3+2]];vec3.normalize(c,c);this.vertexNormals[this.verticesIndices[t+e]*3+0]=c[0];this.vertexNormals[this.verticesIndices[t+e]*3+1]=c[1];this.vertexNormals[this.verticesIndices[t+e]*3+2]=c[2]}}}};g.prototype.calcTangentsBitangents=function(){if(!this.vertices.length){return}if(!this.vertexNormals.length){return}if(!this.texCoords.length){const x=this.vertices.length/3*2;this.texCoords=new Float32Array(x);for(let e=0;e<x;e+=1)this.texCoords[e]=0}if(!this.verticesIndices||!this.verticesIndices.length){return}if(this.verticesIndices.length%3!==0){this._log.error("Vertex indices mismatch!");return}const t=this.verticesIndices.length/3;const n=this.vertices.length/3;this.tangents=new Float32Array(this.vertexNormals.length);this.biTangents=new Float32Array(this.vertexNormals.length);const r=[];r.length=n*2;const i=vec3.create();const a=vec3.create();const s=vec3.create();const o=vec2.create();const l=vec2.create();const u=vec2.create();const c=vec3.create();const p=vec3.create();for(let e=0;e<t;e+=1){const S=this.verticesIndices[e*3];const O=this.verticesIndices[e*3+1];const _=this.verticesIndices[e*3+2];vec3.set(i,this.vertices[S*3],this.vertices[S*3+1],this.vertices[S*3+2]);vec3.set(a,this.vertices[O*3],this.vertices[O*3+1],this.vertices[O*3+2]);vec3.set(s,this.vertices[_*3],this.vertices[_*3+1],this.vertices[_*3+2]);vec2.set(o,this.texCoords[S*2],this.texCoords[S*2+1]);vec2.set(l,this.texCoords[O*2],this.texCoords[O*2+1]);vec2.set(u,this.texCoords[_*2],this.texCoords[_*2+1]);const A=a[0]-i[0];const C=s[0]-i[0];const T=a[1]-i[1];const I=s[1]-i[1];const E=a[2]-i[2];const L=s[2]-i[2];const N=l[0]-o[0];const U=u[0]-o[0];const R=l[1]-o[1];const P=u[1]-o[1];const M=1/(N*P-U*R);vec3.set(c,(P*A-R*C)*M,(P*T-R*I)*M,(P*E-R*L)*M);vec3.set(p,(N*C-U*A)*M,(N*I-U*T)*M,(N*L-U*E)*M);r[S]=c;r[O]=c;r[_]=c;r[S+n]=p;r[O+n]=p;r[_+n]=p}const h=vec3.create();const f=vec3.create();const d=vec3.create();const g=vec3.create();const m=vec3.create();const v=vec3.create();const b=vec3.create();const y=vec3.create();for(let e=0;e<n;e+=1){if(!r[e])continue;vec3.set(h,this.vertexNormals[e*3],this.vertexNormals[e*3+1],this.vertexNormals[e*3+2]);vec3.set(f,r[e][0],r[e][1],r[e][2]);const k=vec3.dot(h,f);vec3.scale(m,h,k);vec3.subtract(v,f,m);vec3.normalize(y,v);vec3.cross(b,h,f);const w=1;vec3.scale(d,y,1/w);vec3.cross(g,h,d);this.tangents[e*3+0]=d[0];this.tangents[e*3+1]=d[1];this.tangents[e*3+2]=d[2];this.biTangents[e*3+0]=g[0];this.biTangents[e*3+1]=g[1];this.biTangents[e*3+2]=g[2]}};g.prototype.isIndexed=function(){if(this._vertices.length==0)return true;return this.verticesIndices.length!=0};g.prototype.unIndex=function(e,t){const n=[];const r=[];let i=0;for(let e in this._attributes){const a=this._attributes[e];let n=[];for(let t=0;t<this.verticesIndices.length;t+=3){for(let e=0;e<3;e++){if(a.itemSize==3)n.push(a.data[this.verticesIndices[t+e]*3+0],a.data[this.verticesIndices[t+e]*3+1],a.data[this.verticesIndices[t+e]*3+2]);else if(a.itemSize==4)n.push(a.data[this.verticesIndices[t+e]*4+0],a.data[this.verticesIndices[t+e]*4+1],a.data[this.verticesIndices[t+e]*4+2],a.data[this.verticesIndices[t+e]*4+3]);else if(a.itemSize==2)n.push(a.data[this.verticesIndices[t+e]*2+0],a.data[this.verticesIndices[t+e]*2+1]);else if(a.itemSize==1)n.push(a.data[this.verticesIndices[t+e]]);else console.log("unknown attr",a)}}this.setAttribute(a.name,n,a.itemSize)}for(let e=0;e<this.verticesIndices.length;e+=3){n.push(this.vertices[this.verticesIndices[e+0]*3+0],this.vertices[this.verticesIndices[e+0]*3+1],this.vertices[this.verticesIndices[e+0]*3+2]);r.push(i);i++;n.push(this.vertices[this.verticesIndices[e+1]*3+0],this.vertices[this.verticesIndices[e+1]*3+1],this.vertices[this.verticesIndices[e+1]*3+2]);r.push(i);i++;n.push(this.vertices[this.verticesIndices[e+2]*3+0],this.vertices[this.verticesIndices[e+2]*3+1],this.vertices[this.verticesIndices[e+2]*3+2]);r.push(i);i++}this.vertices=n;this.verticesIndices=[];if(e)this.verticesIndices=r;if(!t)this.calculateNormals()};g.prototype.calcBarycentric=function(){let t=[];t.length=this.vertices.length;for(let e=0;e<this.vertices.length;e++)t[e]=0;let n=0;for(let e=0;e<this.vertices.length;e+=3){t[e+n]=1;n++;if(n==3)n=0}this.setAttribute("attrBarycentric",t,3)};g.prototype.getBounds=function(){return new d(this)};g.prototype.center=function(e,t,n){if(e===undefined){e=true;t=true;n=true}let r=0;const i=this.getBounds();const a=[i.minX+(i.maxX-i.minX)/2,i.minY+(i.maxY-i.minY)/2,i.minZ+(i.maxZ-i.minZ)/2];for(r=0;r<this.vertices.length;r+=3){if(this.vertices[r+0]==this.vertices[r+0]){if(e)this.vertices[r+0]-=a[0];if(t)this.vertices[r+1]-=a[1];if(n)this.vertices[r+2]-=a[2]}}return a};g.prototype.mapTexCoords2d=function(){const t=this.getBounds();const n=this.vertices.length/3;this.texCoords=new Float32Array(n*2);for(let e=0;e<n;e++){const r=this.vertices[e*3+0];const i=this.vertices[e*3+1];this.texCoords[e*2+0]=r/(t.maxX-t.minX)+.5;this.texCoords[e*2+1]=1-i/(t.maxY-t.minY)+.5}};g.prototype.getInfoOneLine=function(){let e="";if(this.faceVertCount==3&&this.verticesIndices)e+=this.verticesIndices.length/3;else e+=0;e+=" tris ";if(this.vertices)e+=this.vertices.length/3;else e+=0;e+=" verts";return e};g.prototype.getInfo=function(){const e={};if(this.faceVertCount==3&&this.verticesIndices)e.numFaces=this.verticesIndices.length/3;else e.numFaces=0;if(this.verticesIndices&&this.verticesIndices.length)e.indices=this.verticesIndices.length;if(this.vertices)e.numVerts=this.vertices.length/3;else e.numVerts=0;if(this.vertexNormals)e.numNormals=this.vertexNormals.length/3;else e.numNormals=0;if(this.texCoords)e.numTexCoords=this.texCoords.length/2;else e.numTexCoords=0;if(this.tangents)e.numTangents=this.tangents.length/3;else e.numTangents=0;if(this.biTangents)e.numBiTangents=this.biTangents.length/3;else e.numBiTangents=0;if(this.biTangents)e.numBiTangents=this.biTangents.length/3;else e.numBiTangents=0;if(this.vertexColors)e.numVertexColors=this.vertexColors.length/4;else e.numVertexColors=0;if(this.getAttributes())e.numAttribs=Object.keys(this.getAttributes()).length;else e.numAttribs=0;e.isIndexed=this.isIndexed();return e};g.buildFromFaces=function(t,e,n){const r=[];const i=[];for(let e=0;e<t.length;e+=3){const s=t[e+0];const o=t[e+1];const l=t[e+2];const u=[-1,-1,-1];if(n)for(let e=0;e<r.length;e+=3){if(r[e+0]==s[0]&&r[e+1]==s[1]&&r[e+2]==s[2])u[0]=e/3;if(r[e+0]==o[0]&&r[e+1]==o[1]&&r[e+2]==o[2])u[1]=e/3;if(r[e+0]==l[0]&&r[e+1]==l[1]&&r[e+2]==l[2])u[2]=e/3}if(u[0]==-1){r.push(s[0],s[1],s[2]);u[0]=(r.length-1)/3}if(u[1]==-1){r.push(o[0],o[1],o[2]);u[1]=(r.length-1)/3}if(u[2]==-1){r.push(l[0],l[1],l[2]);u[2]=(r.length-1)/3}i.push(parseInt(u[0],10));i.push(parseInt(u[1],10));i.push(parseInt(u[2],10))}const a=new g(e);a.name=e;a.vertices=r;a.verticesIndices=i;return a};g.json2geom=function(t){const n=new g("jsonMeshGeom");n.verticesIndices=[];n.vertices=t.vertices||[];n.vertexNormals=t.normals||[];n.vertexColors=t.colors||[];n.tangents=t.tangents||[];n.biTangents=t.bitangents||[];if(t.texturecoords)n.setTexCoords(t.texturecoords[0]);if(t.vertices_b64)n.vertices=new Float32Array(f(t.vertices_b64));if(t.normals_b64)n.vertexNormals=new Float32Array(f(t.normals_b64));if(t.tangents_b64)n.tangents=new Float32Array(f(t.tangents_b64));if(t.bitangents_b64)n.biTangents=new Float32Array(f(t.bitangents_b64));if(t.texturecoords_b64)n.setTexCoords(new Float32Array(f(t.texturecoords_b64[0])));if(t.faces_b64){n.verticesIndices=new Uint32Array(f(t.faces_b64))}else{n.verticesIndices.length=t.faces.length*3;for(let e=0;e<t.faces.length;e++){n.verticesIndices[e*3]=t.faces[e][0];n.verticesIndices[e*3+1]=t.faces[e][1];n.verticesIndices[e*3+2]=t.faces[e][2]}}return n};const m=function(){this._log=new c("eventtarget");this._eventCallbacks={};this._logName="";this._logEvents=false;this._listeners={};this.addEventListener=this.on=function(e,t,n){const r={id:(n||"")+CABLES.simpleId(),name:e,cb:t};if(!this._eventCallbacks[e])this._eventCallbacks[e]=[r];else this._eventCallbacks[e].push(r);this._listeners[r.id]=r;return r.id};this.hasEventListener=function(e,t){if(e&&!t){if(this._listeners[e])return true;else return false}else{this._log.warn("old eventtarget function haseventlistener!");if(e&&t){if(this._eventCallbacks[e]){const n=this._eventCallbacks[e].indexOf(t);if(n==-1)return false;return true}}}};this.hasListenerForEventName=function(e){return this._eventCallbacks[e]&&this._eventCallbacks[e].length>0};this.removeEventListener=this.off=function(r,t){if(r===null||r===undefined)return;if(!t){const i=this._listeners[r];if(!i){this._log.log("could not find event...");return}let n=true;while(n){n=false;let t=-1;for(let e=0;e<this._eventCallbacks[i.name].length;e++){if(this._eventCallbacks[i.name][e].id.startsWith(r)){n=true;t=e}}if(t!==-1){this._eventCallbacks[i.name].splice(t,1);delete this._listeners[r]}}return}this._log.info("[eventtaget] ","old function signature: removeEventListener! use listener id");this._log.log((new Error).stack);let n=null;for(let e=0;e<this._eventCallbacks[r].length;e++)if(this._eventCallbacks[r][e].cb==t)n=e;if(n!==null){delete this._eventCallbacks[n]}else this._log.warn("removeEventListener not found "+r)};this.logEvents=function(e,t){this._logEvents=e;this._logName=t};this.emitEvent=function(t,n,r,i,a,s,o){if(this._logEvents)this._log.log("[event] ",this._logName,t,this._eventCallbacks);if(this._eventCallbacks[t]){for(let e=0;e<this._eventCallbacks[t].length;e++){if(this._eventCallbacks[t][e]){this._eventCallbacks[t][e].cb(n,r,i,a,s,o)}}}else{if(this._logEvents)this._log.log("[event] has no event callback",t,this._eventCallbacks)}}};const v={ANIM:{EASINGS:["linear","absolute","smoothstep","smootherstep","Cubic In","Cubic Out","Cubic In Out","Expo In","Expo Out","Expo In Out","Sin In","Sin Out","Sin In Out","Quart In","Quart Out","Quart In Out","Quint In","Quint Out","Quint In Out","Back In","Back Out","Back In Out","Elastic In","Elastic Out","Bounce In","Bounce Out"],EASING_LINEAR:0,EASING_ABSOLUTE:1,EASING_SMOOTHSTEP:2,EASING_SMOOTHERSTEP:3,EASING_CUBICSPLINE:4,EASING_CUBIC_IN:5,EASING_CUBIC_OUT:6,EASING_CUBIC_INOUT:7,EASING_EXPO_IN:8,EASING_EXPO_OUT:9,EASING_EXPO_INOUT:10,EASING_SIN_IN:11,EASING_SIN_OUT:12,EASING_SIN_INOUT:13,EASING_BACK_IN:14,EASING_BACK_OUT:15,EASING_BACK_INOUT:16,EASING_ELASTIC_IN:17,EASING_ELASTIC_OUT:18,EASING_BOUNCE_IN:19,EASING_BOUNCE_OUT:21,EASING_QUART_IN:22,EASING_QUART_OUT:23,EASING_QUART_INOUT:24,EASING_QUINT_IN:25,EASING_QUINT_OUT:26,EASING_QUINT_INOUT:27},OP:{OP_PORT_TYPE_VALUE:0,OP_PORT_TYPE_NUMBER:0,OP_PORT_TYPE_FUNCTION:1,OP_PORT_TYPE_TRIGGER:1,OP_PORT_TYPE_OBJECT:2,OP_PORT_TYPE_TEXTURE:2,OP_PORT_TYPE_ARRAY:3,OP_PORT_TYPE_DYNAMIC:4,OP_PORT_TYPE_STRING:5,OP_VERSION_PREFIX:"_v"},PORT:{PORT_DIR_IN:0,PORT_DIR_OUT:1},PACO:{PACO_CLEAR:0,PACO_VALUECHANGE:1,PACO_OP_DELETE:2,PACO_UNLINK:3,PACO_LINK:4,PACO_LOAD:5,PACO_OP_CREATE:6,PACO_OP_ENABLE:7,PACO_OP_DISABLE:8,PACO_UIATTRIBS:9,PACO_VARIABLES:10,PACO_TRIGGERS:11,PACO_PORT_SETVARIABLE:12,PACO_PORT_SETANIMATED:13,PACO_PORT_ANIM_UPDATED:14,PACO_DESERIALIZE:15}};const b=function(e){this.time=0;this.value=0;this.onChange=null;this._easing=0;this.cb=null;this.cbTriggered=false;this.setEasing(v.ANIM.EASING_LINEAR);this.set(e)};b.cubicSpline=function(e,t,n){let r=t.value,i=t.bezTangOut,a=n.value,s=n.bezTangIn;let o=e;let l=o*o;let u=l*o;return(2*u-3*l+1)*r+(u-2*l+o)*i+(-2*u+3*l)*a+(u-l)*s};b.easeCubicSpline=function(e,t){return b.cubicSpline(e,this,t)};b.linear=function(e,t,n){return parseFloat(t.value)+parseFloat(n.value-t.value)*e};b.easeLinear=function(e,t){return b.linear(e,this,t)};b.easeAbsolute=function(e,t){return this.value};const y=function(e){return e=2**(10*(e-1))};b.easeExpoIn=function(e,t){e=y(e);return b.linear(e,this,t)};const x=function(e){e=-(2**(-10*e))+1;return e};b.easeExpoOut=function(e,t){e=x(e);return b.linear(e,this,t)};const S=function(e){e*=2;if(e<1){e=.5*2**(10*(e-1))}else{e--;e=.5*(-(2**(-10*e))+2)}return e};b.easeExpoInOut=function(e,t){e=S(e);return b.linear(e,this,t)};b.easeSinIn=function(e,t){e=-1*Math.cos(e*Math.PI/2)+1;return b.linear(e,this,t)};b.easeSinOut=function(e,t){e=Math.sin(e*Math.PI/2);return b.linear(e,this,t)};b.easeSinInOut=function(e,t){e=-.5*(Math.cos(Math.PI*e)-1);return b.linear(e,this,t)};const O=function(e){e=e*e*e;return e};b.easeCubicIn=function(e,t){e=O(e);return b.linear(e,this,t)};b.easeInQuint=function(e,t){e=e*e*e*e*e;return b.linear(e,this,t)};b.easeOutQuint=function(e,t){e=(e-=1)*e*e*e*e+1;return b.linear(e,this,t)};b.easeInOutQuint=function(e,t){if((e/=.5)<1)e=.5*e*e*e*e*e;else e=.5*((e-=2)*e*e*e*e+2);return b.linear(e,this,t)};b.easeInQuart=function(e,t){e=e*e*e*e;return b.linear(e,this,t)};b.easeOutQuart=function(e,t){e=-1*((e-=1)*e*e*e-1);return b.linear(e,this,t)};b.easeInOutQuart=function(e,t){if((e/=.5)<1)e=.5*e*e*e*e;else e=-.5*((e-=2)*e*e*e-2);return b.linear(e,this,t)};b.bounce=function(e){if((e/=1)<1/2.75)e=7.5625*e*e;else if(e<2/2.75)e=7.5625*(e-=1.5/2.75)*e+.75;else if(e<2.5/2.75)e=7.5625*(e-=2.25/2.75)*e+.9375;else e=7.5625*(e-=2.625/2.75)*e+.984375;return e};b.easeInBounce=function(e,t){return b.linear(b.bounce(e),this,t)};b.easeOutBounce=function(e,t){return b.linear(b.bounce(e),this,t)};b.easeInElastic=function(e,t){let n=1.70158;let r=0;let i=1;const a=0;const s=1;const o=1;if(e===0)e=a;else if((e/=s)==1)e=a+o;else{if(!r)r=s*.3;if(i<Math.abs(o)){i=o;n=r/4}else n=r/(2*Math.PI)*Math.asin(o/i);e=-(i*2**(10*(e-=1))*Math.sin((e*s-n)*(2*Math.PI)/r))+a}return b.linear(e,this,t)};b.easeOutElastic=function(e,t){let n=1.70158;let r=0;let i=1;const a=0;const s=1;const o=1;if(e===0)e=a;else if((e/=s)==1)e=a+o;else{if(!r)r=s*.3;if(i<Math.abs(o)){i=o;n=r/4}else n=r/(2*Math.PI)*Math.asin(o/i);e=i*2**(-10*e)*Math.sin((e*s-n)*(2*Math.PI)/r)+o+a}return b.linear(e,this,t)};b.easeInBack=function(e,t){const n=1.70158;e=e*e*((n+1)*e-n);return b.linear(e,this,t)};b.easeOutBack=function(e,t){const n=1.70158;e=(e=e/1-1)*e*((n+1)*e+n)+1;return b.linear(e,this,t)};b.easeInOutBack=function(e,t){let n=1.70158;const r=1/2;if((e/=1/2)<1)e=r*(e*e*(((n*=1.525)+1)*e-n));else e=r*((e-=2)*e*(((n*=1.525)+1)*e+n)+2);return b.linear(e,this,t)};const _=function(e){e--;e=e*e*e+1;return e};b.easeCubicOut=function(e,t){e=_(e);return b.linear(e,this,t)};const A=function(e){e*=2;if(e<1)e=.5*e*e*e;else{e-=2;e=.5*(e*e*e+2)}return e};b.easeCubicInOut=function(e,t){e=A(e);return b.linear(e,this,t)};b.easeSmoothStep=function(e,t){const n=Math.max(0,Math.min(1,e));e=n*n*(3-2*n);return b.linear(e,this,t)};b.easeSmootherStep=function(e,t){const n=Math.max(0,Math.min(1,(e-0)/(1-0)));e=n*n*n*(n*(n*6-15)+10);return b.linear(e,this,t)};b.prototype.setEasing=function(e){this._easing=e;if(this._easing==v.ANIM.EASING_LINEAR)this.ease=b.easeLinear;else if(this._easing==v.ANIM.EASING_ABSOLUTE)this.ease=b.easeAbsolute;else if(this._easing==v.ANIM.EASING_SMOOTHSTEP)this.ease=b.easeSmoothStep;else if(this._easing==v.ANIM.EASING_SMOOTHERSTEP)this.ease=b.easeSmootherStep;else if(this._easing==v.ANIM.EASING_CUBIC_IN)this.ease=b.easeCubicIn;else if(this._easing==v.ANIM.EASING_CUBIC_OUT)this.ease=b.easeCubicOut;else if(this._easing==v.ANIM.EASING_CUBIC_INOUT)this.ease=b.easeCubicInOut;else if(this._easing==v.ANIM.EASING_EXPO_IN)this.ease=b.easeExpoIn;else if(this._easing==v.ANIM.EASING_EXPO_OUT)this.ease=b.easeExpoOut;else if(this._easing==v.ANIM.EASING_EXPO_INOUT)this.ease=b.easeExpoInOut;else if(this._easing==v.ANIM.EASING_SIN_IN)this.ease=b.easeSinIn;else if(this._easing==v.ANIM.EASING_SIN_OUT)this.ease=b.easeSinOut;else if(this._easing==v.ANIM.EASING_SIN_INOUT)this.ease=b.easeSinInOut;else if(this._easing==v.ANIM.EASING_BACK_OUT)this.ease=b.easeOutBack;else if(this._easing==v.ANIM.EASING_BACK_IN)this.ease=b.easeInBack;else if(this._easing==v.ANIM.EASING_BACK_INOUT)this.ease=b.easeInOutBack;else if(this._easing==v.ANIM.EASING_ELASTIC_IN)this.ease=b.easeInElastic;else if(this._easing==v.ANIM.EASING_ELASTIC_OUT)this.ease=b.easeOutElastic;else if(this._easing==v.ANIM.EASING_ELASTIC_INOUT)this.ease=b.easeElasticInOut;else if(this._easing==v.ANIM.EASING_BOUNCE_IN)this.ease=b.easeInBounce;else if(this._easing==v.ANIM.EASING_BOUNCE_OUT)this.ease=b.easeOutBounce;else if(this._easing==v.ANIM.EASING_QUART_OUT)this.ease=b.easeOutQuart;else if(this._easing==v.ANIM.EASING_QUART_IN)this.ease=b.easeInQuart;else if(this._easing==v.ANIM.EASING_QUART_INOUT)this.ease=b.easeInOutQuart;else if(this._easing==v.ANIM.EASING_QUINT_OUT)this.ease=b.easeOutQuint;else if(this._easing==v.ANIM.EASING_QUINT_IN)this.ease=b.easeInQuint;else if(this._easing==v.ANIM.EASING_QUINT_INOUT)this.ease=b.easeInOutQuint;else if(this._easing==v.ANIM.EASING_CUBICSPLINE){this.ease=b.easeCubicSpline}else{this._easing=v.ANIM.EASING_LINEAR;this.ease=b.easeLinear}};b.prototype.trigger=function(){this.cb();this.cbTriggered=true};b.prototype.setValue=function(e){this.value=e;if(this.onChange!==null)this.onChange()};b.prototype.set=function(e){if(e){if(e.e)this.setEasing(e.e);if(e.cb){this.cb=e.cb;this.cbTriggered=false}if(e.b){}if(e.hasOwnProperty("t"))this.time=e.t;if(e.hasOwnProperty("time"))this.time=e.time;if(e.hasOwnProperty("v"))this.value=e.v;else if(e.hasOwnProperty("value"))this.value=e.value}if(this.onChange!==null)this.onChange()};b.prototype.getSerialized=function(){const e={};e.t=this.time;e.v=this.value;e.e=this._easing;return e};b.prototype.getEasing=function(){return this._easing};const C=function(e){m.apply(this);e=e||{};this.keys=[];this.onChange=null;this.stayInTimeline=false;this.loop=false;this._log=new c("Anim");this._lastKeyIndex=0;this._cachedIndex=0;this.name=e.name||null;this.defaultEasing=e.defaultEasing||v.ANIM.EASING_LINEAR;this.onLooped=null;this._timesLooped=0;this._needsSort=false};C.prototype.forceChangeCallback=function(){if(this.onChange!==null)this.onChange();this.emitEvent("onChange",this)};C.prototype.getLoop=function(){return this.loop};C.prototype.setLoop=function(e){this.loop=e;this.emitEvent("onChange",this)};C.prototype.hasEnded=function(e){if(this.keys.length===0)return true;if(this.keys[this._lastKeyIndex].time<=e)return true;return false};C.prototype.isRising=function(e){if(this.hasEnded(e))return false;const t=this.getKeyIndex(e);if(this.keys[t].value<this.keys[t+1].value)return true;return false};C.prototype.clearBefore=function(e){const t=this.getValue(e);const n=this.getKeyIndex(e);this.setValue(e,t);if(n>1)this.keys.splice(0,n);this._updateLastIndex()};C.prototype.clear=function(e){let t=0;if(e)t=this.getValue(e);this.keys.length=0;this._updateLastIndex();if(e)this.setValue(e,t);if(this.onChange!==null)this.onChange();this.emitEvent("onChange",this)};C.prototype.sortKeys=function(){this.keys.sort((e,t)=>{return parseFloat(e.time)-parseFloat(t.time)});this._updateLastIndex();this._needsSort=false;if(this.keys.length%1e3==0)console.log(this.name,this.keys.length)};C.prototype.getLength=function(){if(this.keys.length===0)return 0;return this.keys[this.keys.length-1].time};C.prototype.getKeyIndex=function(t){let n=0;let r=0;if(this._cachedIndex&&this.keys.length>this._cachedIndex&&t>=this.keys[this._cachedIndex].time)r=this._cachedIndex;for(let e=r;e<this.keys.length;e++){if(t>=this.keys[e].time)n=e;if(this.keys[e].time>t){if(t!=0)this._cachedIndex=n;return n}}return n};C.prototype.setValue=function(t,n,r){let i=null;if(this.keys.length==0||t<=this.keys[this.keys.length-1].time)for(let e=0;e<this.keys.length;e++)if(this.keys[e].time==t){i=this.keys[e];this.keys[e].setValue(n);this.keys[e].cb=r;break}if(!i){i=new b({time:t,value:n,e:this.defaultEasing,cb:r});this.keys.push(i);this._updateLastIndex()}if(this.onChange)this.onChange();this.emitEvent("onChange",this);this._needsSort=true;return i};C.prototype.setKeyEasing=function(e,t){if(this.keys[e]){this.keys[e].setEasing(t);this.emitEvent("onChange",this)}};C.prototype.getSerialized=function(){const t={};t.keys=[];t.loop=this.loop;for(let e=0;e<this.keys.length;e++)t.keys.push(this.keys[e].getSerialized());return t};C.prototype.getKey=function(e){const t=this.getKeyIndex(e);return this.keys[t]};C.prototype.getNextKey=function(e){let t=this.getKeyIndex(e)+1;if(t>=this.keys.length)t=this.keys.length-1;return this.keys[t]};C.prototype.isFinished=function(e){if(this.keys.length<=0)return true;return e>this.keys[this.keys.length-1].time};C.prototype.isStarted=function(e){if(this.keys.length<=0)return false;return e>=this.keys[0].time};C.prototype.getValue=function(e){if(this.keys.length===0){return 0}if(this._needsSort)this.sortKeys();if(!this.loop&&e>this.keys[this._lastKeyIndex].time){if(this.keys[this._lastKeyIndex].cb&&!this.keys[this._lastKeyIndex].cbTriggered)this.keys[this._lastKeyIndex].trigger();return this.keys[this._lastKeyIndex].value}if(e<this.keys[0].time){return this.keys[0].value}if(this.loop&&e>this.keys[this._lastKeyIndex].time){const s=e/this.keys[this._lastKeyIndex].time;if(s>this._timesLooped){this._timesLooped++;if(this.onLooped)this.onLooped()}e=(e-this.keys[0].time)%(this.keys[this._lastKeyIndex].time-this.keys[0].time);e+=this.keys[0].time}const t=this.getKeyIndex(e);if(t>=this._lastKeyIndex){if(this.keys[this._lastKeyIndex].cb&&!this.keys[this._lastKeyIndex].cbTriggered)this.keys[this._lastKeyIndex].trigger();return this.keys[this._lastKeyIndex].value}const n=t+1;const r=this.keys[t];const i=this.keys[n];if(r.cb&&!r.cbTriggered)r.trigger();if(!i)return-1;const a=(e-r.time)/(i.time-r.time);if(!r.ease)this.log._warn("has no ease",r,i);return r.ease(a,i)};C.prototype._updateLastIndex=function(){this._lastKeyIndex=this.keys.length-1};C.prototype.addKey=function(e){if(e.time===undefined){this.log.warn("key time undefined, ignoring!")}else{this.keys.push(e);if(this.onChange!==null)this.onChange();this.emitEvent("onChange",this)}this._updateLastIndex()};C.prototype.easingFromString=function(e){if(e=="linear")return v.ANIM.EASING_LINEAR;if(e=="absolute")return v.ANIM.EASING_ABSOLUTE;if(e=="smoothstep")return v.ANIM.EASING_SMOOTHSTEP;if(e=="smootherstep")return v.ANIM.EASING_SMOOTHERSTEP;if(e=="Cubic In")return v.ANIM.EASING_CUBIC_IN;if(e=="Cubic Out")return v.ANIM.EASING_CUBIC_OUT;if(e=="Cubic In Out")return v.ANIM.EASING_CUBIC_INOUT;if(e=="Expo In")return v.ANIM.EASING_EXPO_IN;if(e=="Expo Out")return v.ANIM.EASING_EXPO_OUT;if(e=="Expo In Out")return v.ANIM.EASING_EXPO_INOUT;if(e=="Sin In")return v.ANIM.EASING_SIN_IN;if(e=="Sin Out")return v.ANIM.EASING_SIN_OUT;if(e=="Sin In Out")return v.ANIM.EASING_SIN_INOUT;if(e=="Back In")return v.ANIM.EASING_BACK_IN;if(e=="Back Out")return v.ANIM.EASING_BACK_OUT;if(e=="Back In Out")return v.ANIM.EASING_BACK_INOUT;if(e=="Elastic In")return v.ANIM.EASING_ELASTIC_IN;if(e=="Elastic Out")return v.ANIM.EASING_ELASTIC_OUT;if(e=="Bounce In")return v.ANIM.EASING_BOUNCE_IN;if(e=="Bounce Out")return v.ANIM.EASING_BOUNCE_OUT;if(e=="Quart Out")return v.ANIM.EASING_QUART_OUT;if(e=="Quart In")return v.ANIM.EASING_QUART_IN;if(e=="Quart In Out")return v.ANIM.EASING_QUART_INOUT;if(e=="Quint Out")return v.ANIM.EASING_QUINT_OUT;if(e=="Quint In")return v.ANIM.EASING_QUINT_IN;if(e=="Quint In Out")return v.ANIM.EASING_QUINT_INOUT};C.prototype.createPort=function(e,t,n){const r=e.inDropDown(t,v.ANIM.EASINGS);r.set("linear");r.defaultValue="linear";r.onChange=function(){this.defaultEasing=this.easingFromString(r.get());this.emitEvent("onChangeDefaultEasing",this);if(n)n()}.bind(this);return r};C.slerpQuaternion=function(e,t,n,r,i,a){if(!C.slerpQuaternion.q1){C.slerpQuaternion.q1=quat.create();C.slerpQuaternion.q2=quat.create()}const s=n.getKeyIndex(e);let o=s+1;if(o>=n.keys.length)o=n.keys.length-1;if(s==o){quat.set(t,n.keys[s].value,r.keys[s].value,i.keys[s].value,a.keys[s].value)}else{const l=n.keys[s].time;const u=n.keys[o].time;const c=(e-l)/(u-l);quat.set(C.slerpQuaternion.q1,n.keys[s].value,r.keys[s].value,i.keys[s].value,a.keys[s].value);quat.set(C.slerpQuaternion.q2,n.keys[o].value,r.keys[o].value,i.keys[o].value,a.keys[o].value);quat.slerp(t,C.slerpQuaternion.q1,C.slerpQuaternion.q2,c)}return t};const T={Key:b};const I=function(e,t,n,r){m.apply(this);this.data={};this._log=new c("core_port");this.direction=v.PORT.PORT_DIR_IN;this.id=String(CABLES.simpleId());this._op=e;this.links=[];this.value=0;this.name=t;this.type=n||v.OP.OP_PORT_TYPE_VALUE;this.uiAttribs=r||{};this.anim=null;this._oldAnimVal=-5711;this.defaultValue=null;this._uiActiveState=true;this.ignoreValueSerialize=false;this.onLinkChanged=null;this.crashed=false;this._valueBeforeLink=null;this._lastAnimFrame=-1;this._animated=false;this.onValueChanged=null;this.onTriggered=null;this.onUiActiveStateChange=null;this.changeAlways=false;this.forceRefChange=false;this._useVariableName=null;this.activityCounter=0;this.apf=0;this.activityCounterStartFrame=0;this._tempLastUiValue=null;Object.defineProperty(this,"title",{get(){return this.uiAttribs.title||this.name}});Object.defineProperty(this,"parent",{get(){this._log.stack("use port.op, not .parent");return this._op}});Object.defineProperty(this,"op",{get(){return this._op}});Object.defineProperty(this,"val",{get(){this._log.warn("val getter deprecated!",this);this._log.stack("val getter deprecated");return this.get()},set(e){this._log.warn("val setter deprecated!",this);this._log.stack("val setter deprecated");this.setValue(e)}})};I.prototype.copyLinkedUiAttrib=function(e,t){if(!CABLES.UI)return;if(!this.isLinked())return;const n={};n[e]=this.links[0].getOtherPort(this).getUiAttrib(e);t.setUiAttribs(n)};I.prototype.getValueForDisplay=function(){let e=this.value;if(typeof this.value==="string"||this.value instanceof String){if(e.length>1e3){e=e.substring(0,999);e+="..."}if(this.uiAttribs&&this.uiAttribs.display=="boolnum"){e+=" - ";if(!this.value)e+="false";else e+="true"}e=e.replace(/[\u00A0-\u9999<>\&]/g,function(e){return"&#"+e.charCodeAt(0)+";"});if(e.length>100)e=e.substring(0,100)}else{e=this.value}return e};I.prototype.onAnimToggle=function(){};I.prototype._onAnimToggle=function(){this.onAnimToggle()};I.prototype.remove=function(){this.removeLinks();this._op.removePort(this)};I.prototype.setUiAttribs=function(e){let t=false;if(!this.uiAttribs)this.uiAttribs={};for(const n in e){if(e[n]===undefined){delete this.uiAttribs[n];continue}if(this.uiAttribs[n]!=e[n])t=true;this.uiAttribs[n]=e[n];if(n=="group"&&this.indexPort)this.indexPort.setUiAttribs({group:e[n]})}if(e.hasOwnProperty("expose"))this._op.patch.emitEvent("subpatchExpose",this._op.uiAttribs.subPatch);if(t)this.emitEvent("onUiAttrChange",e,this)};I.prototype.getUiAttribs=function(){return this.uiAttribs};I.prototype.getUiAttrib=function(e){if(!this.uiAttribs||!this.uiAttribs.hasOwnProperty(e)){return null}return this.uiAttribs[e]};I.prototype.get=function(){if(this._animated&&this._lastAnimFrame!=this._op.patch.getFrameNum()){this._lastAnimFrame=this._op.patch.getFrameNum();this.value=this.anim.getValue(this._op.patch.timer.getTime());this._oldAnimVal=this.value;this.forceChange()}return this.value};I.prototype.setRef=function(e){this.forceRefChange=true;this.set(e)};I.prototype.set=I.prototype.setValue=function(e){if(e===undefined)e=null;if(this._op.enabled&&!this.crashed){if(e!==this.value||this.changeAlways||this.type==v.OP.OP_PORT_TYPE_TEXTURE||this.type==v.OP.OP_PORT_TYPE_ARRAY){if(this._animated){this.anim.setValue(this._op.patch.timer.getTime(),e)}else{try{this.value=e;this.forceChange()}catch(e){this.crashed=true;this.op.crashed=true;console.log("crash",this.op.objName);this.setValue=function(e){};this.onTriggered=function(){};this._log.error("onvaluechanged exception cought",e);this._log.error(e.stack);this._log.warn("exception in: "+this._op.name);if(this._op.patch.isEditorMode())gui.showOpCrash(this._op);this._op.patch.emitEvent("exception",e,this._op);if(this._op.onError)this._op.onError(e)}if(this._op&&this._op.patch&&this._op.patch.isEditorMode()&&this.type==v.OP.OP_PORT_TYPE_TEXTURE)gui.texturePreview().updateTexturePort(this)}if(this.direction==v.PORT.PORT_DIR_OUT)for(let e=0;e<this.links.length;++e)this.links[e].setValue()}}};I.prototype.updateAnim=function(){if(this._animated){this.value=this.get();if(this._oldAnimVal!=this.value||this.changeAlways){this._oldAnimVal=this.value;this.forceChange()}this._oldAnimVal=this.value}};I.prototype.forceChange=function(){if(this.onValueChanged||this.onChange){}this._activity();this.emitEvent("change",this.value,this);if(this.onChange)this.onChange(this,this.value);else if(this.onValueChanged)this.onValueChanged(this,this.value)};I.prototype.getTypeString=function(){if(this.type==v.OP.OP_PORT_TYPE_VALUE)return"Number";if(this.type==v.OP.OP_PORT_TYPE_FUNCTION)return"Trigger";if(this.type==v.OP.OP_PORT_TYPE_OBJECT)return"Object";if(this.type==v.OP.OP_PORT_TYPE_DYNAMIC)return"Dynamic";if(this.type==v.OP.OP_PORT_TYPE_ARRAY)return"Array";if(this.type==v.OP.OP_PORT_TYPE_STRING)return"String";return"Unknown"};I.prototype.deSerializeSettings=function(e){if(!e)return;if(e.animated)this.setAnimated(e.animated);if(e.useVariable)this.setVariableName(e.useVariable);if(e.title)this.setUiAttribs({title:e.title});if(e.expose)this.setUiAttribs({expose:true});if(e.order)this.setUiAttribs({order:e.order});if(e.multiPortNum)this.setUiAttribs({multiPortNum:e.multiPortNum});if(e.anim){if(!this.anim)this.anim=new C({name:"port "+this.name});this._op._hasAnimPort=true;this.anim.addEventListener("onChange",()=>{this._op.patch.emitEvent("portAnimUpdated",this._op,this,this.anim)});if(e.anim.loop)this.anim.loop=e.anim.loop;for(const t in e.anim.keys){this.anim.keys.push(new T.Key(e.anim.keys[t]))}this.anim.sortKeys()}};I.prototype.setInitialValue=function(e){if(this.op.preservedPortLinks[this.name]){for(let e=0;e<this.op.preservedPortLinks[this.name].length;e++){const t=this.op.preservedPortLinks[this.name][e];this.op.patch._addLink(t.objIn,t.objOut,t.portIn,t.portOut)}}if(this.op.preservedPortValues&&this.op.preservedPortValues.hasOwnProperty(this.name)&&this.op.preservedPortValues[this.name]!==undefined){this.set(this.op.preservedPortValues[this.name])}else if(e!==undefined)this.set(e);if(e!==undefined)this.defaultValue=e};I.prototype.getSerialized=function(){let e={name:this.getName()};if(!this.ignoreValueSerialize&&this.links.length===0){if(this.type==v.OP.OP_PORT_TYPE_OBJECT&&this.value&&this.value.tex){}else e.value=this.value}if(this._useVariableName)e.useVariable=this._useVariableName;if(this._animated)e.animated=true;if(this.anim)e.anim=this.anim.getSerialized();if(this.uiAttribs.multiPortNum)e.multiPortNum=this.uiAttribs.multiPortNum;if(this.uiAttribs.display=="file")e.display=this.uiAttribs.display;if(this.uiAttribs.expose){e.expose=true;if(this.uiAttribs.hasOwnProperty("order"))e.order=this.uiAttribs.order}if(this.uiAttribs.title)e.title=this.uiAttribs.title;if((this.preserveLinks||this.direction==v.PORT.PORT_DIR_OUT)&&this.links.length>0){e.links=[];for(const t in this.links){if(!this.links[t].ignoreInSerialize&&(this.links[t].portIn&&this.links[t].portOut))e.links.push(this.links[t].getSerialized())}}if(this.direction==v.PORT.PORT_DIR_IN&&this.links.length>0){for(const t in this.links){if(!this.links[t].portIn||!this.links[t].portOut)continue;const n=this.links[t].getOtherPort(this);if(n.op.isInBlueprint2&&this.op.isInBlueprint2){if(n.op.isInBlueprint2()&&!this.op.isInBlueprint2()){e.links=e.links||[];e.links.push(this.links[t].getSerialized())}}}}if(e.links&&e.links.length==0)delete e.links;if(this.type===v.OP.OP_PORT_TYPE_FUNCTION)delete e.value;if(this.type===v.OP.OP_PORT_TYPE_FUNCTION&&this.links.length==0)e=null;if(e&&Object.keys(e).length==1&&e.name)e=null;a(e);return e};I.prototype.shouldLink=function(){return true};I.prototype.removeLinks=function(){let e=0;while(this.links.length>0){e++;if(e>5e3){this._log.warn("could not delete links... / infinite loop");this.links.length=0;break}this.links[0].remove()}};I.prototype.removeLink=function(e){for(const t in this.links)if(this.links[t]==e)this.links.splice(t,1);if(this.direction==v.PORT.PORT_DIR_IN){if(this.type==v.OP.OP_PORT_TYPE_VALUE)this.setValue(this._valueBeforeLink||0);else this.setValue(this._valueBeforeLink||null)}if(CABLES.UI&&this._op.checkLinkTimeWarnings)this._op.checkLinkTimeWarnings();if(this.onLinkChanged)this.onLinkChanged();this.emitEvent("onLinkChanged");this._op.emitEvent("onLinkChanged")};I.prototype.getName=function(){return this.name};I.prototype.getTitle=function(){if(this.uiAttribs.title)return this.uiAttribs.title;return this.name};I.prototype.addLink=function(e){this._valueBeforeLink=this.value;this.links.push(e);if(CABLES.UI&&this._op.checkLinkTimeWarnings)this._op.checkLinkTimeWarnings();if(this.onLinkChanged)this.onLinkChanged();this.emitEvent("onLinkChanged");this._op.emitEvent("onLinkChanged")};I.prototype.getLinkTo=function(e){for(const t in this.links)if(this.links[t].portIn==e||this.links[t].portOut==e)return this.links[t]};I.prototype.removeLinkTo=function(e){for(const t in this.links){if(this.links[t].portIn==e||this.links[t].portOut==e){this.links[t].remove();if(CABLES.UI&&this._op.checkLinkTimeWarnings)this._op.checkLinkTimeWarnings();if(this.onLinkChanged)this.onLinkChanged();this.emitEvent("onLinkChanged");return}}};I.prototype.isLinkedTo=function(e){for(const t in this.links)if(this.links[t].portIn==e||this.links[t].portOut==e)return true;return false};I.prototype._activity=function(){this.activityCounter++};I.prototype.trigger=function(){const t=this.links.length;this._activity();if(t===0)return;if(!this._op.enabled)return;let n=null;try{for(let e=0;e<t;++e){if(this.links[e].portIn){n=this.links[e].portIn;n.op.patch.pushTriggerStack(n);n._onTriggered();n.op.patch.popTriggerStack()}if(this.links[e])this.links[e].activity()}}catch(e){n.op.enabled=false;if(this._op.patch.isEditorMode()){this._op.patch.emitEvent("exception",e,n.op);this._op.patch.emitEvent("opcrash",n);console.log("crash",n.op.objName);if(n.op.onError)n.op.onError(e)}this._log.warn("exception!");this._log.error("ontriggered exception caught",e);this._log.error(e.stack);this._log.warn("exception in: "+n.op.name)}};I.prototype.call=function(){this._log.warn("call deprecated - use trigger() ");this.trigger()};I.prototype.execute=function(){this._log.warn("### execute port: "+this.getName(),this.goals.length)};I.prototype.setVariableName=function(e){this._useVariableName=e;this._op.patch.on("variableRename",(e,t)=>{if(e!=this._useVariableName)return;this._useVariableName=t})};I.prototype.getVariableName=function(){return this._useVariableName};I.prototype.setVariable=function(e){this.setAnimated(false);const t={useVariable:false};if(this._variableIn&&this._varChangeListenerId){this._variableIn.off(this._varChangeListenerId);this._variableIn=null}if(e){this._variableIn=this._op.patch.getVar(e);if(!this._variableIn){this._log.warn("PORT VAR NOT FOUND!!!",e)}else{if(this.type==v.OP.OP_PORT_TYPE_OBJECT){this._varChangeListenerId=this._variableIn.on("change",()=>{this.set(null);this.set(this._variableIn.getValue())})}else{this._varChangeListenerId=this._variableIn.on("change",this.set.bind(this))}this.set(this._variableIn.getValue())}this._useVariableName=e;t.useVariable=true;t.variableName=this._useVariableName}else{t.variableName=this._useVariableName=null;t.useVariable=false}this.setUiAttribs(t);this._op.patch.emitEvent("portSetVariable",this._op,this,e)};I.prototype._handleNoTriggerOpAnimUpdates=function(e){let t=false;for(let e=0;e<this._op.portsIn.length;e++){if(this._op.portsIn.type==v.OP.OP_PORT_TYPE_FUNCTION){t=true;break}}if(!t){if(e)this._notriggerAnimUpdate=this._op.patch.on("onRenderFrame",()=>{this.updateAnim()});else this._op.patch.removeEventListener(this._notriggerAnimUpdate)}};I.prototype.setAnimated=function(e){if(this._animated!=e){this._animated=e;this._op._hasAnimPort=true;if(this._animated&&!this.anim){this.anim=new C({name:"port "+this.name});this.anim.addEventListener("onChange",()=>{this._op.patch.emitEvent("portAnimUpdated",this._op,this,this.anim)})}this._onAnimToggle()}this._handleNoTriggerOpAnimUpdates(e);if(!e){this.anim=null}this.setUiAttribs({isAnimated:this._animated})};I.prototype.toggleAnim=function(){this._animated=!this._animated;if(this._animated&&!this.anim){this.anim=new C({name:"port "+this.name});this.anim.addEventListener("onChange",()=>{this._op.patch.emitEvent("portAnimUpdated",this._op,this,this.anim)})}this.setAnimated(this._animated);this._onAnimToggle();this.setUiAttribs({isAnimated:this._animated})};I.prototype.getType=function(){return this.type};I.prototype.isLinked=function(){return this.links.length>0||this._animated||this._useVariableName!=null};I.prototype.isBoundToVar=function(){const e=this._useVariableName!=null;this.uiAttribs.boundToVar=e;return e};I.prototype.isAnimated=function(){return this._animated};I.prototype.isHidden=function(){return this.uiAttribs.hidePort};I.prototype._onTriggered=function(e){this._activity();this._op.updateAnims();if(this._op.enabled&&this.onTriggered)this.onTriggered(e)};I.prototype._onSetProfiling=function(e){this._op.patch.profiler.add("port",this);this.setValue(e);this._op.patch.profiler.add("port",null)};I.prototype._onTriggeredProfiling=function(){if(this._op.enabled&&this.onTriggered){this._op.patch.profiler.add("port",this);this.onTriggered();this._op.patch.profiler.add("port",null)}};I.prototype.getUiActiveState=function(){return this._uiActiveState};I.prototype.setUiActiveState=function(e){this._uiActiveState=e;if(this.onUiActiveStateChange)this.onUiActiveStateChange()};I.prototype.onValueChange=function(e){this.onChange=e};I.prototype.hidePort=function(){};I.portTypeNumberToString=function(e){if(e==v.OP.OP_PORT_TYPE_VALUE)return"value";if(e==v.OP.OP_PORT_TYPE_FUNCTION)return"function";if(e==v.OP.OP_PORT_TYPE_OBJECT)return"object";if(e==v.OP.OP_PORT_TYPE_ARRAY)return"array";if(e==v.OP.OP_PORT_TYPE_STRING)return"string";if(e==v.OP.OP_PORT_TYPE_DYNAMIC)return"dynamic";return"unknown"};class E{constructor(e,t,n,r,i,a,s,o,l,u){this._log=new c("cg_uniform");this._type=t;this._name=n;this._shader=e;this._value=1e-5;this._oldValue=null;this._port=null;this._structName=l;this._structUniformName=o;this._propertyName=u;this._shader._addUniform(this);this.needsUpdate=true;this.shaderType=null;this.comment=null;if(t=="f"){this.set=this.setValue=this.setValueF.bind(this);this.updateValue=this.updateValueF.bind(this)}else if(t=="f[]"){this.set=this.setValue=this.setValueArrayF.bind(this);this.updateValue=this.updateValueArrayF.bind(this)}else if(t=="2f[]"){this.set=this.setValue=this.setValueArray2F.bind(this);this.updateValue=this.updateValueArray2F.bind(this)}else if(t=="3f[]"){this.set=this.setValue=this.setValueArray3F.bind(this);this.updateValue=this.updateValueArray3F.bind(this)}else if(t=="4f[]"){this.set=this.setValue=this.setValueArray4F.bind(this);this.updateValue=this.updateValueArray4F.bind(this)}else if(t=="i"){this.set=this.setValue=this.setValueI.bind(this);this.updateValue=this.updateValueI.bind(this)}else if(t=="2i"){this.set=this.setValue=this.setValue2I.bind(this);this.updateValue=this.updateValue2I.bind(this)}else if(t=="3i"){this.set=this.setValue=this.setValue3I.bind(this);this.updateValue=this.updateValue3I.bind(this)}else if(t=="4i"){this.set=this.setValue=this.setValue4I.bind(this);this.updateValue=this.updateValue4I.bind(this)}else if(t=="b"){this.set=this.setValue=this.setValueBool.bind(this);this.updateValue=this.updateValueBool.bind(this)}else if(t=="4f"){this.set=this.setValue=this.setValue4F.bind(this);this.updateValue=this.updateValue4F.bind(this)}else if(t=="3f"){this.set=this.setValue=this.setValue3F.bind(this);this.updateValue=this.updateValue3F.bind(this)}else if(t=="2f"){this.set=this.setValue=this.setValue2F.bind(this);this.updateValue=this.updateValue2F.bind(this)}else if(t=="t"){this.set=this.setValue=this.setValueT.bind(this);this.updateValue=this.updateValueT.bind(this)}else if(t=="tc"){this.set=this.setValue=this.setValueT.bind(this);this.updateValue=this.updateValueT.bind(this)}else if(t=="t[]"){this.set=this.setValue=this.setValueArrayT.bind(this);this.updateValue=this.updateValueArrayT.bind(this)}else if(t=="m4"||t=="m4[]"){this.set=this.setValue=this.setValueM4.bind(this);this.updateValue=this.updateValueM4.bind(this)}else throw new Error("Unknown uniform type");if(typeof r=="object"&&r instanceof I){this._port=r;this._value=this._port.get();if(i&&a&&s){if(!(i instanceof I)||!(a instanceof I)||!(s instanceof I)){this._log.error("[cgl_uniform] mixed port/value parameter for vec4 ",this._name)}this._value=[0,0,0,0];this._port2=i;this._port3=a;this._port4=s;this._port.on("change",this.updateFromPort4f.bind(this));this._port2.on("change",this.updateFromPort4f.bind(this));this._port3.on("change",this.updateFromPort4f.bind(this));this._port4.on("change",this.updateFromPort4f.bind(this));this.updateFromPort4f()}else if(i&&a){if(!(i instanceof I)||!(a instanceof I)){this._log.error("[cgl_uniform] mixed port/value parameter for vec4 ",this._name)}this._value=[0,0,0];this._port2=i;this._port3=a;this._port.on("change",this.updateFromPort3f.bind(this));this._port2.on("change",this.updateFromPort3f.bind(this));this._port3.on("change",this.updateFromPort3f.bind(this));this.updateFromPort3f()}else if(i){if(!(i instanceof I)){this._log.error("[cgl_uniform] mixed port/value parameter for vec4 ",this._name)}this._value=[0,0];this._port2=i;this._port.on("change",this.updateFromPort2f.bind(this));this._port2.on("change",this.updateFromPort2f.bind(this));this.updateFromPort2f()}else{this._port.on("change",this.updateFromPort.bind(this))}}else this._value=r;this.setValue(this._value);this.needsUpdate=true}getType(){return this._type}getName(){return this._name}getValue(){return this._value}getShaderType(){return this.shaderType}isStructMember(){return!!this._structName}updateFromPort4f(){this._value[0]=this._port.get();this._value[1]=this._port2.get();this._value[2]=this._port3.get();this._value[3]=this._port4.get();this.setValue(this._value)}updateFromPort3f(){this._value[0]=this._port.get();this._value[1]=this._port2.get();this._value[2]=this._port3.get();this.setValue(this._value)}updateFromPort2f(){this._value[0]=this._port.get();this._value[1]=this._port2.get();this.setValue(this._value)}updateFromPort(){this.setValue(this._port.get())}}const L=E;class N extends L{constructor(e,t,n,r,i,a,s,o,l,u){super(e,t,n,r,i,a,s,o,l,u);this._loc=-1;this._cgl=e._cgl}get name(){return this._name}copy(e){const t=new N(e,this._type,this._name,this._value,this._port2,this._port3,this._port4,this._structUniformName,this._structName,this._propertyName);t.shaderType=this.shaderType;return t}getGlslTypeString(){return N.glslTypeString(this._type)}_isValidLoc(){return this._loc!=-1}resetLoc(){this._loc=-1;this.needsUpdate=true}bindTextures(){}getLoc(){return this._loc}updateFromPort4f(){this._value[0]=this._port.get();this._value[1]=this._port2.get();this._value[2]=this._port3.get();this._value[3]=this._port4.get();this.setValue(this._value)}updateFromPort3f(){this._value[0]=this._port.get();this._value[1]=this._port2.get();this._value[2]=this._port3.get();this.setValue(this._value)}updateFromPort2f(){this._value[0]=this._port.get();this._value[1]=this._port2.get();this.setValue(this._value)}updateFromPort(){this.setValue(this._port.get())}updateValueF(){if(!this._isValidLoc())this._loc=this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(),this._name);else this.needsUpdate=false;this._shader.getCgl().gl.uniform1f(this._loc,this._value);this._cgl.profileData.profileUniformCount++}setValueF(e){if(e!=this._value){this.needsUpdate=true;this._value=e}}updateValueI(){if(!this._isValidLoc())this._loc=this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(),this._name);else this.needsUpdate=false;this._shader.getCgl().gl.uniform1i(this._loc,this._value);this._cgl.profileData.profileUniformCount++}updateValue2I(){if(!this._value)return;if(!this._isValidLoc()){this._loc=this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(),this._name);this._cgl.profileData.profileShaderGetUniform++;this._cgl.profileData.profileShaderGetUniformName=this._name}this._shader.getCgl().gl.uniform2i(this._loc,this._value[0],this._value[1]);this.needsUpdate=false;this._cgl.profileData.profileUniformCount++}updateValue3I(){if(!this._value)return;if(!this._isValidLoc()){this._loc=this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(),this._name);this._cgl.profileData.profileShaderGetUniform++;this._cgl.profileData.profileShaderGetUniformName=this._name}this._shader.getCgl().gl.uniform3i(this._loc,this._value[0],this._value[1],this._value[2]);this.needsUpdate=false;this._cgl.profileData.profileUniformCount++}updateValue4I(){if(!this._isValidLoc()){this._loc=this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(),this._name);this._cgl.profileData.profileShaderGetUniform++;this._cgl.profileData.profileShaderGetUniformName=this._name}this._shader.getCgl().gl.uniform4i(this._loc,this._value[0],this._value[1],this._value[2],this._value[3]);this._cgl.profileData.profileUniformCount++}setValueI(e){if(e!=this._value){this.needsUpdate=true;this._value=e}}setValue2I(e){if(!e)return;if(!this._oldValue){this._oldValue=[e[0]-1,1];this.needsUpdate=true}else if(e[0]!=this._oldValue[0]||e[1]!=this._oldValue[1]){this._oldValue[0]=e[0];this._oldValue[1]=e[1];this.needsUpdate=true}this._value=e}setValue3I(e){if(!e)return;if(!this._oldValue){this._oldValue=[e[0]-1,1,2];this.needsUpdate=true}else if(e[0]!=this._oldValue[0]||e[1]!=this._oldValue[1]||e[2]!=this._oldValue[2]){this._oldValue[0]=e[0];this._oldValue[1]=e[1];this._oldValue[2]=e[2];this.needsUpdate=true}this._value=e}setValue4I(e){this.needsUpdate=true;this._value=e||vec4.create()}updateValueBool(){if(!this._isValidLoc())this._loc=this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(),this._name);else this.needsUpdate=false;this._shader.getCgl().gl.uniform1i(this._loc,this._value?1:0);this._cgl.profileData.profileUniformCount++}setValueBool(e){if(e!=this._value){this.needsUpdate=true;this._value=e}}setValueArray4F(e){this.needsUpdate=true;this._value=e}updateValueArray4F(){if(!this._isValidLoc())this._loc=this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(),this._name);else this.needsUpdate=false;if(!this._value)return;this._shader.getCgl().gl.uniform4fv(this._loc,this._value);this._cgl.profileData.profileUniformCount++}setValueArray3F(e){this.needsUpdate=true;this._value=e}updateValueArray3F(){if(!this._isValidLoc())this._loc=this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(),this._name);else this.needsUpdate=false;if(!this._value)return;this._shader.getCgl().gl.uniform3fv(this._loc,this._value);this._cgl.profileData.profileUniformCount++}setValueArray2F(e){this.needsUpdate=true;this._value=e}updateValueArray2F(){if(!this._isValidLoc())this._loc=this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(),this._name);else this.needsUpdate=false;if(!this._value)return;this._shader.getCgl().gl.uniform2fv(this._loc,this._value);this._cgl.profileData.profileUniformCount++}setValueArrayF(e){this.needsUpdate=true;this._value=e}updateValueArrayF(){if(!this._isValidLoc())this._loc=this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(),this._name);else this.needsUpdate=false;if(!this._value)return;this._shader.getCgl().gl.uniform1fv(this._loc,this._value);this._cgl.profileData.profileUniformCount++}setValueArrayT(e){this.needsUpdate=true;this._value=e}updateValue3F(){if(!this._value)return;if(!this._isValidLoc()){this._loc=this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(),this._name);this._cgl.profileData.profileShaderGetUniform++;this._cgl.profileData.profileShaderGetUniformName=this._name}this._shader.getCgl().gl.uniform3f(this._loc,this._value[0],this._value[1],this._value[2]);this.needsUpdate=false;this._cgl.profileData.profileUniformCount++}setValue3F(e){if(!e)return;if(!this._oldValue){this._oldValue=[e[0]-1,1,2];this.needsUpdate=true}else if(e[0]!=this._oldValue[0]||e[1]!=this._oldValue[1]||e[2]!=this._oldValue[2]){this._oldValue[0]=e[0];this._oldValue[1]=e[1];this._oldValue[2]=e[2];this.needsUpdate=true}this._value=e}updateValue2F(){if(!this._value)return;if(!this._isValidLoc()){this._loc=this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(),this._name);this._cgl.profileData.profileShaderGetUniform++;this._cgl.profileData.profileShaderGetUniformName=this._name}this._shader.getCgl().gl.uniform2f(this._loc,this._value[0],this._value[1]);this.needsUpdate=false;this._cgl.profileData.profileUniformCount++}setValue2F(e){if(!e)return;if(!this._oldValue){this._oldValue=[e[0]-1,1];this.needsUpdate=true}else if(e[0]!=this._oldValue[0]||e[1]!=this._oldValue[1]){this._oldValue[0]=e[0];this._oldValue[1]=e[1];this.needsUpdate=true}this._value=e}updateValue4F(){if(!this._isValidLoc()){this._loc=this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(),this._name);this._cgl.profileData.profileShaderGetUniform++;this._cgl.profileData.profileShaderGetUniformName=this._name}if(!this._value){this._log.warn("no value for uniform",this._name,this);this._value=[0,0,0,0]}this.needsUpdate=false;this._shader.getCgl().gl.uniform4f(this._loc,this._value[0],this._value[1],this._value[2],this._value[3]);this._cgl.profileData.profileUniformCount++}setValue4F(e){if(typeof this.value=="number")this.value=vec4.create();if(!e)return;if(!this._oldValue){this._oldValue=[e[0]-1,1,2,3];this.needsUpdate=true}else if(e[0]!=this._oldValue[0]||e[1]!=this._oldValue[1]||e[2]!=this._oldValue[2]||e[3]!=this._oldValue[3]){this._oldValue[0]=e[0];this._oldValue[1]=e[1];this._oldValue[2]=e[2];this.needsUpdate=true}this._value=e}updateValueM4(){if(!this._isValidLoc()){this._loc=this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(),this._name);this._cgl.profileData.profileShaderGetUniform++;this._cgl.profileData.profileShaderGetUniformName=this._name}if(!this._value||this._value.length%16!=0)return console.log("this.name",this._name,this._value);this._shader.getCgl().gl.uniformMatrix4fv(this._loc,false,this._value);this._cgl.profileData.profileUniformCount++}setValueM4(e){this.needsUpdate=true;this._value=e||mat4.create()}updateValueArrayT(){if(!this._isValidLoc())this._loc=this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(),this._name);else this.needsUpdate=false;if(!this._value)return;this._shader.getCgl().gl.uniform1iv(this._loc,this._value);this._cgl.profileData.profileUniformCount++}updateValueT(){if(!this._isValidLoc()){this._loc=this._shader.getCgl().gl.getUniformLocation(this._shader.getProgram(),this._name);this._cgl.profileData.profileShaderGetUniform++;this._cgl.profileData.profileShaderGetUniformName=this._name}this._cgl.profileData.profileUniformCount++;this._shader.getCgl().gl.uniform1i(this._loc,this._value);this.needsUpdate=false}setValueT(e){this.needsUpdate=true;this._value=e}}N.glslTypeString=e=>{if(e=="f")return"float";if(e=="b")return"bool";if(e=="i")return"int";if(e=="2i")return"ivec2";if(e=="2f")return"vec2";if(e=="3f")return"vec3";if(e=="4f")return"vec4";if(e=="m4")return"mat4";if(e=="t")return"sampler2D";if(e=="tc")return"samplerCube";if(e=="3f[]")return null;if(e=="m4[]")return null;if(e=="f[]")return null;console.warn("[CGL UNIFORM] unknown glsl type string ",e)};const U={SHADERVAR_VERTEX_POSITION:"vPosition",SHADERVAR_VERTEX_NUMBER:"attrVertIndex",SHADERVAR_VERTEX_NORMAL:"attrVertNormal",SHADERVAR_VERTEX_TEXCOORD:"attrTexCoord",SHADERVAR_INSTANCE_MMATRIX:"instMat",SHADERVAR_VERTEX_COLOR:"attrVertColor",SHADERVAR_INSTANCE_INDEX:"instanceIndex",SHADERVAR_UNI_PROJMAT:"projMatrix",SHADERVAR_UNI_VIEWMAT:"viewMatrix",SHADERVAR_UNI_MODELMAT:"modelMatrix",SHADERVAR_UNI_NORMALMAT:"normalMatrix",SHADERVAR_UNI_INVVIEWMAT:"inverseViewMatrix",SHADERVAR_UNI_INVPROJMAT:"invProjMatrix",SHADERVAR_UNI_MATERIALID:"materialId",SHADERVAR_UNI_OBJECTID:"objectId",SHADERVAR_UNI_VIEWPOS:"camPos"};const ne={BLEND_NONE:0,BLEND_NORMAL:1,BLEND_ADD:2,BLEND_SUB:3,BLEND_MUL:4};const re=180/Math.PI;const ie=Math.PI/180;const R={MATH:{DEG2RAD:ie,RAD2DEG:re},SHADER:U,BLEND_MODES:ne};function ae(e){e.prototype.hasFeedbacks=function(){return this._feedBacks.length>0};e.prototype.removeFeedbacks=function(e){if(!this._feedbacks)return;this._feedbacks.length=0;this._feedBacksChanged=true};e.prototype.setAttributeFeedback=function(){};e.prototype.setFeedback=function(e,t,n){let r={nameOut:t};let i=false;this.unBindFeedbacks();for(let e=0;e<this._feedBacks.length;e++){if(this._feedBacks[e].nameOut==t){r=this._feedBacks[e];i=true}}if(!i)this._feedBacksChanged=true;r.initialArr=n;r.attrib=e;if(r.outBuffer)this._cgl.gl.deleteBuffer(r.outBuffer);r.outBuffer=this._cgl.gl.createBuffer();this._cgl.gl.bindBuffer(this._cgl.gl.ARRAY_BUFFER,r.outBuffer);this._cgl.gl.bufferData(this._cgl.gl.ARRAY_BUFFER,r.initialArr,this._cgl.gl.STATIC_DRAW);this._cgl.gl.bindBuffer(this._cgl.gl.ARRAY_BUFFER,r.attrib.buffer);this._cgl.gl.bufferData(this._cgl.gl.ARRAY_BUFFER,r.initialArr,this._cgl.gl.STATIC_DRAW);if(!i)this._feedBacks.push(r);return r};e.prototype.bindFeedback=function(t){if(!this._feedBacks||this._feedBacks.length===0)return;if(this._transformFeedBackLoc==-1)this._transformFeedBackLoc=this._cgl.gl.createTransformFeedback();this._cgl.gl.bindTransformFeedback(this._cgl.gl.TRANSFORM_FEEDBACK,this._transformFeedBackLoc);let n=false;for(let e=0;e<this._feedBacks.length;e++){const r=this._feedBacks[e];if(r.attrib==t){n=true;this._cgl.gl.bindBufferBase(this._cgl.gl.TRANSFORM_FEEDBACK_BUFFER,e,r.outBuffer)}}if(!n){}};e.prototype.drawFeedbacks=function(e,t){let n=0;if(this._feedBacksChanged){const r=[];this._cgl.gl.bindTransformFeedback(this._cgl.gl.TRANSFORM_FEEDBACK,this._transformFeedBackLoc);for(n=0;n<this._feedBacks.length;n++)r.push(this._feedBacks[n].nameOut);e.setFeedbackNames(r);console.log("feedbacknames",r);e.compile();this._feedBacksChanged=false;this._cgl.gl.bindTransformFeedback(this._cgl.gl.TRANSFORM_FEEDBACK,null);console.log("changed finished");return}this._cgl.gl.beginTransformFeedback(this.glPrimitive);this._cgl.gl.drawArrays(t,0,this._feedBacks[0].attrib.numItems);this._cgl.gl.endTransformFeedback();this.unBindFeedbacks();this.feedBacksSwapBuffers()};e.prototype.unBindFeedbacks=function(){for(let e=0;e<this._feedBacks.length;e++){this._cgl.gl.bindBufferBase(this._cgl.gl.TRANSFORM_FEEDBACK_BUFFER,e,null)}this._cgl.gl.bindTransformFeedback(this._cgl.gl.TRANSFORM_FEEDBACK,null)};e.prototype.feedBacksSwapBuffers=function(){for(let e=0;e<this._feedBacks.length;e++){const t=this._feedBacks[e].attrib.buffer;this._feedBacks[e].attrib.buffer=this._feedBacks[e].outBuffer;this._feedBacks[e].outBuffer=t}}}const P={};P.lastMesh=null;const M=function(e,t,n){this._cgl=e;let r=n||{};if(CABLES.UTILS.isNumeric(r))r={glPrimitive:n};this._log=new c("cgl_mesh");this._bufVertexAttrib=null;this._bufVerticesIndizes=this._cgl.gl.createBuffer();this._indexType=this._cgl.gl.UNSIGNED_SHORT;this._attributes=[];this._attribLocs={};this._geom=null;this._lastShader=null;this._numInstances=0;this._glPrimitive=r.glPrimitive;this.opId=r.opId||"";this._preWireframeGeom=null;this.addVertexNumbers=false;this._name="unknown";this.feedBackAttributes=[];this.setGeom(t);this._feedBacks=[];this._feedBacksChanged=false;this._transformFeedBackLoc=-1;this._lastAttrUpdate=0;this.memFreed=false;this._cgl.profileData.addHeavyEvent("mesh constructed",this._name);this._queryExt=null;Object.defineProperty(this,"numInstances",{get(){return this._numInstances},set(e){this.setNumInstances(e)}})};M.prototype.freeMem=function(){this.memFreed=true;for(let e=0;e<this._attributes.length;e++){this._attributes[e].floatArray=null}};M.prototype.updateVertices=function(e){this.setAttribute(R.SHADER.SHADERVAR_VERTEX_POSITION,e.vertices,3);this._numVerts=e.vertices.length/3};M.prototype.setAttributePointer=function(t,n,r,i){for(let e=0;e<this._attributes.length;e++){if(this._attributes[e].name==t){if(!this._attributes[e].pointer)this._attributes[e].pointer=[];this._attributes[e].pointer.push({loc:-1,name:n,stride:r,offset:i,instanced:t==R.SHADER.SHADERVAR_INSTANCE_MMATRIX})}}};M.prototype.getAttribute=function(t){for(let e=0;e<this._attributes.length;e++)if(this._attributes[e].name==t)return this._attributes[e]};M.prototype.setAttributeRange=function(e,t,n,r){if(!e)return;if(!n&&!r)return;if(!e.name){this._log.stack("no attrname?!")}this._cgl.gl.bindBuffer(this._cgl.gl.ARRAY_BUFFER,e.buffer);this._cgl.profileData.profileMeshAttributes+=r-n||0;this._cgl.profileData.profileSingleMeshAttribute[this._name]=this._cgl.profileData.profileSingleMeshAttribute[this._name]||0;this._cgl.profileData.profileSingleMeshAttribute[this._name]+=r-n||0;if(e.numItems<t.length/e.itemSize){this._resizeAttr(t,e)}if(r>=t.length-1){this._log.log(this._cgl.canvas.id+" "+e.name+" buffersubdata out of bounds ?",t.length,r,n,e)}if(this._cgl.glVersion==1)this._cgl.gl.bufferSubData(this._cgl.gl.ARRAY_BUFFER,0,t);else this._cgl.gl.bufferSubData(this._cgl.gl.ARRAY_BUFFER,n*4,t,n,r-n)};M.prototype._resizeAttr=function(e,t){if(t.buffer)this._cgl.gl.deleteBuffer(t.buffer);t.buffer=this._cgl.gl.createBuffer();this._cgl.gl.bindBuffer(this._cgl.gl.ARRAY_BUFFER,t.buffer);this._bufferArray(e,t);t.numItems=e.length/t.itemSize};M.prototype._bufferArray=function(e,t){let n=t.floatArray||null;if(!e)return;if(this._cgl.debugOneFrame){console.log("_bufferArray",e.length,t.name)}if(!(e instanceof Float32Array)){if(t&&n&&n.length==e.length){n.set(e)}else{n=new Float32Array(e);if(this._cgl.debugOneFrame){console.log("_bufferArray create new float32array",e.length,t.name)}if(e.length>1e4){this._cgl.profileData.profileNonTypedAttrib++;this._cgl.profileData.profileNonTypedAttribNames="("+this._name+":"+t.name+")"}}}else n=e;t.arrayLength=n.length;t.floatArray=null;this._cgl.gl.bufferData(this._cgl.gl.ARRAY_BUFFER,n,this._cgl.gl.DYNAMIC_DRAW)};M.prototype.addAttribute=M.prototype.updateAttribute=M.prototype.setAttribute=function(e,t,n,r){if(!t){this._log.error("mesh addAttribute - no array given! "+e);throw new Error}let i=null;let a=false;let s=0;const o=t.length/n;this._cgl.profileData.profileMeshAttributes+=o||0;if(typeof r=="function"){i=r}if(typeof r=="object"){if(r.cb)i=r.cb;if(r.instanced)a=r.instanced}if(e==R.SHADER.SHADERVAR_INSTANCE_MMATRIX)a=true;for(s=0;s<this._attributes.length;s++){const c=this._attributes[s];if(c.name==e){if(c.numItems===o){}else{this._resizeAttr(t,c)}this._cgl.gl.bindBuffer(this._cgl.gl.ARRAY_BUFFER,c.buffer);this._bufferArray(t,c);return c}}const l=this._cgl.gl.createBuffer();this._cgl.gl.bindBuffer(this._cgl.gl.ARRAY_BUFFER,l);let u=this._cgl.gl.FLOAT;if(r&&r.type)u=r.type;const c={buffer:l,name:e,cb:i,itemSize:n,numItems:o,startItem:0,instanced:a,type:u};this._bufferArray(t,c);if(e==R.SHADER.SHADERVAR_VERTEX_POSITION)this._bufVertexAttrib=c;this._attributes.push(c);this._attribLocs={};return c};M.prototype.getAttributes=function(){return this._attributes};M.prototype.updateTexCoords=function(e){if(e.texCoords&&e.texCoords.length>0){this.setAttribute(R.SHADER.SHADERVAR_VERTEX_TEXCOORD,e.texCoords,2)}else{const t=new Float32Array(Math.round(e.vertices.length/3*2));this.setAttribute(R.SHADER.SHADERVAR_VERTEX_TEXCOORD,t,2)}};M.prototype.updateNormals=function(e){if(e.vertexNormals&&e.vertexNormals.length>0){this.setAttribute(R.SHADER.SHADERVAR_VERTEX_NORMAL,e.vertexNormals,3)}else{const t=new Float32Array(Math.round(e.vertices.length));this.setAttribute(R.SHADER.SHADERVAR_VERTEX_NORMAL,t,3)}};M.prototype._setVertexNumbers=function(e){if(!this._verticesNumbers||this._verticesNumbers.length!=this._numVerts||e){if(e)this._verticesNumbers=e;else{this._verticesNumbers=new Float32Array(this._numVerts);for(let e=0;e<this._numVerts;e++)this._verticesNumbers[e]=e}this.setAttribute(R.SHADER.SHADERVAR_VERTEX_NUMBER,this._verticesNumbers,1,(e,t,n)=>{if(!n.uniformNumVertices)n.uniformNumVertices=new N(n,"f","numVertices",this._numVerts);n.uniformNumVertices.setValue(this._numVerts)})}};M.prototype.setVertexIndices=function(t){if(!this._bufVerticesIndizes){this._log.warn("no bufVerticesIndizes: "+this._name);return}if(t.length>0){if(t instanceof Float32Array)this._log.warn("vertIndices float32Array: "+this._name);for(let e=0;e<t.length;e++){if(t[e]>=this._numVerts){this._log.warn("invalid index in "+this._name,e,t[e]);return}}this._cgl.gl.bindBuffer(this._cgl.gl.ELEMENT_ARRAY_BUFFER,this._bufVerticesIndizes);if(t.length>65535){this.vertIndicesTyped=new Uint32Array(t);this._indexType=this._cgl.gl.UNSIGNED_INT}else if(t instanceof Uint32Array){this.vertIndicesTyped=t;this._indexType=this._cgl.gl.UNSIGNED_INT}else if(!(t instanceof Uint16Array)){this.vertIndicesTyped=new Uint16Array(t);this._indexType=this._cgl.gl.UNSIGNED_SHORT}else this.vertIndicesTyped=t;this._cgl.gl.bufferData(this._cgl.gl.ELEMENT_ARRAY_BUFFER,this.vertIndicesTyped,this._cgl.gl.DYNAMIC_DRAW);this._bufVerticesIndizes.itemSize=1;this._bufVerticesIndizes.numItems=t.length}else this._bufVerticesIndizes.numItems=0};M.prototype.setGeom=function(e,t){this._geom=e;if(e.glPrimitive!=null)this._glPrimitive=e.glPrimitive;if(this._geom&&this._geom.name)this._name="mesh "+this._geom.name;P.lastMesh=null;this._cgl.profileData.profileMeshSetGeom++;this._disposeAttributes();this.updateVertices(this._geom);this.setVertexIndices(this._geom.verticesIndices);if(this.addVertexNumbers)this._setVertexNumbers();const n=this._geom.getAttributes();const r={texCoords:R.SHADER.SHADERVAR_VERTEX_TEXCOORD,vertexNormals:R.SHADER.SHADERVAR_VERTEX_NORMAL,vertexColors:R.SHADER.SHADERVAR_VERTEX_COLOR,tangents:"attrTangent",biTangents:"attrBiTangent"};for(const i in n)if(n[i].data&&n[i].data.length)this.setAttribute(r[i]||i,n[i].data,n[i].itemSize);if(t){this._geom=null}};M.prototype._preBind=function(t){for(let e=0;e<this._attributes.length;e++)if(this._attributes[e].cb)this._attributes[e].cb(this._attributes[e],this._geom,t)};M.prototype._checkAttrLengths=function(){if(this.memFreed)return;for(let e=0;e<this._attributes.length;e++){if(this._attributes[e].arrayLength/this._attributes[e].itemSize<this._attributes[0].arrayLength/this._attributes[0].itemSize){let e="unknown";if(this._geom)e=this._geom.name}}};M.prototype._bind=function(t){if(!t.isValid())return;let n=[];if(this._attribLocs[t.id])n=this._attribLocs[t.id];else this._attribLocs[t.id]=n;this._lastShader=t;if(t.lastCompile>this._lastAttrUpdate||n.length!=this._attributes.length){this._lastAttrUpdate=t.lastCompile;for(let e=0;e<this._attributes.length;e++)n[e]=-1}for(let e=0;e<this._attributes.length;e++){const r=this._attributes[e];if(n[e]==-1){if(r._attrLocationLastShaderTime!=t.lastCompile){r._attrLocationLastShaderTime=t.lastCompile;n[e]=this._cgl.glGetAttribLocation(t.getProgram(),r.name);this._cgl.profileData.profileAttrLoc++}}if(n[e]!=-1){this._cgl.gl.enableVertexAttribArray(n[e]);this._cgl.gl.bindBuffer(this._cgl.gl.ARRAY_BUFFER,r.buffer);if(r.instanced){if(r.itemSize<=4){if(!r.itemSize||r.itemSize==0)this._log.warn("instanced attrib itemsize error",this._geom.name,r);this._cgl.gl.vertexAttribPointer(n[e],r.itemSize,r.type,false,r.itemSize*4,0);this._cgl.gl.vertexAttribDivisor(n[e],1)}else if(r.itemSize==16){const i=16*4;this._cgl.gl.vertexAttribPointer(n[e],4,r.type,false,i,0);this._cgl.gl.enableVertexAttribArray(n[e]+1);this._cgl.gl.vertexAttribPointer(n[e]+1,4,r.type,false,i,4*4*1);this._cgl.gl.enableVertexAttribArray(n[e]+2);this._cgl.gl.vertexAttribPointer(n[e]+2,4,r.type,false,i,4*4*2);this._cgl.gl.enableVertexAttribArray(n[e]+3);this._cgl.gl.vertexAttribPointer(n[e]+3,4,r.type,false,i,4*4*3);this._cgl.gl.vertexAttribDivisor(n[e],1);this._cgl.gl.vertexAttribDivisor(n[e]+1,1);this._cgl.gl.vertexAttribDivisor(n[e]+2,1);this._cgl.gl.vertexAttribDivisor(n[e]+3,1)}else{this._log.warn("unknown instance attrib size",r.name)}}else{if(!r.itemSize||r.itemSize==0)this._log.warn("attrib itemsize error",this._name,r);this._cgl.gl.vertexAttribPointer(n[e],r.itemSize,r.type,false,r.itemSize*4,0);if(r.pointer){for(let e=0;e<r.pointer.length;e++){const a=r.pointer[e];if(a.loc==-1)a.loc=this._cgl.glGetAttribLocation(t.getProgram(),a.name);this._cgl.profileData.profileAttrLoc++;this._cgl.gl.enableVertexAttribArray(a.loc);this._cgl.gl.vertexAttribPointer(a.loc,r.itemSize,r.type,false,a.stride,a.offset)}}this.bindFeedback(r)}}}if(this._bufVerticesIndizes&&this._bufVerticesIndizes.numItems!==0)this._cgl.gl.bindBuffer(this._cgl.gl.ELEMENT_ARRAY_BUFFER,this._bufVerticesIndizes)};M.prototype.unBind=function(){const e=this._lastShader;this._lastShader=null;if(!e)return;let t=[];if(this._attribLocs[e.id])t=this._attribLocs[e.id];else this._attribLocs[e.id]=t;P.lastMesh=null;for(let e=0;e<this._attributes.length;e++){if(this._attributes[e].instanced){if(this._attributes[e].itemSize<=4){if(t[e]!=-1)this._cgl.gl.vertexAttribDivisor(t[e],0);if(t[e]>=0)this._cgl.gl.disableVertexAttribArray(t[e])}else{this._cgl.gl.vertexAttribDivisor(t[e],0);this._cgl.gl.vertexAttribDivisor(t[e]+1,0);this._cgl.gl.vertexAttribDivisor(t[e]+2,0);this._cgl.gl.vertexAttribDivisor(t[e]+3,0);this._cgl.gl.disableVertexAttribArray(t[e]+1);this._cgl.gl.disableVertexAttribArray(t[e]+2);this._cgl.gl.disableVertexAttribArray(t[e]+3)}}if(t[e]!=-1)this._cgl.gl.disableVertexAttribArray(t[e])}};M.prototype.meshChanged=function(){return this._cgl.lastMesh&&this._cgl.lastMesh!=this};M.prototype.printDebug=function(e){console.log("--attributes");for(let e=0;e<this._attributes.length;e++){console.log("attribute "+e+" "+this._attributes[e].name)}};M.prototype.setNumVertices=function(e){this._bufVertexAttrib.numItems=e};M.prototype.getNumVertices=function(){return this._bufVertexAttrib.numItems};M.prototype.render=function(n){if(!n||!n.isValid()||this._cgl.aborted)return;this._checkAttrLengths();if(this._geom){if(this._preWireframeGeom&&!n.wireframe&&!this._geom.isIndexed()){this.setGeom(this._preWireframeGeom);this._preWireframeGeom=null}if(n.wireframe){let e=false;if(this._geom.isIndexed()){if(!this._preWireframeGeom){this._preWireframeGeom=this._geom;this._geom=this._geom.copy()}this._geom.unIndex();e=true}if(!this._geom.getAttribute("attrBarycentric")){if(!this._preWireframeGeom){this._preWireframeGeom=this._geom;this._geom=this._geom.copy()}e=true;this._geom.calcBarycentric()}if(e)this.setGeom(this._geom)}}let e=false;if(P.lastMesh!=this){if(P.lastMesh)P.lastMesh.unBind();e=true}if(e)this._preBind(n);if(!n.bind())return;this._bind(n);if(this.addVertexNumbers)this._setVertexNumbers();P.lastMesh=this;let t=this._cgl.gl.TRIANGLES;if(this._glPrimitive!==undefined)t=this._glPrimitive;if(n.glPrimitive!==null)t=n.glPrimitive;let r=1;let i=this._cgl.profileData.doProfileGlQuery;let a=false;if(i){let e=this._name+" - "+n.getName()+" #"+n.id;if(this._numInstances)e+=" instanced "+this._numInstances+"x";let t=this._cgl.profileData.glQueryData[e];if(!t)t={id:e,num:0};if(n.opId)t.shaderOp=n.opId;if(this.opId)t.meshOp=this.opId;this._cgl.profileData.glQueryData[e]=t;if(!this._queryExt&&this._queryExt!==false)this._queryExt=this._cgl.enableExtension("EXT_disjoint_timer_query_webgl2")||false;if(this._queryExt){if(t._drawQuery){const s=this._cgl.gl.getQueryParameter(t._drawQuery,this._cgl.gl.QUERY_RESULT_AVAILABLE);if(s){const o=this._cgl.gl.getQueryParameter(t._drawQuery,this._cgl.gl.QUERY_RESULT);const l=o/1e6;t._times=t._times||0;t._times+=l;t._numcount++;t.when=performance.now();t._drawQuery=null;t.queryStarted=false}}if(!t.queryStarted){t._drawQuery=this._cgl.gl.createQuery();this._cgl.gl.beginQuery(this._queryExt.TIME_ELAPSED_EXT,t._drawQuery);a=t.queryStarted=true}}}if(this.hasFeedbacks()){this.drawFeedbacks(n,t)}else if(!this._bufVerticesIndizes||this._bufVerticesIndizes.numItems===0){if(t==this._cgl.gl.TRIANGLES)r=3;if(this._numInstances===0)this._cgl.gl.drawArrays(t,this._bufVertexAttrib.startItem,this._bufVertexAttrib.numItems-this._bufVertexAttrib.startItem);else this._cgl.gl.drawArraysInstanced(t,this._bufVertexAttrib.startItem,this._bufVertexAttrib.numItems,this._numInstances)}else{if(t==this._cgl.gl.TRIANGLES)r=3;if(this._numInstances===0){this._cgl.gl.drawElements(t,this._bufVerticesIndizes.numItems,this._indexType,0)}else{this._cgl.gl.drawElementsInstanced(t,this._bufVerticesIndizes.numItems,this._indexType,0,this._numInstances)}}if(this._cgl.debugOneFrame&&this._cgl.gl.getError()!=this._cgl.gl.NO_ERROR){this._log.error("mesh draw gl error");this._log.error("mesh",this);this._log.error("shader",n);const u=[];for(let e=0;e<this._cgl.gl.getProgramParameter(n.getProgram(),this._cgl.gl.ACTIVE_ATTRIBUTES);e++){const c=this._cgl.gl.getActiveAttrib(n.getProgram(),e).name;this._log.error("attrib ",c)}}this._cgl.profileData.profileMeshNumElements+=this._bufVertexAttrib.numItems/r*(this._numInstances||1);this._cgl.profileData.profileMeshDraw++;if(i&&a){this._cgl.gl.endQuery(this._queryExt.TIME_ELAPSED_EXT)}this._cgl.printError("mesh render "+this._name);this.unBind()};M.prototype.setNumInstances=function(t){t=Math.max(0,t);if(this._numInstances!=t){this._numInstances=t;const n=new Float32Array(t);for(let e=0;e<t;e++)n[e]=e;this.setAttribute(R.SHADER.SHADERVAR_INSTANCE_INDEX,n,1,{instanced:true})}};M.prototype._disposeAttributes=function(){if(!this._attributes)return;for(let e=0;e<this._attributes.length;e++){if(this._attributes[e].buffer){this._cgl.gl.deleteBuffer(this._attributes[e].buffer);this._attributes[e].buffer=null}}this._attributes.length=0};M.prototype.dispose=function(){if(this._bufVertexAttrib&&this._bufVertexAttrib.buffer)this._cgl.gl.deleteBuffer(this._bufVertexAttrib.buffer);if(this._bufVerticesIndizes)this._cgl.gl.deleteBuffer(this._bufVerticesIndizes);this._bufVerticesIndizes=null;this._disposeAttributes()};ae(M);const k={};k.getSimpleRect=function(e,t){const n=new g(t);n.vertices=[1,1,0,-1,1,0,1,-1,0,-1,-1,0];n.texCoords=[1,1,0,1,1,0,0,0];n.verticesIndices=[0,1,2,2,1,3];n.vertexNormals=[0,0,0,0,0,0,0,0,0,0,0,0];return new M(e,n)};k.getSimpleCube=function(e,t){const n=new g(t);n.vertices=[-1,-1,1,1,-1,1,1,1,1,-1,1,1,-1,-1,-1,1,-1,-1,1,1,-1,-1,1,-1,-1,1,-1,1,1,-1,1,1,1,-1,1,1,-1,-1,-1,1,-1,-1,1,-1,1,-1,-1,1,1,-1,-1,1,-1,1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,1,-1,1,1,-1,1,-1];n.setTexCoords([0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0,1,1,1,1,0,0,0]);n.verticesIndices=[0,1,2,0,2,3,4,5,6,4,6,7,8,9,10,8,10,11,12,13,14,12,14,15,16,17,18,16,18,19,20,21,22,20,22,23];n.vertexNormals=new Float32Array([0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0]);n.tangents=new Float32Array([0,1,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,1,0,0,1,0,0,1,0,0,1]);n.biTangents=new Float32Array([-1,0,0,-1,0,0,-1,0,0,-1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1]);return new M(e,n)};class se{constructor(e,t,n){this.cgl=e;this._options=n;this.fb=null;let r=n.shader;this._useDefaultShader=true;if(n.shader)this._useDefaultShader=false;n.numRenderBuffers=n.numRenderBuffers||1;if(!r){r="".endl()+"IN vec2 texCoord;";for(let e=0;e<n.numRenderBuffers;e++){r=r.endl()+"UNI sampler2D tex"+e+";".endl()}r=r.endl()+"void main()".endl()+"{";if(n.numRenderBuffers==1){r=r.endl()+" outColor= texture(tex0,texCoord);;".endl()}else for(let e=0;e<n.numRenderBuffers;e++){r=r.endl()+"outColor"+e+" = texture(tex"+e+",texCoord);".endl()}r=r.endl()+"}"}const i=n.vertexShader||"".endl()+"IN vec3 vPosition;".endl()+"IN vec2 attrTexCoord;".endl()+"OUT vec2 texCoord;".endl()+"void main()".endl()+"{".endl()+" texCoord=attrTexCoord;".endl()+" gl_Position = vec4(vPosition, 1.0);".endl()+"}";this.bgShader=new CGL.Shader(e,"corelib copytexture "+t);this.bgShader.setSource(i,r);if(!n.vertexShader)this.bgShader.ignoreMissingUniforms=true;new CGL.Uniform(this.bgShader,"t","tex",0);new CGL.Uniform(this.bgShader,"t","tex1",1);new CGL.Uniform(this.bgShader,"t","tex2",2);new CGL.Uniform(this.bgShader,"t","tex3",3);this.mesh=k.getSimpleRect(this.cgl,"texEffectRect")}setSize(e,t){this._options.width=e;this._options.height=t}copy(e,t,n,r,i){const a=this.cgl;if(!e)e=CGL.Texture.getEmptyTexture(this.cgl);let s=this._options.width||e.width,o=this._options.height||e.height;if(this.fb){if(s<=0)s=8;if(o<=0)o=8;if(this.fb.getWidth()!=s||this.fb.getHeight()!=o)this.fb.setSize(s,o)}else{let e=CGL.Texture.FILTER_LINEAR;let t=CGL.Texture.WRAP_CLAMP_TO_EDGE;if(this._options.isFloatingPointTexture)e=CGL.Texture.FILTER_NEAREST;if(this._options.hasOwnProperty("filter"))e=this._options.filter;if(this._options.hasOwnProperty("wrap"))t=this._options.wrap;const l={isFloatingPointTexture:this._options.isFloatingPointTexture,pixelFormat:this._options.pixelFormat,numRenderBuffers:this._options.numRenderBuffers||1,filter:e,wrap:t};if(a.glVersion==1)this.fb=new CGL.Framebuffer(a,s,o,l);else this.fb=new CGL.Framebuffer2(a,s,o,l)}a.frameStore.renderOffscreen=true;this.fb.renderStart(a);a.setTexture(0,e.tex);if(t)a.setTexture(1,t.tex);if(n)a.setTexture(2,n.tex);if(r)a.setTexture(3,r.tex);if(i)a.setTexture(4,i.tex);a.pushShader(this.bgShader);this.mesh.render(this.bgShader);a.popShader();this.fb.renderEnd();a.frameStore.renderOffscreen=false;return this.fb.getTextureColor()}dispose(){if(this.fb)this.fb.dispose();if(this.bgShader)this.bgShader.dispose();if(this.mesh)this.mesh.dispose()}}CGL.CopyTexture=se;((this.CGL=this.CGL||{}).COREMODULES=this.CGL.COREMODULES||{}).Copytexture=e.Copytexture})(); +//# sourceMappingURL=patch.js.map \ No newline at end of file diff --git a/src/cables-js/patch.js.map b/src/cables-js/patch.js.map new file mode 100644 index 0000000..2382ec7 --- /dev/null +++ b/src/cables-js/patch.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["0"],"names":["CABLES","exportedPatches","_id","ops","id","uiAttribs","portsIn","name","value","portsOut","links","portIn","portOut","objIn","objOut","objName","subPatch","storage","subPatchVer","blueprintVer","title","display","export","time","service","exportNumber","exportedPatch","OPS","Ops","Gl","Ui","Anim","Html","Math","Vars","Array","Patch","Number","String","Boolean","Devices","Trigger","Graphics","Extension","Matrix","Meshes","Shader","Deprecated","Textures","Compare","Mouse","PuvBp73","Browser","ImageCompose","Geometry","OpenType","Intersection","SubPatch2","Op","apply","this","arguments","op","attachments","inc_gen_ports_js","subpatch_json","initInnerPorts","addedOps","let","i","length","innerInput","innerOutput","patchId","SubPatchOp","subId","initializeSubpatch","p","JSON","parse","replaceOpIds","parentSubPatchId","prefixHash","oldIdAsRef","doNotUnlinkLostLinks","blueprintSubpatch2","patch","deSerialize","opsCreated","UI","gui","savedState","setSaved","emitEvent","setStorage","prototype","f","ParseInt_v2","str","inString","outNum","outNumber","onChange","num","parseInt","get","set","VarGetString","val","outString","varName","inValueSelect","VarGetOpWrapper","StringReplace","inStr","inSearch","inRepl","inWhat","inSwitch","outStr","update","setUiError","replace","RegExp","e","message","GreaterThan","number1","inValueFloat","number2","result","outBoolNum","setUiAttribs","mathTitle","exec","VarSetNumber_v2","inDropDown","VarSetOpWrapper","GateNumber","valueInPort","inValue","passThroughPort","inValueBool","inIfNot","inCustomNot","inFloat","valueOutPort","changeAlways","updateUi","greyout","SubPatchInput","goto","inTriggerButton","hidePort","onTriggered","parent","getSubPatchOuterOp","patchView","centerSelectOp","SubPatchOutput","MainLoop","fpsLimit","trigger","outTrigger","width","height","reduceFocusFPS","reduceLoadingFPS","clear","clearAlpha","fullscreen","active","hdpi","inUnit","onAnimFrame","render","cgl","pixelDensity","window","devicePixelRatio","updateSize","setLayout","removeOnAnimFrame","setUiAttrib","extendTitle","addOnAnimFrame","log","rframes","rframeStart","timeOutTest","addedListener","uiAttr","error","identTranslate","vec3","create","identTranslateView","updateFullscreenButton","setTimeout","fsElement","winhasFocus","winVisible","addEventListener","document","hidden","testMultiMainloop","mainloopOp","getFpsLimit","loading","getProgress","onMouseEnter","style","onMouseLeave","canvas","createElement","container","parentElement","appendChild","shiftKey","cycleFullscreen","fullScreen","padding","position","right","top","cursor","background","innerHTML","remove","onDelete","gl","clearColor","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","aborted","clientWidth","clientHeight","cg","startTime","performance","now","config","canvasWidth","setCanvas","glCanvasId","canvasHeight","div","CGL","fpsReport","push","MESH","lastShader","lastMesh","renderStart","unBind","Texture","previewTexture","texturePreviewer","texturePreview","renderEnd","colorMask","frameStore","phong","profileData","profileMainloopMs","clearTimeout","getOpsByObjName","Sequence","exe","inTrigger","cleanup","resizable","resizableY","stretchPorts","exes","triggers","updateTimeout","connectedOuts","triggerAll","clean","hideParam","onLinkChanged","updateButton","newExe","updateConnected","show","isCurrentUiOp","refreshParams","count","removeLinks","j","otherPort","getOtherPort","link","Mouse_v3","inCoords","area","flipY","rightClickPrevDef","inBool","touchscreen","inPassive","outMouseX","outMouseY","mouseClick","mouseClickRight","mouseDown","mouseOver","outMovementX","outMovementY","normalize","listenerElement","sizeElement","addListeners","updateCoordNormalizing","removeListeners","on","onStart","console","setValue","x","y","w","h","xx","yy","clamp","checkHovering","r","getBoundingClientRect","clientX","left","clientY","onMouseDown","onMouseUp","onClickRight","preventDefault","onmouseclick","setCoords","offsetX","offsetY","onmousemove","movementX","movementY","ontouchmove","event","touches","ontouchstart","ontouchend","removeEventListener","body","passive","DeltaSum","inVal","defVal","inMul","inReset","inLimit","inMin","inMax","inRubber","outVal","setPortGroup","lastEvent","rubTimeout","updateLimit","resetValue","updateValue","v","max","min","releaseRubberband","rubber","minr","maxr","bind","aa","abs","PatchInput","dyn","addOutPort","Port","OP_PORT_TYPE_DYNAMIC","getPatchOp","mySubPatchOp","addNewInPort","newPortName","l","scene","getName","saveData","PatchOutput","addInPort","addNewOutPort","SubPatch","dynOut","dataStr","OP_PORT_TYPE_VALUE","data","ports","oldPatchId","generateUUID","getSubPatchInputOp","getSubPatchOutputOp","dataLoaded","init","isEditorMode","oldPatchOps","getSubPatchOps","DEFAULTOPS","isInBlueprint","undo","pause","deleteOp","resume","onLoaded","onLoadedValueSet","setupPorts","loadData","logError","stringify","addPortListener","newPort","newPortInPatch","hasSubpatchLstener","attribs","direction","PORT_DIR_IN","type","OP_PORT_TYPE_FUNCTION","isLinked","getPortByName","patchInputOp","ignoreValueSerialize","editableTitle","objType","newPortOut","patchOutputOp","newPortOutPatch","newName","o","removeLinkTo","patchOutputOP","getSubPatchOp","addOp","translate","warn","patchInputOP","addSubLink","p2","sublPortname","numOut","bounds","getSubPatchBounds","minx","miny","maxy","rebuildListeners","outop","Transform","posX","posY","posZ","scale","rotX","rotY","rotZ","setUiAxisPorts","toWorkPortsNeedToBeLinked","vPos","vScale","transMatrix","mat4","identity","doScale","doTranslate","translationChanged","scaleChanged","rotChanged","setRotChanged","setTranslateChanged","setScaleChanged","updateMatrix","updateTranslation","updateScale","doUpdateMatrix","pushModelMatrix","multiply","mMatrix","popModelMatrix","setTransform","setTransformGizmo","rotateX","DEG2RAD","rotateY","rotateZ","ClearColor","inFloatSlider","g","b","a","colorPick","MouseDrag","speed","inputType","outDeltaX","outDeltaY","outDragging","absoluteX","absoluteY","pressed","lastX","lastY","firstMove","updateArea","isHovering","onMouseMove","deltaX","deltaY","setPointerCapture","pointerId","_e","releasePointerCapture","lockChange","el","pointerLockElement","mozPointerLockElement","webkitPointerLockElement","removeListener","addListener","AttributeAsColorMaterial","normalsmaterial_frag","normalsmaterial_vert","inAttr","inAbs","inMulModel","outShader","outObject","shader","setSource","doRender","updateAttr","toggleDefine","pushShader","popShader","TriggerSend","updateName","doTrigger","updateVarNamesDropdown","varnames","vars","namedTriggers","values","ModalDialog","prompt","text","promptValue","promptOk","setTitle","arr","Area","inTitle","hasArea","setUnSaved","comment_title","VarGetNumber_v2","IntersectWorld","inTextCol","next","outCollisions","outArray","SHAPE_SPHERE","SHAPE_AABB","SHAPE_POINT","collisionWorld","bodies","testCollision","checkCollisions","bodyA","bodyB","dist","distance","pos","radius","body0","name0","body1","name1","bodyPoint","bodySphere","xd","yd","zd","sqrt","bodyBox","minX","maxX","minY","maxY","minZ","maxZ","bBox","bSphere","r2","dmin","dist_squared","collisions","c","setRef","IntersectTestRaycast","inX","inY","inZ","inToX","inToY","inToZ","inCursor","outHasHit","outName","outX","outY","outZ","oc","mat","dir","didsetCursor","isScreenCoords","origin","fromValues","mul","pMatrix","vMatrix","invert","transformMat4","to","sub","dot","foundDist","found","discriminant","add","t1","t2","t3","t4","t5","t6","tmin","tmax","IntersectBody","shapes","inArea","inName","inRadius","inSizeX","inSizeY","inSizeZ","inPositions","inArray","inPosIndex","empty","objs","obj","getCopyObj","indexOf","setBox","size","renderOverlay","shouldDrawHelpers","OverlayMeshes","drawSphere","drawCube","drawAxisMarker","posArr","objCopy","TriggerReceive","oldName","oldCbs","splice","cbs","updateError","Translate","z","vec","Repeat2d","numx","inValueInt","numy","center","idx","total","subX","subY","m","nx","ny","VarSetString_v2","Equals","Subtract","isNaN","Multiply","n1","n2","ArrayGetNumber","array","index","valueInvalid","outValidIndex","input","parseFloat","VarSetArray_v2","VarGetArray_v2","Array_v3","inLength","modeSelect","inDefaultValue","inReverse","outArr","outArrayLength","selectIndex","MODE_NUMBER","MODE_1_TO_4","MODE_0_TO_1","onFilterChange","reset","selectedMode","arrLength","valueForArray","reverse","Camera","projectionMode","zNear","zFar","fov","autoAspect","aspect","eyeX","eyeY","eyeZ","centerX","centerY","centerZ","outAsp","asp","vUp","vEye","vCenter","transMatrixMove","updateCameraMovementMatrix","shadowPass","getViewPort","pushViewMatrix","pushPMatrix","perspective","ortho","lookAt","popViewMatrix","popPMatrix","updateUI","cameraMovementChanged","OrbitControls","minDist","maxDist","minRotY","maxRotY","initialRadius","initialAxis","inValueSlider","initialX","smoothness","speedX","speedY","allowPanning","allowZooming","allowRotation","restricted","outRadius","outXDeg","outYDeg","eye","viewMatrix","tempViewMatrix","vOffset","finalEyeAbs","lastMouseX","lastMouseY","percX","percY","tempEye","finalEye","tempCenter","finalCenter","px","py","divisor","element","updateSmoothness","unbind","halfCircle","PI","fullCircle","off","circlePos","initializing","ip","goal","lastPy","lastPx","setElement","degY","degX","RAD2DEG","circlePosi","rotate","perc","mmul","degInRad","cos","sin","buttons","onMouseWheel","delta","getWheelSpeed","ele","BasicMaterial_v3","basicmaterial_frag","basicmaterial_vert","shaderOut","toWorkShouldNotBeChild","addAttribute","nameFrag","setModules","random","colUni","addUniformFrag","uniformColorDiffuse","diffuseTexture","inTexture","diffuseTextureUniform","updateDiffuseTexture","colorizeTexture","vertexColors","textureOpacity","textureOpacityUniform","alphaMaskSource","updateOpacity","texCoordAlpha","discardTransPxl","diffuseRepeatX","diffuseRepeatY","diffuseOffsetX","diffuseOffsetY","cropRepeat","doBillboard","updateDefines","preRender","popTextures","pushTexture","removeUniform","define","Uniform","removeDefine","hasDefine","hasTexture","notUsingColor","Ease","anim","createPort","updateAnimEasing","updateMinMax","keys","setEasing","defaultEasing","getValue","JsMemory","inExec","outUsed","outTotal","memory","usedJSHeapSize","totalJSHeapSize","Cylinder_v2","inRender","inDraw","inSegments","inStacks","inOuterRadius","inInnerRadius","inUVMode","flipSideMapping","inCaps","inFlat","outGeometry","geom","TAU","needsRebuild","mesh","buildMesh","flipTex","segments","innerRadius","outerRadius","stacks","defaultValue","stackLength","segmentRadians","uvMode","positions","normals","tangents","biTangents","texcoords","indices","d","slice","vertices","texCoords","vertexNormals","verticesIndices","unIndex","createMesh","opId","setGeom","getShader","dispose","MatCapMaterial_v3","matcap_frag","matcap_vert","textureMatcap","textureDiffuse","textureNormal","textureSpec","textureSpecMatCap","textureAo","pOpacity","aoIntensity","normalMapIntensity","repeatX","repeatY","ssNormals","calcTangents","uniOpacity","textureMatcapUniform","textureDiffuseUniform","textureNormalUniform","normalMapIntensityUniform","textureSpecUniform","textureSpecMatCapUniform","textureAoUniform","offsetUniform","repeatUniform","aoIntensityUniform","colorUniform","glVersion","getExtension","enableExtension","updateMatcap","defaultMatcapTex3","pixels","Uint8Array","initFromData","FILTER_LINEAR","WRAP_REPEAT","updateAlphaMaskMethod","checkUiErrors","tex","Texture_v2","filename","inUrl","tfilter","wrap","aniso","dataFrmt","flip","unpackAlpha","inFreeMemory","textureOut","outTexture","addCacheBust","ratio","loaded","loadedFilename","loadingId","cgl_filter","FILTER_MIPMAP","cgl_wrap","cgl_aniso","timedLoader","reloadSoon","onWrapChange","getEmptyTexture","delete","setTempTexture","t","getTempTexture","nocache","realReload","getPixelFormat","PFORMATSTR_R8UB","PFORMATSTR_RG8UB","PFORMATSTR_RGB8UB","PFORMATSTR_SRGBA8","PFORMATSTR_RGBA8UB","checkMainloopExists","finished","start","url","getFilePath","cacheBust","needsRefresh","fileToLoad","basename","addAssetLoadingTask","load","err","newTex","checkFrameStarted","getErrorTexture","image","anisotropic","pixelFormat","filter","FILTER_NEAREST","FILTER_ANISOTROPIC","WRAP_MIRRORED_REPEAT","WRAP_CLAMP_TO_EDGE","onFileChanged","fn","RenderToTexture_v3","inSize","twrap","msaa","texDepth","inPixelFormat","PIXELFORMATS","depth","fb","reInitFb","initFbLater","TextureEffect","checkOpNotInTextureEffect","selectedWrap","selectFilter","ms","msSamples","Framebuffer2","multisampling","multisamplingSamples","Framebuffer","isFloatingPointTexture","valid","getTextureDepth","setAspect","checkTextureSize","getWidth","getHeight","setSize","pushViewPort","popViewPort","getTextureColor","Rectangle_v4","pivotX","pivotY","axis","flipTcX","flipTcY","nColumns","nRows","geomOut","OP_PORT_TYPE_TRIGGER","AXIS_XY","AXIS_XZ","curAxis","rebuildLater","rebuild","numRows","round","numColumns","stepColumn","stepRow","tc","Float32Array","verts","norms","idxTc","idxVert","idxNorms","idxTangent","idxBiTangent","ind","v1","v2","v3","v4","TransformView","didScaleChanged","didRotChanged","transform3d","translateChanged","ScaleXYZViewMatrix","scaleX","scaleY","scaleZ","ScaleXYZ","hasChanged","execrender","Grid","inNum","inInt","inSpacing","inCenter","geomStepsOne","geomX","space","floor","end","setTexCoords","calculateNormals","Mesh","oldPrim","glPrimitive","LINES","FullscreenRectangle_v2","shader_frag","shader_vert","inScale","flipX","rebuildFlip","fullscreenRectUniform","aspectUni","useShader","updateShaderLater","fitImageAspect","updateShader","viewPort","rat","_h","_w","setTexture","xy","Uint16Array","GradientTexture","inGrad","inGradient","inDir","inSmoothstep","inStep","inFlip","inSRGB","inOklab","inGradArray","inRandom","outTex","outColors","outColorPos","timeout","editShortcut","parseKeys","forEach","key","newKeys","rgbToOklab","s","cbrt","oklabToRGB","L","rgb_r","rgb_g","rgb_b","lin2srgb","thr","c_loR","c_hiR","pow","updateGradient","isArray","grad","gradEditSmoothstep","gradEditStep","gradOklab","selectedFilter","keyA","keyB","map","smoothStep","klabA","labA_r","labA_g","labA_b","klabB","labB_r","labB_g","labB_b","pixCol","alpha","rpixels","dx","dy","colorArr","colorPosArr","CombineTextures","rgbe2fp_frag","inPixel","inTexR","inSrcR","inSrcRVal","inSrcRDefault","inTexG","inSrcG","inSrcGVal","inSrcGDefault","inTexB","inSrcB","inSrcBVal","inSrcBDefault","inTexA","inSrcA","inSrcAVal","inSrcADefault","currentSize","needsUpdate","unitexR","unitexG","unitexB","unitexA","uniFloatR","uniFloatG","uniFloatB","uniFloatA","getSize","sizes","biggest","smallest","MAX_TEXTURE_SIZE","initShader","CopyTexture","PFORMATSTR_RGBA32F","bgShader","copy","ImageCompose_v4","imgcomp_frag","inTex","inUVTex","inFilter","inWrap","texOut","outRatio","outWidth","outHeight","prevViewPort","effect","reInitEffect","isFloatTex","copyShader","copyShaderTexUni","copyShaderUVTexUni","copyShaderRGBAUni","reInitLater","initEffect","isPixelFormatFloat","maxAnisotropic","getFilter","getWrap","setSourceTexture","ceil","updateResolution","updateResolutionInfo","checkTypes","info","changed","isFloatingPoint","copyTexture","getDefaultVertexShader","currentTextureEffect","finish","pushBlend","oldEffect","imgCompVer","startEffect","endEffect","getCurrentSourceTexture","popBlend","FastBlur_v2","blur_frag","blur_vert","inPasses","mask","maskInvert","textureUniform","uniDirX","uniDirY","uniWidth","uniHeight","uniPass","uniAmount","textureAlpha","checkOpInEffect","numPasses","Vignette_v3","vignette_frag","blendMode","AddBlendSelect","maskAlpha","AddBlendAlphaMask","amount","strength","lensRadius1","sharp","amountUniform","uniLensRadius1","uniaspect","unistrength","unisharp","unir","setupBlending","TextMeshMSDF_v2","textmeshsdf_frag","textmeshsdf_vert","inFont","letterSpace","lineHeight","align","valign","doSDF","smoothing","inBorder","inBorderWidth","inBorderSmooth","br","bg","bb","inShadow","inTexColor","inTexMask","inPosArr","inScaleArr","inRotArr","inColors","outScales","outLines","outStartY","outNumChars","fontDataVarPrefix","substrLength","alignVec","fontTexs","fontData","fontChars","needUpdate","disabled","valignMode","heightAll","widthAll","avgHeight","needsUpdateTransmats","transMats","offY","uniTex","uniTex1","uniTex2","uniTex3","uniTexMul","uniTexMulMask","uniColor","uniColorBorder","uniTexSize","uniSmoothing","uniborderSmooth","uniborderWidth","setAttribute","instanced","updateAlign","updateFontList","updateFontData","varname","dataVar","getVar","textVar","chars","char","getVars","names","substr","undefined","buildTransMats","transformations","translates","scales","rots","numInstances","call","concat","generateMesh","getChar","chStr","_","X","theString","strings","split","tcOffsets","texPos","tcSizes","pages","charCounter","arrPositions","mulSize","txt","numChars","lineWidth","substring","xadvance","page","common","scaleW","scaleH","charWidth","charHeight","charOffsetY","yoffset","charOffsetX","xoffset","adv","Round","decPlaces","decm","updateDecm","NumberToString_v2","FontMSDF_v2","inUUID","uuid","urlData","urlTex","urlTex1","urlTex2","urlTex3","outLoaded","outBool","outChars","loadedData","loadedTex","textures","updateLoaded","oldUUID","deleteVar","varNameData","varNameTex","setVarValue","urlDatastr","ajax","_data","xhr","face","allChars","texPort","loadingIdTex","urlTexstr","Incrementor","increment","decrement","inMode","inDefault","outChanged","outRestarted","MODE_REWIND","MODE_STOP","mode","doReset","SmootherStep","StringCompose_v3","format","Circle_v3","percent","steps","invertSteps","mapping","drawSpline","calcLater","lastSegs","needsCalc","renderMesh","calc","LINE_STRIP","segs","faces","oldPosX","oldPosY","oldPosXTexCoord","oldPosYTexCoord","oldPosXIn","oldPosYIn","oldPosXTexCoordIn","oldPosYTexCoordIn","posxTexCoordIn","posyTexCoordIn","posxTexCoord","posyTexCoord","posx","posy","setPointVertices","buildFromFaces","numSteps","posxIn","posyIn","mapTexCoords2d","StringToArray_v2","inStringEditor","separator","toNumber","trim","splitNewLines","parsed","len","ignoreBigPort","textInput","sep","hasStrings","UTILS","isNumeric","ArrayGetString","VizArrayTable","inArr","inOffset","vizLayerMaxZoom","getCellValue","preview","renderVizLayer","ctx","layer","fillStyle","fillRect","save","font","stride","lines","offset","columnsWidth","columsPos","addUpPos","lineNum","fillText","gradHeight","radGrad","createLinearGradient","addColorStop","restore","TriggerOnChangeNumber","inval","number","DivElement_v3","inText","inId","inClass","inStyle","inInteractive","inVisible","inBreaks","inPropagation","outElement","outHover","outClicked","oldStr","prevDisplay","updateClass","updateText","updateStyle","updateInteractive","updateVisibility","warning","removeElement","getDocument","dataset","classList","removeClasses","parentNode","removeChild","setCSSVisible","visible","visibility","oldClassesStr","classes","oldClasses","onMouseClick","stopPropagation","enabled","StringEditor","syntax","updateSyntax","editorSyntax","CSS_v2","code","inActive","styleEle","eleId","addElement","getCssContent","css","blueprint","getAssetPath","getElementById","textContent","css_spinner","head","getElementsByTagName","TransformCSS3DElement","origins","inElement","inObject","inOrigin","sCSSMatrix","sScalingVector","oldEle","elProjection","querySelector","provide","zIndex","pointerEvents","perspectiveOrigin","join","view","css3did","self","DOMTokenList","pxfov","drawingBufferHeight","drawingBufferWidth","transform","removeProperties","CanvasInfo_v2","pixelRatio","widthPixel","heightPixel","landscape","outCanvasEle","outCanvasParentEle","Divide","CSSProperty_v2","inEle","inProperty","inValueSuffix","outEle","updateProperty","BoolToNumber_v2","useValue1Port","value0port","value1port","outValuePort","setOutput","useValue1","HyperLink_v2","inTarget","inSpecs","open","OpentypeFont","outFont","async","await","opentype","OpentypeToSvgPath","inLs","outPathStr","getPath","paths","getPaths","ls","commands","hasOwnProperty","x1","toPathData","SvgPathToGeometry_v2","inStepSize","inRescale","outGeom","cmds","fromPathToArray","polys","y1","x2","y2","Polygon","moveTo","cubicTo","conicTo","close","sort","root","inside","points","children","totalPoints","reduce","sum","vertexData","vertexCount","process","poly","coords","holes","child","earcut","finalVertexData","resc","setVertices","getBounds","flipVertDir","calcTangentsBitangents","PATH_COMMANDS","M","H","V","Z","C","S","Q","q","T","A","path","items","currentCommand","currentElement","it","shift","unshift","prop","MAX_BEZIER_STEPS","EPSILON","constructor","BEZIER_STEP_SIZE","lineTo","cur","cross","p1","p0","lerp","RenderGeometry_v2","geometry","inVertNums","isGeometry","addVertexNumbers","GeometryExtrude","inGeom","inHeight","inSmooth","inExtrudeWalls","inCapTop","inCapBottom","isClockwise","edgesUsedMulti","idx1","idx2","vert1","vert2","vert3","newGeom","merge","flippedgeo","flipNormals","forceZUp","Smooth","inDivisorUp","inDivisorDown","oldVal","lastTrigger","divisorUp","divisorDown","MODE_SINGLE","MODE_UP_DOWN","getDivisors","oldGoal","tm","diff","Infinity","MathExpression","inA","inB","inC","inD","inExpression","outResult","outExpressionIsValid","currentFunction","functionValid","createFunction","Function","evaluateFunction","ReferenceError","SyntaxError","GateArray_v2","arrayIn","passThrough","inIfNull","arrayOut","oldArr","copyArray","source","dest","ArraySetNumberAtIndex_v4","inIndex","srcArr","jsLoaded","Event","dispatchEvent","global","factory","exports","module","amd","codePointAt","defineProperty","object","$defineProperty","Object","TypeError","string","first","charCodeAt","second","configurable","writable","TINF_OK","TINF_DATA_ERROR","Tree","table","trans","Data","sourceIndex","tag","bitcount","destLen","ltree","dtree","sltree","sdtree","length_bits","length_base","dist_bits","dist_base","clcidx","code_tree","lengths","tinf_build_bits_base","bits","base","tinf_build_fixed_trees","lt","dt","offs","tinf_build_tree","tinf_getbit","bit","tinf_read_bits","tinf_decode_symbol","tinf_decode_trees","hlit","hdist","hclen","clen","sym","prev","tinf_inflate_block_data","tinf_inflate_uncompressed_block","invlength","tinf_uncompress","bfinal","btype","res","Error","subarray","tinyInflate","derive","v0","BoundingBox","NaN","isEmpty","addPoint","addX","addY","addBezier","x0","y0","p3","b2ac","addQuad","cp1x","cp1y","cp2x","cp2y","Path","fill","stroke","strokeWidth","curveTo","bezierCurveTo","quadTo","quadraticCurveTo","closePath","extend","pathOrCommands","box","getBoundingBox","startX","startY","prevX","prevY","cmd","draw","beginPath","strokeStyle","decimalPlaces","floatToString","toFixed","packValues","arguments$1","toSVG","svg","toDOMElement","temporaryPath","newPath","createElementNS","fail","argument","predicate","check","assert","LIMIT16","LIMIT32","decode","encode","sizeOf","constant","BYTE","CHAR","CHARARRAY","USHORT","SHORT","UINT24","ULONG","LONG","FIXED","FWORD","UFWORD","LONGDATETIME","TAG","Card8","Card16","OffSize","SID","NUMBER","NUMBER16","NUMBER32","REAL","toString","epsilon","nibbles","ii","out","i$1","ii$1","NAME","STRING","UTF8","numBytes","codePoints","getUint8","fromCharCode","UTF16","getUint16","codepoint","eightBitMacEncodings","x-mac-croatian","x-mac-cyrillic","x-mac-gaelic","x-mac-greek","x-mac-icelandic","x-mac-inuit","x-mac-ce","macintosh","x-mac-romanian","x-mac-turkish","MACSTRING","dataView","dataLength","encoding","macEncodingTableCache","WeakMap","macEncodingCacheKeys","getMacEncodingTable","cacheKey","cachedTable","decodingTable","encodingTable","isByteEncodable","encodeVarDeltaRunAsZeroes","deltas","runLength","numDeltas","encodeVarDeltaRunAsBytes","encodeVarDeltaRunAsWords","VARDELTAS","INDEX","offsets","OBJECT","encodedOffsets","offSize","offsetEncoder","encodedOffset","DICT","k","OPERAND","OPERATOR","OP","wmm","CHARSTRING","cachedValue","encodingFunction","sizeOfFunction","TABLE","fields","subtables","subtableOffsets","field","bytes","tableName","RECORD","LITERAL","Table","options","optionKeys","ushortList","itemName","list","tableList","records","itemCallback","recordList","Coverage","coverageTable","glyphs","ranges","RangeRecord","ScriptList","scriptListTable","scriptRecord","script","defaultLangSys","reqFeatureIndex","featureIndexes","langSysRecords","langSysRecord","langSys","FeatureList","featureListTable","featureRecord","feature","featureParams","lookupListIndexes","LookupList","lookupListTable","subtableMakers","lookupTable","subtableCallback","lookupType","lookupFlag","Record","getByte","getUShort","getShort","getInt16","getULong","getUint32","getFixed","decimal","fraction","getTag","getInt8","getOffset","getBytes","startOffset","endOffset","bytesToString","typeOffsets","byte","uShort","short","uLong","fixed","longDateTime","Parser","relativeOffset","parseByte","parseChar","parseCard8","parseUShort","parseCard16","parseSID","parseOffset16","parseShort","parseF2Dot14","parseULong","parseOffset32","parseFixed","parseString","parseTag","parseLongDateTime","parseVersion","minorBase","major","minor","skip","parseULongList","parseOffset16List","parseUShortList","parseShortList","parseByteList","parseList","parseList32","parseRecordList","recordDescription","rec","fieldName","fieldType","parseRecordList32","parseStruct","description","struct","parseValueRecord","valueFormat","valueRecord","xPlacement","yPlacement","xAdvance","yAdvance","xPlaDevice","yPlaDevice","xAdvDevice","yAdvDevice","parseValueRecordList","valueCount","parsePointer","structOffset","parsePointer32","parseListOfLists","subOffsets","subList","parseCoverage","parseClassDef","startGlyph","classId","list32","recordList32","pointer","pointer32","offset16","uShortList","offset32","uLongList","coverage","classDef","langSysTable","reserved","parseScriptList","parseFeatureList","parseLookupList","lookupTableParsers","useMarkFilteringSet","markFilteringSet","parseFeatureVariationsList","majorVersion","minorVersion","featureVariations","conditionSetOffset","featureTableSubstitutionOffset","getCard8","getCard16","parseCmapTableFormat12","cmap","language","groupCount","glyphIndexMap","startCharCode","endCharCode","startGlyphId","parseCmapTableFormat4","segCount","endCountParser","startCountParser","idDeltaParser","idRangeOffsetParser","glyphIndexOffset","glyphIndex","endCount","startCount","idDelta","idRangeOffset","parseCmapTable","version","numTables","platformId","encodingId","addSegment","addTerminatorSegment","makeCmapTable","isPlan0Only","unicode","cmapTable","glyph","unicodes","segCountToRemove","endCounts","startCounts","idDeltas","idRangeOffsets","glyphIds","cmap12Groups","segment","glyphId","segCountX2","searchRange","entrySelector","rangeShift","cmap4Length","cmap12Length","cmap12Offset","make","cffStandardStrings","cffStandardEncoding","cffExpertEncoding","standardNames","DefaultEncoding","charToGlyphIndex","CmapEncoding","CffEncoding","charset","charName","GlyphNames","post","numberOfGlyphs","glyphNameIndex","nameToGlyphIndex","glyphIndexToName","gid","addGlyphNamesAll","tables","charCodes","addUnicode","cffEncoding","isCIDFont","glyphNames","addGlyphNamesToUnicodeMap","_IndexToUnicodeMap","addGlyphNames","opt","lowMemory","line","getPathDefinition","_path","Glyph","bindConstructorValues","xMin","yMin","xMax","yMax","advanceWidth","fontSize","hPoints","xScale","yScale","hinting","getCommands","unitsPerEm","getContours","contours","currentContour","pt","lastPointOfContour","getMetrics","xCoords","yCoords","metrics","leftSideBearing","isFinite","rightSideBearing","drawPoints","drawCircles","arc","blueCircles","redCircles","drawMetrics","defineDependentProperty","externalName","internalName","newValue","enumerable","GlyphSet","_push","unicodeObj","_hmtxTableData","loader","glyphLoader","ttfGlyphLoader","parseGlyph","buildPath","cffGlyphLoader","parseCFFCharstring","charstring","glyphset","equals","calcCFFSubroutineBias","subrs","bias","parseCFFIndex","conversionFn","objects","objectOffset","offsetSize","parseCFFIndexLowMemory","getCffIndexObject","parseFloatOperand","parser","eof","lookup","parseOperand","b0","b1","b2","b3","b4","entriesToObject","entries","parseCFFDict","operands","getCFFString","interpretDict","dict","meta","newDict","parseCFFHeader","header","formatMajor","formatMinor","TOP_DICT_META","PRIVATE_DICT_META","parseCFFTopDict","byteLength","parseCFFPrivateDict","gatherCFFTopDicts","cffIndex","topDictArray","iTopDict","topDictData","DataView","buffer","topDict","_subrs","_subrsBias","_defaultWidthX","_nominalWidthX","privateSize","private","privateOffset","privateDict","defaultWidthX","nominalWidthX","subrOffset","subrIndex","_privateDict","parseCFFCharset","nGlyphs","sid","i$2","parseCFFEncoding","enc","nCodes","nRanges","nLeft","c1x","c1y","c2x","c2y","stack","nStems","haveWidth","subrsBias","fdIndex","cff","_fdSelect","fdDict","_fdArray","newContour","parseStems","hasWidthArg","codeIndex","subrCode","jpx","jpy","c3x","c3y","c4x","c4y","pop","gsubrsBias","gsubrs","parseCFFFDSelect","fdArrayCount","fdSelect","iGid","iRange","parseCFFTable","nameIndex","topDictIndex","stringIndex","globalSubrIndex","ros","fdArrayOffset","fdArray","fdSelectOffset","fdArrayIndex","numGlyphs","privateDictOffset","charStringsIndex","charStrings","charString","encodeString","makeHeader","makeNameIndex","fontNames","makeDict","attrs","entry","makeTopDict","makeTopDictIndex","topDicts","makeStringIndex","makeGlobalSubrIndex","makeCharsets","glyphName","glyphSID","glyphToOps","_13","_23","dx1","dy1","dx2","dy2","makeCharStringsIndex","makePrivateDict","makeCFFTable","fontScale","fullName","familyName","weight","weightName","fontBBox","fontMatrix","privateAttrs","postScriptName","charsets","parseHeadTable","fontRevision","checkSumAdjustment","magicNumber","flags","created","modified","macStyle","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","makeHeadTable","timestamp","Date","getTime","createdTimestamp","parseHheaTable","hhea","ascender","descender","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numberOfHMetrics","makeHheaTable","parseHmtxTableAll","numMetrics","parseHmtxTableOnLowMemory","parseHmtxTable","makeHmtxTable","hmtx","makeLtagTable","tags","stringPool","stringPoolOffset","parseLtagTable","tableVersion","numTags","ltag","parseMaxpTable","maxp","maxPoints","maxContours","maxCompositePoints","maxCompositeContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","makeMaxpTable","nameTableNames","macLanguages","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","128","129","130","131","132","133","134","135","136","137","138","139","140","141","142","143","144","145","146","147","148","149","150","151","macLanguageToScript","windowsLanguages","1078","1052","1156","1118","5121","15361","3073","2049","11265","13313","12289","4097","6145","8193","16385","1025","10241","7169","14337","9217","1067","1101","2092","1068","1133","1069","1059","2117","1093","8218","5146","1150","1026","1027","3076","5124","2052","4100","1028","1155","1050","4122","1029","1030","1164","1125","2067","1043","3081","10249","4105","9225","16393","6153","8201","17417","5129","13321","18441","7177","11273","2057","1033","12297","1061","1080","1124","1035","2060","3084","1036","5132","6156","4108","1122","1110","1079","3079","1031","5127","4103","2055","1032","1135","1095","1128","1037","1081","1038","1039","1136","1057","1117","2141","2108","1076","1077","1040","2064","1041","1099","1087","1107","1158","1159","1089","1111","1042","1088","1108","1062","1063","2094","1134","1071","2110","1086","1100","1082","1153","1146","1102","1148","1104","2128","1121","1044","2068","1154","1096","1123","1045","1046","2070","1094","1131","2155","3179","1048","1047","1049","9275","4155","5179","3131","1083","2107","8251","6203","7227","1103","7194","3098","6170","2074","1132","1074","1115","1051","1060","11274","16394","13322","9226","5130","7178","12298","17418","4106","18442","2058","19466","6154","15370","10250","20490","3082","1034","21514","14346","8202","2077","1053","1114","1064","2143","1097","1092","1098","1054","1105","1055","1090","1152","1058","1070","1056","2115","1091","1066","1106","1160","1157","1144","1130","getLanguageCode","platformID","languageID","utf16","macScriptEncodings","macLanguageEncodings","getEncoding","encodingID","parseNameTable","stringOffset","nameID","property","translations","langTagCount","reverseDict","makeNameRecord","findSubArray","needle","haystack","needleLength","limit","loop","addStringToPool","pool","makeNameTable","nameIDs","namesWithNumericKeys","nameTableIds","macLanguageIds","windowsLanguageIds","nameRecords","lang","macPlatform","macLanguage","macScript","macEncoding","macName","macNameOffset","winLanguage","winName","winNameOffset","_name","unicodeRanges","begin","getUnicodeRange","range","parseOS2Table","os2","xAvgCharWidth","usWeightClass","usWidthClass","fsType","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","sFamilyClass","panose","ulUnicodeRange1","ulUnicodeRange2","ulUnicodeRange3","ulUnicodeRange4","achVendID","fsSelection","usFirstCharIndex","usLastCharIndex","sTypoAscender","sTypoDescender","sTypoLineGap","usWinAscent","usWinDescent","ulCodePageRange1","ulCodePageRange2","sxHeight","sCapHeight","usDefaultChar","usBreakChar","usMaxContent","makeOS2Table","parsePostTable","italicAngle","underlinePosition","underlineThickness","isFixedPitch","minMemType42","maxMemType42","minMemType1","maxMemType1","nameLength","makePostTable","subtableParsers","parseLookup1","substFormat","deltaGlyphId","substitute","parseLookup2","sequences","parseLookup3","alternateSets","parseLookup4","ligatureSets","ligGlyph","components","lookupRecordDesc","sequenceIndex","lookupListIndex","parseLookup5","ruleSets","glyphCount","substCount","lookupRecords","classSets","coverages","parseLookup6","chainRuleSets","backtrack","lookahead","backtrackClassDef","inputClassDef","lookaheadClassDef","chainClassSet","backtrackCoverage","inputCoverage","lookaheadCoverage","parseLookup7","extensionLookupType","extensionParser","extension","parseLookup8","substitutes","parseGsubTable","scripts","features","lookups","variations","makeLookup1","subtable","makeLookup2","sequenceSet","makeLookup3","alternateSet","makeLookup4","ligatureSet","ligature","makeLookup6","returnTable","chainRuleSet","chainRule","tableData","record","returnTable$1","makeGsubTable","gsub","parseMetaTable","numDataMaps","dataOffset","makeMetaTable","log2","computeCheckSum","makeTableRecord","checkSum","makeSfntTable","sfnt","highestPowerOf2","recordFields","tableFields","tableLength","tableRecord","r1","metricsForChar","notFoundMetrics","average","vs","fontToSfntTable","xMins","yMins","xMaxs","yMaxs","advanceWidths","leftSideBearings","rightSideBearings","firstCharIndex","lastCharIndex","globals","advanceWidthAvg","maxLeftSideBearing","headTable","hheaTable","maxpTable","os2Table","assign","hasChar","hmtxTable","englishFamilyName","getEnglishName","englishStyleName","englishFullName","n","uniqueID","en","preferredFamily","fontFamily","preferredSubfamily","fontSubfamily","languageTags","nameTable","ltagTable","postTable","cffTable","metaTable","metas","sfntTable","checkSumAdjusted","fontToTable","searchTag","imin","imax","imid","binSearch","Layout","getTable","layout","createDefaultTable","getScriptNames","getDefaultScriptName","hasLatn","getScriptTable","scr","getLangSysTable","scriptTable","getFeatureTable","featIndexes","allFeatures","params","getLookupTables","featureTable","allLookups","getGlyphClass","classDefTable","getCoverageIndex","expandCoverage","Position","defaultKerningTables","getKerningTables","getKerningValue","kerningLookups","leftIndex","rightIndex","covIndex","posFormat","pairSet","pairSets","pair","secondGlyph","value1","class1","classDef1","class2","classDef2","pair$1","classRecords","gpos","Substitution","arraysEqual","ar1","ar2","getSubstFormat","defaultSubtable","getSingle","substitutions","lookupTables","by","getMultiple","replacements","getAlternates","alternates","getLigatures","ligatures","ligSet","lig","addSingle","substitution","coverageGlyph","addMultiple","addAlternate","addLigature","ligComponents","ligatureTable","getFeature","test","isBrowser","nodeBufferToArrayBuffer","ab","ArrayBuffer","arrayBufferToNodeBuffer","Buffer","checkArgument","expression","parseGlyphCoordinate","flag","previousValue","shortVectorBitMask","sameBitMask","numberOfContours","_xMin","_yMin","_xMax","_yMax","endPointIndices","instructionLength","instructions","numberOfCoordinates","repeatCount","point","i$3","onCurve","i$4","i$5","isComposite","moreComponents","component","scale01","scale10","matchedPoints","i$6","transformPoints","newPoints","newPt","contourIndex","contour","curr","prev2","next2","componentGlyph","transformedPoints","firstPt","secondPt","parseGlyfTableAll","loca","nextOffset","parseGlyfTableOnLowMemory","parseGlyfTable","glyf","instructionTable","execGlyph","execComponent","Hinting","_fpgmState","_prepState","_errorState","roundOff","roundToGrid","sign","roundToDoubleGrid","roundToHalfGrid","roundUpToGrid","roundDownToGrid","roundSuper","period","srPeriod","phase","srPhase","threshold","srThreshold","trunc","xUnitVector","o1","o2","xo","interpolate","rp1","rp2","pv","do1","do2","doa1","doa2","dm1","dm2","setRelative","normalSlope","NEGATIVE_INFINITY","rp","org","rpx","rpy","yo","rpdx","rpdy","slope","touch","xTouched","touched","untouch","yUnitVector","POSITIVE_INFINITY","yTouched","freeze","UnitVector","pvns","fvs","getUnitVector","HPoint","prevPointOnContour","nextPointOnContour","preventExtensions","nextTouched","prevTouched","HPZero","defaultState","cvCutIn","deltaBase","deltaShift","minDis","autoFlip","State","env","prog","zp0","zp1","zp2","rp0","fv","dpv","ppem","prepState","fpgmState","fpgm","funcs","DEBUG","step","prep","oCvt","cvt","gZone","state","gz","cc","pi","gLen","inhibitGridFit","z0","z1","z2","pLen","cp","sp","np","ins","initTZone","tZone","handleElse","nesting","SVTCA","SPVTCA","SFVTCA","SPVTL","p2i","p1i","SFVTL","SPVFS","SFVFS","GPV","GFV","SFVTPV","ISECT","pa0i","pa1i","pb0i","pb1i","pa0","pa1","pb0","pb1","x3","y3","x4","y4","f1","f2","SRP0","SRP1","SRP2","SZP0","SZP1","SZP2","SZPS","SLOOP","RTG","RTHG","SMD","ELSE","JMPR","SCVTCI","DUP","POP","CLEAR","SWAP","DEPTH","LOOPCALL","cip","cprog","CALL","CINDEX","MINDEX","FDEF","ipBegin","MDAP","IUP","pp","SHP","rpi","SHC","ci","SHZ","SHPIX","IP","rp1i","rp2i","MSIRP","ALIGNRP","rp0i","RTDG","MIAP","cv","NPUSHB","NPUSHW","WS","store","RS","WCVTP","RCVT","cvte","GC","MD","pi2","pi1","MPPEM","FLIPON","LT","e2","e1","LTEQ","GT","GTEQ","EQ","NEQ","ODD","EVEN","IF","EIF","AND","OR","NOT","DELTAP123","ds","arg","appem","mag","SDB","SDS","ADD","SUB","DIV","MUL","ABS","NEG","FLOOR","CEILING","ROUND","WCVTF","DELTAC123","SROUND","S45ROUND","ROFF","RUTG","RDTG","SCANCTRL","SDPVTL","GETINFO","sel","ROLL","MAX","MIN","SCANTYPE","INSTCTRL","ignoreCvt","PUSHB","PUSHW","MDRP_MIRP","indirect","setRp0","keepD","ro","md","od","Token","activeState","ContextRange","startIndex","contextName","ContextChecker","checkStart","checkEnd","openRange","ContextParams","context","currentIndex","current","eventId","subscribers","initializeCoreEvents","events","this$1","coreEvents","subscribe","requiresContextUpdate","updateContextsRanges","Tokenizer","tokens","registeredContexts","contextCheckers","registeredModifiers","setState","getState","stateId","inboundIndex","composeRUD","RUDs","silent","RUD","hasFAILObject","every","FAIL","report","dispatch","replaceRange","isTokenType","token","replaced","replaceToken","removeRange","removeToken","insertToken","tokenType","registerModifier","modifierId","condition","modifier","newToken","contextParams","conditionParams","canApplyModifier","modifierParams","newStateValue","eventHandler","unsubscribe","subsId","setCurrentIndex","rangeToText","getRangeTokens","getText","getContext","eventName","args","subscriber","registerContextChecker","contextStartCheck","contextEndCheck","endIndex","getContextRanges","resetContextsRanges","runContextCheck","setEndOffset","rangeId","contextChecker","tokenize","from","isArabicChar","isIsolatedArabicChar","isTashkeelArabicChar","isLatinChar","isWhiteSpace","FeatureQuery","SubstitutionAction","action","lookupCoverage","singleSubstitutionFormat1","substituteIndex","singleSubstitutionFormat2","lookupCoverageList","coverageList","lookupList","lookupIndex","chainingSubstitutionFormat3","lookupsCount","inputLookups","lookaheadOffset","lookaheadContext","lookaheadParams","lookaheadLookups","backtrackContext","backtrackParams","backtrackLookups","contextRulesMatch","lookupRecord","getLookupByIndex","subtable$1","getLookupMethod","substitutionType","getSubstitutionType","ligatureSubstitutionFormat1","ligSetIndex","lookaheadItem","decompositionSubstitutionFormat1","getDefaultScriptFeaturesIndexes","getScriptFeaturesIndexes","scriptTag","mapTagsToFeatures","getScriptFeatures","featuresIndexes","lookupFeature","query","getFeatureLookups","getLookupSubtables","substType","supports","supportedScript","supportedFeature","some","scriptFeatures","arabicWordStartCheck","prevChar","arabicWordEndCheck","nextChar","arabicWordCheck","startCheck","endCheck","arabicSentenceStartCheck","arabicSentenceEndCheck","nextIsWhitespace","arabicCharAhead","arabicSentenceCheck","singleSubstitutionFormat1$1","singleSubstitutionFormat2$1","chainingSubstitutionFormat3$1","subst","ligatureSubstitutionFormat1$1","compsCount","SUBSTITUTIONS","applySubstitution","willConnectPrev","charContextParams","isolated","tashkeel","willConnectNext","arabicPresentationForms","featuresTags","tokenizer","CONNECT","getContextParams","arabicRequiredLigatures","latinWordStartCheck","latinWordEndCheck","latinWordCheck","getContextParams$1","latinLigature","Bidi","baseDir","setText","contextChecks","checkId","tokenizeText","reverseArabicSentences","rangeTokens","registerFeatures","supportedTags","applyFeatures","checkGlyphIndexStatus","applyArabicPresentationForms","applyArabicRequireLigatures","applyLatinLigatures","checkContextReady","contextId","applyFeaturesToContexts","processText","getBidiText","getTextGlyphs","indexes","deleted","Font","styleName","designer","designerURL","manufacturer","manufacturerURL","license","licenseURL","copyright","trademark","weightClass","usWeightClasses","MEDIUM","widthClass","usWidthClasses","fsSelectionValues","REGULAR","supported","_hinting","outlinesFormat","charToGlyph","updateFeatures","defaultRenderOptions","stringToGlyphs","bidi","charToGlyphIndexMod","notdef","nameToGlyph","leftGlyph","rightGlyph","gposKerning","kerningPairs","kerning","forEachGlyph","callback","kerningValue","letterSpacing","tracking","fullPath","gX","gY","gFontSize","glyphPath","glyphPaths","getAdvanceWidth","validate","_this","assertNamePresent","englishName","toTables","toBuffer","toArrayBuffer","intArray","download","fileName","arrayBuffer","URL","webkitURL","blob","Blob","href","createObjectURL","createEvent","initEvent","fs","require","writeFileSync","ITALIC","UNDERSCORE","NEGATIVE","OUTLINED","STRIKEOUT","BOLD","USER_TYPO_METRICS","WWS","OBLIQUE","ULTRA_CONDENSED","EXTRA_CONDENSED","CONDENSED","SEMI_CONDENSED","SEMI_EXPANDED","EXPANDED","EXTRA_EXPANDED","ULTRA_EXPANDED","THIN","EXTRA_LIGHT","LIGHT","NORMAL","SEMI_BOLD","EXTRA_BOLD","BLACK","addName","nameString","nameKey","makeFvarAxis","minValue","maxValue","parseFvarAxis","makeFvarInstance","inst","axes","axisTag","coordinates","parseFvarInstance","makeFvarTable","fvar","instances","offsetToData","parseFvarTable","axisCount","axisSize","instanceCount","instanceSize","instanceStart","attachList","attachPoints","caretValue","coordinate","pointindex","ligCaretList","ligGlyphs","markGlyphSets","parseGDEFTable","gdef","markAttachClassDef","subtableParsers$1","posformat","valueFormat1","valueFormat2","value2","class1Count","class2Count","parseLookup9","parseGposTable","subtableMakers$1","makeGposTable","parseWindowsKernTable","pairs","subtableVersion","nPairs","parseMacKernTable","nTables","parseKernTable","kern","parseLocaTable","shortVersion","parseFn","glyphOffsets","glyphOffset","loadFromFile","readFile","loadFromUrl","request","XMLHttpRequest","responseType","onload","response","statusText","onerror","send","parseOpenTypeTableEntries","tableEntries","checksum","compression","parseWOFFTableEntries","compLength","origLength","compressedLength","uncompressTable","tableEntry","inBuffer","outBuffer","parseBuffer","signature","flavor","cffTableEntry","fvarTableEntry","glyfTableEntry","gdefTableEntry","gposTableEntry","gsubTableEntry","hmtxTableEntry","kernTableEntry","locaTableEntry","nameTableEntry","metaTableEntry","locaTable","locaOffsets","glyfTable","kernTable","gdefTable","gposTable","gsubTable","fvarTable","isNode","loadFn","isUrl","Promise","resolve","reject","loadSync","readFileSync","__proto__","_parse","default","u","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","invSize","eliminateHoles","earcutLinked","clockwise","last","signedArea","insertNode","removeNode","filterPoints","again","steiner","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangle","minTX","minTY","maxTX","maxTY","zOrder","prevZ","nextZ","intersects","locallyInside","isValidDiagonal","splitPolygon","queue","getLeftmost","compareX","eliminateHole","hole","bridge","findHoleBridge","bridgeReverse","filteredBridge","hx","hy","qx","mx","my","tanMin","tan","sectorContainsSector","sortLinked","tail","numMerges","pSize","qSize","leftmost","ax","ay","bx","cx","cy","intersectsPolygon","middleInside","q1","q2","o3","o4","onSegment","a2","Node","an","bp","deviation","polygonArea","trianglesArea","flatten","dimensions","holeIndex","__webpack_exports__","CONSTANTS","ANIM","EASINGS","EASING_LINEAR","EASING_ABSOLUTE","EASING_SMOOTHSTEP","EASING_SMOOTHERSTEP","EASING_CUBICSPLINE","EASING_CUBIC_IN","EASING_CUBIC_OUT","EASING_CUBIC_INOUT","EASING_EXPO_IN","EASING_EXPO_OUT","EASING_EXPO_INOUT","EASING_SIN_IN","EASING_SIN_OUT","EASING_SIN_INOUT","EASING_BACK_IN","EASING_BACK_OUT","EASING_BACK_INOUT","EASING_ELASTIC_IN","EASING_ELASTIC_OUT","EASING_BOUNCE_IN","EASING_BOUNCE_OUT","EASING_QUART_IN","EASING_QUART_OUT","EASING_QUART_INOUT","EASING_QUINT_IN","EASING_QUINT_OUT","EASING_QUINT_INOUT","OP_PORT_TYPE_NUMBER","OP_PORT_TYPE_OBJECT","OP_PORT_TYPE_TEXTURE","OP_PORT_TYPE_ARRAY","OP_PORT_TYPE_STRING","OP_VERSION_PREFIX","PORT","PORT_DIR_OUT","PACO","PACO_CLEAR","PACO_VALUECHANGE","PACO_OP_DELETE","PACO_UNLINK","PACO_LINK","PACO_LOAD","PACO_OP_CREATE","PACO_OP_ENABLE","PACO_OP_DISABLE","PACO_UIATTRIBS","PACO_VARIABLES","PACO_TRIGGERS","PACO_PORT_SETVARIABLE","PACO_PORT_SETANIMATED","PACO_PORT_ANIM_UPDATED","PACO_DESERIALIZE","valuePort","varNamePort","triggerPort","nextPort","_valuePort","_varNamePort","_op","_type","_typeId","_triggerPort","_nextPort","_btnCreate","_createVar","_helper","inUiTriggerButtons","which","CMD","PATCH","renameVariable","_updateVarNamesDropdown","_updateName","_renameVar","_isTexture","_setVarValue","_updateErrorUi","hasUiErrors","vari","hasVar","_updateDisplay","createVariable","perf","uiProfiler","oldname","newname","triggered","_arr","_cgl","varnamePort","_varnamePort","_variable","_valueOutPort","_listenerId","_updateTitle","_changeVar","_init","variable","_setValueOut","COREMODULES","Vargetset","Cables","subpatchInputOpName","subpatchOutputOpName","subPatchOp","parentOfSubpatch","createInOutOps","loadDependencies","serverOps","loadProjectDependencies","clearSubPatchCache","isExposableSubpatchOp","Subpatchop","Logger","initiator","_logs","groupCollapsed","groupEnd","verbose","logFilter","shouldPrint","logSilent","userInteraction","float32Concat","getShortOpName","fullname","contains","shuffleArray","seededRandom","temp","_shortIds","_shortId","shortId","_uuid","cleanJson","objValue","_prefixedHash","prefix","hash","character","prefixedHash","simpleIdCounter","simpleId","smootherStep","_oldMin","_oldMax","_newMin","_newMax","_easing","reverseInput","oldMin","oldMax","reverseOutput","newMin","newMax","portion","randomSeed","setRandomSeed","seed","rnd","endl","startsWith","endsWith","suffix","match","searchStr","src","dst","parts2","logStack","parts","ajaxSync","cb","method","contenttype","sync","jsonP","headers","requestOptions","credentials","asynch","onreadystatechange","readyState","status","responseText","toUpperCase","msg","setRequestHeader","withCredentials","keyCodeToName","keyCode","112","113","114","115","116","117","118","119","120","121","122","123","224","base64Chars","_base64lookup","base64lookup","b64encTypesArray","arraybuffer","base64","b64decTypedArray","bufferLength","encoded1","encoded2","encoded3","encoded4","_first","_wireMesh","_max","MAX_VALUE","_min","_center","_size","_maxAxis","maxAxis","applyPos","calcCenterSize","mulMat4","WireCube","_log","faceVertCount","_attributes","_vertices","morphTargets","att","getAttribute","getAttributes","itemSize","attrType","attr","copyAttribute","newgeom","calcNormals","smooth","getNumTriangles","newInd","isIndexed","oldIndizesLength","vertLength","calcNormal","triangle","subtract","getVertexVec","nn","faceNormals","vv","texCoordLength","triangleCount","tempVertices","w1","vec2","w2","w3","sdir","tdir","tri","i1","i2","i3","s1","s2","normal","tempVert","bitan","temp1","temp2","crossPd","normalized","vert","_dp","reIndex","dontCalcNormals","newVerts","newIndizes","na","calcBarycentric","barycentrics","vertX","vertY","getInfoOneLine","getInfo","numFaces","numVerts","numNormals","numTexCoords","numTangents","numBiTangents","numVertexColors","numAttribs","optimize","iv","json2geom","jsonMesh","colors","bitangents","texturecoords","vertices_b64","normals_b64","tangents_b64","bitangents_b64","texturecoords_b64","faces_b64","Uint32Array","EventTarget","_eventCallbacks","_logName","_logEvents","_listeners","idPrefix","hasEventListener","hasListenerForEventName","logEvents","param1","param2","param3","param4","param5","param6","constants_CONSTANTS","Key","cbTriggered","cubicSpline","key1","key2","previousPoint","previousTangent","bezTangOut","nextPoint","nextTangent","bezTangIn","easeCubicSpline","linear","easeLinear","easeAbsolute","easeExpoIn","easeExpoOut","easeExpoInOut","easeSinIn","easeSinOut","easeSinInOut","easeCubicIn","easeInQuint","easeOutQuint","easeInOutQuint","easeInQuart","easeOutQuart","easeInOutQuart","bounce","easeInBounce","easeOutBounce","easeInElastic","asin","easeOutElastic","easeInBack","easeOutBack","easeInOutBack","easeCubicOut","easeCubicInOut","easeSmoothStep","easeSmootherStep","ease","EASING_ELASTIC_INOUT","easeElasticInOut","getSerialized","getEasing","cfg","stayInTimeline","_lastKeyIndex","_cachedIndex","onLooped","_timesLooped","_needsSort","forceChangeCallback","getLoop","setLoop","target","hasEnded","isRising","ki","getKeyIndex","clearBefore","_updateLastIndex","sortKeys","getLength","setKeyEasing","getKey","getNextKey","isFinished","isStarted","currentLoop","index2","_warn","addKey","easingFromString","port","slerpQuaternion","animx","animy","animz","animw","quat","key1Time","key2Time","slerp","___op","_oldAnimVal","_uiActiveState","crashed","_valueBeforeLink","_lastAnimFrame","_animated","onValueChanged","onUiActiveStateChange","forceRefChange","_useVariableName","activityCounter","apf","activityCounterStartFrame","_tempLastUiValue","copyLinkedUiAttrib","getUiAttrib","getValueForDisplay","onAnimToggle","_onAnimToggle","removePort","newAttribs","indexPort","group","getUiAttribs","attribName","getFrameNum","timer","forceChange","ex","_v","showOpCrash","onError","updateTexturePort","updateAnim","_activity","getTypeString","deSerializeSettings","objPort","animated","setAnimated","useVariable","setVariableName","expose","order","multiPortNum","_hasAnimPort","ani","setInitialValue","preservedPortLinks","lobj","_addLink","preservedPortValues","preserveLinks","ignoreInSerialize","otherp","isInBlueprint2","shouldLink","removeLink","checkLinkTimeWarnings","getTitle","addLink","getLinkTo","isLinkedTo","linksLength","portTriggered","pushTriggerStack","_onTriggered","popTriggerStack","activity","execute","goals","getVariableName","setVariable","_variableIn","_varChangeListenerId","variableName","_handleNoTriggerOpAnimUpdates","hasTriggerPort","_notriggerAnimUpdate","isAnimated","toggleAnim","getType","isBoundToVar","boundToVar","isHidden","updateAnims","_onSetProfiling","profiler","_onTriggeredProfiling","getUiActiveState","setUiActiveState","onoff","onValueChange","portTypeNumberToString","CgUniform","__shader","__type","__name","_value","_port2","_port3","_port4","_structUniformName","_structName","_propertyName","_shader","_oldValue","_port","_addUniform","shaderType","comment","setValueF","updateValueF","setValueArrayF","updateValueArrayF","setValueArray2F","updateValueArray2F","setValueArray3F","updateValueArray3F","setValueArray4F","updateValueArray4F","setValueI","updateValueI","setValue2I","updateValue2I","setValue3I","updateValue3I","setValue4I","updateValue4I","setValueBool","updateValueBool","setValue4F","updateValue4F","setValue3F","updateValue3F","setValue2F","updateValue2F","setValueT","updateValueT","setValueArrayT","updateValueArrayT","setValueM4","updateValueM4","updateFromPort4f","updateFromPort3f","updateFromPort2f","updateFromPort","getShaderType","isStructMember","cg_uniform","super","_loc","newShader","uni","getGlslTypeString","glslTypeString","_isValidLoc","resetLoc","bindTextures","getLoc","getCgl","getUniformLocation","getProgram","uniform1f","profileUniformCount","uniform1i","profileShaderGetUniform","profileShaderGetUniformName","uniform2i","uniform3i","uniform4i","vec4","uniform4fv","uniform3fv","uniform2fv","uniform1fv","uniform3f","uniform2f","uniform4f","uniformMatrix4fv","uniform1iv","SHADER","SHADERVAR_VERTEX_POSITION","SHADERVAR_VERTEX_NUMBER","SHADERVAR_VERTEX_NORMAL","SHADERVAR_VERTEX_TEXCOORD","SHADERVAR_INSTANCE_MMATRIX","SHADERVAR_VERTEX_COLOR","SHADERVAR_INSTANCE_INDEX","SHADERVAR_UNI_PROJMAT","SHADERVAR_UNI_VIEWMAT","SHADERVAR_UNI_MODELMAT","SHADERVAR_UNI_NORMALMAT","SHADERVAR_UNI_INVVIEWMAT","SHADERVAR_UNI_INVPROJMAT","SHADERVAR_UNI_MATERIALID","SHADERVAR_UNI_OBJECTID","SHADERVAR_UNI_VIEWPOS","BLEND_MODES","BLEND_NONE","BLEND_NORMAL","BLEND_ADD","BLEND_SUB","BLEND_MUL","cgl_constants_CONSTANTS","MATH","extendMeshWithFeedback","hasFeedbacks","_feedBacks","removeFeedbacks","_feedbacks","_feedBacksChanged","setAttributeFeedback","setFeedback","attrib","nameOut","initialArr","unBindFeedbacks","deleteBuffer","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","bindFeedback","_transformFeedBackLoc","createTransformFeedback","bindTransformFeedback","TRANSFORM_FEEDBACK","bindBufferBase","TRANSFORM_FEEDBACK_BUFFER","drawFeedbacks","prim","setFeedbackNames","compile","beginTransformFeedback","drawArrays","numItems","endTransformFeedback","feedBacksSwapBuffers","__geom","_options","_bufVertexAttrib","_bufVerticesIndizes","_indexType","UNSIGNED_SHORT","_attribLocs","_geom","_lastShader","_numInstances","_glPrimitive","_preWireframeGeom","feedBackAttributes","_lastAttrUpdate","memFreed","addHeavyEvent","_queryExt","setNumInstances","freeMem","floatArray","updateVertices","_numVerts","setAttributePointer","attrName","loc","setAttributeRange","profileMeshAttributes","profileSingleMeshAttribute","_resizeAttr","bufferSubData","_bufferArray","debugOneFrame","profileNonTypedAttrib","profileNonTypedAttribNames","arrayLength","DYNAMIC_DRAW","updateAttribute","FLOAT","startItem","updateTexCoords","tcBuff","updateNormals","_setVertexNumbers","_verticesNumbers","uniformNumVertices","setVertexIndices","vertIndices","ELEMENT_ARRAY_BUFFER","vertIndicesTyped","UNSIGNED_INT","removeRef","profileMeshSetGeom","_disposeAttributes","geomAttribs","attribAssoc","_preBind","_checkAttrLengths","_bind","isValid","attrLocs","lastCompile","attribute","_attrLocationLastShaderTime","glGetAttribLocation","profileAttrLoc","enableVertexAttribArray","vertexAttribPointer","vertexAttribDivisor","disableVertexAttribArray","meshChanged","printDebug","setNumVertices","getNumVertices","wireframe","needsBind","TRIANGLES","elementDiv","doQuery","doProfileGlQuery","queryStarted","queryProfilerData","glQueryData","shaderOp","meshOp","_drawQuery","available","getQueryParameter","QUERY_RESULT_AVAILABLE","elapsedNanos","QUERY_RESULT","currentTimeGPU","_times","_numcount","when","createQuery","beginQuery","TIME_ELAPSED_EXT","drawArraysInstanced","drawElements","drawElementsInstanced","getError","NO_ERROR","attribNames","getProgramParameter","ACTIVE_ATTRIBUTES","getActiveAttrib","profileMeshNumElements","profileMeshDraw","endQuery","printError","indexArr","MESHES","getSimpleRect","getSimpleCube","_useDefaultShader","numRenderBuffers","vertexShader","ignoreMissingUniforms","tex1","tex2","tex3","tex4","renderOffscreen","Copytexture"],"mappings":"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,EAAG,EACHC,EAAG,EACHC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,GACJC,GAAI,EACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,GACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,GACJC,GAAI,GACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,GACJC,GAAI,GACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,GACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,GACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,GACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,GACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,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O,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,IAAM,EAC3B,CAACgvD,MAAO,KAAQhvD,IAAK,KAAM,EAC3B,CAACgvD,MAAO,MAAQhvD,IAAK,KAAM,EAC3B,CAACgvD,MAAO,MAAQhvD,IAAK,KAAM,EAC3B,CAACgvD,MAAO,MAAQhvD,IAAK,KAAM,EAC3B,CAACgvD,MAAO,MAAQhvD,IAAK,K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F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC4gE,EAAU5/F,KAAKg/B,UAAW,EAAG,EAAG,EAAG,EAAG,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"} \ No newline at end of file diff --git a/src/cables-ui.js b/src/cables-ui.js new file mode 100644 index 0000000..4c7bbc9 --- /dev/null +++ b/src/cables-ui.js @@ -0,0 +1,10 @@ +// console.log( 'cables-ui loading' ); + +// const myVar = globalThis.CABLES.patch.getVar("ui_dialValues"); + +// if(myVar) { +// // will be called every time value changes +// myVar.on("change", (function(newValue) { +// console.log(newValue); +// })); +// } \ No newline at end of file diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..b0a33cf --- /dev/null +++ b/src/main.ts @@ -0,0 +1,7 @@ + +import { mount } from 'svelte'; +import App from './App.svelte' + +const app = mount(App, { target: document.getElementById("app") }); + +export default app; diff --git a/src/DragBehavior.jsx b/src/previous-react-version/DragBehavior.jsx similarity index 100% rename from src/DragBehavior.jsx rename to src/previous-react-version/DragBehavior.jsx diff --git a/src/Interface.jsx b/src/previous-react-version/Interface.jsx similarity index 100% rename from src/Interface.jsx rename to src/previous-react-version/Interface.jsx diff --git a/src/Knob.jsx b/src/previous-react-version/Knob.jsx similarity index 100% rename from src/Knob.jsx rename to src/previous-react-version/Knob.jsx diff --git a/src/Lockup.svg b/src/previous-react-version/Lockup.svg similarity index 100% rename from src/Lockup.svg rename to src/previous-react-version/Lockup.svg diff --git a/src/index.css b/src/previous-react-version/index.css similarity index 100% rename from src/index.css rename to src/previous-react-version/index.css diff --git a/src/main.jsx b/src/previous-react-version/main.jsx similarity index 100% rename from src/main.jsx rename to src/previous-react-version/main.jsx diff --git a/src/stores/NativeMessage.ts b/src/stores/NativeMessage.ts new file mode 100644 index 0000000..baa80c1 --- /dev/null +++ b/src/stores/NativeMessage.ts @@ -0,0 +1,250 @@ +export declare var globalThis: any; + +import { get } from "svelte/store"; +import type { + NEL_Preset, + MessagesToHost, +} from "../../types"; + +import { getValueFromEntries } from "../utils/utils"; +import { + HostState, + LicenseStatus, + HostInfo, + LICENSE_VALIDATED, +} from "./stores"; + + +/** ━━━━━━━ generated doc ━━━━━━━ + * `processHostState` is a function that processes and denormalizes parameter values sent from the host. + * It receives these values via the `__receiveStateChange__` global function. + * @param state - The state object received from the host. + * + * `MessageToHost` is an object that contains callable functions for interfacing with the Host code. + * + * `stashMeshState` is a function that manually gets the current state key of each storage slot and serializes it for persistentState storage in the host plugin. + * + * `requestParamValueUpdate` is a function that updates parameter values in the host. + * @param paramId - The ID of the parameter to update. + * @param value - The new value of the parameter. + * + * `requestReady` is a function that sends a ready message to the host. + * + * `requestUnlock` is a function that sends an unlock message to the KeyZey handler. + * @param serial - The serial number for unlocking. + * + * `__setMeshStateInHost` is a function that stores any persistent UI state in the host. + * @param dataToPersist - The data to persist in the host. + * + * `__bindHotReload` is a function that hot reloads the DSP during development. + * + * `RegisterMessagesFromHost` is a function that registers the message handlers for receiving and processing messages from the host. + * It sets up global functions that handle state changes, mesh state changes, license activation, error handling, and host information. + */ + + +/** ━━━━━━━ + * Main method for processing and denormalizing parameter values sent from the host + * received via the `__receiveStateChange__` global function. + * @param state - The state object received from the host. + */ + +function processHostState(state: any) { + // ━━━━━━━ + // Parse the state object and convert it to an array of key-value pairs + let parsedEntries: Array<[string, any]> = []; + try { + parsedEntries = Object.entries(JSON.parse(state)); + } catch (e) { + console.warn("Bad state received", parsedEntries); + } + const processedEntries: Map<string, number> = new Map(parsedEntries); + // ━━━━━━━ + // denormalize the full range type, shift, and climb parameters + processedEntries.set( + "type", + getValueFromEntries(processedEntries, "type") * 2 - 1 + ); + processedEntries.set( + "shift", + getValueFromEntries(processedEntries, "shift") * 2 - 1 + ); + processedEntries.set( + "climb", + getValueFromEntries(processedEntries, "climb") * 2 - 1 + ); + + /** ━━━━━━━ + * Finally, assign the processed entries as Map<string, number> ) + * to the HostState store which triggers observer / subscribers + * across the View code updating parameter values. + **/ + HostState.set(new Map(processedEntries)); +} + +/** ━━━━━━━ + * Callable functions for interfacing with the Host code. + **/ +export const MessageToHost: MessagesToHost = { + /** ━━━━━━━ + * Manually get the current state key of each storage slot and serialize for + * persistentState storage in the host plugin. We need to stash and retrieve the view state + * as the WebView is destroyed when the user closes the plugin window. + * The solution must also work for preset store/recall originating from DAW Host. + **/ + stashMeshState: function () { + let dataToPersist = { + nodeStates: get(UI_NodesData).map((data) => get(data.state) as string), + presets: get(UI_NodesData).map((data) => { + if (!data.preset) return {} as NEL_Preset; + let parameters = Array.from(data.preset.parameters.entries()); + return { ...data.preset, parameters } as unknown as NEL_Preset; + }), + license: get(LicenseStatus), + viewOptions: get(ViewOptions), + }; + this.__setMeshStateInHost(dataToPersist); + }, + + /** ━━━━━━━ + * Update parameter values in the host. + * @param paramId - The ID of the parameter to update. + * @param value - The new value of the parameter. + */ + requestParamValueUpdate: function (paramId: string, value: number) { + if (typeof globalThis.__postNativeMessage__ === "function") { + if (paramId === "type" || paramId === "shift" || paramId === "climb") { + value = (value + 1) / 2; + } + globalThis.__postNativeMessage__("setParameterValue", { + paramId, + value, + }); + } + }, + + /** ━━━━━━━ + * Send a ready message to the host. + */ + requestReady: function () { + if (typeof globalThis.__postNativeMessage__ === "function") { + globalThis.__postNativeMessage__("ready", {}); + } + }, + + /** ━━━━━━━ + * Send an unlock message to the KeyZey handler. + * @param serial - The serial number for unlocking. + */ + requestUnlock: function (serial: string = "") { + if (get(LicenseStatus) !== LICENSE_VALIDATED) { + console.count("Requesting unlock"); + if (typeof globalThis.__postNativeMessage__ === "function") { + globalThis.__postNativeMessage__("unlock", { serial }); + } + } + }, + + /** ━━━━━━━ + * Store any persistent UI state in the host. + * @param dataToPersist - The data to persist in the host. + */ + __setMeshStateInHost: function (dataToPersist: any) { + if (typeof globalThis.__postNativeMessage__ === "function") { + globalThis.__postNativeMessage__( + "setMeshState", + JSON.stringify(dataToPersist) + ); + } + }, + + /** ━━━━━━━ + * Hot reload the DSP during development. + */ + __bindHotReload: function () { + if (process.env.NODE_ENV !== "production") { + import.meta.hot?.on("reload-dsp", () => { + // console.log("Sending reload dsp message"); + + if (typeof globalThis.__postNativeMessage__ === "function") { + globalThis.__postNativeMessage__("reload"); + } + }); + } + }, +}; + +/** ━━━━━━━ + * Registers the message handlers for receiving and processing messages from the host. + * This function sets up global functions that handle state changes, mesh state changes, + * license activation, error handling, and host information. + */ + +export function RegisterMessagesFromHost() { + /** ━━━━━━━ + * Handles the state change received from the host. + * @param state - The host state change object. + */ + globalThis.__receiveStateChange__ = function (state: any) { + processHostState(state); + }; + + /** ━━━━━━━ + * Handles the mesh state change received from the host. + * @param meshState - The mesh state object. + */ + globalThis.__receiveMeshStateChange__ = function (meshState: any) { + let incomingMeshState: IncomingMeshState; + try { + incomingMeshState = JSON.parse(JSON.parse(meshState).meshState); + } catch (e) { + // console.log("Invalid mesh state (rcv)", meshState, e); + LicenseStatus.set("Mesh state error. Contact support."); + return; + } + if (typeof incomingMeshState !== "object") return; + + if (!incomingMeshState.license) { + MessageToHost.requestUnlock(); + } else { + LicenseStatus.set(incomingMeshState.license); + MessageToHost.stashMeshState(); + } + + if (incomingMeshState.nodeStates && incomingMeshState.presets) { + MeshStateIncoming.set(incomingMeshState); + } + + UI_needsUpdate.set(true); + }; + + /** ━━━━━━━ + * Handles the unlock status received from the host. + * @param status - The unlock status string. + */ + globalThis.__onUnlock__ = function (status: string | undefined) { + LicenseStatus.set(status || "License not valid"); + if (status === LICENSE_VALIDATED) { + globalThis.__postNativeMessage__("ready", {}); + MessageToHost.stashMeshState(); + } + }; + + /** ━━━━━━━ + * Handles the DAW name received from the host. + * @param message - The host information object. + */ + globalThis.__hostInfo__ = function (message: string) { + HostInfo.set(message); + // console.log("Host Info: ", message); + }; + + /** ━━━━━━━ + * DEV: Handles an error received from the host. + * @param error - The error object. + */ + globalThis.__receiveError__ = function (error: any) { + ConsoleText.set("Error: " + error); + }; +} + \ No newline at end of file diff --git a/src/stores/WWTimer.ts b/src/stores/WWTimer.ts new file mode 100644 index 0000000..5a83115 --- /dev/null +++ b/src/stores/WWTimer.ts @@ -0,0 +1,55 @@ +import { setInterval, setTimeout, clearTimeout } from 'worker-timers' + +// ui related +export class WWTimer { + // Existing members + private startTime: number | null = null; + private timeoutId: number | any; + private duration: number; + public isRunning: boolean = false; + // New member to track if the timer is running + + + constructor(duration: number) { + this.duration = duration; + } + + // Starts the timer + start(callback: () => void): void { + if (this.isRunning) { // Check if the timer is already running + return; + } + this.isRunning = true; // Update isRunning state + this.startTime = Date.now(); + this.timeoutId = setTimeout(() => { + callback(); + this.reset(); + }, this.duration); + } + + // Resets the timer + reset(): void { + if (this.timeoutId !== null) { + clearTimeout(this.timeoutId); + this.timeoutId = null; + } + this.startTime = null; + this.isRunning = false; // Update isRunning state + } + + // Sets a new duration for the timer + setDuration(newDuration: number): void { + this.duration = newDuration; + // If the timer is running, restart it with the new duration + if (this.isRunning) { // Use isRunning to check if the timer is active + this.reset(); + this.start(() => { + console.log("Timer finished after duration update"); + }); + } + } + + get stopped(): boolean { + return !this.isRunning; + } + } \ No newline at end of file diff --git a/src/stores/stores.ts b/src/stores/stores.ts new file mode 100644 index 0000000..d133f9e --- /dev/null +++ b/src/stores/stores.ts @@ -0,0 +1,104 @@ +//@ts-nocheck +/** typescript disabled for now */ + +//#region IMPORTS +import type { + LocalManifest, + HostParameter, + NEL_ControlsMap, + NEL_NodeUserData, +} from "../types/index"; + + +//#endregion + + +//#region CONSTANTS +export const UNCHECKED_LICENSE_STATUS = "Checking"; +export const LICENSE_VALIDATED = "Valid"; + // UI MANIFEST + // 📍 Extended version of public/manifest.json --- keep them in sync! +export const manifest: LocalManifest = { + window: { width: 575, height: 930 }, + parameters: [ + { paramId: "blend", name: "Blend", min: 0.0, max: 1.0, defaultValue: 0.0, group: "shifter" }, + { paramId: "shift", name: "Shift", min: -1.0, max: 1.0, defaultValue: 0.0, group: "shifter" }, + { paramId: "type", name: "Type", min: -1.0, max: 1.0, defaultValue: -1.0, group: "shifter" }, + { paramId: "climb", name: "Climb", min: -1.0, max: 1.0, defaultValue: -1.0, group: "feedback" }, + { paramId: "ladder", name: "Ladder", min: 0.0, max: 1.0, defaultValue: 0.0, group: "feedback" }, + { paramId: "stride", name: "Stride", min: 0.0, max: 1.0, defaultValue: 0.25, group: "feedback" }, + { paramId: "gain", name: "Gain", min: 0.0, max: 1.0, defaultValue: 0.25, group: "feedback" }, + { paramId: "size", name: "Size", min: 0.0, max: 1.0, defaultValue: 0.125, group: "reverb" }, + { paramId: "decay", name: "Decay", min: 0.0, max: 1.0, defaultValue: 0.15, group: "reverb" }, + { paramId: "mod", name: "Mod", min: 0.0, max: 1.0, defaultValue: 0.125, group: "reverb" }, + { paramId: "mix", name: "Mix", min: 0.0, max: 1.0, defaultValue: 0.25, group: "reverb" }, + ] +}; +export const NUMBER_HOSTPARAMS = manifest.parameters.length; +//#endregion + + + +//#region LICENSE ACTIVATION + +export const LicenseStatus: string = $state(UNCHECKED_LICENSE_STATUS); + +//#endregion + + +//#region AUDIO PARAMS +//---- registered audio parameters ------------------- +export const ParamDefsHost: HostParameter[] = $state( manifest.parameters); +// registered audio parameters for UI +export const ParamIds: string[] = $state(manifest.parameters.map((p: HostParameter) => p.paramId)); + +//#endregion + +//#region UI STATE MACHINES, CONTROLS + + +// we only need to store the user data, not the whole mesh +export const UI_NodesData: NEL_NodeUserData[] = $state([]); +export const focusedNodeParams: NEL_ControlsMap = $state(new Map()); + + +// Explicit refresh of the stored presets +export const UI_StoredPresetsRefresh: boolean = $state(false); +export const UI_needsUpdate: boolean = $state(true); +export const UI_asyncReady: boolean = $state(false); +// Sidebar controls +export const UI_Controls: NEL_ControlsMap = $state(new Map()); + +//#endregion + +//#region RAYCASTER & PICKING + +// Global export of current RayCast target +export const CurrentPickedId: number = $state(0); +export const CurrentFocusId: number = $state(0); +export const ActiveId: number = $state(0); +export const MouseDownWindow: boolean = $state(false); + +//#endregion + +//#region USER INTERACTION + +export const ConsoleText: string = $state("Console:"); +export const ShiftPressed: boolean = $state(false); +export const BillboardText: string = $state(""); + +//#endregion + +//#region HOST STATE +export const MeshStateIncoming: any = $state(); +export const HostState: Map<string, any> = $state( new Map()); +export const ErrorStore: any = $state(); + +//#endregion + +//#region MISC + +export const PixelDensity: number = $state(2); +export const HostInfo: string = $state(''); + +//#endregion \ No newline at end of file diff --git a/src/types/index.d.ts b/src/types/index.d.ts new file mode 100644 index 0000000..65b3dba --- /dev/null +++ b/src/types/index.d.ts @@ -0,0 +1 @@ +// todo diff --git a/src/utils/utils.ts b/src/utils/utils.ts new file mode 100644 index 0000000..7f034b1 --- /dev/null +++ b/src/utils/utils.ts @@ -0,0 +1,167 @@ +import type { Vec } from "@thi.ng/vectors"; +import type { UI_Slider, NEL_ControlsMap, NEL_Preset } from "../../types"; +import type { InstancedMesh, Object3D } from "three"; + + +// This function extracts the 'value' property from each UI_Slider +// object in the UI_ControlsMap and returns them as an array of type Vec. +export function extractValuesFrom(view: NEL_ControlsMap): Vec { + return Array.from(view.values()).map((slider) => slider.value) as Vec; +} + + // Helper function to get the value from the tuple that results from deserializing the host state object + export function getValueFromEntries(entries: any, key: string): number { + let result = 0; + try { + result = entries.find(([k]: [string]) => k === key)[1]; + } catch { (e:any) => + console.warn("Error setting state entries on key ", key, e.message); + } + return result; +} + +// filter out params that are not registered with the host +export function onlyRegisteredParams( + view: NEL_ControlsMap +): Map<string, UI_Slider> { + let onlyRegisteredParams = new Map( + [...view].filter(([key, value]) => value.isRegistered) + ); + return onlyRegisteredParams; +} + +// Convert an array of UI_ControlsMap to +// serializable structure (array of objects) +export function serialisePresets(arrayOfPresets: Array<NEL_Preset>) { + if (!arrayOfPresets) return {}; + let parametersMap: Map<string, UI_Slider> + const result = arrayOfPresets.map((preset) => { + if (preset === undefined) return {}; + parametersMap = preset.parameters; + let obj: { [key: string]: UI_Slider } = {}; + preset.parameters.forEach((settings, key, map) => { + obj[key] = settings; + }); + return obj; + }); + return result; +} + +// Convert an array of objects to an array of UI_ControlsMap (Map<string, UI_Slider>) +export function deserialisePresets( + arrayOfObjects: { [key: string]: UI_Slider }[] +) { + const result = arrayOfObjects.map((presetObj) => { + let presetMap = new Map<string, UI_Slider>(); + for (let key in presetObj) { + presetMap.set(key, presetObj[key]); + } + return presetMap; + }); + return result; +} + +// sample and hold function +export function sampleAndHold(value: number, hold: boolean) { + let heldValue: number = 0; + return function () { + if (hold) { + heldValue = value; + } + return heldValue; + }; +} + +// utility functions for generating the grid array and an iterator for it +export const fillArrayUsing = ( + arr: any[], + start: number, + end: number, + step: number, + value: number +) => { + for (let i = start; i <= end; i += step) { + arr.push(value); + } + return arr; +}; + +export const arrayIterator = (arr: any[]) => arr.values(); + +// utility functions for BufferGeometry transformations +export function scaleXYZ(vertices: Float32Array, scale: number) { + const resizedVertices = vertices.map((v) => v * scale); + return resizedVertices; +} + +export function scaleWidth(vertices: Float32Array, scale: number) { + const resizedVertices = new Float32Array(vertices.length); + for (let i = 0; i < vertices.length; i += 3) { + resizedVertices[i] = vertices[i] * scale; + resizedVertices[i + 1] = vertices[i + 1]; + resizedVertices[i + 2] = vertices[i + 2]; + } + return resizedVertices; +} + +export function scaleHeight(vertices: Float32Array, scale: number) { + const resizedVertices = new Float32Array(vertices.length); + for (let i = 0; i < vertices.length; i += 3) { + resizedVertices[i] = vertices[i]; + resizedVertices[i + 1] = vertices[i + 1] * scale; + resizedVertices[i + 2] = vertices[i + 2]; + } + return resizedVertices; +} + +export function offsetXY( + vertices: Float32Array, + offsetX: number, + offsetY: number +) { + const offsetVertices = new Float32Array(vertices.length); + + for (let i = 0; i < vertices.length; i += 3) { + offsetVertices[i] = vertices[i] + offsetX; + offsetVertices[i + 1] = vertices[i + 1] + offsetY; + offsetVertices[i + 2] = vertices[i + 2]; + } + return offsetVertices; +} + +export function retrieveNodeFromInstancedMesh (o: any | null, instanceId: number) : Object3D | null { + if (o) { + const parentMesh: InstancedMesh = o; + const node: Object3D = parentMesh.instances.current[instanceId]; + return node; + } + return null; +} + +class ShiftRegister<T> { + currentState: T | null; + previousState: T | null; + + constructor(initialState: T | null) { + this.currentState = initialState; + this.previousState = null; + } + + updateState(newState: T) { + this.previousState = this.currentState; + this.currentState = newState; + } + + isStateChanged() { + return this.currentState !== this.previousState; + } + + fastCompare(): boolean { + if (this.currentState === null || this.previousState === null) { return true; } + return JSON.stringify(this.currentState) !== JSON.stringify(this.previousState); + } +} + +export function shiftRegister<T>(initialState: T | null) { + return new ShiftRegister<T>(initialState); +} \ No newline at end of file diff --git a/vite.config.js b/vite.config.js index 7aeb03e..83e1ab6 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,11 +1,5 @@ import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' - -import { execSync } from 'node:child_process' - -const currentCommit = execSync("git rev-parse --short HEAD").toString(); -const date = new Date(); -const dateString = `${date.getFullYear()}.${date.getMonth() + 1}.${date.getDate()}`; +import { svelte } from '@sveltejs/vite-plugin-svelte' // A helper plugin which specifically watches for changes to public/dsp.main.js, // which is built in a parallel watch job via esbuild during dev. @@ -17,8 +11,8 @@ const dateString = `${date.getFullYear()}.${date.getMonth() + 1}.${date.getDate( function pubDirReloadPlugin() { return { name: 'pubDirReload', - handleHotUpdate({file, modules, server}) { - if (file.includes('public/dsp.main.js')) { + handleHotUpdate({ file, modules, server }) { + if (file.includes('public/dsp.main.js' )) { server.ws.send({ type: 'custom', event: 'reload-dsp', @@ -30,12 +24,19 @@ function pubDirReloadPlugin() { }; } -// https://vitejs.dev/config/ +// related to the audio blanking error on some devices +// is the order of plugins important? export default defineConfig({ base: './', - define: { - __COMMIT_HASH__: JSON.stringify(currentCommit), - __BUILD_DATE__: JSON.stringify(dateString), + plugins: [ + svelte(), + pubDirReloadPlugin(), + ], + server: { + watch: { + // The paths to be added to the watch list + + } }, - plugins: [react(), pubDirReloadPlugin()], + })