diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml deleted file mode 100644 index 271ac9d5f..000000000 --- a/.github/workflows/nodejs.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: Node.js CI - -on: - push: - branches: - - main - pull_request: - -jobs: - nodejs: - uses: zakodium/workflows/.github/workflows/nodejs.yml@nodejs-v1 - with: - lint-check-types: true diff --git a/.github/workflows/release-head.yml b/.github/workflows/release-head.yml deleted file mode 100644 index 2cc3193ae..000000000 --- a/.github/workflows/release-head.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: Release HEAD - -on: - workflow_dispatch: - -jobs: - release-head: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: '22.x' - registry-url: 'https://registry.npmjs.org' - - name: Install dependencies - run: npm install - - name: Bump version - run: | - VERSION=$(jq -r '.version' package.json) - SHA=$(git rev-parse --short=10 HEAD) - npm version "${VERSION}-next-${SHA}" --no-git-tag-version - - name: Publish HEAD tagged as next - run: npm publish --tag next - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_BOT_TOKEN }} diff --git a/.github/workflows/typedoc.yml b/.github/workflows/typedoc.yml deleted file mode 100644 index 157c410be..000000000 --- a/.github/workflows/typedoc.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Typedoc - -on: - workflow_dispatch: - push: - branches: - - main - pull_request: - -env: - NODE_VERSION: 22.x - ENTRY_FILE: 'src/index.ts' - -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: ${{ env.NODE_VERSION }} - - name: Install dependencies - run: npm install - - name: Build documentation - uses: zakodium/typedoc-action@v2 - with: - entry: ${{ env.ENTRY_FILE }} - name: ImageJS - treatWarningsAsErrors: ${{ github.ref != 'refs/heads/main' }} - - name: Deploy to GitHub pages - if: github.ref == 'refs/heads/main' - uses: JamesIves/github-pages-deploy-action@releases/v4 - with: - token: ${{ secrets.BOT_TOKEN }} - branch: gh-pages - folder: docs - clean: true diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 0a2780734..000000000 --- a/.gitignore +++ /dev/null @@ -1,140 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Python stuff -.venv - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt - -# api-extractor build output -dist-types - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* -yarn.lock - -.DS_Store - -lib -lib-cjs - -# debug images -src/**/*.tif -src/**/*.png -!src/**/__image_snapshots__/*.png - -# ignore images in test scripts folder -scripts/**/**.png -scripts/**/**.json - -private - -.jest-image-snapshot-touched-files diff --git a/.ncurc.yml b/.ncurc.yml deleted file mode 100644 index 22d8cdf50..000000000 --- a/.ncurc.yml +++ /dev/null @@ -1,3 +0,0 @@ -reject: - # Package is now ESM-only - - 'image-type' diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e2ac6616a --- /dev/null +++ b/.nojekyll @@ -0,0 +1 @@ +TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 43c97e719..000000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -package-lock=false diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index a23e760a0..000000000 --- a/.prettierrc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "arrowParens": "always", - "semi": true, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "all" -} diff --git a/README.md b/README.md deleted file mode 100644 index 147db2132..000000000 --- a/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# image-js - -[![NPM version][npm-image]][npm-url] -[![build status][ci-image]][ci-url] -[![Test coverage][codecov-image]][codecov-url] -[![npm download][download-image]][download-url] - -Image processing and manipulation in JavaScript. - -## Installation - -`$ npm i image-js` - -## [API](https://image-js.github.io/image-js-typescript/) - -## Development - -See [Development documentation](./Development.md). - -## License - -[MIT](./LICENSE) - -[npm-image]: https://img.shields.io/npm/v/image-js.svg -[npm-url]: https://www.npmjs.com/package/image-js -[ci-image]: https://github.com/image-js/image-js-typescript/actions/workflows/nodejs.yml/badge.svg -[ci-url]: https://github.com/image-js/image-js-typescript/actions/workflows/nodejs.yml -[codecov-image]: https://img.shields.io/codecov/c/github/image-js/image-js-typescript.svg -[codecov-url]: https://codecov.io/gh/image-js/image-js-typescript -[download-image]: https://img.shields.io/npm/dm/image-js.svg -[download-url]: https://www.npmjs.com/package/image-js diff --git a/api-extractor.json b/api-extractor.json deleted file mode 100644 index 97c50b60d..000000000 --- a/api-extractor.json +++ /dev/null @@ -1,427 +0,0 @@ -/** - * Config file for API Extractor. For more info, please visit: https://api-extractor.com - */ -{ - "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", - - /** - * Optionally specifies another JSON config file that this file extends from. This provides a way for - * standard settings to be shared across multiple projects. - * - * If the path starts with "./" or "../", the path is resolved relative to the folder of the file that contains - * the "extends" field. Otherwise, the first path segment is interpreted as an NPM package name, and will be - * resolved using NodeJS require(). - * - * SUPPORTED TOKENS: none - * DEFAULT VALUE: "" - */ - // "extends": "./shared/api-extractor-base.json" - // "extends": "my-package/include/api-extractor-base.json" - - /** - * Determines the "" token that can be used with other config file settings. The project folder - * typically contains the tsconfig.json and package.json config files, but the path is user-defined. - * - * The path is resolved relative to the folder of the config file that contains the setting. - * - * The default value for "projectFolder" is the token "", which means the folder is determined by traversing - * parent folders, starting from the folder containing api-extractor.json, and stopping at the first folder - * that contains a tsconfig.json file. If a tsconfig.json file cannot be found in this way, then an error - * will be reported. - * - * SUPPORTED TOKENS: - * DEFAULT VALUE: "" - */ - // "projectFolder": "..", - - /** - * (REQUIRED) Specifies the .d.ts file to be used as the starting point for analysis. API Extractor - * analyzes the symbols exported by this module. - * - * The file extension must be ".d.ts" and not ".ts". - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * SUPPORTED TOKENS: , , - */ - "mainEntryPointFilePath": "/lib/index.d.ts", - - /** - * A list of NPM package names whose exports should be treated as part of this package. - * - * For example, suppose that Webpack is used to generate a distributed bundle for the project "library1", - * and another NPM package "library2" is embedded in this bundle. Some types from library2 may become part - * of the exported API for library1, but by default API Extractor would generate a .d.ts rollup that explicitly - * imports library2. To avoid this, we can specify: - * - * "bundledPackages": [ "library2" ], - * - * This would direct API Extractor to embed those types directly in the .d.ts rollup, as if they had been - * local files for library1. - */ - "bundledPackages": ["colord"], - - /** - * Specifies what type of newlines API Extractor should use when writing output files. By default, the output files - * will be written with Windows-style newlines. To use POSIX-style newlines, specify "lf" instead. - * To use the OS's default newline kind, specify "os". - * - * DEFAULT VALUE: "crlf" - */ - // "newlineKind": "crlf", - - /** - * Set to true when invoking API Extractor's test harness. When `testMode` is true, the `toolVersion` field in the - * .api.json file is assigned an empty string to prevent spurious diffs in output files tracked for tests. - * - * DEFAULT VALUE: "false" - */ - // "testMode": false, - - /** - * Specifies how API Extractor sorts members of an enum when generating the .api.json file. By default, the output - * files will be sorted alphabetically, which is "by-name". To keep the ordering in the source code, specify - * "preserve". - * - * DEFAULT VALUE: "by-name" - */ - // "enumMemberOrder": "by-name", - - /** - * Determines how the TypeScript compiler engine will be invoked by API Extractor. - */ - "compiler": { - /** - * Specifies the path to the tsconfig.json file to be used by API Extractor when analyzing the project. - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * Note: This setting will be ignored if "overrideTsconfig" is used. - * - * SUPPORTED TOKENS: , , - * DEFAULT VALUE: "/tsconfig.json" - */ - "tsconfigFilePath": "/tsconfig.esm.json" - /** - * Provides a compiler configuration that will be used instead of reading the tsconfig.json file from disk. - * The object must conform to the TypeScript tsconfig schema: - * - * http://json.schemastore.org/tsconfig - * - * If omitted, then the tsconfig.json file will be read from the "projectFolder". - * - * DEFAULT VALUE: no overrideTsconfig section - */ - // "overrideTsconfig": { - // . . . - // } - /** - * This option causes the compiler to be invoked with the --skipLibCheck option. This option is not recommended - * and may cause API Extractor to produce incomplete or incorrect declarations, but it may be required when - * dependencies contain declarations that are incompatible with the TypeScript engine that API Extractor uses - * for its analysis. Where possible, the underlying issue should be fixed rather than relying on skipLibCheck. - * - * DEFAULT VALUE: false - */ - // "skipLibCheck": true, - }, - - /** - * Configures how the API report file (*.api.md) will be generated. - */ - "apiReport": { - /** - * (REQUIRED) Whether to generate an API report. - */ - "enabled": false - - /** - * The filename for the API report files. It will be combined with "reportFolder" or "reportTempFolder" to produce - * a full file path. - * - * The file extension should be ".api.md", and the string should not contain a path separator such as "\" or "/". - * - * SUPPORTED TOKENS: , - * DEFAULT VALUE: ".api.md" - */ - // "reportFileName": ".api.md", - - /** - * Specifies the folder where the API report file is written. The file name portion is determined by - * the "reportFileName" setting. - * - * The API report file is normally tracked by Git. Changes to it can be used to trigger a branch policy, - * e.g. for an API review. - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * SUPPORTED TOKENS: , , - * DEFAULT VALUE: "/temp/" - */ - // "reportFolder": "/temp/", - - /** - * Specifies the folder where the temporary report file is written. The file name portion is determined by - * the "reportFileName" setting. - * - * After the temporary file is written to disk, it is compared with the file in the "reportFolder". - * If they are different, a production build will fail. - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * SUPPORTED TOKENS: , , - * DEFAULT VALUE: "/temp/" - */ - // "reportTempFolder": "/temp/", - - /** - * Whether "forgotten exports" should be included in the API report file. Forgotten exports are declarations - * flagged with `ae-forgotten-export` warnings. See https://api-extractor.com/pages/messages/ae-forgotten-export/ to - * learn more. - * - * DEFAULT VALUE: "false" - */ - // "includeForgottenExports": false - }, - - /** - * Configures how the doc model file (*.api.json) will be generated. - */ - "docModel": { - /** - * (REQUIRED) Whether to generate a doc model file. - */ - "enabled": false - - /** - * The output path for the doc model file. The file extension should be ".api.json". - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * SUPPORTED TOKENS: , , - * DEFAULT VALUE: "/temp/.api.json" - */ - // "apiJsonFilePath": "/temp/.api.json", - - /** - * Whether "forgotten exports" should be included in the doc model file. Forgotten exports are declarations - * flagged with `ae-forgotten-export` warnings. See https://api-extractor.com/pages/messages/ae-forgotten-export/ to - * learn more. - * - * DEFAULT VALUE: "false" - */ - // "includeForgottenExports": false, - - /** - * The base URL where the project's source code can be viewed on a website such as GitHub or - * Azure DevOps. This URL path corresponds to the `` path on disk. - * - * This URL is concatenated with the file paths serialized to the doc model to produce URL file paths to individual API items. - * For example, if the `projectFolderUrl` is "https://github.com/microsoft/rushstack/tree/main/apps/api-extractor" and an API - * item's file path is "api/ExtractorConfig.ts", the full URL file path would be - * "https://github.com/microsoft/rushstack/tree/main/apps/api-extractor/api/ExtractorConfig.js". - * - * Can be omitted if you don't need source code links in your API documentation reference. - * - * SUPPORTED TOKENS: none - * DEFAULT VALUE: "" - */ - // "projectFolderUrl": "http://github.com/path/to/your/projectFolder" - }, - - /** - * Configures how the .d.ts rollup file will be generated. - */ - "dtsRollup": { - /** - * (REQUIRED) Whether to generate the .d.ts rollup file. - */ - "enabled": true, - - /** - * Specifies the output path for a .d.ts rollup file to be generated without any trimming. - * This file will include all declarations that are exported by the main entry point. - * - * If the path is an empty string, then this file will not be written. - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * SUPPORTED TOKENS: , , - * DEFAULT VALUE: "/dist/.d.ts" - */ - "untrimmedFilePath": "/dist-types/.d.ts" - - /** - * Specifies the output path for a .d.ts rollup file to be generated with trimming for an "alpha" release. - * This file will include only declarations that are marked as "@public", "@beta", or "@alpha". - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * SUPPORTED TOKENS: , , - * DEFAULT VALUE: "" - */ - // "alphaTrimmedFilePath": "/dist/-alpha.d.ts", - - /** - * Specifies the output path for a .d.ts rollup file to be generated with trimming for a "beta" release. - * This file will include only declarations that are marked as "@public" or "@beta". - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * SUPPORTED TOKENS: , , - * DEFAULT VALUE: "" - */ - // "betaTrimmedFilePath": "/dist/-beta.d.ts", - - /** - * Specifies the output path for a .d.ts rollup file to be generated with trimming for a "public" release. - * This file will include only declarations that are marked as "@public". - * - * If the path is an empty string, then this file will not be written. - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * SUPPORTED TOKENS: , , - * DEFAULT VALUE: "" - */ - // "publicTrimmedFilePath": "/dist/-public.d.ts", - - /** - * When a declaration is trimmed, by default it will be replaced by a code comment such as - * "Excluded from this release type: exampleMember". Set "omitTrimmingComments" to true to remove the - * declaration completely. - * - * DEFAULT VALUE: false - */ - // "omitTrimmingComments": true - }, - - /** - * Configures how the tsdoc-metadata.json file will be generated. - */ - "tsdocMetadata": { - /** - * Whether to generate the tsdoc-metadata.json file. - * - * DEFAULT VALUE: true - */ - "enabled": false - /** - * Specifies where the TSDoc metadata file should be written. - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * The default value is "", which causes the path to be automatically inferred from the "tsdocMetadata", - * "typings" or "main" fields of the project's package.json. If none of these fields are set, the lookup - * falls back to "tsdoc-metadata.json" in the package folder. - * - * SUPPORTED TOKENS: , , - * DEFAULT VALUE: "" - */ - // "tsdocMetadataFilePath": "/dist/tsdoc-metadata.json" - }, - - /** - * Configures how API Extractor reports error and warning messages produced during analysis. - * - * There are three sources of messages: compiler messages, API Extractor messages, and TSDoc messages. - */ - "messages": { - /** - * Configures handling of diagnostic messages reported by the TypeScript compiler engine while analyzing - * the input .d.ts files. - * - * TypeScript message identifiers start with "TS" followed by an integer. For example: "TS2551" - * - * DEFAULT VALUE: A single "default" entry with logLevel=warning. - */ - "compilerMessageReporting": { - /** - * Configures the default routing for messages that don't match an explicit rule in this table. - */ - "default": { - /** - * Specifies whether the message should be written to the the tool's output log. Note that - * the "addToApiReportFile" property may supersede this option. - * - * Possible values: "error", "warning", "none" - * - * Errors cause the build to fail and return a nonzero exit code. Warnings cause a production build fail - * and return a nonzero exit code. For a non-production build (e.g. when "api-extractor run" includes - * the "--local" option), the warning is displayed but the build will not fail. - * - * DEFAULT VALUE: "warning" - */ - "logLevel": "warning" - - /** - * When addToApiReportFile is true: If API Extractor is configured to write an API report file (.api.md), - * then the message will be written inside that file; otherwise, the message is instead logged according to - * the "logLevel" option. - * - * DEFAULT VALUE: false - */ - // "addToApiReportFile": false - } - - // "TS2551": { - // "logLevel": "warning", - // "addToApiReportFile": true - // }, - // - // . . . - }, - - /** - * Configures handling of messages reported by API Extractor during its analysis. - * - * API Extractor message identifiers start with "ae-". For example: "ae-extra-release-tag" - * - * DEFAULT VALUE: See api-extractor-defaults.json for the complete table of extractorMessageReporting mappings - */ - "extractorMessageReporting": { - "default": { - "logLevel": "warning" - // "addToApiReportFile": false - } - - // "ae-extra-release-tag": { - // "logLevel": "warning", - // "addToApiReportFile": true - // }, - // - // . . . - }, - - /** - * Configures handling of messages reported by the TSDoc parser when analyzing code comments. - * - * TSDoc message identifiers start with "tsdoc-". For example: "tsdoc-link-tag-unescaped-text" - * - * DEFAULT VALUE: A single "default" entry with logLevel=warning. - */ - "tsdocMessageReporting": { - "default": { - "logLevel": "warning" - // "addToApiReportFile": false - } - - // "tsdoc-link-tag-unescaped-text": { - // "logLevel": "warning", - // "addToApiReportFile": true - // }, - // - // . . . - } - } -} diff --git a/assets/hierarchy.js b/assets/hierarchy.js new file mode 100644 index 000000000..6f70ddd3e --- /dev/null +++ b/assets/hierarchy.js @@ -0,0 +1 @@ +window.hierarchyData = "eJylls1u4yAUhd+FNe3wY7DjZWeUqhpVGVVdpKqyQDFJUR2IgKqqqrz7CEfpMK7dgLtCSjic7557E3gH1hjvQP1IOYcEUUgwgRQjSBGBjBaQVxhiVHCIS1xCTmcrCKzctHLtldEO1O+AIBoWLXYS1OCXFa9/TPvWKi0X+mYntnKxP+6F4FnpBtSEcQhebAtqoLSXdiPW0v0YF14++V0LIFi3wjlQA++ai3DSxYc6fPmk2sZKDepHQtDqAAHBZJTrVrjnKViRLpuKHqkIGqDaGj0prE+6BKoAQUch8pPpy9IQKIq7cy39XDj/W77tjdLepRGMqHI7Q4/zQnEcSnzwGYx4a773rPP+byqupV9YJbWXzbRUvlIntofMIqCh885QDEkSrTnvDWdmAEOS7L6UrOtLyXosp7omMI1J02JhtIhHxIomnDZXrZf2SrjEP45RXW5AjFaQFRSyolp1dNUo3XIK2jIvnIKO2j9MsX/ItP+i+kn+yzwATuOf670V2m2M3aU597fnjgJnJIwAZ2SI4c544ROnc1iUGEGFI/uMu/Q7Tw1elV3pVRl5/7RSeDm3JjH/T/vTCg7Pssg1/eL+xiMGo6K7r8La886telCTWHmJ47zvjLoVWmylPWP5b2N23SXpGh3WvvO+b45JdTLvzj8578+ZHz84HA5/Ac7I7VQ=" \ No newline at end of file diff --git a/assets/highlight.css b/assets/highlight.css new file mode 100644 index 000000000..29290d60a --- /dev/null +++ b/assets/highlight.css @@ -0,0 +1,64 @@ +:root { + --light-hl-0: #001080; + --dark-hl-0: #9CDCFE; + --light-hl-1: #000000; + --dark-hl-1: #D4D4D4; + --light-hl-2: #0070C1; + --dark-hl-2: #4FC1FF; + --light-hl-3: #098658; + --dark-hl-3: #B5CEA8; + --light-hl-4: #0000FF; + --dark-hl-4: #569CD6; + --light-hl-5: #795E26; + --dark-hl-5: #DCDCAA; + --light-code-background: #FFFFFF; + --dark-code-background: #1E1E1E; +} + +@media (prefers-color-scheme: light) { :root { + --hl-0: var(--light-hl-0); + --hl-1: var(--light-hl-1); + --hl-2: var(--light-hl-2); + --hl-3: var(--light-hl-3); + --hl-4: var(--light-hl-4); + --hl-5: var(--light-hl-5); + --code-background: var(--light-code-background); +} } + +@media (prefers-color-scheme: dark) { :root { + --hl-0: var(--dark-hl-0); + --hl-1: var(--dark-hl-1); + --hl-2: var(--dark-hl-2); + --hl-3: var(--dark-hl-3); + --hl-4: var(--dark-hl-4); + --hl-5: var(--dark-hl-5); + --code-background: var(--dark-code-background); +} } + +:root[data-theme='light'] { + --hl-0: var(--light-hl-0); + --hl-1: var(--light-hl-1); + --hl-2: var(--light-hl-2); + --hl-3: var(--light-hl-3); + --hl-4: var(--light-hl-4); + --hl-5: var(--light-hl-5); + --code-background: var(--light-code-background); +} + +:root[data-theme='dark'] { + --hl-0: var(--dark-hl-0); + --hl-1: var(--dark-hl-1); + --hl-2: var(--dark-hl-2); + --hl-3: var(--dark-hl-3); + --hl-4: var(--dark-hl-4); + --hl-5: var(--dark-hl-5); + --code-background: var(--dark-code-background); +} + +.hl-0 { color: var(--hl-0); } +.hl-1 { color: var(--hl-1); } +.hl-2 { color: var(--hl-2); } +.hl-3 { color: var(--hl-3); } +.hl-4 { color: var(--hl-4); } +.hl-5 { color: var(--hl-5); } +pre, code { background: var(--code-background); } diff --git a/assets/icons.js b/assets/icons.js new file mode 100644 index 000000000..58882d76d --- /dev/null +++ b/assets/icons.js @@ -0,0 +1,18 @@ +(function() { + addIcons(); + function addIcons() { + if (document.readyState === "loading") return document.addEventListener("DOMContentLoaded", addIcons); + const svg = document.body.appendChild(document.createElementNS("http://www.w3.org/2000/svg", "svg")); + svg.innerHTML = `MMNEPVFCICPMFPCPTTAAATR`; + svg.style.display = "none"; + if (location.protocol === "file:") updateUseElements(); + } + + function updateUseElements() { + document.querySelectorAll("use").forEach(el => { + if (el.getAttribute("href").includes("#icon-")) { + el.setAttribute("href", el.getAttribute("href").replace(/.*#/, "#")); + } + }); + } +})() \ No newline at end of file diff --git a/assets/icons.svg b/assets/icons.svg new file mode 100644 index 000000000..50ad5799d --- /dev/null +++ b/assets/icons.svg @@ -0,0 +1 @@ +MMNEPVFCICPMFPCPTTAAATR \ No newline at end of file diff --git a/assets/main.js b/assets/main.js new file mode 100644 index 000000000..4f59cd955 --- /dev/null +++ b/assets/main.js @@ -0,0 +1,60 @@ +"use strict"; +window.translations={"copy":"Copy","copied":"Copied!","normally_hidden":"This member is normally hidden due to your filter settings.","hierarchy_expand":"Expand","hierarchy_collapse":"Collapse"}; +"use strict";(()=>{var De=Object.create;var le=Object.defineProperty;var Fe=Object.getOwnPropertyDescriptor;var Ne=Object.getOwnPropertyNames;var Ve=Object.getPrototypeOf,Be=Object.prototype.hasOwnProperty;var qe=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var je=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ne(e))!Be.call(t,i)&&i!==n&&le(t,i,{get:()=>e[i],enumerable:!(r=Fe(e,i))||r.enumerable});return t};var $e=(t,e,n)=>(n=t!=null?De(Ve(t)):{},je(e||!t||!t.__esModule?le(n,"default",{value:t,enumerable:!0}):n,t));var pe=qe((de,he)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,c],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[c+1]*i[d+1],c+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var c=s.node.edges["*"];else{var c=new t.TokenSet;s.node.edges["*"]=c}s.str.length==1&&(c.final=!0),i.push({node:c,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),m=s.str.charAt(1),p;m in s.node.edges?p=s.node.edges[m]:(p=new t.TokenSet,s.node.edges[m]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof de=="object"?he.exports=n():e.lunr=n()}(this,function(){return t})})()});window.translations||={copy:"Copy",copied:"Copied!",normally_hidden:"This member is normally hidden due to your filter settings.",hierarchy_expand:"Expand",hierarchy_collapse:"Collapse"};var ce=[];function G(t,e){ce.push({selector:e,constructor:t})}var J=class{alwaysVisibleMember=null;constructor(){this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){ce.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!ze(e)){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r,document.querySelector(".col-sidebar").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(!n)return;let r=n.offsetParent==null,i=n;for(;i!==document.body;)i instanceof HTMLDetailsElement&&(i.open=!0),i=i.parentElement;if(n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let s=document.createElement("p");s.classList.add("warning"),s.textContent=window.translations.normally_hidden,n.prepend(s)}r&&e.scrollIntoView()}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent=window.translations.copied,e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent=window.translations.copy},100)},1e3)})})}};function ze(t){let e=t.getBoundingClientRect(),n=Math.max(document.documentElement.clientHeight,window.innerHeight);return!(e.bottom<0||e.top-n>=0)}var ue=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var ge=$e(pe(),1);async function H(t){let e=Uint8Array.from(atob(t),s=>s.charCodeAt(0)),r=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate")),i=await new Response(r).text();return JSON.parse(i)}async function fe(t,e){if(!window.searchData)return;let n=await H(window.searchData);t.data=n,t.index=ge.Index.load(n.index),e.classList.remove("loading"),e.classList.add("ready")}function ve(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:document.documentElement.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{fe(e,t)}),fe(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");i.addEventListener("mouseup",()=>{re(t)}),r.addEventListener("focus",()=>t.classList.add("has-focus")),We(t,i,r,e)}function We(t,e,n,r){n.addEventListener("input",ue(()=>{Ue(t,e,n,r)},200)),n.addEventListener("keydown",i=>{i.key=="Enter"?Je(e,t):i.key=="ArrowUp"?(me(e,n,-1),i.preventDefault()):i.key==="ArrowDown"&&(me(e,n,1),i.preventDefault())}),document.body.addEventListener("keypress",i=>{i.altKey||i.ctrlKey||i.metaKey||!n.matches(":focus")&&i.key==="/"&&(i.preventDefault(),n.focus())}),document.body.addEventListener("keyup",i=>{t.classList.contains("has-focus")&&(i.key==="Escape"||!e.matches(":focus-within")&&!n.matches(":focus"))&&(n.blur(),re(t))})}function re(t){t.classList.remove("has-focus")}function Ue(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ye(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${ye(l.parent,i)}.${d}`);let m=document.createElement("li");m.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=c+d,m.append(p),p.addEventListener("focus",()=>{e.querySelector(".current")?.classList.remove("current"),m.classList.add("current")}),e.appendChild(m)}}function me(t,e,n){let r=t.querySelector(".current");if(!r)r=t.querySelector(n==1?"li:first-child":"li:last-child"),r&&r.classList.add("current");else{let i=r;if(n===1)do i=i.nextElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);else do i=i.previousElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);i?(r.classList.remove("current"),i.classList.add("current")):n===-1&&(r.classList.remove("current"),e.focus())}}function Je(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),re(e)}}function ye(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(ne(t.substring(s,o)),`${ne(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(ne(t.substring(s))),i.join("")}var Ge={"&":"&","<":"<",">":">","'":"'",'"':"""};function ne(t){return t.replace(/[&<>"'"]/g,e=>Ge[e])}var I=class{el;app;constructor(e){this.el=e.el,this.app=e.app}};var A="mousedown",Ee="mousemove",B="mouseup",X={x:0,y:0},xe=!1,ie=!1,Xe=!1,D=!1,Le=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(Le?"is-mobile":"not-mobile");Le&&"ontouchstart"in document.documentElement&&(Xe=!0,A="touchstart",Ee="touchmove",B="touchend");document.addEventListener(A,t=>{ie=!0,D=!1;let e=A=="touchstart"?t.targetTouches[0]:t;X.y=e.pageY||0,X.x=e.pageX||0});document.addEventListener(Ee,t=>{if(ie&&!D){let e=A=="touchstart"?t.targetTouches[0]:t,n=X.x-(e.pageX||0),r=X.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(B,()=>{ie=!1});document.addEventListener("click",t=>{xe&&(t.preventDefault(),t.stopImmediatePropagation(),xe=!1)});var Y=class extends I{active;className;constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(A,n=>this.onDocumentPointerDown(n)),document.addEventListener(B,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var se;try{se=localStorage}catch{se={getItem(){return null},setItem(){}}}var C=se;var be=document.head.appendChild(document.createElement("style"));be.dataset.for="filters";var Z=class extends I{key;value;constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),be.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=C.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){C.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var oe=new Map,ae=class{open;accordions=[];key;constructor(e,n){this.key=e,this.open=n}add(e){this.accordions.push(e),e.open=this.open,e.addEventListener("toggle",()=>{this.toggle(e.open)})}toggle(e){for(let n of this.accordions)n.open=e;C.setItem(this.key,e.toString())}},K=class extends I{constructor(e){super(e);let n=this.el.querySelector("summary"),r=n.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)});let i=`tsd-accordion-${n.dataset.key??n.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`,s;if(oe.has(i))s=oe.get(i);else{let o=C.getItem(i),a=o?o==="true":this.el.open;s=new ae(i,a),oe.set(i,s)}s.add(this.el)}};function Se(t){let e=C.getItem("tsd-theme")||"os";t.value=e,we(e),t.addEventListener("change",()=>{C.setItem("tsd-theme",t.value),we(t.value)})}function we(t){document.documentElement.dataset.theme=t}var ee;function Ce(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",Te),Te())}async function Te(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let e=await H(window.navigationData);ee=document.documentElement.dataset.base,ee.endsWith("/")||(ee+="/"),t.innerHTML="";for(let n of e)Ie(n,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function Ie(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-accordion`:"tsd-accordion";let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.dataset.key=i.join("$"),o.innerHTML='',ke(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let c of t.children)Ie(c,l,i)}else ke(t,r,t.class)}function ke(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=ee+t.path,n&&(r.className=n),location.pathname===r.pathname&&!r.href.includes("#")&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else{let r=e.appendChild(document.createElement("span"));r.innerHTML='',r.appendChild(document.createElement("span")).textContent=t.text}}var te=document.documentElement.dataset.base;te.endsWith("/")||(te+="/");function Pe(){document.querySelector(".tsd-full-hierarchy")?Ye():document.querySelector(".tsd-hierarchy")&&Ze()}function Ye(){document.addEventListener("click",r=>{let i=r.target;for(;i.parentElement&&i.parentElement.tagName!="LI";)i=i.parentElement;i.dataset.dropdown&&(i.dataset.dropdown=String(i.dataset.dropdown!=="true"))});let t=new Map,e=new Set;for(let r of document.querySelectorAll(".tsd-full-hierarchy [data-refl]")){let i=r.querySelector("ul");t.has(r.dataset.refl)?e.add(r.dataset.refl):i&&t.set(r.dataset.refl,i)}for(let r of e)n(r);function n(r){let i=t.get(r).cloneNode(!0);i.querySelectorAll("[id]").forEach(s=>{s.removeAttribute("id")}),i.querySelectorAll("[data-dropdown]").forEach(s=>{s.dataset.dropdown="false"});for(let s of document.querySelectorAll(`[data-refl="${r}"]`)){let o=tt(),a=s.querySelector("ul");s.insertBefore(o,a),o.dataset.dropdown=String(!!a),a||s.appendChild(i.cloneNode(!0))}}}function Ze(){let t=document.getElementById("tsd-hierarchy-script");t&&(t.addEventListener("load",Qe),Qe())}async function Qe(){let t=document.querySelector(".tsd-panel.tsd-hierarchy:has(h4 a)");if(!t||!window.hierarchyData)return;let e=+t.dataset.refl,n=await H(window.hierarchyData),r=t.querySelector("ul"),i=document.createElement("ul");if(i.classList.add("tsd-hierarchy"),Ke(i,n,e),r.querySelectorAll("li").length==i.querySelectorAll("li").length)return;let s=document.createElement("span");s.classList.add("tsd-hierarchy-toggle"),s.textContent=window.translations.hierarchy_expand,t.querySelector("h4 a")?.insertAdjacentElement("afterend",s),s.insertAdjacentText("beforebegin",", "),s.addEventListener("click",()=>{s.textContent===window.translations.hierarchy_expand?(r.insertAdjacentElement("afterend",i),r.remove(),s.textContent=window.translations.hierarchy_collapse):(i.insertAdjacentElement("afterend",r),i.remove(),s.textContent=window.translations.hierarchy_expand)})}function Ke(t,e,n){let r=e.roots.filter(i=>et(e,i,n));for(let i of r)t.appendChild(Oe(e,i,n))}function Oe(t,e,n,r=new Set){if(r.has(e))return;r.add(e);let i=t.reflections[e],s=document.createElement("li");if(s.classList.add("tsd-hierarchy-item"),e===n){let o=s.appendChild(document.createElement("span"));o.textContent=i.name,o.classList.add("tsd-hierarchy-target")}else{for(let a of i.uniqueNameParents||[]){let l=t.reflections[a],c=s.appendChild(document.createElement("a"));c.textContent=l.name,c.href=te+l.url,c.className=l.class+" tsd-signature-type",s.append(document.createTextNode("."))}let o=s.appendChild(document.createElement("a"));o.textContent=t.reflections[e].name,o.href=te+i.url,o.className=i.class+" tsd-signature-type"}if(i.children){let o=s.appendChild(document.createElement("ul"));o.classList.add("tsd-hierarchy");for(let a of i.children){let l=Oe(t,a,n,r);l&&o.appendChild(l)}}return r.delete(e),s}function et(t,e,n){if(e===n)return!0;let r=new Set,i=[t.reflections[e]];for(;i.length;){let s=i.pop();if(!r.has(s)){r.add(s);for(let o of s.children||[]){if(o===n)return!0;i.push(t.reflections[o])}}}return!1}function tt(){let t=document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("width","20"),t.setAttribute("height","20"),t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("fill","none"),t.innerHTML='',t}G(Y,"a[data-toggle]");G(K,".tsd-accordion");G(Z,".tsd-filter-item input[type=checkbox]");var _e=document.getElementById("tsd-theme");_e&&Se(_e);var nt=new J;Object.defineProperty(window,"app",{value:nt});ve();Ce();Pe();})(); +/*! Bundled license information: + +lunr/lunr.js: + (** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + *) + (*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + *) + (*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + *) +*/ diff --git a/assets/navigation.js b/assets/navigation.js new file mode 100644 index 000000000..49a83bdce --- /dev/null +++ b/assets/navigation.js @@ -0,0 +1 @@ +window.navigationData = "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" \ No newline at end of file diff --git a/assets/search.js b/assets/search.js new file mode 100644 index 000000000..393855930 --- /dev/null +++ b/assets/search.js @@ -0,0 +1 @@ +window.searchData = "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"; \ No newline at end of file diff --git a/assets/style.css b/assets/style.css new file mode 100644 index 000000000..7f80f3dc2 --- /dev/null +++ b/assets/style.css @@ -0,0 +1,1610 @@ +@layer typedoc { + :root { + /* Light */ + --light-color-background: #f2f4f8; + --light-color-background-secondary: #eff0f1; + --light-color-warning-text: #222; + --light-color-background-warning: #e6e600; + --light-color-accent: #c5c7c9; + --light-color-active-menu-item: var(--light-color-accent); + --light-color-text: #222; + --light-color-text-aside: #6e6e6e; + + --light-color-icon-background: var(--light-color-background); + --light-color-icon-text: var(--light-color-text); + + --light-color-comment-tag-text: var(--light-color-text); + --light-color-comment-tag: var(--light-color-background); + + --light-color-link: #1f70c2; + --light-color-focus-outline: #3584e4; + + --light-color-ts-keyword: #056bd6; + --light-color-ts-project: #b111c9; + --light-color-ts-module: var(--light-color-ts-project); + --light-color-ts-namespace: var(--light-color-ts-project); + --light-color-ts-enum: #7e6f15; + --light-color-ts-enum-member: var(--light-color-ts-enum); + --light-color-ts-variable: #4760ec; + --light-color-ts-function: #572be7; + --light-color-ts-class: #1f70c2; + --light-color-ts-interface: #108024; + --light-color-ts-constructor: var(--light-color-ts-class); + --light-color-ts-property: #9f5f30; + --light-color-ts-method: #be3989; + --light-color-ts-reference: #ff4d82; + --light-color-ts-call-signature: var(--light-color-ts-method); + --light-color-ts-index-signature: var(--light-color-ts-property); + --light-color-ts-constructor-signature: var( + --light-color-ts-constructor + ); + --light-color-ts-parameter: var(--light-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --light-color-ts-type-parameter: #a55c0e; + --light-color-ts-accessor: #c73c3c; + --light-color-ts-get-signature: var(--light-color-ts-accessor); + --light-color-ts-set-signature: var(--light-color-ts-accessor); + --light-color-ts-type-alias: #d51270; + /* reference not included as links will be colored with the kind that it points to */ + --light-color-document: #000000; + + --light-color-alert-note: #0969d9; + --light-color-alert-tip: #1a7f37; + --light-color-alert-important: #8250df; + --light-color-alert-warning: #9a6700; + --light-color-alert-caution: #cf222e; + + --light-external-icon: url("data:image/svg+xml;utf8,"); + --light-color-scheme: light; + + /* Dark */ + --dark-color-background: #2b2e33; + --dark-color-background-secondary: #1e2024; + --dark-color-background-warning: #bebe00; + --dark-color-warning-text: #222; + --dark-color-accent: #9096a2; + --dark-color-active-menu-item: #5d5d6a; + --dark-color-text: #f5f5f5; + --dark-color-text-aside: #dddddd; + + --dark-color-icon-background: var(--dark-color-background-secondary); + --dark-color-icon-text: var(--dark-color-text); + + --dark-color-comment-tag-text: var(--dark-color-text); + --dark-color-comment-tag: var(--dark-color-background); + + --dark-color-link: #00aff4; + --dark-color-focus-outline: #4c97f2; + + --dark-color-ts-keyword: #3399ff; + --dark-color-ts-project: #e358ff; + --dark-color-ts-module: var(--dark-color-ts-project); + --dark-color-ts-namespace: var(--dark-color-ts-project); + --dark-color-ts-enum: #f4d93e; + --dark-color-ts-enum-member: var(--dark-color-ts-enum); + --dark-color-ts-variable: #798dff; + --dark-color-ts-function: #a280ff; + --dark-color-ts-class: #8ac4ff; + --dark-color-ts-interface: #6cff87; + --dark-color-ts-constructor: var(--dark-color-ts-class); + --dark-color-ts-property: #ff984d; + --dark-color-ts-method: #ff4db8; + --dark-color-ts-reference: #ff4d82; + --dark-color-ts-call-signature: var(--dark-color-ts-method); + --dark-color-ts-index-signature: var(--dark-color-ts-property); + --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); + --dark-color-ts-parameter: var(--dark-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --dark-color-ts-type-parameter: #e07d13; + --dark-color-ts-accessor: #ff6060; + --dark-color-ts-get-signature: var(--dark-color-ts-accessor); + --dark-color-ts-set-signature: var(--dark-color-ts-accessor); + --dark-color-ts-type-alias: #ff6492; + /* reference not included as links will be colored with the kind that it points to */ + --dark-color-document: #ffffff; + + --dark-color-alert-note: #0969d9; + --dark-color-alert-tip: #1a7f37; + --dark-color-alert-important: #8250df; + --dark-color-alert-warning: #9a6700; + --dark-color-alert-caution: #cf222e; + + --dark-external-icon: url("data:image/svg+xml;utf8,"); + --dark-color-scheme: dark; + } + + @media (prefers-color-scheme: light) { + :root { + --color-background: var(--light-color-background); + --color-background-secondary: var( + --light-color-background-secondary + ); + --color-background-warning: var(--light-color-background-warning); + --color-warning-text: var(--light-color-warning-text); + --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); + --color-text: var(--light-color-text); + --color-text-aside: var(--light-color-text-aside); + + --color-icon-background: var(--light-color-icon-background); + --color-icon-text: var(--light-color-icon-text); + + --color-comment-tag-text: var(--light-color-text); + --color-comment-tag: var(--light-color-background); + + --color-link: var(--light-color-link); + --color-focus-outline: var(--light-color-focus-outline); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-project: var(--light-color-ts-project); + --color-ts-module: var(--light-color-ts-module); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); + --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-reference: var(--light-color-ts-reference); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); + + --color-alert-note: var(--light-color-alert-note); + --color-alert-tip: var(--light-color-alert-tip); + --color-alert-important: var(--light-color-alert-important); + --color-alert-warning: var(--light-color-alert-warning); + --color-alert-caution: var(--light-color-alert-caution); + + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); + } + } + + @media (prefers-color-scheme: dark) { + :root { + --color-background: var(--dark-color-background); + --color-background-secondary: var( + --dark-color-background-secondary + ); + --color-background-warning: var(--dark-color-background-warning); + --color-warning-text: var(--dark-color-warning-text); + --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); + --color-text: var(--dark-color-text); + --color-text-aside: var(--dark-color-text-aside); + + --color-icon-background: var(--dark-color-icon-background); + --color-icon-text: var(--dark-color-icon-text); + + --color-comment-tag-text: var(--dark-color-text); + --color-comment-tag: var(--dark-color-background); + + --color-link: var(--dark-color-link); + --color-focus-outline: var(--dark-color-focus-outline); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-project: var(--dark-color-ts-project); + --color-ts-module: var(--dark-color-ts-module); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); + --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-reference: var(--dark-color-ts-reference); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); + + --color-alert-note: var(--dark-color-alert-note); + --color-alert-tip: var(--dark-color-alert-tip); + --color-alert-important: var(--dark-color-alert-important); + --color-alert-warning: var(--dark-color-alert-warning); + --color-alert-caution: var(--dark-color-alert-caution); + + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); + } + } + + html { + color-scheme: var(--color-scheme); + } + + body { + margin: 0; + } + + :root[data-theme="light"] { + --color-background: var(--light-color-background); + --color-background-secondary: var(--light-color-background-secondary); + --color-background-warning: var(--light-color-background-warning); + --color-warning-text: var(--light-color-warning-text); + --color-icon-background: var(--light-color-icon-background); + --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); + --color-text: var(--light-color-text); + --color-text-aside: var(--light-color-text-aside); + --color-icon-text: var(--light-color-icon-text); + + --color-comment-tag-text: var(--light-color-text); + --color-comment-tag: var(--light-color-background); + + --color-link: var(--light-color-link); + --color-focus-outline: var(--light-color-focus-outline); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-project: var(--light-color-ts-project); + --color-ts-module: var(--light-color-ts-module); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); + --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-reference: var(--light-color-ts-reference); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); + + --color-note: var(--light-color-note); + --color-tip: var(--light-color-tip); + --color-important: var(--light-color-important); + --color-warning: var(--light-color-warning); + --color-caution: var(--light-color-caution); + + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); + } + + :root[data-theme="dark"] { + --color-background: var(--dark-color-background); + --color-background-secondary: var(--dark-color-background-secondary); + --color-background-warning: var(--dark-color-background-warning); + --color-warning-text: var(--dark-color-warning-text); + --color-icon-background: var(--dark-color-icon-background); + --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); + --color-text: var(--dark-color-text); + --color-text-aside: var(--dark-color-text-aside); + --color-icon-text: var(--dark-color-icon-text); + + --color-comment-tag-text: var(--dark-color-text); + --color-comment-tag: var(--dark-color-background); + + --color-link: var(--dark-color-link); + --color-focus-outline: var(--dark-color-focus-outline); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-project: var(--dark-color-ts-project); + --color-ts-module: var(--dark-color-ts-module); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); + --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-reference: var(--dark-color-ts-reference); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); + + --color-note: var(--dark-color-note); + --color-tip: var(--dark-color-tip); + --color-important: var(--dark-color-important); + --color-warning: var(--dark-color-warning); + --color-caution: var(--dark-color-caution); + + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); + } + + *:focus-visible, + .tsd-accordion-summary:focus-visible svg { + outline: 2px solid var(--color-focus-outline); + } + + .always-visible, + .always-visible .tsd-signatures { + display: inherit !important; + } + + h1, + h2, + h3, + h4, + h5, + h6 { + line-height: 1.2; + } + + h1 { + font-size: 1.875rem; + margin: 0.67rem 0; + } + + h2 { + font-size: 1.5rem; + margin: 0.83rem 0; + } + + h3 { + font-size: 1.25rem; + margin: 1rem 0; + } + + h4 { + font-size: 1.05rem; + margin: 1.33rem 0; + } + + h5 { + font-size: 1rem; + margin: 1.5rem 0; + } + + h6 { + font-size: 0.875rem; + margin: 2.33rem 0; + } + + dl, + menu, + ol, + ul { + margin: 1em 0; + } + + dd { + margin: 0 0 0 34px; + } + + .container { + max-width: 1700px; + padding: 0 2rem; + } + + /* Footer */ + footer { + border-top: 1px solid var(--color-accent); + padding-top: 1rem; + padding-bottom: 1rem; + max-height: 3.5rem; + } + footer > p { + margin: 0 1em; + } + + .container-main { + margin: 0 auto; + /* toolbar, footer, margin */ + min-height: calc(100vh - 41px - 56px - 4rem); + } + + @keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } + } + @keyframes fade-out { + from { + opacity: 1; + visibility: visible; + } + to { + opacity: 0; + } + } + @keyframes fade-in-delayed { + 0% { + opacity: 0; + } + 33% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @keyframes fade-out-delayed { + 0% { + opacity: 1; + visibility: visible; + } + 66% { + opacity: 0; + } + 100% { + opacity: 0; + } + } + @keyframes pop-in-from-right { + from { + transform: translate(100%, 0); + } + to { + transform: translate(0, 0); + } + } + @keyframes pop-out-to-right { + from { + transform: translate(0, 0); + visibility: visible; + } + to { + transform: translate(100%, 0); + } + } + body { + background: var(--color-background); + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; + font-size: 16px; + color: var(--color-text); + } + + a { + color: var(--color-link); + text-decoration: none; + } + a:hover { + text-decoration: underline; + } + a.external[target="_blank"] { + background-image: var(--external-icon); + background-position: top 3px right; + background-repeat: no-repeat; + padding-right: 13px; + } + a.tsd-anchor-link { + color: var(--color-text); + } + + code, + pre { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + padding: 0.2em; + margin: 0; + font-size: 0.875rem; + border-radius: 0.8em; + } + + pre { + position: relative; + white-space: pre-wrap; + word-wrap: break-word; + padding: 10px; + border: 1px solid var(--color-accent); + margin-bottom: 8px; + } + pre code { + padding: 0; + font-size: 100%; + } + pre > button { + position: absolute; + top: 10px; + right: 10px; + opacity: 0; + transition: opacity 0.1s; + box-sizing: border-box; + } + pre:hover > button, + pre > button.visible { + opacity: 1; + } + + blockquote { + margin: 1em 0; + padding-left: 1em; + border-left: 4px solid gray; + } + + .tsd-typography { + line-height: 1.333em; + } + .tsd-typography ul { + list-style: square; + padding: 0 0 0 20px; + margin: 0; + } + .tsd-typography .tsd-index-panel h3, + .tsd-index-panel .tsd-typography h3, + .tsd-typography h4, + .tsd-typography h5, + .tsd-typography h6 { + font-size: 1em; + } + .tsd-typography h5, + .tsd-typography h6 { + font-weight: normal; + } + .tsd-typography p, + .tsd-typography ul, + .tsd-typography ol { + margin: 1em 0; + } + .tsd-typography table { + border-collapse: collapse; + border: none; + } + .tsd-typography td, + .tsd-typography th { + padding: 6px 13px; + border: 1px solid var(--color-accent); + } + .tsd-typography thead, + .tsd-typography tr:nth-child(even) { + background-color: var(--color-background-secondary); + } + + .tsd-alert { + padding: 8px 16px; + margin-bottom: 16px; + border-left: 0.25em solid var(--alert-color); + } + .tsd-alert blockquote > :last-child, + .tsd-alert > :last-child { + margin-bottom: 0; + } + .tsd-alert-title { + color: var(--alert-color); + display: inline-flex; + align-items: center; + } + .tsd-alert-title span { + margin-left: 4px; + } + + .tsd-alert-note { + --alert-color: var(--color-alert-note); + } + .tsd-alert-tip { + --alert-color: var(--color-alert-tip); + } + .tsd-alert-important { + --alert-color: var(--color-alert-important); + } + .tsd-alert-warning { + --alert-color: var(--color-alert-warning); + } + .tsd-alert-caution { + --alert-color: var(--color-alert-caution); + } + + .tsd-breadcrumb { + margin: 0; + padding: 0; + color: var(--color-text-aside); + } + .tsd-breadcrumb a { + color: var(--color-text-aside); + text-decoration: none; + } + .tsd-breadcrumb a:hover { + text-decoration: underline; + } + .tsd-breadcrumb li { + display: inline; + } + .tsd-breadcrumb li:after { + content: " / "; + } + + .tsd-comment-tags { + display: flex; + flex-direction: column; + } + dl.tsd-comment-tag-group { + display: flex; + align-items: center; + overflow: hidden; + margin: 0.5em 0; + } + dl.tsd-comment-tag-group dt { + display: flex; + margin-right: 0.5em; + font-size: 0.875em; + font-weight: normal; + } + dl.tsd-comment-tag-group dd { + margin: 0; + } + code.tsd-tag { + padding: 0.25em 0.4em; + border: 0.1em solid var(--color-accent); + margin-right: 0.25em; + font-size: 70%; + } + h1 code.tsd-tag:first-of-type { + margin-left: 0.25em; + } + + dl.tsd-comment-tag-group dd:before, + dl.tsd-comment-tag-group dd:after { + content: " "; + } + dl.tsd-comment-tag-group dd pre, + dl.tsd-comment-tag-group dd:after { + clear: both; + } + dl.tsd-comment-tag-group p { + margin: 0; + } + + .tsd-panel.tsd-comment .lead { + font-size: 1.1em; + line-height: 1.333em; + margin-bottom: 2em; + } + .tsd-panel.tsd-comment .lead:last-child { + margin-bottom: 0; + } + + .tsd-filter-visibility h4 { + font-size: 1rem; + padding-top: 0.75rem; + padding-bottom: 0.5rem; + margin: 0; + } + .tsd-filter-item:not(:last-child) { + margin-bottom: 0.5rem; + } + .tsd-filter-input { + display: flex; + width: -moz-fit-content; + width: fit-content; + align-items: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + } + .tsd-filter-input input[type="checkbox"] { + cursor: pointer; + position: absolute; + width: 1.5em; + height: 1.5em; + opacity: 0; + } + .tsd-filter-input input[type="checkbox"]:disabled { + pointer-events: none; + } + .tsd-filter-input svg { + cursor: pointer; + width: 1.5em; + height: 1.5em; + margin-right: 0.5em; + border-radius: 0.33em; + /* Leaving this at full opacity breaks event listeners on Firefox. + Don't remove unless you know what you're doing. */ + opacity: 0.99; + } + .tsd-filter-input input[type="checkbox"]:focus-visible + svg { + outline: 2px solid var(--color-focus-outline); + } + .tsd-checkbox-background { + fill: var(--color-accent); + } + input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { + stroke: var(--color-text); + } + .tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { + fill: var(--color-background); + stroke: var(--color-accent); + stroke-width: 0.25rem; + } + .tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { + stroke: var(--color-accent); + } + + .settings-label { + font-weight: bold; + text-transform: uppercase; + display: inline-block; + } + + .tsd-filter-visibility .settings-label { + margin: 0.75rem 0 0.5rem 0; + } + + .tsd-theme-toggle .settings-label { + margin: 0.75rem 0.75rem 0 0; + } + + .tsd-hierarchy h4 label:hover span { + text-decoration: underline; + } + + .tsd-hierarchy { + list-style: square; + margin: 0; + } + .tsd-hierarchy-target { + font-weight: bold; + } + .tsd-hierarchy-toggle { + color: var(--color-link); + cursor: pointer; + } + + .tsd-full-hierarchy:not(:last-child) { + margin-bottom: 1em; + padding-bottom: 1em; + border-bottom: 1px solid var(--color-accent); + } + .tsd-full-hierarchy, + .tsd-full-hierarchy ul { + list-style: none; + margin: 0; + padding: 0; + } + .tsd-full-hierarchy ul { + padding-left: 1.5rem; + } + .tsd-full-hierarchy a { + padding: 0.25rem 0 !important; + font-size: 1rem; + display: inline-flex; + align-items: center; + color: var(--color-text); + } + .tsd-full-hierarchy svg[data-dropdown] { + cursor: pointer; + } + .tsd-full-hierarchy svg[data-dropdown="false"] { + transform: rotate(-90deg); + } + .tsd-full-hierarchy svg[data-dropdown="false"] ~ ul { + display: none; + } + + .tsd-panel-group.tsd-index-group { + margin-bottom: 0; + } + .tsd-index-panel .tsd-index-list { + list-style: none; + line-height: 1.333em; + margin: 0; + padding: 0.25rem 0 0 0; + overflow: hidden; + display: grid; + grid-template-columns: repeat(3, 1fr); + column-gap: 1rem; + grid-template-rows: auto; + } + @media (max-width: 1024px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(2, 1fr); + } + } + @media (max-width: 768px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(1, 1fr); + } + } + .tsd-index-panel .tsd-index-list li { + -webkit-page-break-inside: avoid; + -moz-page-break-inside: avoid; + -ms-page-break-inside: avoid; + -o-page-break-inside: avoid; + page-break-inside: avoid; + } + + .tsd-flag { + display: inline-block; + padding: 0.25em 0.4em; + border-radius: 4px; + color: var(--color-comment-tag-text); + background-color: var(--color-comment-tag); + text-indent: 0; + font-size: 75%; + line-height: 1; + font-weight: normal; + } + + .tsd-anchor { + position: relative; + top: -100px; + } + + .tsd-member { + position: relative; + } + .tsd-member .tsd-anchor + h3 { + display: flex; + align-items: center; + margin-top: 0; + margin-bottom: 0; + border-bottom: none; + } + + .tsd-navigation.settings { + margin: 1rem 0; + } + .tsd-navigation > a, + .tsd-navigation .tsd-accordion-summary { + width: calc(100% - 0.25rem); + display: flex; + align-items: center; + } + .tsd-navigation a, + .tsd-navigation summary > span, + .tsd-page-navigation a { + display: flex; + width: calc(100% - 0.25rem); + align-items: center; + padding: 0.25rem; + color: var(--color-text); + text-decoration: none; + box-sizing: border-box; + } + .tsd-navigation a.current, + .tsd-page-navigation a.current { + background: var(--color-active-menu-item); + } + .tsd-navigation a:hover, + .tsd-page-navigation a:hover { + text-decoration: underline; + } + .tsd-navigation ul, + .tsd-page-navigation ul { + margin-top: 0; + margin-bottom: 0; + padding: 0; + list-style: none; + } + .tsd-navigation li, + .tsd-page-navigation li { + padding: 0; + max-width: 100%; + } + .tsd-navigation .tsd-nav-link { + display: none; + } + .tsd-nested-navigation { + margin-left: 3rem; + } + .tsd-nested-navigation > li > details { + margin-left: -1.5rem; + } + .tsd-small-nested-navigation { + margin-left: 1.5rem; + } + .tsd-small-nested-navigation > li > details { + margin-left: -1.5rem; + } + + .tsd-page-navigation-section { + margin-left: 10px; + } + .tsd-page-navigation-section > summary { + padding: 0.25rem; + } + .tsd-page-navigation-section > div { + margin-left: 20px; + } + .tsd-page-navigation ul { + padding-left: 1.75rem; + } + + #tsd-sidebar-links a { + margin-top: 0; + margin-bottom: 0.5rem; + line-height: 1.25rem; + } + #tsd-sidebar-links a:last-of-type { + margin-bottom: 0; + } + + a.tsd-index-link { + padding: 0.25rem 0 !important; + font-size: 1rem; + line-height: 1.25rem; + display: inline-flex; + align-items: center; + color: var(--color-text); + } + .tsd-accordion-summary { + list-style-type: none; /* hide marker on non-safari */ + outline: none; /* broken on safari, so just hide it */ + } + .tsd-accordion-summary::-webkit-details-marker { + display: none; /* hide marker on safari */ + } + .tsd-accordion-summary, + .tsd-accordion-summary a { + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + + cursor: pointer; + } + .tsd-accordion-summary a { + width: calc(100% - 1.5rem); + } + .tsd-accordion-summary > * { + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; + } + .tsd-accordion .tsd-accordion-summary > svg { + margin-left: 0.25rem; + vertical-align: text-top; + } + /* + We need to be careful to target the arrow indicating whether the accordion + is open, but not any other SVGs included in the details element. +*/ + .tsd-accordion:not([open]) > .tsd-accordion-summary > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h1 > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h2 > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h3 > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h4 > svg:first-child { + transform: rotate(-90deg); + } + .tsd-index-content > :not(:first-child) { + margin-top: 0.75rem; + } + .tsd-index-heading { + margin-top: 1.5rem; + margin-bottom: 0.75rem; + } + + .tsd-no-select { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + .tsd-kind-icon { + margin-right: 0.5rem; + width: 1.25rem; + height: 1.25rem; + min-width: 1.25rem; + min-height: 1.25rem; + } + .tsd-signature > .tsd-kind-icon { + margin-right: 0.8rem; + } + + .tsd-panel { + margin-bottom: 2.5rem; + } + .tsd-panel.tsd-member { + margin-bottom: 4rem; + } + .tsd-panel:empty { + display: none; + } + .tsd-panel > h1, + .tsd-panel > h2, + .tsd-panel > h3 { + margin: 1.5rem -1.5rem 0.75rem -1.5rem; + padding: 0 1.5rem 0.75rem 1.5rem; + } + .tsd-panel > h1.tsd-before-signature, + .tsd-panel > h2.tsd-before-signature, + .tsd-panel > h3.tsd-before-signature { + margin-bottom: 0; + border-bottom: none; + } + + .tsd-panel-group { + margin: 2rem 0; + } + .tsd-panel-group.tsd-index-group { + margin: 2rem 0; + } + .tsd-panel-group.tsd-index-group details { + margin: 2rem 0; + } + .tsd-panel-group > .tsd-accordion-summary { + margin-bottom: 1rem; + } + + #tsd-search { + transition: background-color 0.2s; + } + #tsd-search .title { + position: relative; + z-index: 2; + } + #tsd-search .field { + position: absolute; + left: 0; + top: 0; + right: 2.5rem; + height: 100%; + } + #tsd-search .field input { + box-sizing: border-box; + position: relative; + top: -50px; + z-index: 1; + width: 100%; + padding: 0 10px; + opacity: 0; + outline: 0; + border: 0; + background: transparent; + color: var(--color-text); + } + #tsd-search .field label { + position: absolute; + overflow: hidden; + right: -40px; + } + #tsd-search .field input, + #tsd-search .title, + #tsd-toolbar-links a { + transition: opacity 0.2s; + } + #tsd-search .results { + position: absolute; + visibility: hidden; + top: 40px; + width: 100%; + margin: 0; + padding: 0; + list-style: none; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); + } + #tsd-search .results li { + background-color: var(--color-background); + line-height: initial; + padding: 4px; + } + #tsd-search .results li:nth-child(even) { + background-color: var(--color-background-secondary); + } + #tsd-search .results li.state { + display: none; + } + #tsd-search .results li.current:not(.no-results), + #tsd-search .results li:hover:not(.no-results) { + background-color: var(--color-accent); + } + #tsd-search .results a { + display: flex; + align-items: center; + padding: 0.25rem; + box-sizing: border-box; + } + #tsd-search .results a:before { + top: 10px; + } + #tsd-search .results span.parent { + color: var(--color-text-aside); + font-weight: normal; + } + #tsd-search.has-focus { + background-color: var(--color-accent); + } + #tsd-search.has-focus .field input { + top: 0; + opacity: 1; + } + #tsd-search.has-focus .title, + #tsd-search.has-focus #tsd-toolbar-links a { + z-index: 0; + opacity: 0; + } + #tsd-search.has-focus .results { + visibility: visible; + } + #tsd-search.loading .results li.state.loading { + display: block; + } + #tsd-search.failure .results li.state.failure { + display: block; + } + + #tsd-toolbar-links { + position: absolute; + top: 0; + right: 2rem; + height: 100%; + display: flex; + align-items: center; + justify-content: flex-end; + } + #tsd-toolbar-links a { + margin-left: 1.5rem; + } + #tsd-toolbar-links a:hover { + text-decoration: underline; + } + + .tsd-signature { + margin: 0 0 1rem 0; + padding: 1rem 0.5rem; + border: 1px solid var(--color-accent); + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-size: 14px; + overflow-x: auto; + } + + .tsd-signature-keyword { + color: var(--color-ts-keyword); + font-weight: normal; + } + + .tsd-signature-symbol { + color: var(--color-text-aside); + font-weight: normal; + } + + .tsd-signature-type { + font-style: italic; + font-weight: normal; + } + + .tsd-signatures { + padding: 0; + margin: 0 0 1em 0; + list-style-type: none; + } + .tsd-signatures .tsd-signature { + margin: 0; + border-color: var(--color-accent); + border-width: 1px 0; + transition: background-color 0.1s; + } + .tsd-signatures .tsd-index-signature:not(:last-child) { + margin-bottom: 1em; + } + .tsd-signatures .tsd-index-signature .tsd-signature { + border-width: 1px; + } + .tsd-description .tsd-signatures .tsd-signature { + border-width: 1px; + } + + ul.tsd-parameter-list, + ul.tsd-type-parameter-list { + list-style: square; + margin: 0; + padding-left: 20px; + } + ul.tsd-parameter-list > li.tsd-parameter-signature, + ul.tsd-type-parameter-list > li.tsd-parameter-signature { + list-style: none; + margin-left: -20px; + } + ul.tsd-parameter-list h5, + ul.tsd-type-parameter-list h5 { + font-size: 16px; + margin: 1em 0 0.5em 0; + } + .tsd-sources { + margin-top: 1rem; + font-size: 0.875em; + } + .tsd-sources a { + color: var(--color-text-aside); + text-decoration: underline; + } + .tsd-sources ul { + list-style: none; + padding: 0; + } + + .tsd-page-toolbar { + position: sticky; + z-index: 1; + top: 0; + left: 0; + width: 100%; + color: var(--color-text); + background: var(--color-background-secondary); + border-bottom: 1px var(--color-accent) solid; + transition: transform 0.3s ease-in-out; + } + .tsd-page-toolbar a { + color: var(--color-text); + text-decoration: none; + } + .tsd-page-toolbar a.title { + font-weight: bold; + } + .tsd-page-toolbar a.title:hover { + text-decoration: underline; + } + .tsd-page-toolbar .tsd-toolbar-contents { + display: flex; + justify-content: space-between; + height: 2.5rem; + margin: 0 auto; + } + .tsd-page-toolbar .table-cell { + position: relative; + white-space: nowrap; + line-height: 40px; + } + .tsd-page-toolbar .table-cell:first-child { + width: 100%; + } + .tsd-page-toolbar .tsd-toolbar-icon { + box-sizing: border-box; + line-height: 0; + padding: 12px 0; + } + + .tsd-widget { + display: inline-block; + overflow: hidden; + opacity: 0.8; + height: 40px; + transition: + opacity 0.1s, + background-color 0.2s; + vertical-align: bottom; + cursor: pointer; + } + .tsd-widget:hover { + opacity: 0.9; + } + .tsd-widget.active { + opacity: 1; + background-color: var(--color-accent); + } + .tsd-widget.no-caption { + width: 40px; + } + .tsd-widget.no-caption:before { + margin: 0; + } + + .tsd-widget.options, + .tsd-widget.menu { + display: none; + } + input[type="checkbox"] + .tsd-widget:before { + background-position: -120px 0; + } + input[type="checkbox"]:checked + .tsd-widget:before { + background-position: -160px 0; + } + + img { + max-width: 100%; + } + + .tsd-member-summary-name { + display: inline-flex; + align-items: center; + padding: 0.25rem; + text-decoration: none; + } + + .tsd-anchor-icon { + display: inline-flex; + align-items: center; + margin-left: 0.5rem; + color: var(--color-text); + } + + .tsd-anchor-icon svg { + width: 1em; + height: 1em; + visibility: hidden; + } + + .tsd-member-summary-name:hover > .tsd-anchor-icon svg, + .tsd-anchor-link:hover > .tsd-anchor-icon svg { + visibility: visible; + } + + .deprecated { + text-decoration: line-through !important; + } + + .warning { + padding: 1rem; + color: var(--color-warning-text); + background: var(--color-background-warning); + } + + .tsd-kind-project { + color: var(--color-ts-project); + } + .tsd-kind-module { + color: var(--color-ts-module); + } + .tsd-kind-namespace { + color: var(--color-ts-namespace); + } + .tsd-kind-enum { + color: var(--color-ts-enum); + } + .tsd-kind-enum-member { + color: var(--color-ts-enum-member); + } + .tsd-kind-variable { + color: var(--color-ts-variable); + } + .tsd-kind-function { + color: var(--color-ts-function); + } + .tsd-kind-class { + color: var(--color-ts-class); + } + .tsd-kind-interface { + color: var(--color-ts-interface); + } + .tsd-kind-constructor { + color: var(--color-ts-constructor); + } + .tsd-kind-property { + color: var(--color-ts-property); + } + .tsd-kind-method { + color: var(--color-ts-method); + } + .tsd-kind-reference { + color: var(--color-ts-reference); + } + .tsd-kind-call-signature { + color: var(--color-ts-call-signature); + } + .tsd-kind-index-signature { + color: var(--color-ts-index-signature); + } + .tsd-kind-constructor-signature { + color: var(--color-ts-constructor-signature); + } + .tsd-kind-parameter { + color: var(--color-ts-parameter); + } + .tsd-kind-type-parameter { + color: var(--color-ts-type-parameter); + } + .tsd-kind-accessor { + color: var(--color-ts-accessor); + } + .tsd-kind-get-signature { + color: var(--color-ts-get-signature); + } + .tsd-kind-set-signature { + color: var(--color-ts-set-signature); + } + .tsd-kind-type-alias { + color: var(--color-ts-type-alias); + } + + /* if we have a kind icon, don't color the text by kind */ + .tsd-kind-icon ~ span { + color: var(--color-text); + } + + * { + scrollbar-width: thin; + scrollbar-color: var(--color-accent) var(--color-icon-background); + } + + *::-webkit-scrollbar { + width: 0.75rem; + } + + *::-webkit-scrollbar-track { + background: var(--color-icon-background); + } + + *::-webkit-scrollbar-thumb { + background-color: var(--color-accent); + border-radius: 999rem; + border: 0.25rem solid var(--color-icon-background); + } + + /* mobile */ + @media (max-width: 769px) { + .tsd-widget.options, + .tsd-widget.menu { + display: inline-block; + } + + .container-main { + display: flex; + } + html .col-content { + float: none; + max-width: 100%; + width: 100%; + } + html .col-sidebar { + position: fixed !important; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + z-index: 1024; + top: 0 !important; + bottom: 0 !important; + left: auto !important; + right: 0 !important; + padding: 1.5rem 1.5rem 0 0; + width: 75vw; + visibility: hidden; + background-color: var(--color-background); + transform: translate(100%, 0); + } + html .col-sidebar > *:last-child { + padding-bottom: 20px; + } + html .overlay { + content: ""; + display: block; + position: fixed; + z-index: 1023; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.75); + visibility: hidden; + } + + .to-has-menu .overlay { + animation: fade-in 0.4s; + } + + .to-has-menu .col-sidebar { + animation: pop-in-from-right 0.4s; + } + + .from-has-menu .overlay { + animation: fade-out 0.4s; + } + + .from-has-menu .col-sidebar { + animation: pop-out-to-right 0.4s; + } + + .has-menu body { + overflow: hidden; + } + .has-menu .overlay { + visibility: visible; + } + .has-menu .col-sidebar { + visibility: visible; + transform: translate(0, 0); + display: flex; + flex-direction: column; + gap: 1.5rem; + max-height: 100vh; + padding: 1rem 2rem; + } + .has-menu .tsd-navigation { + max-height: 100%; + } + #tsd-toolbar-links { + display: none; + } + .tsd-navigation .tsd-nav-link { + display: flex; + } + } + + /* one sidebar */ + @media (min-width: 770px) { + .container-main { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); + grid-template-areas: "sidebar content"; + margin: 2rem auto; + } + + .col-sidebar { + grid-area: sidebar; + } + .col-content { + grid-area: content; + padding: 0 1rem; + } + } + @media (min-width: 770px) and (max-width: 1399px) { + .col-sidebar { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + padding-top: 1rem; + } + .site-menu { + margin-top: 1rem; + } + } + + /* two sidebars */ + @media (min-width: 1200px) { + .container-main { + grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax( + 0, + 20rem + ); + grid-template-areas: "sidebar content toc"; + } + + .col-sidebar { + display: contents; + } + + .page-menu { + grid-area: toc; + padding-left: 1rem; + } + .site-menu { + grid-area: sidebar; + } + + .site-menu { + margin-top: 1rem; + } + + .page-menu, + .site-menu { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + } + } +} diff --git a/classes/Image.html b/classes/Image.html new file mode 100644 index 000000000..188f62430 --- /dev/null +++ b/classes/Image.html @@ -0,0 +1,325 @@ +Image | ImageJS

Class Image

Constructors

  • Construct a new Image knowing its dimensions.

    +

    Parameters

    • width: number

      Image width.

      +
    • height: number

      Image height.

      +
    • options: ImageOptions = {}

      Image options.

      +

    Returns Image

Properties

alpha: boolean

Whether the image has an alpha channel or not.

+
bitDepth: BitDepth

The number of bits per value in each channel.

+
channels: number

The total number of channels in the image, including the alpha channel.

+
colorModel: ImageColorModel

The color model of the image.

+
components: number

The number of color channels in the image, excluding the alpha channel. +A GREY image has 1 component. An RGB image has 3 components.

+
height: number

The number of rows of the image.

+
maxValue: number

The maximum value that a pixel channel can have.

+
origin: Point

Origin of the image relative to a the parent image.

+
size: number

The total number of pixels in the image (width × height).

+
width: number

The number of columns of the image.

+

Methods

  • Modify all the values of the image using the given callback.

    +

    Parameters

    • cb: (value: number) => number

      Callback that modifies a given value.

      +

    Returns void

  • Correct the colors in an image using the reference colors.

    +

    Parameters

    • measuredColors: RgbColor[]

      Colors from the image, which will be compared to the reference.

      +
    • referenceColors: RgbColor[]

      Reference colors.

      +

    Returns Image

    Image with the colors corrected.

    +
  • Crops the image based on the alpha channel +This removes lines and columns where the alpha channel is lower than a threshold value.

    +

    Parameters

    Returns Image

    The cropped image.

    +
  • Crop an oriented rectangle from the image. +If the rectangle's length or width are not an integers, its dimension is expanded in both directions such as the length and width are integers.

    +

    Parameters

    Returns Image

    The cropped image. The orientation of the image is the one closest to the rectangle passed as input.

    +
  • Divide image pixels by a constant.

    +

    Parameters

    • value: number

      Value which pixels will be divided to.

      +
    • options: DivideOptions = {}

      Divide options.

      +

    Returns Image

    Divided image.

    +
  • Fill the image with a value or a color.

    +

    Parameters

    • value: number | number[]

      Value or color.

      +

    Returns this

    The image instance.

    +
  • Fill the alpha channel with the specified value.

    +

    Parameters

    • value: number

      New channel value.

      +

    Returns this

    The image instance.

    +
  • Fill one channel with a value.

    +

    Parameters

    • channel: number

      The channel to fill.

      +
    • value: number

      The new value.

      +

    Returns this

    The image instance.

    +
  • Get one channel of the image as an array.

    +

    Parameters

    • channel: number

      The channel to fill.

      +

    Returns number[]

    Array with the channel values.

    +
  • Parameters

    • column: number

    Returns number[][]

  • Get the coordinates of a point in the image. The reference is the top-left corner.

    +

    Parameters

    • coordinates: ImageCoordinates

      The point for which you want the coordinates.

      +
    • round: boolean = false

      Whether the coordinates should be rounded. This is useful when you want the center of the image.

      +

    Returns Point

    Coordinates of the point in the format [column, row].

    +
  • Get all the channels of a pixel.

    +

    Parameters

    • column: number

      Column index.

      +
    • row: number

      Row index.

      +

    Returns number[]

    Channels of the pixel.

    +
  • Get all the channels of a pixel using its index.

    +

    Parameters

    • index: number

      Index of the pixel.

      +

    Returns number[]

    Channels of the pixel.

    +
  • Return the raw image data.

    +

    Returns {
        bitDepth: BitDepth;
        channels: number;
        data: ImageDataArray;
        height: number;
        width: number;
    }

    The raw data.

    +
  • Parameters

    • row: number

    Returns number[][]

  • Get the value of a specific pixel channel. Select pixel using coordinates.

    +

    Parameters

    • column: number

      Column index.

      +
    • row: number

      Row index.

      +
    • channel: number

      Channel index.

      +

    Returns number

    Value of the specified channel of one pixel.

    +
  • Get the value of a specific pixel channel. Select pixel using index.

    +

    Parameters

    • index: number

      Index of the pixel.

      +
    • channel: number

      Channel index.

      +

    Returns number

    Value of the channel of the pixel.

    +
  • Get the value of a specific pixel channel. Select pixel using a point.

    +

    Parameters

    • point: Point

      Coordinates of the desired pixel.

      +
    • channel: number

      Channel index.

      +

    Returns number

    Value of the channel of the pixel.

    +
  • Level the image using the optional input and output value. This function allows you to enhance the image's contrast.

    +

    Parameters

    Returns Image

    The levelled image.

    +
  • Compute the mean pixel of an image.

    +

    Parameters

    Returns number[]

    The mean pixel.

    +
  • Compute the median pixel of an image.

    +

    Parameters

    Returns number[]

    The median pixel.

    +
  • Find the min and max values of each channel of the image.

    +

    Returns { max: number[]; min: number[] }

    An object with arrays of the min and max values.

    +
  • Multiply image pixels by a constant.

    +

    Parameters

    • value: number

      Value which pixels will be multiplied to.

      +
    • options: MultiplyOptions = {}

      Multiply options.

      +

    Returns Image

    Multiplied image.

    +
  • Compute direct convolution of an image and return an array with the raw values.

    +

    Parameters

    • kernel: number[][]

      Kernel used for the convolution.

      +
    • Optionaloptions: ConvolutionOptions

      Convolution options.

      +

    Returns Float64Array

    Array with the raw convoluted values.

    +
  • Set the value of a specific pixel channel. Select pixel using coordinates. +If the value is out of range it is set to the closest extremety.

    +

    Parameters

    • column: number

      Column index.

      +
    • row: number

      Row index.

      +
    • channel: number

      Channel index.

      +
    • value: number

      Value to set.

      +

    Returns void

  • Set the value of a specific pixel channel. Select pixel using index. +If the value is out of range it is set to the closest extremety.

    +

    Parameters

    • index: number

      Index of the pixel.

      +
    • channel: number

      Channel index.

      +
    • value: number

      Value to set.

      +

    Returns void

  • Set all the channels of a pixel.

    +

    Parameters

    • column: number

      Column index.

      +
    • row: number

      Row index.

      +
    • value: number[]

      New color of the pixel to set.

      +

    Returns void

  • Set all the channels of a pixel using its index.

    +

    Parameters

    • index: number

      Index of the pixel.

      +
    • value: number[]

      New channel values of the pixel to set.

      +

    Returns void

  • Set the value of a specific pixel channel. Select pixel using coordinates.

    +

    Parameters

    • column: number

      Column index.

      +
    • row: number

      Row index.

      +
    • channel: number

      Channel index.

      +
    • value: number

      Value to set.

      +

    Returns void

  • Set the value of a specific pixel channel. Select pixel using index.

    +

    Parameters

    • index: number

      Index of the pixel.

      +
    • channel: number

      Channel index.

      +
    • value: number

      Value to set.

      +

    Returns void

  • Set the value of a specific pixel channel. Select pixel using a point.

    +

    Parameters

    • point: Point

      Coordinates of the pixel.

      +
    • channel: number

      Channel index.

      +
    • value: number

      Value to set.

      +

    Returns void

  • Set all the channels of a pixel if the coordinates are inside the image.

    +

    Parameters

    • column: number

      Column index.

      +
    • row: number

      Row index.

      +
    • value: number[]

      New color of the pixel to set.

      +

    Returns void

  • Compute the variance of each channel of an image.

    +

    Parameters

    Returns number[]

    The variance of the channels of the image.

    +
diff --git a/classes/Mask.html b/classes/Mask.html new file mode 100644 index 000000000..8db27c8be --- /dev/null +++ b/classes/Mask.html @@ -0,0 +1,228 @@ +Mask | ImageJS

Class Mask

Constructors

  • Construct a new Mask knowing its dimensions.

    +

    Parameters

    • width: number

      Image width.

      +
    • height: number

      Image height.

      +
    • options: MaskOptions = {}

      Image options.

      +

    Returns Mask

Properties

alpha: boolean

Specifying that the mask has no an alpha channel.

+
bitDepth: BitDepth

The number of bits per value in each channel (always 1).

+
channels: number

The number of channels in the mask, including the alpha channel (always 1).

+
colorModel: ImageColorModel

The color model of the mask (always BINARY).

+
components: number

The number of color channels in the image, excluding the alpha channel (always 1).

+
height: number

The number of rows of the mask.

+
maxValue: number

The maximum value that a pixel channel can have.

+
origin: Point

Origin of the image relative to a the parent image.

+
size: number

The total number of bits in the mask (width × height).

+
width: number

The number of columns of the mask.

+

Methods

  • Fill the mask with a value.

    +

    Parameters

    Returns this

    The mask instance.

    +
  • Get the value of a bit.

    +

    Parameters

    • column: number

      Column index.

      +
    • row: number

      Row index.

      +

    Returns number

    The bit value.

    +
  • Get the value of a bit using index.

    +

    Parameters

    • index: number

      Index of the pixel.

      +

    Returns number

    Value of the bit.

    +
  • Get the vertices of the convex Hull polygon of a mask.

    +

    Returns ConvexHull

    Array of the vertices of the convex Hull in clockwise order.

    +
  • Get the corners of the minimum bounding rectangle of a shape defined in a mask.

    +

    Returns Mbr

    Array of border points.

    +
  • Get the number of pixels that do not have the value 0.

    +

    Returns number

  • Get a pixel of the mask.

    +

    Parameters

    • column: number

      Column index.

      +
    • row: number

      Row index.

      +

    Returns number[]

    The pixel.

    +
  • Get a pixel using its index.

    +

    Parameters

    • index: number

      Index of the pixel.

      +

    Returns number[]

    The pixel.

    +
  • Return the raw mask data.

    +

    Returns { data: Uint8Array; height: number; width: number }

    The raw data.

    +
  • Get the value of a bit. Function exists for compatibility with Image.

    +

    Parameters

    • column: number

      Column index.

      +
    • row: number

      Row index.

      +
    • channel: number

      Index of the channel, must be zero.

      +

    Returns number

    The bit value.

    +
  • Get the value of a bit using index. Function exists for compatibility with Image.

    +

    Parameters

    • index: number

      Index of the pixel.

      +
    • channel: number

      Index of the channel, must be zero.

      +

    Returns number

    Value of the bit.

    +
  • Get the value of a specific bit. Select bit using a point.

    +

    Parameters

    • point: Point

      Coordinates of the desired biz.

      +

    Returns number

    Value of the bit.

    +
  • Set the value of a bit.

    +

    Parameters

    • column: number

      Column index.

      +
    • row: number

      Row index.

      +
    • value: BitValue

      New bit value.

      +

    Returns void

  • Set the value of a bit using index.

    +

    Parameters

    • index: number

      Index of the pixel.

      +
    • value: BitValue

      Value to set.

      +

    Returns void

  • Set a pixel.

    +

    Parameters

    • column: number

      Column index.

      +
    • row: number

      Row index.

      +
    • value: number[]

      The pixel value.

      +

    Returns void

  • Set a pixel using its index.

    +

    Parameters

    • index: number

      Index of the pixel.

      +
    • value: number[]

      New value of the pixel to set.

      +

    Returns void

  • Set the value of a bit. Function exists for compatibility with Image.

    +

    Parameters

    • column: number

      Column index.

      +
    • row: number

      Row index.

      +
    • channel: number

      Index of the channel, must be zero.

      +
    • value: BitValue

      New bit value.

      +

    Returns void

  • Set the value of a bit using index. Function exists for compatibility with Image.

    +

    Parameters

    • index: number

      Index of the pixel.

      +
    • channel: number

      Index of the channel, must be zero.

      +
    • value: BitValue

      Value to set.

      +

    Returns void

  • Set the value of a specific bit. Select bit using a point.

    +

    Parameters

    • point: Point

      Coordinates of the bit.

      +
    • value: BitValue

      Value to set.

      +

    Returns void

  • Set a pixel to a given value if the coordinates are inside the mask.

    +

    Parameters

    • column: number

      Column index.

      +
    • row: number

      Row index.

      +
    • value: number[]

      New color of the pixel to set.

      +

    Returns void

  • Create a mask from an array of points.

    +

    Parameters

    • width: number

      Width of the mask.

      +
    • height: number

      Height of the mask.

      +
    • points: Point[]

      Reference Mask.

      +

    Returns Mask

    New mask.

    +
diff --git a/classes/Montage.html b/classes/Montage.html new file mode 100644 index 000000000..3b485da26 --- /dev/null +++ b/classes/Montage.html @@ -0,0 +1,35 @@ +Montage | ImageJS

Class Montage

Constructors

Properties

destinationHeight: number

Scaled height of the second image.

+
destinationOrigin: Point

Origin of the destination / second image relative to top-left corner of the Montage.

+
destinationWidth: number

Scaled width of the second image.

+
disposition: MontageDisposition
height: number

Height of the Montage.

+
image: Image

Image of the Montage.

+
scale: number

Factor by which to scale the images are scaled in the montage.

+
sourceHeight: number

Scaled height of the first image.

+
sourceWidth: number

Scaled width of the first image.

+
width: number

Width of the Montage.

+

Methods

diff --git a/classes/Roi.html b/classes/Roi.html new file mode 100644 index 000000000..4221740e9 --- /dev/null +++ b/classes/Roi.html @@ -0,0 +1,108 @@ +Roi | ImageJS

Class Roi

Constructors

  • Parameters

    • map: RoiMap
    • id: number
    • width: number
    • height: number
    • origin: Point
    • surface: number

    Returns Roi

Properties

height: number

Height of the ROI.

+
id: number

ID of the ROI. Positive for white ROIs and negative for black ones.

+
origin: Point

Origin of the ROI. The top-left corner of the rectangle around +the ROI relative to the original image.

+
surface: number

Surface of the ROI.

+
width: number

Width of the ROI.

+

Accessors

  • get absolutePoints(): Point[]
  • Computes ROI points relative to Image's/Mask's point of origin.

    +

    Returns Point[]

    Array of points with absolute ROI coordinates.

    +
  • get borders(): Border[]
  • Calculates and caches border's length and their IDs.

    +

    Returns Border[]

    Borders' length and their IDs.

    +
  • get ellipse(): Ellipse
  • Computes ellipse of ROI. It is the smallest ellipse that fits the ROI.

    +

    Returns Ellipse

    Ellipse

    +
  • get eqpc(): number
  • Computes the diameter of a circle of equal projection area (EQPC). +It is a diameter of a circle that has the same surface as the ROI.

    +

    Returns number

    eqpc value in pixels.

    +
  • get externalBorders(): Border[]
  • Returns an array of ROIs IDs that touch the current ROI.

    +

    Returns Border[]

    The array of Borders.

    +
  • get feret(): Feret
  • This is not a diameter in its actual sense but the common basis of a group of diameters derived from the distance of two tangents to the contour of the particle in a well-defined orientation. +In simpler words, the method corresponds to the measurement by a slide gauge (slide gauge principle). +In general it is defined as the distance between two parallel tangents of the particle at an arbitrary angle. The minimum Feret diameter is often used as the diameter equivalent to a sieve analysis.

    +

    Returns Feret

    The maximum and minimum Feret Diameters.

    +
  • get filledSurface(): number
  • Computes the surface of the ROI, including the surface of the holes.

    +

    Returns number

    Surface including holes measured in pixels.

    +
  • get fillRatio(): number
  • Computes fill ratio of the ROI. It is calculated by dividing ROI's actual surface over the surface combined with holes, to see how holes affect its surface.

    +

    Returns number

    Fill ratio value.

    +
  • get holesInfo(): { number: number; surface: number }
  • Number of holes in the ROI and their total surface. +Used to calculate fillRatio.

    +

    Returns { number: number; surface: number }

    The surface of holes in ROI in pixels.

    +
  • get internalIDs(): number[]
  • Returns an array of ROIs IDs that are included in the current ROI. +This will be useful to know if there are some holes in the ROI.

    +

    Returns number[]

    InternalIDs.

    +
  • get mbr(): Mbr
  • Computes the minimum bounding rectangle. +In digital image processing, the bounding box is merely the coordinates of the rectangular border that fully encloses a digital image when it is placed over a page, a canvas, a screen or other similar bidimensional background.

    +

    Returns Mbr

    The minimum bounding rectangle.

    +
  • get ped(): number
  • Computes the diameter of a circle that has the same perimeter as the particle image.

    +

    Returns number

    Ped value in pixels.

    +
  • get perimeter(): number
  • Perimeter of the ROI. +The perimeter is calculated using the sum of all the external borders of the ROI to which we subtract: +(2 - √2) * the number of pixels that have 2 external borders +2 * (2 - √2) * the number of pixels that have 3 external borders

    +

    Returns number

    Perimeter value in pixels.

    +
  • get perimeterInfo(): { four: number; one: number; three: number; two: number }
  • Calculates and caches the number of sides by which each pixel is touched externally.

    +

    Returns { four: number; one: number; three: number; two: number }

    An object which tells how many pixels are exposed externally to how many sides.

    +
  • get relativePoints(): Point[]
  • Computes ROI points relative to ROIs point of origin.

    +

    Returns Point[]

    Array of points with relative ROI coordinates.

    +
  • get solidity(): number
  • The solidity describes the extent to which a shape is convex or concave. +The solidity of a completely convex shape is 1, the farther the it deviates from 1, the greater the extent of concavity in the shape of the ROI.

    +

    Returns number

    Solidity value.

    +
  • get sphericity(): number
  • Computes sphericity of the ROI. +Sphericity is a measure of the degree to which a particle approximates the shape of a sphere, and is independent of its size. The value is always between 0 and 1. The less spheric the ROI is the smaller is the number.

    +

    Returns number

    Sphericity value.

    +

Methods

  • Return the value at the given coordinates in an ROI map.

    +

    Parameters

    • column: number

      Column of the value.

      +
    • row: number

      Row of the value.

      +

    Returns number

    The value at the given coordinates.

    +
  • Returns the ratio between the width and the height of the bounding rectangle of the ROI.

    +

    Returns number

    The width by height ratio.

    +
  • Generator function to calculate point's coordinates.

    +

    Parameters

    • absolute: boolean

      controls whether coordinates should be relative to ROI's point of origin (relative), or relative to ROI's position on the Image/Mask (absolute).

      +

    Returns Generator<{ column: number; row: number }, void>

    Coordinates of each point of ROI.

    +
  • A JSON object with all the data about ROI.

    +

    Returns {
        centroid: Point;
        convexHull: { perimeter: number; points: Point[]; surface: number };
        eqpc: number;
        feret: Feret;
        filledSurface: number;
        fillRatio: number;
        height: number;
        id: number;
        mbr: Mbr;
        origin: Point;
        ped: number;
        perimeter: number;
        roundness: number;
        solidity: number;
        sphericity: number;
        surface: number;
        width: number;
    }

    All current ROI properties as one object.

    +
diff --git a/classes/RoiMapManager.html b/classes/RoiMapManager.html new file mode 100644 index 000000000..3dd518615 --- /dev/null +++ b/classes/RoiMapManager.html @@ -0,0 +1,20 @@ +RoiMapManager | ImageJS

Class RoiMapManager

Implements

Constructors

Properties

blackRois: Roi[]
whiteRois: Roi[]

Methods

  • Returns the ROI map as a correct width and height matrix.

    +

    Returns number[][]

    The ROI map matrix.

    +
  • Return the value at the given coordinates in an ROI map.

    +

    Parameters

    • column: number

      Column of the value.

      +
    • row: number

      Row of the value.

      +

    Returns number

    The value at the given coordinates.

    +
diff --git a/classes/Stack.html b/classes/Stack.html new file mode 100644 index 000000000..ea2e42608 --- /dev/null +++ b/classes/Stack.html @@ -0,0 +1,73 @@ +Stack | ImageJS

Class Stack

Constructors

  • Create a new stack from an array of images. +The images must have the same bit depth and color model.

    +

    Parameters

    • images: Image[]

      Array of images from which to create the stack.

      +

    Returns Stack

Properties

alpha: boolean

Do the images have an alpha channel?

+
bitDepth: BitDepth

The bit depth of the images.

+
channels: number

The number of channels of the images.

+
colorModel: ImageColorModel

The color model of the images.

+
sameDimensions: boolean

Whether all the images of the stack have the same dimensions.

+
size: number

The stack size.

+

Methods

  • Clone a stack. The images are a copy of the original images.

    +

    Returns Stack

    A new stack with the same images.

    +
  • Filter the images in the stack.

    +

    Parameters

    • callback: (image: Image) => boolean

      Function to decide which images to keep.

      +

    Returns Stack

    New filtered stack.

    +
  • Get the image at the given index.

    +

    Parameters

    • index: number

      The index of the image.

      +

    Returns Image

    The image.

    +
  • Get the images of the stack. Mainly for debugging purposes.

    +

    Returns Image[]

    The images.

    +
  • Get a value from an image of the stack.

    +

    Parameters

    • stackIndex: number

      Index of the image in the stack.

      +
    • row: number

      Row index of the pixel.

      +
    • column: number

      Column index of the pixel.

      +
    • channel: number

      The channel to retrieve.

      +

    Returns number

    The value at the given position.

    +
  • Get a value from an image of the stack. Specify the pixel position using its index.

    +

    Parameters

    • stackIndex: number

      Index of the image in the stack.

      +
    • index: number

      The index of the pixel.

      +
    • channel: number

      The channel to retrieve.

      +

    Returns number

    The value at the given position.

    +
  • Get the sum of all the histograms of the stack's images. If no channel is specified in the options, the images must be GREY.

    +

    Parameters

    Returns Uint32Array

    The histogram of the stack.

    +
  • Map a function on all the images of the stack.

    +

    Parameters

    • callback: (image: Image) => Image

      Function to apply on each image.

      +

    Returns Stack

    New stack with the modified images.

    +
  • Return the image containing the maximum values of all the images in the stack for +each pixel. All the images must have the same dimensions.

    +

    Returns Image

    The maximum image.

    +
  • Return the image containing the average values of all the images in the stack for +each pixel. All the images must have the same dimensions.

    +

    Returns Image

    The mean image.

    +
  • Return the image containing the median values of all the images in the stack for +each pixel. All the images must have the same dimensions.

    +

    Returns Image

    The median image.

    +
  • Return the image containing the minimum values of all the images in the stack for +each pixel. All the images must have the same dimensions.

    +

    Returns Image

    The minimum image.

    +
  • Return a 16 bits depth image containing the sum values of all the images in the stack for +each pixel.

    +

    Returns Image

    The sum image.

    +
diff --git a/demo/.eslintrc.yml b/demo/.eslintrc.yml deleted file mode 100644 index e69de29bb..000000000 diff --git a/demo/components/App.tsx b/demo/components/App.tsx deleted file mode 100644 index 637d461df..000000000 --- a/demo/components/App.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { HashRouter, Route, Routes } from 'react-router-dom'; - -import { CameraProvider } from '../contexts/cameraContext.provider.js'; - -import Filters from './Filters.js'; -import Home from './Home.js'; - -export default function App() { - return ( - - - - } /> - } /> - - - - ); -} diff --git a/demo/components/CameraFeed.tsx b/demo/components/CameraFeed.tsx deleted file mode 100644 index e0a882355..000000000 --- a/demo/components/CameraFeed.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { useEffect, useRef } from 'react'; - -import { useCameraContext } from '../contexts/cameraContext.js'; - -import UnavailableCamera from './UnavailableCamera.js'; - -export default function CameraFeed() { - const [{ selectedCamera }] = useCameraContext(); - const videoRef = useRef(null); - useEffect(() => { - const video = videoRef.current; - if (!video || !selectedCamera) return; - video.srcObject = selectedCamera.stream; - const onLoadedMetadata = () => { - video.play().catch((error: unknown) => console.error(error)); - }; - video.addEventListener('loadedmetadata', onLoadedMetadata); - return () => { - video.removeEventListener('loadedmetadata', onLoadedMetadata); - }; - }, [selectedCamera]); - if (!selectedCamera) { - return ; - } - - return