From 2fd5ba3c1cdf348f36e83cded6eb69218a8c3326 Mon Sep 17 00:00:00 2001 From: Aamir Shah Date: Fri, 1 Nov 2024 19:00:03 +0500 Subject: [PATCH] Docusaurus v3 (#36) * v3: initial commit * add data-js-api references * add rest-api docs * fix: broken rest api links * add social card * add description * fix: broken link * fix: broken demos --- .gitignore | 8 +- .husky/pre-commit | 3 - @novorender | 2 +- babel.config.js | 2 +- blog/authors.yml | 2 +- demo-snippets/guides/dynamic/animation.ts | 4 +- demo-snippets/guides/dynamic/instances.ts | 4 +- demo-snippets/guides/dynamic/pick.ts | 4 +- demo-snippets/guides/dynamic/triangle.ts | 5 +- demo-snippets/guides/measure/drawing_2d.ts | 2 +- demo-snippets/guides/measure/measure_line.ts | 2 +- .../guides/object_metadata/fly_to.ts | 16 +- .../object_metadata/metadata_from_search.ts | 3 +- docs/guides/camera_controllers.mdx | 4 +- docs/guides/clipping_volumes.mdx | 2 +- docs/guides/custom-camera-controller.mdx | 10 + .../guides/downloading-scenes-for-offline.mdx | 12 +- .../extracting_properties_using_python.mdx | 6 +- docs/guides/interactive_examples.mdx | 2 +- docs/guides/loading_scenes.mdx | 4 +- docs/guides/managing_rules.mdx | 8 +- docs/guides/object_groups.mdx | 8 +- docs/guides/object_metadata.mdx | 2 +- docs/guides/searching.mdx | 2 +- docs/guides/views.mdx | 2 +- docs/{ => web_api}/index.mdx | 28 +- .../tutorial/getting_started.mdx | 26 +- .../tutorial/vite_getting_started.mdx | 8 +- .../tutorial/vite_react_getting_started.mdx | 6 +- .../tutorial/webpack_getting_started.mdx | 6 +- docusaurus.config.js | 257 - docusaurus.config.ts | 297 + legacy-docs/.eslintrc.js | 22 - legacy-docs/.gitignore | 31 - legacy-docs/.markdownlint.json | 11 - legacy-docs/README.md | 3 - legacy-docs/babel.config.js | 3 - legacy-docs/demo-snippets/index.ts | 3 - legacy-docs/demo-snippets/misc.ts | 64 - legacy-docs/demo-snippets/tsconfig.json | 63 - .../tutorials/clipping_volumes/box.ts | 80 - .../tutorials/clipping_volumes/dual.ts | 76 - .../tutorials/clipping_volumes/flipped.ts | 75 - .../tutorials/clipping_volumes/index.ts | 20 - .../tutorials/clipping_volumes/offset.ts | 75 - .../tutorials/clipping_volumes/rotated.ts | 84 - .../tutorials/clipping_volumes/single.ts | 73 - .../tutorials/clipping_volumes/slab.ts | 76 - .../tutorials/clipping_volumes/slab_inv.ts | 76 - .../tutorials/drawing2D/drawing_2d.ts | 423 - .../tutorials/drawing2D/index.ts | 6 - .../dynamic_objects/dynamic_object.ts | 70 - .../tutorials/dynamic_objects/index.ts | 6 - .../tutorials/getting_started/basic_condos.ts | 61 - .../getting_started/basic_condos_1.ts | 61 - .../tutorials/getting_started/basic_cube.ts | 61 - .../tutorials/getting_started/index.ts | 11 - legacy-docs/demo-snippets/tutorials/index.ts | 12 - .../tutorials/loading_scenes/index.ts | 8 - .../tutorials/loading_scenes/private_scene.ts | 138 - .../tutorials/loading_scenes/public_scene.ts | 103 - .../demo-snippets/tutorials/measure/index.ts | 6 - .../tutorials/measure/parametric_measure.ts | 105 - .../tutorials/minimap/basic_minimap.ts | 727 - .../demo-snippets/tutorials/minimap/index.ts | 6 - .../tutorials/object_groups/floors.ts | 198 - .../tutorials/object_groups/index.ts | 6 - .../tutorials/object_metadata/fly_to.ts | 213 - .../tutorials/object_metadata/index.ts | 10 - .../object_metadata/metadata_from_pick.ts | 152 - .../object_metadata/metadata_from_search.ts | 160 - .../tutorials/object_selection/index.ts | 6 - .../tutorials/object_selection/pick.ts | 107 - .../tutorials/pdf_placement/index.ts | 7 - .../tutorials/pdf_placement/pdf_placement.ts | 419 - .../tutorials/searching/exact_search.ts | 134 - .../exact_search_excluding_result.ts | 134 - .../tutorials/searching/fluffy_search.ts | 133 - .../tutorials/searching/index.ts | 13 - .../tutorials/searching/search_by_path.ts | 136 - legacy-docs/demo-snippets/typings.d.ts | 17 - legacy-docs/docs/test.ts | 36 - .../docs/tutorials/clipping_volumes.mdx | 106 - legacy-docs/docs/tutorials/drawing2D.mdx | 102 - .../docs/tutorials/dynamic_objects.mdx | 85 - .../docs/tutorials/getting_started.mdx | 223 - legacy-docs/docs/tutorials/loading_scenes.mdx | 50 - legacy-docs/docs/tutorials/minimap.mdx | 811 - legacy-docs/docs/tutorials/object_groups.mdx | 120 - .../docs/tutorials/object_metadata.mdx | 36 - .../docs/tutorials/object_selection.mdx | 72 - .../docs/tutorials/parametric_measure.mdx | 71 - legacy-docs/docs/tutorials/placing_pdf.mdx | 163 - legacy-docs/docs/tutorials/searching.mdx | 39 - legacy-docs/docusaurus.config.js | 293 - legacy-docs/package-lock.json | 18565 ------- legacy-docs/package.json | 97 - legacy-docs/sidebars.js | 124 - .../components/MonacoWrapper/index.styles.css | 89 - .../src/components/MonacoWrapper/index.tsx | 676 - .../PlaygroundComponent/index.styles.css | 60 - .../components/PlaygroundComponent/index.tsx | 88 - legacy-docs/src/components/Renderer/index.tsx | 221 - .../src/components/misc/spinner/index.tsx | 6 - .../components/misc/spinner/styles.module.css | 28 - legacy-docs/src/css/custom.css | 305 - legacy-docs/src/pages/about/about.module.css | 10 - legacy-docs/src/pages/about/index.tsx | 16 - legacy-docs/src/pages/index.module.css | 170 - legacy-docs/src/pages/index.tsx | 167 - legacy-docs/src/pages/playground/index.tsx | 118 - .../src/pages/playground/run/index.tsx | 53 - legacy-docs/src/plugins.js | 65 - .../src/theme/CustomCodeblock/index.tsx | 41 - legacy-docs/src/theme/MDXComponents.js | 12 - legacy-docs/src/theme/Root.tsx | 83 - legacy-docs/src/theme/context.ts | 6 - .../src/theme/prism-include-languages.d.ts | 2 - .../src/theme/prism-include-languages.js | 20 - legacy-docs/static/.nojekyll | 0 .../5cff54de-5133-4369-8680-52d2723eb756.jpg | Bin 62559 -> 0 bytes .../assets/demo-screenshots/basic_condos.png | Bin 14811 -> 0 bytes .../demo-screenshots/basic_condos_1.png | Bin 55784 -> 0 bytes .../assets/demo-screenshots/basic_cube.png | Bin 8071 -> 0 bytes .../assets/demo-screenshots/basic_minimap.png | Bin 442732 -> 0 bytes .../static/assets/demo-screenshots/box.png | Bin 12722 -> 0 bytes .../assets/demo-screenshots/drawing_2d.png | Bin 23645 -> 0 bytes .../static/assets/demo-screenshots/dual.png | Bin 12304 -> 0 bytes .../demo-screenshots/dynamic_object.png | Bin 30254 -> 0 bytes .../assets/demo-screenshots/exactSearch.png | Bin 12609 -> 0 bytes .../exactSearchExcludingResult.png | Bin 34050 -> 0 bytes .../assets/demo-screenshots/flipped.png | Bin 17889 -> 0 bytes .../static/assets/demo-screenshots/floors.png | Bin 33499 -> 0 bytes .../assets/demo-screenshots/fluffySearch.png | Bin 12609 -> 0 bytes .../static/assets/demo-screenshots/fly_to.png | Bin 52547 -> 0 bytes .../demo-screenshots/metadata_from_pick.png | Bin 34061 -> 0 bytes .../demo-screenshots/metadata_from_search.png | Bin 33966 -> 0 bytes .../static/assets/demo-screenshots/offset.png | Bin 19674 -> 0 bytes .../demo-screenshots/parametric_measure.png | Bin 23645 -> 0 bytes .../assets/demo-screenshots/pdf_placement.png | Bin 97904 -> 0 bytes .../static/assets/demo-screenshots/pick.png | Bin 55047 -> 0 bytes .../assets/demo-screenshots/private_scene.png | Bin 34474 -> 0 bytes .../assets/demo-screenshots/public_scene.png | Bin 34061 -> 0 bytes .../assets/demo-screenshots/rotated.png | Bin 17574 -> 0 bytes .../assets/demo-screenshots/searchByPath.png | Bin 22648 -> 0 bytes .../static/assets/demo-screenshots/single.png | Bin 18835 -> 0 bytes .../static/assets/demo-screenshots/slab.png | Bin 18140 -> 0 bytes .../assets/demo-screenshots/slab_inv.png | Bin 23034 -> 0 bytes .../playground-demo-placeholder-dark.jpg | Bin 25939 -> 0 bytes .../assets/playground-placeholder-dark.png | Bin 85477 -> 0 bytes .../assets/playground-placeholder-light.png | Bin 85530 -> 0 bytes legacy-docs/static/img/albums-outline.svg | 1 - legacy-docs/static/img/card_waves.svg | 1 - legacy-docs/static/img/code-slash-outline.svg | 1 - legacy-docs/static/img/favicon.ico | Bin 7802 -> 0 bytes legacy-docs/static/img/globe-outline.svg | 1 - .../static/img/hardware-chip-outline.svg | 1 - legacy-docs/static/img/landscape-portrait.svg | 11 - legacy-docs/static/img/local_esm.png | Bin 7680 -> 0 bytes .../static/img/novorender_logo_RGB_2021.png | Bin 5182 -> 0 bytes .../img/novorender_logo_RGB_2021_white.png | Bin 4885 -> 0 bytes .../static/img/share-social-outline.svg | 1 - legacy-docs/static/img/vite.png | Bin 7982 -> 0 bytes legacy-docs/static/img/waves.svg | 1 - legacy-docs/static/img/waves_inverted.svg | 1 - legacy-docs/static/img/webpack.png | Bin 15900 -> 0 bytes legacy-docs/static/img/webpack_typescript.png | Bin 8235 -> 0 bytes legacy-docs/tsconfig.json | 7 - legacy-docs/type-definitions/data-js-api.ts | 1 - legacy-docs/type-definitions/measure-api.ts | 1 - legacy-docs/type-definitions/webgl-api.ts | 1 - package-lock.json | 40740 ++++++++++------ package.json | 189 +- scene-screenshot-gen/index.html | 24 - scene-screenshot-gen/index.ts | 124 - scene-screenshot-gen/tsconfig.json | 6 - sidebars.js | 92 - sidebars.ts | 95 + src/components/CodeLink/index.tsx | 15 +- src/pages/index.tsx | 6 +- static/img/social_card.jpg | Bin 0 -> 34421 bytes tsconfig.json | 5 +- type-definitions/data-js-api.ts | 1 + .../tsconfig.json | 12 +- webpack.plugin.js | 34 +- 185 files changed, 25230 insertions(+), 44602 deletions(-) create mode 100644 docs/guides/custom-camera-controller.mdx rename docs/{ => web_api}/index.mdx (69%) rename docs/{ => web_api}/tutorial/getting_started.mdx (75%) rename docs/{ => web_api}/tutorial/vite_getting_started.mdx (95%) rename docs/{ => web_api}/tutorial/vite_react_getting_started.mdx (95%) rename docs/{ => web_api}/tutorial/webpack_getting_started.mdx (95%) delete mode 100644 docusaurus.config.js create mode 100644 docusaurus.config.ts delete mode 100644 legacy-docs/.eslintrc.js delete mode 100644 legacy-docs/.gitignore delete mode 100644 legacy-docs/.markdownlint.json delete mode 100644 legacy-docs/README.md delete mode 100644 legacy-docs/babel.config.js delete mode 100644 legacy-docs/demo-snippets/index.ts delete mode 100644 legacy-docs/demo-snippets/misc.ts delete mode 100644 legacy-docs/demo-snippets/tsconfig.json delete mode 100644 legacy-docs/demo-snippets/tutorials/clipping_volumes/box.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/clipping_volumes/dual.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/clipping_volumes/flipped.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/clipping_volumes/index.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/clipping_volumes/offset.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/clipping_volumes/rotated.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/clipping_volumes/single.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/clipping_volumes/slab.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/clipping_volumes/slab_inv.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/drawing2D/drawing_2d.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/drawing2D/index.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/dynamic_objects/dynamic_object.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/dynamic_objects/index.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/getting_started/basic_condos.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/getting_started/basic_condos_1.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/getting_started/basic_cube.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/getting_started/index.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/index.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/loading_scenes/index.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/loading_scenes/private_scene.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/loading_scenes/public_scene.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/measure/index.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/measure/parametric_measure.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/minimap/basic_minimap.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/minimap/index.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/object_groups/floors.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/object_groups/index.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/object_metadata/fly_to.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/object_metadata/index.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/object_metadata/metadata_from_pick.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/object_metadata/metadata_from_search.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/object_selection/index.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/object_selection/pick.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/pdf_placement/index.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/pdf_placement/pdf_placement.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/searching/exact_search.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/searching/exact_search_excluding_result.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/searching/fluffy_search.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/searching/index.ts delete mode 100644 legacy-docs/demo-snippets/tutorials/searching/search_by_path.ts delete mode 100644 legacy-docs/demo-snippets/typings.d.ts delete mode 100644 legacy-docs/docs/test.ts delete mode 100644 legacy-docs/docs/tutorials/clipping_volumes.mdx delete mode 100644 legacy-docs/docs/tutorials/drawing2D.mdx delete mode 100644 legacy-docs/docs/tutorials/dynamic_objects.mdx delete mode 100644 legacy-docs/docs/tutorials/getting_started.mdx delete mode 100644 legacy-docs/docs/tutorials/loading_scenes.mdx delete mode 100644 legacy-docs/docs/tutorials/minimap.mdx delete mode 100644 legacy-docs/docs/tutorials/object_groups.mdx delete mode 100644 legacy-docs/docs/tutorials/object_metadata.mdx delete mode 100644 legacy-docs/docs/tutorials/object_selection.mdx delete mode 100644 legacy-docs/docs/tutorials/parametric_measure.mdx delete mode 100644 legacy-docs/docs/tutorials/placing_pdf.mdx delete mode 100644 legacy-docs/docs/tutorials/searching.mdx delete mode 100644 legacy-docs/docusaurus.config.js delete mode 100644 legacy-docs/package-lock.json delete mode 100644 legacy-docs/package.json delete mode 100644 legacy-docs/sidebars.js delete mode 100644 legacy-docs/src/components/MonacoWrapper/index.styles.css delete mode 100644 legacy-docs/src/components/MonacoWrapper/index.tsx delete mode 100644 legacy-docs/src/components/PlaygroundComponent/index.styles.css delete mode 100644 legacy-docs/src/components/PlaygroundComponent/index.tsx delete mode 100644 legacy-docs/src/components/Renderer/index.tsx delete mode 100644 legacy-docs/src/components/misc/spinner/index.tsx delete mode 100644 legacy-docs/src/components/misc/spinner/styles.module.css delete mode 100644 legacy-docs/src/css/custom.css delete mode 100644 legacy-docs/src/pages/about/about.module.css delete mode 100644 legacy-docs/src/pages/about/index.tsx delete mode 100644 legacy-docs/src/pages/index.module.css delete mode 100644 legacy-docs/src/pages/index.tsx delete mode 100644 legacy-docs/src/pages/playground/index.tsx delete mode 100644 legacy-docs/src/pages/playground/run/index.tsx delete mode 100644 legacy-docs/src/plugins.js delete mode 100644 legacy-docs/src/theme/CustomCodeblock/index.tsx delete mode 100644 legacy-docs/src/theme/MDXComponents.js delete mode 100644 legacy-docs/src/theme/Root.tsx delete mode 100644 legacy-docs/src/theme/context.ts delete mode 100644 legacy-docs/src/theme/prism-include-languages.d.ts delete mode 100644 legacy-docs/src/theme/prism-include-languages.js delete mode 100644 legacy-docs/static/.nojekyll delete mode 100644 legacy-docs/static/assets/5cff54de-5133-4369-8680-52d2723eb756.jpg delete mode 100644 legacy-docs/static/assets/demo-screenshots/basic_condos.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/basic_condos_1.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/basic_cube.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/basic_minimap.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/box.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/drawing_2d.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/dual.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/dynamic_object.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/exactSearch.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/exactSearchExcludingResult.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/flipped.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/floors.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/fluffySearch.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/fly_to.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/metadata_from_pick.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/metadata_from_search.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/offset.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/parametric_measure.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/pdf_placement.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/pick.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/private_scene.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/public_scene.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/rotated.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/searchByPath.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/single.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/slab.png delete mode 100644 legacy-docs/static/assets/demo-screenshots/slab_inv.png delete mode 100644 legacy-docs/static/assets/playground-demo-placeholder-dark.jpg delete mode 100644 legacy-docs/static/assets/playground-placeholder-dark.png delete mode 100644 legacy-docs/static/assets/playground-placeholder-light.png delete mode 100644 legacy-docs/static/img/albums-outline.svg delete mode 100644 legacy-docs/static/img/card_waves.svg delete mode 100644 legacy-docs/static/img/code-slash-outline.svg delete mode 100644 legacy-docs/static/img/favicon.ico delete mode 100644 legacy-docs/static/img/globe-outline.svg delete mode 100644 legacy-docs/static/img/hardware-chip-outline.svg delete mode 100644 legacy-docs/static/img/landscape-portrait.svg delete mode 100644 legacy-docs/static/img/local_esm.png delete mode 100644 legacy-docs/static/img/novorender_logo_RGB_2021.png delete mode 100644 legacy-docs/static/img/novorender_logo_RGB_2021_white.png delete mode 100644 legacy-docs/static/img/share-social-outline.svg delete mode 100644 legacy-docs/static/img/vite.png delete mode 100644 legacy-docs/static/img/waves.svg delete mode 100644 legacy-docs/static/img/waves_inverted.svg delete mode 100644 legacy-docs/static/img/webpack.png delete mode 100644 legacy-docs/static/img/webpack_typescript.png delete mode 100644 legacy-docs/tsconfig.json delete mode 100644 legacy-docs/type-definitions/data-js-api.ts delete mode 100644 legacy-docs/type-definitions/measure-api.ts delete mode 100644 legacy-docs/type-definitions/webgl-api.ts delete mode 100644 scene-screenshot-gen/index.html delete mode 100644 scene-screenshot-gen/index.ts delete mode 100644 scene-screenshot-gen/tsconfig.json delete mode 100644 sidebars.js create mode 100644 sidebars.ts create mode 100644 static/img/social_card.jpg create mode 100644 type-definitions/data-js-api.ts rename {legacy-docs/type-definitions => type-definitions}/tsconfig.json (95%) diff --git a/.gitignore b/.gitignore index 927a1e17..80e4577f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,11 +3,9 @@ # Production /build -/docs/api -/docs/webgl-api -/docs/data-js-api -/docs/measure-api -/docs/web_api +/docs/web_api/api_reference +/docs/data_js_api/api_reference +/docs/data_rest_api/v2 # Generated files .docusaurus diff --git a/.husky/pre-commit b/.husky/pre-commit index 6ea874cf..931de3ff 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - npm run validate-snippets diff --git a/@novorender b/@novorender index 5b208067..f8b39683 160000 --- a/@novorender +++ b/@novorender @@ -1 +1 @@ -Subproject commit 5b20806713ce48c086716752fe1eace94657365e +Subproject commit f8b39683841f0fd53b892ed981277a83d221da8a diff --git a/babel.config.js b/babel.config.js index dd249ac1..e00595da 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,3 +1,3 @@ module.exports = { - presets: [require.resolve("@docusaurus/core/lib/babel/preset")], + presets: [require.resolve('@docusaurus/core/lib/babel/preset')], }; diff --git a/blog/authors.yml b/blog/authors.yml index b90a3936..fbb826b9 100644 --- a/blog/authors.yml +++ b/blog/authors.yml @@ -2,5 +2,5 @@ tl: name: Tore Lode title: Co-creator of Novorender WebGL API url: https://github.com/torelode - image_url: https://docs.novorender.com/assets/blog/authors/T3UFE5GJH-U3UMB08Q4-4bb948ec5524-512.jpeg + image_url: /assets/blog/authors/T3UFE5GJH-U3UMB08Q4-4bb948ec5524-512.jpeg email: tl@novorender.com \ No newline at end of file diff --git a/demo-snippets/guides/dynamic/animation.ts b/demo-snippets/guides/dynamic/animation.ts index 382e80a1..f47a01b2 100644 --- a/demo-snippets/guides/dynamic/animation.ts +++ b/demo-snippets/guides/dynamic/animation.ts @@ -2,7 +2,7 @@ import { createCubeObject, type RenderStateDynamicInstance, type RenderStateChan const { mesh } = createCubeObject(); -export function update(time: number): RenderStateChanges { +export function update(time: number) { const angle = ((time / 1000) * Math.PI * 2) / 6; // 10 RPM const instance: RenderStateDynamicInstance = { position: [0, 0, 0], @@ -10,5 +10,5 @@ export function update(time: number): RenderStateChanges { }; return { dynamic: { objects: [{ mesh, instances: [instance] }] }, - }; + } as RenderStateChanges; } diff --git a/demo-snippets/guides/dynamic/instances.ts b/demo-snippets/guides/dynamic/instances.ts index f64b0f6d..ae02dd47 100644 --- a/demo-snippets/guides/dynamic/instances.ts +++ b/demo-snippets/guides/dynamic/instances.ts @@ -1,6 +1,6 @@ import { createCubeObject, type RenderStateDynamicInstance, type RenderStateChanges, type RenderStateDynamicObject } from "@novorender/api"; -export function main(): RenderStateChanges { +export function main() { const cube = createCubeObject(); const instances: RenderStateDynamicInstance[] = []; const dim = 10; @@ -17,5 +17,5 @@ export function main(): RenderStateChanges { mesh: cube.mesh, instances, // generated instances }; - return { dynamic: { objects: [instancedCube] } }; + return { dynamic: { objects: [instancedCube] } } as RenderStateChanges; } diff --git a/demo-snippets/guides/dynamic/pick.ts b/demo-snippets/guides/dynamic/pick.ts index 4e5b7981..f2389144 100644 --- a/demo-snippets/guides/dynamic/pick.ts +++ b/demo-snippets/guides/dynamic/pick.ts @@ -1,4 +1,4 @@ -import { View, createCubeObject, type RenderStateDynamicObject } from "@novorender/api"; +import { RenderStateChanges, View, createCubeObject, type RenderStateDynamicObject } from "@novorender/api"; export function main(view: View) { const { mesh } = createCubeObject(); @@ -14,7 +14,7 @@ export function main(view: View) { view.modifyRenderState({ dynamic: { objects: [scaledCube] }, // tonemapping: { mode: TonemappingMode.normal }, - }); + } as RenderStateChanges); } update(); diff --git a/demo-snippets/guides/dynamic/triangle.ts b/demo-snippets/guides/dynamic/triangle.ts index 1a9c78db..c2db34f3 100644 --- a/demo-snippets/guides/dynamic/triangle.ts +++ b/demo-snippets/guides/dynamic/triangle.ts @@ -1,6 +1,6 @@ import type { RenderStateDynamicGeometry, RenderStateChanges, RenderStateDynamicMesh, RenderStateDynamicMaterialUnlit, RenderStateDynamicObject } from "@novorender/api"; -export function main(): RenderStateChanges { +export function main() { const vertices = new Float32Array([ 0, 2, 0, // xyz #0 -1, 0, 0, // xyz #1 @@ -23,8 +23,9 @@ export function main(): RenderStateChanges { mesh, instances: [{ position: [0, 0, 0] }], }; + return { grid: { enabled: true }, dynamic: { objects: [triangleObject] }, - }; + } as RenderStateChanges; } diff --git a/demo-snippets/guides/measure/drawing_2d.ts b/demo-snippets/guides/measure/drawing_2d.ts index 5f9181e5..c7e388cd 100644 --- a/demo-snippets/guides/measure/drawing_2d.ts +++ b/demo-snippets/guides/measure/drawing_2d.ts @@ -114,7 +114,7 @@ function drawProduct(ctx: CanvasRenderingContext2D, camera: CameraSettings, prod let startCol = "red"; let endCol = "lime"; const cylinderLine = obj.parts[0]; - if (cylinderLine.elevation && cylinderLine.vertices2D) { + if (cylinderLine.elevation && cylinderLine.vertices2D && !Array.isArray(cylinderLine.elevation)) { if (cylinderLine.elevation.from > cylinderLine.elevation.to) { const tmp = startCol; startCol = endCol; diff --git a/demo-snippets/guides/measure/measure_line.ts b/demo-snippets/guides/measure/measure_line.ts index af2bac78..beccccfb 100644 --- a/demo-snippets/guides/measure/measure_line.ts +++ b/demo-snippets/guides/measure/measure_line.ts @@ -88,7 +88,7 @@ function drawProduct(ctx: CanvasRenderingContext2D, camera: CameraSettings, prod let startCol = "red"; let endCol = "lime"; const cylinderLine = obj.parts[0]; - if (cylinderLine.elevation && cylinderLine.vertices2D) { + if (cylinderLine.elevation && cylinderLine.vertices2D && !Array.isArray(cylinderLine.elevation)) { if (cylinderLine.elevation.from > cylinderLine.elevation.to) { const tmp = startCol; startCol = endCol; diff --git a/demo-snippets/guides/object_metadata/fly_to.ts b/demo-snippets/guides/object_metadata/fly_to.ts index 29f37ec2..88d38a7c 100644 --- a/demo-snippets/guides/object_metadata/fly_to.ts +++ b/demo-snippets/guides/object_metadata/fly_to.ts @@ -1,7 +1,6 @@ import { createColorSetHighlight, type BoundingSphere, type View } from "@novorender/api"; -import type { HierarcicalObjectReference } from "@novorender/webgl-api"; -import type { SceneData } from "@novorender/data-js-api"; -import { vec3, type ReadonlyVec3 } from "gl-matrix"; +import type { SceneData, HierarcicalObjectReference } from "@novorender/data-js-api"; +import { vec3 } from "gl-matrix"; export async function main(view: View, sceneData: SceneData) { const { db } = sceneData; @@ -61,7 +60,7 @@ export async function main(view: View, sceneData: SceneData) { const objectData = await db?.getObjectMetdata(result.objectId); // No calculation needed for single object if (objectData.bounds?.sphere) { - const sphere = { ...objectData.bounds.sphere, center: flip(objectData.bounds.sphere.center) }; + const sphere = { ...objectData.bounds.sphere, center: objectData.bounds.sphere.center }; view.activeController.zoomTo(sphere); } }; @@ -84,7 +83,7 @@ function getTotalBoundingSphere(nodes: HierarcicalObjectReference[]): BoundingSp for (const node of nodes) { const sphere = node.bounds?.sphere; if (sphere) { - spheres.push({ ...sphere, center: flip(sphere.center) }); + spheres.push({ ...sphere, center: sphere.center }); } } @@ -107,10 +106,3 @@ function getTotalBoundingSphere(nodes: HierarcicalObjectReference[]): BoundingSp return { center, radius }; } -/** - * Utility function to flip the coordinate system - */ -function flip(v: ReadonlyVec3): ReadonlyVec3 { - const flipped: [number, number, number] = [v[0], -v[2], v[1]]; - return flipped; -} diff --git a/demo-snippets/guides/object_metadata/metadata_from_search.ts b/demo-snippets/guides/object_metadata/metadata_from_search.ts index 2b1c8ec5..d630db58 100644 --- a/demo-snippets/guides/object_metadata/metadata_from_search.ts +++ b/demo-snippets/guides/object_metadata/metadata_from_search.ts @@ -1,6 +1,5 @@ import { createColorSetHighlight, type View } from "@novorender/api"; -import type { SceneData } from "@novorender/data-js-api"; -import type { ObjectData } from "@novorender/webgl-api"; +import type { SceneData, ObjectData } from "@novorender/data-js-api"; export async function main(view: View, sceneData: SceneData) { const { db } = sceneData; diff --git a/docs/guides/camera_controllers.mdx b/docs/guides/camera_controllers.mdx index 13c89d40..1ecd761a 100644 --- a/docs/guides/camera_controllers.mdx +++ b/docs/guides/camera_controllers.mdx @@ -141,7 +141,7 @@ Both of them support an animated motion from the current position to the desired brings a bounding sphere into view in a sort of "zoom to fit" manner. This is useful for displaying an object or area with a known bounding sphere. - moves the camera to the desired position, and optionally rotation. + moves the camera to the desired position, and optionally rotation. ## Other kinds of camera controllers @@ -180,4 +180,4 @@ The first controller in the list is initially active, i.e. the default. Your camera controller must inherit from `BaseController` and at the very least implement the abstract methods. Alternatively you can inherit from one of the existing concrete controller classes. -More details of how this works is covered in a separate guide: [Custom Camera Controller](custom-camera-controller.md). +More details of how this works is covered in a separate guide: [Custom Camera Controller](./custom-camera-controller). diff --git a/docs/guides/clipping_volumes.mdx b/docs/guides/clipping_volumes.mdx index 674f1de3..14097ce9 100644 --- a/docs/guides/clipping_volumes.mdx +++ b/docs/guides/clipping_volumes.mdx @@ -136,7 +136,7 @@ The planes will have one of the object IDs in the , you'll also notice that we're checking for to pick the `surface` only, you can also check for other types which include `edge` and `corner`. +In the demo below we'll show how can we pick any object and make a plane out of it by using , you'll also notice that we're checking for to pick the `surface` only, you can also check for other types which include `edge` and `corner`. :::tip Click anywhere on the model to see planes. diff --git a/docs/guides/custom-camera-controller.mdx b/docs/guides/custom-camera-controller.mdx new file mode 100644 index 00000000..af44e62d --- /dev/null +++ b/docs/guides/custom-camera-controller.mdx @@ -0,0 +1,10 @@ +--- +title: "Custom Camera Controllers" +description: "Custom Camera Controllers" +keywords: ["novorender api docs", "webgl api", "custom camera controllers"] +pagination_next: null +pagination_prev: null +unlisted: true +--- + +## Coming Soon \ No newline at end of file diff --git a/docs/guides/downloading-scenes-for-offline.mdx b/docs/guides/downloading-scenes-for-offline.mdx index 512c280a..22e31438 100644 --- a/docs/guides/downloading-scenes-for-offline.mdx +++ b/docs/guides/downloading-scenes-for-offline.mdx @@ -12,24 +12,24 @@ In this guide, we'll explore how to use the offline module to download a scene f :::caution Before We Begin This guide assumes that you have a basic understanding of the Novorender Web API, including setting it up and loading scenes. If you are unfamiliar with these concepts, please check out the resources below first: -- [Getting Started](/docs/tutorial/getting_started) +- [Getting Started](/docs/web_api/tutorial/getting_started) - [Loading Scenes](/docs/guides/loading_scenes) ::: ### Setting Up and Loading a Scene -We'll start with a basic TypeScript project using Vite. We assume you already have a basic TypeScript project in place with the Novorender Web API installed and ready to go. If you don't have a project yet, please refer to the [following guide](/docs/tutorial/vite_getting_started) to learn how to set up the Novorender Web API in a TypeScript project. +We'll start with a basic TypeScript project using Vite. We assume you already have a basic TypeScript project in place with the Novorender Web API installed and ready to go. If you don't have a project yet, please refer to the [following guide](/docs/web_api/tutorial/vite_getting_started) to learn how to set up the Novorender Web API in a TypeScript project. #### Loading the Scene -First, we need to install the Novorender [Data JS API](https://docs.novorender.com/legacy/docs/data-js-api). This API is required to load the scene's metadata. Run the following command to install the package: +First, we need to install the Novorender [Data JS API](/docs/data_js_api/api_reference/). This API is required to load the scene's metadata. Run the following command to install the package: ```bash npm2yarn npm install --save @novorender/data-js-api ``` :::tip -Since the [Data JS API](https://docs.novorender.com/legacy/docs/data-js-api) package is a wrapper around Novorender's [REST API](https://docs.novorender.com/legacy/docs/category/data-rest-api-v1), you can directly use the REST API to load scene metadata if you prefer. +Since the [Data JS API](/docs/data_js_api/api_reference/) package is a wrapper around Novorender's [REST API](/docs/category/data_rest_api/v2), you can directly use the REST API to load scene metadata if you prefer. ::: To load a scene, use the code below. We'll download this demo scene for offline usage later in this guide. @@ -85,7 +85,7 @@ view.dispose(); Running the above code should result in the scene being loaded in the view, as shown in the image below: -![Default condos scene loaded into the view](../../static/assets/condos-offline-1.png) +![Default condos scene loaded into the view](/assets/condos-offline-1.png) ### Downloading the Scene for Offline Usage @@ -97,7 +97,7 @@ Let's proceed with downloading the loaded scene so it can be used offline. There 2. **Full Download/Sync**: The Web API downloads the entire scene in one go, allowing you to use or view it offline without any delay. -To perform incremental syncing, we only need to add () the scene to the . For a full download, use the method on that scene. To access the view, use . We'll see all these in action in the rest of the guide. +To perform incremental syncing, we only need to add () the scene to the . For a full download, use the method on that scene. To access the view, use . We'll see all these in action in the rest of the guide. :::info Almost all the code you see in this guide is taken from the [Novorender Web App](https://github.com/novorender/novoweb), which is open source and available on GitHub. We encourage you to check out the [offline component code](https://github.com/novorender/novoweb/tree/develop/src/features/offline), which is much more robust and handles many other cases, such as checking for available storage size. diff --git a/docs/guides/extracting_properties_using_python.mdx b/docs/guides/extracting_properties_using_python.mdx index 17092062..76e1603b 100644 --- a/docs/guides/extracting_properties_using_python.mdx +++ b/docs/guides/extracting_properties_using_python.mdx @@ -46,7 +46,7 @@ To create a virtual environment, you can use the built-in `venv` module (availab ### Perform a Search -We'll start by initiating a search request using the [Search API](https://docs.novorender.com/legacy/docs/rest-api/2.0/search). The following Python snippet demonstrates how to perform a search within a scene: +We'll start by initiating a search request using the [Search API](/docs/data_rest_api/v2/search). The following Python snippet demonstrates how to perform a search within a scene: ```python title="index.py" import requests @@ -93,11 +93,11 @@ The example scene we're using is public and doesn't need an API key. However, fo By default we search in all the models but if you want to narrow down search in certain models then add them in `modelsToSearchFor` list. -It is highly recommended to read our guide on [searching](./searching) and [object metadata](./object_metadata) to make yourself familiar with various search techniques, also take a look at the [REST API documentation](https://docs.novorender.com/legacy/docs/rest-api/2.0/search) of search endpoint. +It is highly recommended to read our guide on [searching](./searching) and [object metadata](./object_metadata) to make yourself familiar with various search techniques, also take a look at the [REST API documentation](/docs/data_rest_api/v2/search) of search endpoint. ### Output Data to Excel -Once we have obtained the search results which is based on the [following schema](https://docs.novorender.com/legacy/docs/rest-api/2.0/search#responses), we can output the data to an Excel spreadsheet. Here's a snippet from our Python script to accomplish this: +Once we have obtained the search results which is based on the [following schema](/docs/data_rest_api/v2/search#responses), we can output the data to an Excel spreadsheet. Here's a snippet from our Python script to accomplish this: ```python title="index.py" import os diff --git a/docs/guides/interactive_examples.mdx b/docs/guides/interactive_examples.mdx index c38bd690..e607b031 100644 --- a/docs/guides/interactive_examples.mdx +++ b/docs/guides/interactive_examples.mdx @@ -69,7 +69,7 @@ All we can do is try to nudge you towards the [pit of success](https://blog.codi ## Reference documentation -Guides can only get you started. For more detailed information, please consult the [reference documentation](/docs/web_api/API/). +Guides can only get you started. For more detailed information, please consult the [reference documentation](/docs/web_api/api_reference/). ## Full examples diff --git a/docs/guides/loading_scenes.mdx b/docs/guides/loading_scenes.mdx index d6585b80..143d2df8 100644 --- a/docs/guides/loading_scenes.mdx +++ b/docs/guides/loading_scenes.mdx @@ -12,7 +12,7 @@ pagination_prev: null It is recommended to use the Novorender OAuth instead of using username+password authentication for getting access token, documentation for using OAuth can be found [here](./using_oauth) ::: -To load your own scenes we recommend that you use the [`@novorender/data-js-api`](https://docs.novorender.com/docs/data-js-api) package, but you can also use the [Novorender data REST API](https://docs.novorender.com/docs/category/data-rest-api-v1) directly if you prefer. +To load your own scenes we recommend that you use the [`@novorender/data-js-api`](https://docs.novorender.com/docs/data-js-api) package, but you can also use the [Data REST API](/docs/category/data_rest_api/v2) directly if you prefer. We will be using the npm package in all our examples. ## Public scenes @@ -27,4 +27,4 @@ Only scene related endpoints are covered by the NPM package, so for user / authe -Once you have authenticated and acquired an access token you can follow the [example for username/password flow](#username--password), just use the access token you got from AD instead of POST [/api/user/login](https://docs.novorender.com/docs/rest-api/login). +Once you have authenticated and acquired an access token you can follow the [example for username/password flow](#username--password), just use the access token you got from AD instead of `POST - /api/user/login`. diff --git a/docs/guides/managing_rules.mdx b/docs/guides/managing_rules.mdx index a494527f..c65de712 100644 --- a/docs/guides/managing_rules.mdx +++ b/docs/guides/managing_rules.mdx @@ -8,7 +8,7 @@ pagination_prev: null ## Introduction -In the context of Building Information Modeling (BIM), maintaining data consistency and automating workflows are essential for effective project management. The Novorender platform allows users to upload their models and leverage our [REST API](https://docs.novorender.com/legacy/docs/category/data-rest-api-v2) to manage various aspects of these models, including the powerful rules system. +In the context of Building Information Modeling (BIM), maintaining data consistency and automating workflows are essential for effective project management. The Novorender platform allows users to upload their models and leverage our [REST API](/docs/category/data_rest_api/v2) to manage various aspects of these models, including the powerful rules system. By utilizing rules within Novorender, users can significantly enhance how building information models are processed and refined. The rules system provides a robust framework for automating post-processing tasks, ensuring consistency, and streamlining workflows. Here are some key use cases demonstrating the capabilities of the rules system: @@ -22,16 +22,16 @@ By utilizing rules within Novorender, users can significantly enhance how buildi The rules system serves as a powerful post-processing tool, enabling users to modify properties, adjust the model structure, and refine geometry after the model has been uploaded. Rulesets, consisting of one or more rules, filters, and actions, are executed sequentially, allowing complex data manipulations based on earlier results. -In this guide, we will explore how to create, add, and modify rulesets using the Novorender [REST API](https://docs.novorender.com/legacy/docs/category/data-rest-api-v2), empowering you to leverage these features for effective management of your BIM projects. +In this guide, we will explore how to create, add, and modify rulesets using the Novorender [REST API](/docs/category/data_rest_api/v2), empowering you to leverage these features for effective management of your BIM projects. ## API Operations for Managing Rulesets Novorender provides specific API endpoints for retrieving and modifying rulesets associated with your models. Below are the available operations for working with rulesets: -- [**Get Folder Rules**](https://docs.novorender.com/legacy/docs/rest-api/2.0/get-folders-rules) +- [**Get Folder Rules**](/docs/data_rest_api/v2/get-folders-rules) Use this endpoint to retrieve the rulesets applied to a specific folder or project. -- [**Update Folder Rules**](https://docs.novorender.com/legacy/docs/rest-api/2.0/update-folders-rules) +- [**Update Folder Rules**](/docs/data_rest_api/v2/update-folders-rules) This endpoint allows you to update the rulesets for a folder or project. :::tip diff --git a/docs/guides/object_groups.mdx b/docs/guides/object_groups.mdx index 2c9a0173..5f6337b4 100644 --- a/docs/guides/object_groups.mdx +++ b/docs/guides/object_groups.mdx @@ -9,8 +9,8 @@ pagination_prev: null -Although the [ObjectGroup interface](https://docs.novorender.com/legacy/docs/data-js-api/interfaces/DataJsAPI.ObjectGroup) itself is not particularly noteworthy, -the [SceneData.objectGroups](https://docs.novorender.com/legacy/docs/data-js-api/interfaces/DataJsAPI.SceneData#objectgroups) property can be extremely useful. +Although the [ObjectGroup interface](/docs/data_js_api/api_reference/namespaces/DataJsAPI/interfaces/ObjectGroup) itself is not particularly noteworthy, +the [SceneData.objectGroups](/docs/data_js_api/api_reference/namespaces/DataJsAPI/interfaces/SceneData#objectgroups) property can be extremely useful. Object IDs in Novorender are not fixed and may change whenever the scene's resources are modified. Therefore if you store the IDs from a search (e.g. all objects on the first floor) and then later modify the scene's resources, the scene's objects' IDs may have changed and your stored list of IDs will be stale. @@ -18,7 +18,7 @@ the scene's objects' IDs may have changed and your stored list of IDs will be st The search patterns assigned to each object group is run every time a scene's resources are modified so that the list of IDs always will be correct. That way you can easily create cached searches by using object groups. -When the [objectGroups.ids](https://docs.novorender.com/legacy/docs/data-js-api/interfaces/DataJsAPI.Bookmark.ObjectGroup#ids) list becomes extensive, the `.ids` property will be `undefined` and must be explicitly loaded, as demonstrated in the [Floors demo](#floors-example). +When the [objectGroups.ids](/docs/data_js_api/api_reference/namespaces/DataJsAPI/interfaces/ObjectGroup#ids) list becomes extensive, the `.ids` property will be `undefined` and must be explicitly loaded, as demonstrated in the [Floors demo](#floors-example). ## Creating a group @@ -118,6 +118,6 @@ dataApi.putScene({ ## Floors example -In this example, we've established predefined groups for each floor and implemented buttons to isolate [objectGroups](https://docs.novorender.com/legacy/docs/data-js-api/interfaces/DataJsAPI.Bookmark-1#objectgroups) within the group corresponding to the selected floor. +In this example, we've established predefined groups for each floor and implemented buttons to isolate [objectGroups](/docs/data_js_api/api_reference/namespaces/DataJsAPI/interfaces/Bookmark#objectgroups) within the group corresponding to the selected floor. diff --git a/docs/guides/object_metadata.mdx b/docs/guides/object_metadata.mdx index af40f677..e0c24419 100644 --- a/docs/guides/object_metadata.mdx +++ b/docs/guides/object_metadata.mdx @@ -15,7 +15,7 @@ pagination_prev: null Object metadata is not loaded automatically with the scene and may require additional server requests depending on what data you need. -Generally you will work with either [HierarchicalObjectReference](https://docs.novorender.com/legacy/docs/webgl-api/interfaces/NovoRender.HierarcicalObjectReference) or the full [ObjectData](https://docs.novorender.com/legacy/docs/webgl-api/interfaces/NovoRender.ObjectData) metadata set. +Generally you will work with either [HierarchicalObjectReference](/docs/data_js_api/api_reference/namespaces/DataJsAPI/interfaces/HierarcicalObjectReference) or the full [ObjectData](/docs/data_js_api/api_reference/namespaces/DataJsAPI/interfaces/ObjectData) metadata set. ## From pick diff --git a/docs/guides/searching.mdx b/docs/guides/searching.mdx index 3a834ffe..1d610622 100644 --- a/docs/guides/searching.mdx +++ b/docs/guides/searching.mdx @@ -11,7 +11,7 @@ pagination_prev: null Searching will be integral part of most applications using Novorender. In the example below we demonstrate a few different search patterns where the resulting objects are isolated in the view. -Make sure to also check out the [db.search()](https://docs.novorender.com/legacy/docs/data-js-api/interfaces/DataJsAPI.ObjectDB#search) documentation. +Make sure to also check out the [db.search()](/docs/data_js_api/api_reference/namespaces/DataJsAPI/interfaces/ObjectDB#search) documentation. ### Search By Path diff --git a/docs/guides/views.mdx b/docs/guides/views.mdx index 390457c7..713e5086 100644 --- a/docs/guides/views.mdx +++ b/docs/guides/views.mdx @@ -80,7 +80,7 @@ To help construct this object, we've added a helper function object to let you tell it exactly where to find any unloaded resources, or the loaded resources themselves, in case you inlined them somehow. Most of the guides on bundling will simply copy or map `node_modules/@novorender/api/public/` into a browser accessible path: `/public/novorender/api/`. -If you followed this recipe, you can simply set the property of the import map as below. +If you followed this recipe, you can simply set the property of the import map as below. ```typescript const baseUrl = new URL("/public/novorender/api/", window.location.origin); diff --git a/docs/index.mdx b/docs/web_api/index.mdx similarity index 69% rename from docs/index.mdx rename to docs/web_api/index.mdx index d3bf6453..7c20078b 100644 --- a/docs/index.mdx +++ b/docs/web_api/index.mdx @@ -1,3 +1,13 @@ +--- +title: "Introduction to Web API" +description: "Learn more about Novorender Web API - A scalable solution for rendering 3D in the cloud." +keywords: ["novorender web api", "novorender web api documentation"] +pagination_next: null +pagination_prev: null +hide_table_of_contents: true +hide_title: true +--- + The novorender Web API consist of several modules. @@ -38,19 +48,19 @@ Provides a thin, yet powerful typescript wrapper on top of the WebGL2 API. ## Getting started -export const PackageHeader = () => ( -
-

Novorender Web API

- -
+export const PackageVersion = () => ( +

Build version: {WEB_API_VERSION}

); -export const PackageVersion = () => ( -

Build version: {WEB_API_VERSION}

+export const PackageHeader = () => ( +
+

Novorender Web API

+ +
); diff --git a/docs/tutorial/getting_started.mdx b/docs/web_api/tutorial/getting_started.mdx similarity index 75% rename from docs/tutorial/getting_started.mdx rename to docs/web_api/tutorial/getting_started.mdx index 35a43890..ac1f1bae 100644 --- a/docs/tutorial/getting_started.mdx +++ b/docs/web_api/tutorial/getting_started.mdx @@ -33,18 +33,18 @@ You can also explore the [examples repository](https://github.com/novorender/nov If you're still encountering any issues while trying to integrate the Novorender Web API into your development environment, don't hesitate to reach out by opening an issue [here](https://github.com/novorender/novorender-examples/issues). We're here to help and will do our utmost to assist you! export const BundlerCard = () => ( -
- {['Vite', 'Webpack'].map((v) =>
-
- {v+ -
-
- {v} -
-
)} +
+ {['Vite', 'Webpack'].map((v) =>
+
+ {v +
+
+ {v} +
+
)}
); diff --git a/docs/tutorial/vite_getting_started.mdx b/docs/web_api/tutorial/vite_getting_started.mdx similarity index 95% rename from docs/tutorial/vite_getting_started.mdx rename to docs/web_api/tutorial/vite_getting_started.mdx index 1eb0e84b..b60c32ea 100644 --- a/docs/tutorial/vite_getting_started.mdx +++ b/docs/web_api/tutorial/vite_getting_started.mdx @@ -244,7 +244,7 @@ const view = new View(canvas, deviceProfile, imports); await view.run(); ``` -Finally, call the method to clean up the view's GPU resources. +Finally, call the method to clean up the view's GPU resources. ```typescript title="main.ts" view.dispose(); ``` @@ -296,7 +296,7 @@ await view.run(); ``` ![application screenshot grid view](/img/guides/tutorial-002.png) :::info -You can learn more about the `RenderState` [here](/docs/web_api/Interfaces/interface.RenderState) and experiment with it by adding or modifying some of its properties. This will help you better understand how to customize rendering behaviors. +You can learn more about the `RenderState` [here](/docs/web_api/api_reference/interfaces/RenderState) and experiment with it by adding or modifying some of its properties. This will help you better understand how to customize rendering behaviors. ::: :::tip The view already has camera controller built in so you can interact with the view by holding down the left-click on your mouse or trackpad. Alternatively, you can use the movement keys and WASD to navigate and move the camera around in the view. @@ -310,14 +310,14 @@ The view will automatically resize your canvas' pixel size when the css layout a
These resources will help you harness the full potential of Novorender. export const WebApiTypescriptVersion = () => ( - {WEB_API_TYPESCRIPT_VERSION} + {WEB_API_TYPESCRIPT_VERSION} ); ## Next steps diff --git a/docs/tutorial/vite_react_getting_started.mdx b/docs/web_api/tutorial/vite_react_getting_started.mdx similarity index 95% rename from docs/tutorial/vite_react_getting_started.mdx rename to docs/web_api/tutorial/vite_react_getting_started.mdx index eb79af06..c9216f1d 100644 --- a/docs/tutorial/vite_react_getting_started.mdx +++ b/docs/web_api/tutorial/vite_react_getting_started.mdx @@ -279,7 +279,7 @@ await view.run(); ... ``` -Finally, call the method to clean up the view's GPU resources. +Finally, call the method to clean up the view's GPU resources. ```typescript title="App.tsx" ... view.dispose(); @@ -349,7 +349,7 @@ await view.run(); ``` ![application screenshot grid view](/img/guides/tutorial-002.png) :::info -You can learn more about the `RenderState` [here](/docs/web_api/Interfaces/interface.RenderState) and experiment with it by adding or modifying some of its properties. This will help you better understand how to customize rendering behaviors. +You can learn more about the `RenderState` [here](/docs/web_api/api_reference/interfaces/RenderState) and experiment with it by adding or modifying some of its properties. This will help you better understand how to customize rendering behaviors. ::: :::tip The view already has camera controller built in so you can interact with the view by holding down the left-click on your mouse or trackpad. Alternatively, you can use the movement keys and WASD to navigate and move the camera around in the view. @@ -363,7 +363,7 @@ The view will automatically resize your canvas' pixel size when the css layout a
diff --git a/docs/tutorial/webpack_getting_started.mdx b/docs/web_api/tutorial/webpack_getting_started.mdx similarity index 95% rename from docs/tutorial/webpack_getting_started.mdx rename to docs/web_api/tutorial/webpack_getting_started.mdx index 7ea39224..6f6b7167 100644 --- a/docs/tutorial/webpack_getting_started.mdx +++ b/docs/web_api/tutorial/webpack_getting_started.mdx @@ -290,7 +290,7 @@ const view = new View(canvas, deviceProfile, imports); await view.run(); ``` -Finally, call the method to clean up the view's GPU resources. +Finally, call the method to clean up the view's GPU resources. ```typescript title="main.ts" view.dispose(); ``` @@ -342,7 +342,7 @@ await view.run(); ``` ![application screenshot grid view](/img/guides/tutorial-002.png) :::info -You can learn more about the `RenderState` [here](/docs/web_api/Interfaces/interface.RenderState) and experiment with it by adding or modifying some of its properties. This will help you better understand how to customize rendering behaviors. +You can learn more about the `RenderState` [here](/docs/web_api/api_reference/interfaces/RenderState) and experiment with it by adding or modifying some of its properties. This will help you better understand how to customize rendering behaviors. ::: :::tip The view already has camera controller built in so you can interact with the view by holding down the left-click on your mouse or trackpad. Alternatively, you can use the movement keys and WASD to navigate and move the camera around in the view. @@ -356,7 +356,7 @@ The view will automatically resize your canvas' pixel size when the css layout a
diff --git a/docusaurus.config.js b/docusaurus.config.js deleted file mode 100644 index 817f6b5e..00000000 --- a/docusaurus.config.js +++ /dev/null @@ -1,257 +0,0 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ -// @ts-check -// Note: type annotations allow type checking and IDEs autocompletion - -// eslint-disable-next-line no-undef -const { execSync } = require("child_process"); -// eslint-disable-next-line no-undef -const { webpackPlugin } = require("./webpack.plugin"); -// eslint-disable-next-line no-undef -const math = require('remark-math'); -// eslint-disable-next-line no-undef -const katex = require('rehype-katex'); - -// eslint-disable-next-line no-undef -const lightCodeTheme = require("prism-react-renderer/themes/github"); -// eslint-disable-next-line no-undef -const darkCodeTheme = require("prism-react-renderer/themes/dracula"); - -const baseGithub = "https://github.com/novorender"; -// const baseAPI = "https://data.novorender.com"; - -/** @type {import('@docusaurus/types').Config} */ -const config = { - title: "Novorender", - tagline: "Novorender API Docs", - url: "https://docs.novorender.com/", - baseUrl: "/", - onBrokenLinks: "warn", - onBrokenMarkdownLinks: "warn", - favicon: "img/favicon.ico", - organizationName: "novorender", - projectName: "novorender-api-docs", - markdown: { mermaid: true }, - themes: ["@docusaurus/theme-live-codeblock", "@docusaurus/theme-mermaid"], - presets: [ - [ - "classic", - /** @type {import('@docusaurus/preset-classic').Options} */ - ({ - docs: { - // eslint-disable-next-line no-undef - sidebarPath: require.resolve("./sidebars.js"), - editUrl: `${baseGithub}/docs/edit/main`, - showLastUpdateTime: true, - remarkPlugins: [ - // eslint-disable-next-line no-undef - [require("@docusaurus/remark-plugin-npm2yarn"), { sync: true, converters: ["yarn", "pnpm"] }], - math - ], - rehypePlugins: [katex], - }, - blog: { - showReadingTime: true, - editUrl: `${baseGithub}/docs`, - }, - theme: { - // eslint-disable-next-line no-undef - customCss: require.resolve("./src/css/custom.css"), - } - }), - ], - ], - stylesheets: [ - { - href: 'https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css', - type: 'text/css', - integrity: - 'sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM', - crossorigin: 'anonymous', - }, - ], - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - metadata: [{ name: "keywords", content: "novorender, novorender docs, novorender documentation, novorender/api, novorender web api, webgl, webgl 2, novorender rest api docs, api docs" }], - docs: { - sidebar: { - hideable: true, - }, - }, - navbar: { - title: "", - logo: { - alt: "novorender logo", - src: "img/novorender_logo_RGB_2021.png", - srcDark: "img/novorender_logo_RGB_2021_white.png", - }, - hideOnScroll: true, - items: [ - { - to: "docs/web_api/", - position: "left", - label: "Docs", - activeBasePath: "/docs" - }, - // { - // to: "/data-rest-api/", - // position: "left", - // label: "Data Rest API", - // }, - { - to: "/playground/", - position: "left", - label: "Playground", - }, - { to: '/blog', label: 'Blog', position: 'left' }, - { - type: "dropdown", - position: "right", - label: "Stable", - items: [ - { to: "/", label: "Stable (current)" }, - { type: "html", value: `Legacy` }, - ], - }, - { - href: `${baseGithub}/ts`, - className: "header-github-link", - position: "right", - "aria-label": "GitHub repository", - }, - ], - }, - footer: { - style: "dark", - links: [ - // { - // title: "Docs", - // items: [ - // { - // label: "Data Rest API", - // to: "/data-rest-api/", - // }, - // ], - // }, - { - title: "Community", - items: [ - { - label: "Stack Overflow", - href: "https://stackoverflow.com/questions/tagged/novorender", - }, - // { - // label: 'Discord', - // href: 'https://discordapp.com/invite/docusaurus', - // }, - { - label: "Twitter", - href: "https://twitter.com/novorender", - }, - ], - }, - { - title: "More", - items: [ - { - label: 'Blog', - to: '/blog', - }, - { - label: "GitHub", - href: baseGithub, - }, - { - label: "Resources", - href: "https://novorender.com/resources/", - }, - ], - }, - { - title: "Legal", - items: [ - { - label: "Privacy Policy", - href: "https://novorender.com/privacy-policy/", - }, - { - label: "Cookie Policy", - href: "https://novorender.com/cookie-policy/", - }, - ], - }, - { - title: "Get in touch", - items: [ - { - label: "LinkedIn", - href: "https://www.linkedin.com/company/novorender/", - }, - { - label: "info@novorender.com", - href: "mailto:info@novorender.com", - }, - ], - }, - ], - copyright: `Copyright © ${new Date().getFullYear()} Novorender.`, - }, - prism: { - theme: lightCodeTheme, - darkTheme: darkCodeTheme, - }, - colorMode: { - disableSwitch: false, - defaultMode: "dark", - }, - }), - plugins: [ - webpackPlugin, - [ - "docusaurus-plugin-typedoc", - /** @type {import('docusaurus-plugin-typedoc').PluginOptions} */ - { - id: "web_api", - sidebar: { - readmeLabel: "Introduction", - readmeTitle: "", - indexLabel: "Index", - autoConfiguration: true, - }, - frontmatterGlobals: { - description: "A Web API for scalable 3D rendering in the cloud.", - custom_edit_url: "", - }, - /** TypeDoc Options */ - entryPoints: ["@novorender/web_app/index.ts"], - out: "web_api", - logLevel: "Error", - tsconfig: "@novorender/tsconfig.json", - readme: "./docs/index.mdx", - disableSources: false, - excludeInternal: true, - excludePrivate: true, - hideBreadcrumbs: false, - hideGenerator: true, - navigation: { - includeCategories: true, - includeGroups: true, - }, - gitRevision: (() => { - return execSync("cd @novorender && git rev-parse HEAD").toString().trim(); - })(), - }, - ], - // eslint-disable-next-line no-undef - require.resolve("@cmfcmf/docusaurus-search-local"), - ["drawio", {}] - ], - // customFields: { - // swaggerUI: `https://data-v2.novorender.com/swagger`, - // swaggerJSON_V1: `https://data-v2.novorender.com/swagger/v1/swagger.json`, - // swaggerJSON_V2: `https://data-v2.novorender.com/swagger/v2/swagger.json`, - // }, -}; - -// eslint-disable-next-line no-undef -module.exports = config; diff --git a/docusaurus.config.ts b/docusaurus.config.ts new file mode 100644 index 00000000..612ab08a --- /dev/null +++ b/docusaurus.config.ts @@ -0,0 +1,297 @@ +import { themes as prismThemes } from 'prism-react-renderer'; +import { webpackPlugin } from "./webpack.plugin"; +import { execSync } from "child_process"; +import npm2yarn from '@docusaurus/remark-plugin-npm2yarn'; +import type { Config } from '@docusaurus/types'; +import type * as Preset from '@docusaurus/preset-classic'; +import type * as OpenApiPlugin from "docusaurus-plugin-openapi-docs"; + +import remarkMath from 'remark-math'; +import rehypeKatex from 'rehype-katex'; + +const baseGithub = "https://github.com/novorender"; + +const config: Config = { + title: 'Novorender', + tagline: 'Novorender API Docs', + favicon: 'img/favicon.ico', + url: 'https://docs.novorender.com', + baseUrl: '/', + + // GitHub pages deployment config. + // If you aren't using GitHub pages, you don't need these. + organizationName: 'novorender', + projectName: 'docs', + + onBrokenLinks: 'throw', + onBrokenMarkdownLinks: 'warn', + + // Even if you don't use internationalization, you can use this field to set + // useful metadata like html lang. For example, if your site is Chinese, you + // may want to replace "en" with "zh-Hans". + i18n: { + defaultLocale: 'en', + locales: ['en'], + }, + markdown: { + mermaid: true + }, + themes: ["@docusaurus/theme-live-codeblock", "@docusaurus/theme-mermaid", "docusaurus-theme-openapi-docs"], + presets: [ + [ + 'classic', + { + debug: true, + docs: { + sidebarPath: './sidebars.ts', + docItemComponent: "@theme/ApiItem", // Derived from docusaurus-theme-openapi + editUrl: `${baseGithub}/docs/edit/main`, + showLastUpdateTime: true, + remarkPlugins: [ + [npm2yarn, { sync: true, converters: ["yarn", "pnpm"] }], + remarkMath + ], + rehypePlugins: [rehypeKatex], + }, + blog: { + showReadingTime: true, + feedOptions: { + type: ['rss', 'atom'], + xslt: true, + }, + editUrl: `${baseGithub}/docs/`, + // Useful options to enforce blogging best practices + onInlineTags: 'warn', + onInlineAuthors: 'warn', + onUntruncatedBlogPosts: 'warn', + }, + theme: { + customCss: './src/css/custom.css', + }, + } satisfies Preset.Options, + ] + ], + stylesheets: [ + { + href: 'https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css', + type: 'text/css', + integrity: + 'sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM', + crossorigin: 'anonymous', + }, + ], + themeConfig: { + metadata: [{ name: "keywords", content: "novorender, novorender docs, novorender documentation, novorender/api, novorender web api, webgl, webgl 2, novorender rest api docs, api docs" }], + image: 'img/social_card.jpg', + navbar: { + title: '', + logo: { + alt: "novorender logo", + src: "img/novorender_logo_RGB_2021.png", + srcDark: "img/novorender_logo_RGB_2021_white.png", + }, + hideOnScroll: true, + items: [ + { + to: "docs/web_api/", + position: "left", + label: "Docs", + activeBasePath: "/docs" + }, + // { + // to: "/data-rest-api/", + // position: "left", + // label: "Data Rest API", + // }, + { + to: "/playground/", + position: "left", + label: "Playground", + }, + { to: '/blog', label: 'Blog', position: 'left' }, + { + href: `${baseGithub}/ts`, + className: "header-github-link", + position: "right", + "aria-label": "GitHub repository", + }, + ], + }, + footer: { + style: "dark", + links: [ + // { + // title: "Docs", + // items: [ + // { + // label: "Data Rest API", + // to: "/data-rest-api/", + // }, + // ], + // }, + { + title: "Community", + items: [ + { + label: "Stack Overflow", + href: "https://stackoverflow.com/questions/tagged/novorender", + }, + // { + // label: 'Discord', + // href: 'https://discordapp.com/invite/docusaurus', + // }, + { + label: "Twitter", + href: "https://twitter.com/novorender", + }, + ], + }, + { + title: "More", + items: [ + { + label: 'Blog', + to: '/blog', + }, + { + label: "GitHub", + href: baseGithub, + }, + { + label: "Resources", + href: "https://novorender.com/resources/", + }, + ], + }, + { + title: "Legal", + items: [ + { + label: "Privacy Policy", + href: "https://novorender.com/privacy-policy/", + }, + { + label: "Cookie Policy", + href: "https://novorender.com/cookie-policy/", + }, + ], + }, + { + title: "Get in touch", + items: [ + { + label: "LinkedIn", + href: "https://www.linkedin.com/company/novorender/", + }, + { + label: "info@novorender.com", + href: "mailto:info@novorender.com", + }, + ], + }, + ], + copyright: `Copyright © ${new Date().getFullYear()} Novorender.`, + }, + prism: { + theme: prismThemes.github, + darkTheme: prismThemes.dracula, + }, + colorMode: { + disableSwitch: false, + defaultMode: "dark", + } + } satisfies Preset.ThemeConfig, + plugins: [ + webpackPlugin, + [ + "docusaurus-plugin-typedoc", + /** @type {import('docusaurus-plugin-typedoc').PluginOptions} */ + { + id: "web_api", + frontmatterGlobals: { + description: "A Web API for scalable 3D rendering in the cloud.", + custom_edit_url: "", + }, + /** TypeDoc Options */ + entryPoints: ["@novorender/web_app/index.ts"], + out: "docs/web_api/api_reference", + logLevel: "Error", + tsconfig: "@novorender/tsconfig.json", + readme: "none", + disableSources: false, + excludeInternal: true, + excludePrivate: true, + hideBreadcrumbs: false, + groupOrder: ["Classes", "Interfaces", "Enums"], + hideGenerator: true, + indexFormat: "table", + sidebar: { pretty: true }, + parametersFormat: "table", + enumMembersFormat: "table", + useCodeBlocks: true, + navigation: { + includeCategories: true, + includeGroups: true, + }, + gitRevision: (() => { + return execSync("cd @novorender && git rev-parse HEAD").toString().trim(); + })(), + plugin: ["typedoc-plugin-frontmatter"] + } + ], + [ + "docusaurus-plugin-typedoc", + /** @type {import('docusaurus-plugin-typedoc').PluginOptions} */ + { + id: "data_js_api", + frontmatterGlobals: { + description: "A Data JS API for managing scalable Novorender 3D rendering in the cloud.", + custom_edit_url: "", + }, + /** TypeDoc Options */ + entryPoints: ["type-definitions/data-js-api.ts"], + out: "docs/data_js_api/api_reference", + logLevel: "Error", + tsconfig: "type-definitions/tsconfig.json", + readme: require.resolve("@novorender/data-js-api/README.md"), + disableSources: true, + excludeInternal: true, + excludePrivate: true, + hideBreadcrumbs: false, + groupOrder: ["Classes", "Interfaces", "Enums"], + hideGenerator: true, + indexFormat: "table", + sidebar: { pretty: true }, + parametersFormat: "table", + enumMembersFormat: "table", + useCodeBlocks: true, + navigation: { + includeCategories: true, + includeGroups: true, + }, + plugin: ["typedoc-plugin-frontmatter"] + } + ], + [ + 'docusaurus-plugin-openapi-docs', + { + id: "data-rest-api", + docsPluginId: "classic", // configured for preset-classic + config: { + dataRestApiV2: { + specPath: "https://data-v2.novorender.com/swagger/v2/swagger.json", + outputDir: "docs/data_rest_api/v2", + sidebarOptions: { + groupPathsBy: "tag", + categoryLinkSource: "tag" + }, + } satisfies OpenApiPlugin.Options, + } + }, + ], + [require.resolve("@cmfcmf/docusaurus-search-local"), {}], + ["drawio", {}] + ] +}; + +export default config; diff --git a/legacy-docs/.eslintrc.js b/legacy-docs/.eslintrc.js deleted file mode 100644 index d05db3b8..00000000 --- a/legacy-docs/.eslintrc.js +++ /dev/null @@ -1,22 +0,0 @@ -module.exports = { - env: { - browser: true, - es2021: true, - }, - extends: ["eslint:recommended", "plugin:react/recommended", "plugin:@typescript-eslint/recommended", "plugin:@docusaurus/recommended"], - overrides: [], - parser: "@typescript-eslint/parser", - parserOptions: { - ecmaVersion: "latest", - sourceType: "module", - }, - plugins: ["react", "@typescript-eslint"], - rules: {}, - settings: { - react: { - version: "detect", // React version. "detect" automatically picks the version you have installed. - // You can also use `16.0`, `16.3`, etc, if you want to override the detected value. - // It will default to "latest" and warn if missing, and to "detect" in the future - }, - }, -}; diff --git a/legacy-docs/.gitignore b/legacy-docs/.gitignore deleted file mode 100644 index 2620ca16..00000000 --- a/legacy-docs/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -# Dependencies -/node_modules - -# Production -/build -/docs/api -/docs/webgl-api -/docs/data-js-api -/docs/measure-api -docs/rest-api - -# Generated files -.docusaurus -.cache-loader - -# Misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -docusaurus-theme-github-codeblock-main - -scene-screenshot-gen/index.js -demo-snippets/**/*.js -src/shared/*.js \ No newline at end of file diff --git a/legacy-docs/.markdownlint.json b/legacy-docs/.markdownlint.json deleted file mode 100644 index 47bf4cad..00000000 --- a/legacy-docs/.markdownlint.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "MD013": { - "line_length": 100000 - }, - "MD033": { - "allowed_elements": [ - "img", - "br" - ] - } -} \ No newline at end of file diff --git a/legacy-docs/README.md b/legacy-docs/README.md deleted file mode 100644 index 6f572405..00000000 --- a/legacy-docs/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Documentation for legacy Novorender APIs - - diff --git a/legacy-docs/babel.config.js b/legacy-docs/babel.config.js deleted file mode 100644 index dd249ac1..00000000 --- a/legacy-docs/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: [require.resolve("@docusaurus/core/lib/babel/preset")], -}; diff --git a/legacy-docs/demo-snippets/index.ts b/legacy-docs/demo-snippets/index.ts deleted file mode 100644 index 509b9d37..00000000 --- a/legacy-docs/demo-snippets/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as tutorials from "./tutorials"; - -export { tutorials }; diff --git a/legacy-docs/demo-snippets/misc.ts b/legacy-docs/demo-snippets/misc.ts deleted file mode 100644 index 466aa1b1..00000000 --- a/legacy-docs/demo-snippets/misc.ts +++ /dev/null @@ -1,64 +0,0 @@ -import type { IPosition } from "monaco-editor"; - -export type IDemo = Record; - -export interface IEditorConfig { - /** should playground start automatically? defaults to `true` */ - clickToRun?: boolean; - /** whether to enable a secondary canvas for 2D or not, defaults to `true` */ - canvas2D?: boolean; - /** whether to enable a third canvas for 2D image preview or not, defaults to `false` */ - enablePreviewCanvas?: boolean; - /** using `fill` will make the playground to take entire viewport's width and height, `inline` is default */ - mode?: "inline" | "fill"; - /** Set the primary position of the cursor (https://microsoft.github.io/monaco-editor/api/interfaces/monaco.editor.IEditor.html#setPosition)*/ - cursorPosition?: IPosition; - /** Scroll vertically as necessary and reveal a line close to the top of the viewport (https://microsoft.github.io/monaco-editor/api/interfaces/monaco.editor.IEditor.html#revealLineNearTop) */ - revealLine?: number; - /** Lines to hide in the editor - * @deprecated use `// HiddenRangeStarted` and `// HiddenRangeEnded` within snippets. - * see usage example below: - * ``` - * // HiddenRangeStarted - * some code that needs to be hidden - * another line of code that will also be hidden.... - * // HiddenRangeEnded - * ``` - */ - hiddenAreas?: Array<{ startLineNumber: number; endLineNumber: number }>; -} -export interface IDempProps { - /** Directory that contains this demo, e.g. `getting_started/condos.ts`, `getting_started` is the dirName here */ - dirName: string; - /** A friendly name for the demo (must be unique) */ - demoName: string; - /** editor config */ - editorConfig: IEditorConfig; - /** Github edit URL, should be relative path e.g. `demo-snippets/tutorials/clipping_volumes/box.ts` */ - editUrl: string; - code: string; - /** preview image URL for the playground, sample: `assets/demo-screenshots/imageName.png` */ - previewImageUrl?: string; - /** short description for this demo */ - description: string; -} - -export function demo(dirName: string, demoName: T, code: string, config: IEditorConfig = {}, desc?: string): IDemo { - return { - [demoName]: { - dirName, - demoName, - editorConfig: { - clickToRun: true, - mode: "inline", - canvas2D: true, - enablePreviewCanvas: false, - ...config, - }, - code, - editUrl: `demo-snippets/tutorials/${dirName}/${demoName}.ts`, - previewImageUrl: `/assets/demo-screenshots/${demoName}.png`, - description: desc || "No Description Available", - } as const, - } as const; -} diff --git a/legacy-docs/demo-snippets/tsconfig.json b/legacy-docs/demo-snippets/tsconfig.json deleted file mode 100644 index 8dcac21d..00000000 --- a/legacy-docs/demo-snippets/tsconfig.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - // "include": ["./**/*"], - "compilerOptions": { - /* Basic Options */ - // "incremental": true, /* Enable incremental compilation */ - "target": "ESNext", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ - "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ - // "lib": [], /* Specify library files to be included in the compilation. */ - // "allowJs": true, /* Allow javascript files to be compiled. */ - // "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - // "declaration": true, /* Generates corresponding '.d.ts' file. */ - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - // "sourceMap": true, /* Generates corresponding '.map' file. */ - // "outFile": "./", /* Concatenate and emit output to single file. */ - // "outDir": "./", /* Redirect output structure to the directory. */ - // "rootDir": "../", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - // "composite": true, /* Enable project compilation */ - // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ - // "removeComments": true, /* Do not emit comments to output. */ - "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - /* Strict Type-Checking Options */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - /* Module Resolution Options */ - // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "baseUrl": "../", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": ["../"], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - // "types": [], /* Type declaration files to be included in compilation. */ - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - /* Advanced Options */ - "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */ - "skipLibCheck": true, - // "noResolve": true - }, -} \ No newline at end of file diff --git a/legacy-docs/demo-snippets/tutorials/clipping_volumes/box.ts b/legacy-docs/demo-snippets/tutorials/clipping_volumes/box.ts deleted file mode 100644 index 05ba7dbe..00000000 --- a/legacy-docs/demo-snippets/tutorials/clipping_volumes/box.ts +++ /dev/null @@ -1,80 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, canvas }: IParams) { - // initialize the webgl api - const api = webglApi.createAPI(); - - // create a view - const view = await api.createView({ background: { color: [0, 0, 0.1, 1] } }, canvas); - - // load a predefined scene into the view, available scenes are cube, oilrig, condos - const scene = (view.scene = await api.loadScene(webglApi.WellKnownSceneUrls.condos)); - - // provide a camera controller, available controller types are static, orbit, flight and turntable - view.camera.controller = api.createCameraController({ kind: "orbit" }, canvas); - - // get center of scene - const [cx, cy, cz] = scene.boundingSphere.center; - - // apply clipping volume - view.applySettings({ - clippingVolume: { - enabled: true, - mode: "union", - planes: [ - [-1, 0, 0, cx - 5], // left plane - [1, 0, 0, -(cx + 5)], // right plane - [0, -1, 0, cy + 4], // bottom plane - [0, 1, 0, -(cy + 8)], // top plane - [0, 0, -1, cz - 5], // front plane - [0, 0, 1, -(cz + 5)], // back plane - ], - }, - }); - - // create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} diff --git a/legacy-docs/demo-snippets/tutorials/clipping_volumes/dual.ts b/legacy-docs/demo-snippets/tutorials/clipping_volumes/dual.ts deleted file mode 100644 index 4af19fdb..00000000 --- a/legacy-docs/demo-snippets/tutorials/clipping_volumes/dual.ts +++ /dev/null @@ -1,76 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, canvas }: IParams) { - // initialize the webgl api - const api = webglApi.createAPI(); - - // create a view - const view = await api.createView({ background: { color: [0, 0, 0.1, 1] } }, canvas); - - // load a predefined scene into the view, available scenes are cube, oilrig, condos - const scene = (view.scene = await api.loadScene(webglApi.WellKnownSceneUrls.condos)); - - // provide a camera controller, available controller types are static, orbit, flight and turntable - view.camera.controller = api.createCameraController({ kind: "orbit" }, canvas); - - // get center of scene - const [cx, cy, cz] = scene.boundingSphere.center; - - // apply clipping volume - view.applySettings({ - clippingVolume: { - enabled: true, - mode: "union", - planes: [ - [1, 0, 0, -cx], - [0, 1, 0, -cy], - ], - }, - }); - - // create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} diff --git a/legacy-docs/demo-snippets/tutorials/clipping_volumes/flipped.ts b/legacy-docs/demo-snippets/tutorials/clipping_volumes/flipped.ts deleted file mode 100644 index 00a11b86..00000000 --- a/legacy-docs/demo-snippets/tutorials/clipping_volumes/flipped.ts +++ /dev/null @@ -1,75 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, canvas }: IParams) { - // initialize the webgl api - const api = webglApi.createAPI(); - - // create a view - const view = await api.createView({ background: { color: [0, 0, 0.1, 1] } }, canvas); - - // load a predefined scene into the view, available scenes are cube, oilrig, condos - const scene = (view.scene = await api.loadScene(webglApi.WellKnownSceneUrls.condos)); - - // provide a camera controller, available controller types are static, orbit, flight and turntable - view.camera.controller = api.createCameraController({ kind: "orbit" }, canvas); - - // get center of scene - const [cx, cy, cz] = scene.boundingSphere.center; - - // apply clipping volume - view.applySettings({ - clippingVolume: { - enabled: true, - mode: "union", - planes: [ - [-1, -0, -0, +cx], // flip plane - ], - }, - }); - - // create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} diff --git a/legacy-docs/demo-snippets/tutorials/clipping_volumes/index.ts b/legacy-docs/demo-snippets/tutorials/clipping_volumes/index.ts deleted file mode 100644 index 88494fc2..00000000 --- a/legacy-docs/demo-snippets/tutorials/clipping_volumes/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -import single from "./single.ts?raw"; -import offset from "./offset.ts?raw"; -import flipped from "./flipped.ts?raw"; -import rotated from "./rotated.ts?raw"; -import dual from "./dual.ts?raw"; -import slab from "./slab.ts?raw"; -import slab_inv from "./slab_inv.ts?raw"; -import box from "./box.ts?raw"; -import { demo } from "../../misc"; - -export const clippingVolumes = { - ...demo("clipping_volumes", "single", single, {}, "Simple clipping volume with a single plane along the yz axes, effectively clipping everything to the right of center."), - ...demo("clipping_volumes", "offset", offset, {}, "We used the center of the scene (which is far from origo) to position the plane."), - ...demo("clipping_volumes", "flipped", flipped, {}, "Flipping the plane by flipping the direction of the normal."), - ...demo("clipping_volumes", "rotated", rotated, {}, "Single plane, rotated."), - ...demo("clipping_volumes", "dual", dual, {}, "More complex clipping volume with an additional plane along the xz axes, effectively clipping everything to the right and above center."), - ...demo("clipping_volumes", "slab", slab, {}, "A perhaps more useful volume is a slab, consisting of a top and bottom plane, but otherwise extending into infinity."), - ...demo("clipping_volumes", "slab_inv", slab_inv, {}, "Clip everything inside of the volume, rather than outside, simply flip the planes (negate all elements) and change the combination mode."), - ...demo("clipping_volumes", "box", box, {}, "Axis aligned clipping box."), -}; diff --git a/legacy-docs/demo-snippets/tutorials/clipping_volumes/offset.ts b/legacy-docs/demo-snippets/tutorials/clipping_volumes/offset.ts deleted file mode 100644 index d4f5c0f1..00000000 --- a/legacy-docs/demo-snippets/tutorials/clipping_volumes/offset.ts +++ /dev/null @@ -1,75 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, canvas }: IParams) { - // initialize the webgl api - const api = webglApi.createAPI(); - - // create a view - const view = await api.createView({ background: { color: [0, 0, 0.1, 1] } }, canvas); - - // load a predefined scene into the view, available scenes are cube, oilrig, condos - const scene = (view.scene = await api.loadScene(webglApi.WellKnownSceneUrls.condos)); - - // provide a camera controller, available controller types are static, orbit, flight and turntable - view.camera.controller = api.createCameraController({ kind: "orbit" }, canvas); - - // get center of scene - const [cx, cy, cz] = scene.boundingSphere.center; - - // apply clipping volume - view.applySettings({ - clippingVolume: { - enabled: true, - mode: "union", - planes: [ - [1, 0, 0, -(cx + 5)], // offset plane - ], - }, - }); - - // create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} diff --git a/legacy-docs/demo-snippets/tutorials/clipping_volumes/rotated.ts b/legacy-docs/demo-snippets/tutorials/clipping_volumes/rotated.ts deleted file mode 100644 index a40b30b6..00000000 --- a/legacy-docs/demo-snippets/tutorials/clipping_volumes/rotated.ts +++ /dev/null @@ -1,84 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, canvas }: IParams) { - // initialize the webgl api - const api = webglApi.createAPI(); - - // create a view - const view = await api.createView({ background: { color: [0, 0, 0.1, 1] } }, canvas); - - // load a predefined scene into the view, available scenes are cube, oilrig, condos - const scene = (view.scene = await api.loadScene(webglApi.WellKnownSceneUrls.condos)); - - // provide a camera controller, available controller types are static, orbit, flight and turntable - view.camera.controller = api.createCameraController({ kind: "orbit" }, canvas); - - // get center of scene - const [cx, cy, cz] = scene.boundingSphere.center; - - // compute plane normal - const angle = (45 / 180) * Math.PI; // 45 deg rotation angle as radians - const nx = Math.cos(angle); - const ny = Math.sin(angle); - const nz = 0; - - // compute plane offset - const o = -(cx * nx + cy * ny + cz * nz); - - // apply clipping volume - view.applySettings({ - clippingVolume: { - enabled: true, - mode: "union", - planes: [ - [nx, ny, nz, o], // rotate plane around z-axis - ], - }, - }); - - // create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} diff --git a/legacy-docs/demo-snippets/tutorials/clipping_volumes/single.ts b/legacy-docs/demo-snippets/tutorials/clipping_volumes/single.ts deleted file mode 100644 index 1e45857b..00000000 --- a/legacy-docs/demo-snippets/tutorials/clipping_volumes/single.ts +++ /dev/null @@ -1,73 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, canvas }: IParams) { - // initialize the webgl api - const api = webglApi.createAPI(); - - // create a view - const view = await api.createView({ background: { color: [0, 0, 0.1, 1] } }, canvas); - - // load a predefined scene into the view, available scenes are cube, oilrig, condos - const scene = (view.scene = await api.loadScene(webglApi.WellKnownSceneUrls.condos)); - - // provide a camera controller, available controller types are static, orbit, flight and turntable - view.camera.controller = api.createCameraController({ kind: "orbit" }, canvas); - - // get center of scene - const [cx, cy, cz] = scene.boundingSphere.center; - - // apply clipping volume - view.applySettings({ - clippingVolume: { - enabled: true, - mode: "union", - planes: [[1, 0, 0, -cx]], - }, - }); - - // create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - while (true) { - // render loop - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} diff --git a/legacy-docs/demo-snippets/tutorials/clipping_volumes/slab.ts b/legacy-docs/demo-snippets/tutorials/clipping_volumes/slab.ts deleted file mode 100644 index f452f2de..00000000 --- a/legacy-docs/demo-snippets/tutorials/clipping_volumes/slab.ts +++ /dev/null @@ -1,76 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, canvas }: IParams) { - // initialize the webgl api - const api = webglApi.createAPI(); - - // create a view - const view = await api.createView({ background: { color: [0, 0, 0.1, 1] } }, canvas); - - // load a predefined scene into the view, available scenes are cube, oilrig, condos - const scene = (view.scene = await api.loadScene(webglApi.WellKnownSceneUrls.condos)); - - // provide a camera controller, available controller types are static, orbit, flight and turntable - view.camera.controller = api.createCameraController({ kind: "orbit" }, canvas); - - // get center of scene - const [cx, cy, cz] = scene.boundingSphere.center; - - // apply clipping volume - view.applySettings({ - clippingVolume: { - enabled: true, - mode: "union", - planes: [ - [0, -1, 0, cy + 4], // bottom plane - [0, 1, 0, -(cy + 8)], // top plane - ], - }, - }); - - // create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} diff --git a/legacy-docs/demo-snippets/tutorials/clipping_volumes/slab_inv.ts b/legacy-docs/demo-snippets/tutorials/clipping_volumes/slab_inv.ts deleted file mode 100644 index 2eca8481..00000000 --- a/legacy-docs/demo-snippets/tutorials/clipping_volumes/slab_inv.ts +++ /dev/null @@ -1,76 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, canvas }: IParams) { - // initialize the webgl api - const api = webglApi.createAPI(); - - // create a view - const view = await api.createView({ background: { color: [0, 0, 0.1, 1] } }, canvas); - - // load a predefined scene into the view, available scenes are cube, oilrig, condos - const scene = (view.scene = await api.loadScene(webglApi.WellKnownSceneUrls.condos)); - - // provide a camera controller, available controller types are static, orbit, flight and turntable - view.camera.controller = api.createCameraController({ kind: "orbit" }, canvas); - - // get center of scene - const [cx, cy, cz] = scene.boundingSphere.center; - - // apply clipping volume - view.applySettings({ - clippingVolume: { - enabled: true, - mode: "intersection", - planes: [ - [0, 1, 0, -(cy + 4)], // bottom plane - [0, -1, 0, cy + 8], // top plane - ], - }, - }); - - // create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} diff --git a/legacy-docs/demo-snippets/tutorials/drawing2D/drawing_2d.ts b/legacy-docs/demo-snippets/tutorials/drawing2D/drawing_2d.ts deleted file mode 100644 index 11651813..00000000 --- a/legacy-docs/demo-snippets/tutorials/drawing2D/drawing_2d.ts +++ /dev/null @@ -1,423 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; -import type { DrawPart, DrawProduct } from "@novorender/measure-api"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -async function draw2d( - _measureApi: MeasureApi.MeasureAPI, - view: WebglApi.View, - measureScene: MeasureApi.MeasureScene, - measureEntity1: MeasureApi.MeasureEntity | undefined, - measureEntity2: MeasureApi.MeasureEntity | undefined, - context2D: CanvasRenderingContext2D | null, - canvas2D: HTMLCanvasElement, - result: MeasureApi.DuoMeasurementValues | undefined, - glMatrix: typeof GlMatrix, -) { - //Await all draw objects first to avoid flickering - const [drawResult, drawProduct1, drawProduct2] = await Promise.all([ - result && _measureApi.getDrawMeasureEntity(view, measureScene, result), - measureEntity1 && _measureApi.getDrawMeasureEntity(view, measureScene, measureEntity1), - measureEntity2 && _measureApi.getDrawMeasureEntity(view, measureScene, measureEntity2), - ]); - - //Extract needed camera settings - const { camera } = view; - const cameraDirection = glMatrix.vec3.transformQuat(glMatrix.vec3.create(), glMatrix.vec3.fromValues(0, 0, -1), camera.rotation); - const camSettings = { pos: camera.position, dir: cameraDirection }; - - if (context2D) { - context2D.clearRect(0, 0, canvas2D.width, canvas2D.height); - - //Draw result in green, all lines use 3 pixel width - if (drawResult) { - drawProduct(context2D as CanvasRenderingContext2D, camSettings, drawResult, { lineColor: "green" }, 3, glMatrix); - } - - //Draw first object with yellow line and blue fill - if (drawProduct1) { - drawProduct(context2D as CanvasRenderingContext2D, camSettings, drawProduct1, { lineColor: "yellow", fillColor: "blue" }, 3, glMatrix); - } - - //Draw second object with blue lines and yellow fill - if (drawProduct2) { - drawProduct(context2D as CanvasRenderingContext2D, camSettings, drawProduct2, { lineColor: "blue", fillColor: "yellow" }, 3, glMatrix); - } - } -} - -// HiddenRangeStarted -// Below are utility functions copied from our frontend (https://github.com/novorender/novoweb/blob/develop/src/features/engine2D/utils.ts) -export interface ColorSettings { - lineColor?: string | CanvasGradient; - fillColor?: string; - pointColor?: string | { start: string; middle: string; end: string }; - outlineColor?: string; - complexCylinder?: boolean; -} - -export interface TextSettings { - type: "distance" | "center"; - unit?: string; - customText?: string[]; -} - -export interface CameraSettings { - pos: GlMatrix.ReadonlyVec3; - dir: GlMatrix.ReadonlyVec3; -} - -export function drawProduct(ctx: CanvasRenderingContext2D, camera: CameraSettings, product: DrawProduct, colorSettings: ColorSettings, pixelWidth: number, glMatrix: typeof GlMatrix) { - for (const obj of product.objects) { - if (colorSettings.complexCylinder && obj.kind === "cylinder" && obj.parts.length === 3) { - let startCol = "red"; - let endCol = "lime"; - const cylinderLine = obj.parts[0]; - if (cylinderLine.elevation && cylinderLine.vertices2D) { - if (cylinderLine.elevation.from > cylinderLine.elevation.to) { - const tmp = startCol; - startCol = endCol; - endCol = tmp; - } - const gradX = glMatrix.vec2.fromValues(cylinderLine.vertices2D[0][0], cylinderLine.vertices2D[1][0]); - const gradY = glMatrix.vec2.fromValues(cylinderLine.vertices2D[0][1], cylinderLine.vertices2D[1][1]); - const gradient = ctx.createLinearGradient(gradX[0], gradY[0], gradX[1], gradY[1]); - gradient.addColorStop(0, startCol); - gradient.addColorStop(1, endCol); - drawPart(ctx, camera, cylinderLine, { lineColor: gradient, outlineColor: "rgba(80, 80, 80, .8)" }, pixelWidth, glMatrix); - } - - for (let i = 1; i < 3; ++i) { - const col = i === 1 ? startCol : endCol; - drawPart(ctx, camera, obj.parts[i], { lineColor: col, outlineColor: "rgba(80, 80, 80, .8)" }, pixelWidth, glMatrix); - } - } else { - obj.parts.forEach((part) => { - drawPart(ctx, camera, part, colorSettings, pixelWidth, glMatrix); - }); - } - } -} - -export function drawPart(ctx: CanvasRenderingContext2D, camera: CameraSettings, part: DrawPart, colorSettings: ColorSettings, pixelWidth: number, glMatrix: typeof GlMatrix, textSettings?: TextSettings): boolean { - if (part.vertices2D) { - ctx.lineWidth = pixelWidth; - ctx.strokeStyle = colorSettings.lineColor ?? "black"; - ctx.fillStyle = colorSettings.fillColor ?? "transparent"; - if (part.drawType === "angle" && part.vertices2D.length === 3 && part.text) { - return drawAngle(ctx, camera, part, glMatrix); - } else if (part.drawType === "lines" || part.drawType === "filled") { - return drawLinesOrPolygon(ctx, part, colorSettings, glMatrix, textSettings); - } else if (part.drawType === "vertex") { - return drawPoints(ctx, part, colorSettings); - } - } - return false; -} - -function drawAngle(ctx: CanvasRenderingContext2D, camera: CameraSettings, part: DrawPart, glMatrix: typeof GlMatrix) { - const { vec2, vec3 } = glMatrix; - - if (part.vertices2D) { - ctx.fillStyle = "transparent"; - const anglePoint = part.vertices2D[0]; - const fromP = part.vertices2D[1]; - const toP = part.vertices2D[2]; - const d0 = vec2.sub(vec2.create(), fromP, anglePoint); - const d1 = vec2.sub(vec2.create(), toP, anglePoint); - const l0 = vec2.len(d0); - const l1 = vec2.len(d1); - const camDist = vec3.distance(camera.pos, part.vertices3D[0]); - - const dirA = vec3.sub(vec3.create(), part.vertices3D[1], part.vertices3D[0]); - vec3.normalize(dirA, dirA); - const dirB = vec3.sub(vec3.create(), part.vertices3D[2], part.vertices3D[0]); - vec3.normalize(dirB, dirB); - const dirCamA = vec3.sub(vec3.create(), part.vertices3D[1], camera.pos); - const dirCamB = vec3.sub(vec3.create(), part.vertices3D[2], camera.pos); - const dirCamP = vec3.sub(vec3.create(), part.vertices3D[0], camera.pos); - const norm = vec3.cross(vec3.create(), dirA, dirB); - vec3.normalize(dirCamA, dirCamA); - vec3.normalize(dirCamB, dirCamB); - vec3.normalize(dirCamP, dirCamP); - - if (Math.abs(vec3.dot(dirCamP, norm)) < 0.15) { - return false; - } - - if (camDist > (l0 + l1) / 10) { - return false; - } - if (l0 < 40 || l1 < 40) { - return false; - } - vec2.scale(d0, d0, 1 / l0); - vec2.scale(d1, d1, 1 / l1); - const dir = vec2.add(vec2.create(), d1, d0); - const dirLen = vec2.len(dir); - if (dirLen < 0.001) { - vec2.set(dir, 0, 1); - } else { - vec2.scale(dir, dir, 1 / dirLen); - } - - let angleA = Math.atan2(d0[1], d0[0]); - let angleB = Math.atan2(d1[1], d1[0]); - - const sw = d0[0] * d1[1] - d0[1] * d1[0]; - - if (sw < 0) { - const tmp = angleA; - angleA = angleB; - angleB = tmp; - } - - ctx.beginPath(); - - ctx.arc(anglePoint[0], anglePoint[1], 50, angleA, angleB); - ctx.stroke(); - - if (part.text) { - ctx.fillStyle = "white"; - ctx.strokeStyle = "black"; - ctx.lineWidth = 2; - ctx.font = `bold ${16}px "Open Sans", sans-serif`; - - const textX = anglePoint[0] + dir[0] * 25; - const textY = anglePoint[1] + dir[1] * 25; - ctx.translate(textX, textY); - ctx.strokeText(part.text as string, 0, 0); - ctx.fillText(part.text as string, 0, 0); - ctx.resetTransform(); - } - return true; - } - return false; -} - -function drawLinesOrPolygon(ctx: CanvasRenderingContext2D, part: DrawPart, colorSettings: ColorSettings, glMatrix: typeof GlMatrix, text?: TextSettings) { - const { vec2 } = glMatrix; - - if (part.vertices2D) { - ctx.beginPath(); - ctx.moveTo(part.vertices2D[0][0], part.vertices2D[0][1]); - for (let i = 1; i < part.vertices2D.length; ++i) { - ctx.lineTo(part.vertices2D[i][0], part.vertices2D[i][1]); - } - - if (part.voids) { - ctx.closePath(); - part.voids.forEach((drawVoid) => { - if (drawVoid.vertices2D) { - ctx.moveTo(drawVoid.vertices2D[0][0], drawVoid.vertices2D[0][1]); - for (let i = 1; i < drawVoid.vertices2D.length; ++i) { - ctx.lineTo(drawVoid.vertices2D[i][0], drawVoid.vertices2D[i][1]); - } - ctx.closePath(); - } - }); - } - - if (part.drawType === "filled") { - ctx.closePath(); - ctx.fill(); - } - - if (colorSettings.outlineColor && colorSettings.lineColor) { - const tmpWidth = ctx.lineWidth; - ctx.lineWidth *= 2; - ctx.strokeStyle = colorSettings.outlineColor; - ctx.lineCap = "round"; - ctx.stroke(); - ctx.lineWidth = tmpWidth; - ctx.strokeStyle = colorSettings.lineColor; - ctx.lineCap = "butt"; - } - - ctx.stroke(); - - if (colorSettings.pointColor) { - for (let i = 0; i < part.vertices2D.length; ++i) { - ctx.fillStyle = getPointColor(colorSettings.pointColor, i, part.vertices2D.length); - ctx.lineWidth = 2; - ctx.strokeStyle = "black"; - ctx.beginPath(); - ctx.arc(part.vertices2D[i][0], part.vertices2D[i][1], 5, 0, 2 * Math.PI); - ctx.fill(); - ctx.stroke(); - } - } - - if (text && (text.customText?.length || part.text)) { - ctx.strokeStyle = "black"; - ctx.fillStyle = "white"; - ctx.lineWidth = 2; - ctx.font = `bold ${16}px "Open Sans", sans-serif`; - ctx.textBaseline = "bottom"; - ctx.textAlign = "center"; - - if (text.type === "distance") { - const points = part.vertices2D; - for (let i = 0; i < points.length - 1; ++i) { - const textStr = `${text.customText && i < text.customText.length ? text.customText[i] : part.text} ${text.unit ? text.unit : "m"}`; - let dir = points[i][0] > points[i + 1][0] ? vec2.sub(vec2.create(), points[i], points[i + 1]) : vec2.sub(vec2.create(), points[i + 1], points[i]); - const pixLen = ctx.measureText(textStr).width + 20; - if (vec2.sqrLen(dir) > pixLen * pixLen) { - const center = vec2.create(); - vec2.lerp(center, points[i], points[i + 1], 0.5); - const x = center[0]; - const y = center[1]; - vec2.normalize(dir, dir); - const angle = Math.atan2(dir[1], dir[0]); - ctx.translate(x, y); - ctx.rotate(angle); - ctx.strokeText(textStr, 0, 0); - ctx.fillText(textStr, 0, 0); - ctx.resetTransform(); - } - } - } else if (text.type === "center" && part.vertices2D.length > 2) { - const center = vec2.create(); - for (const p of part.vertices2D) { - vec2.add(center, center, p); - } - const textStr = `${text.customText && text.customText.length > 0 ? text.customText : part.text ? part.text : ""} ${text.unit ? text.unit : "m"}`; - ctx.strokeText(textStr, center[0] / part.vertices2D.length, center[1] / part.vertices2D.length); - ctx.fillText(textStr, center[0] / part.vertices2D.length, center[1] / part.vertices2D.length); - } - } - return true; - } - return false; -} - -function getPointColor(pointColor: string | { start: string; middle: string; end: string }, idx: number, length: number) { - if (typeof pointColor === "string") { - return pointColor; - } - if (idx === 0) { - return pointColor.start; - } else if (idx === length - 1) { - return pointColor.end; - } - return pointColor.middle; -} - -function drawPoints(ctx: CanvasRenderingContext2D, part: DrawPart, colorSettings: ColorSettings) { - if (part.vertices2D) { - for (let i = 0; i < part.vertices2D.length; ++i) { - ctx.fillStyle = colorSettings.pointColor ? getPointColor(colorSettings.pointColor, i, part.vertices2D.length) : colorSettings.fillColor ?? "black"; - ctx.lineWidth = 2; - ctx.strokeStyle = "black"; - ctx.beginPath(); - ctx.arc(part.vertices2D[i][0], part.vertices2D[i][1], 5, 0, 2 * Math.PI); - ctx.fill(); - ctx.stroke(); - } - return true; - } - return false; -} - -export async function main({ webglApi, measureApi, glMatrix, canvas, canvas2D }: IParams) { - // initialize the webgl api - const api = await webglApi.createAPI(); - - // initialize the measure api - const _measureApi = await measureApi.createMeasureAPI(); - - // load a predefined scene into measureapi, available scenes are cube, oilrig, condos - const measureScene = await _measureApi.loadScene(webglApi.WellKnownSceneUrls.condos); - - // create a view - const view = await api.createView({ background: { color: [0, 0, 0.1, 1] } }, canvas); - - // provide a camera controller, available controller types are static, orbit, flight and turntable - view.camera.controller = api.createCameraController({ kind: "orbit" }, canvas); - - // load a predefined scene into the view, available scenes are cube, oilrig, condos - view.scene = await api.loadScene(webglApi.WellKnownSceneUrls.condos); - - // create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // create 2d context for drawing - const context2D = canvas2D.getContext("2d"); - - let output: WebglApi.RenderOutput; - - //Parametric entities used to measure between - let measureEntity1: MeasureApi.MeasureEntity | undefined = undefined; - let measureEntity2: MeasureApi.MeasureEntity | undefined = undefined; - //number to alternate between selected entities. - let selectEntity: 1 | 2 = 1; - - //Save the measure result so it can be drawn in the draw loop - let result: MeasureApi.MeasurementValues | undefined = undefined; - - canvas.addEventListener("click", async (e) => { - if (output) { - let result1 = await output.pick(e.offsetX, e.offsetY); - if (result1) { - if (selectEntity === 1) { - //Find measure entity at pick location - measureEntity1 = (await measureScene.pickMeasureEntity(result1.objectId, result1.position)).entity; - selectEntity = 2; - } else { - //Find measure entity at pick location - measureEntity2 = (await measureScene.pickMeasureEntity(result1.objectId, result1.position)).entity; - selectEntity = 1; - } - //As long as one object is selected log out the values - //Note that if measureEntity2 is undefined then the result will be the parametric values of measureEntity1 - if (measureEntity1) { - result = await measureScene.measure(measureEntity1, measureEntity2); - } - await draw2d(_measureApi, view, measureScene, measureEntity1, measureEntity2, context2D, canvas2D, result as any, glMatrix); - } - } - }); - - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // render loop - while (true) { - // Render frame - output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - await draw2d(_measureApi, view, measureScene, measureEntity1, measureEntity2, context2D, canvas2D, result, glMatrix); - (output as any).dispose(); - } -} -// HiddenRangeEnded diff --git a/legacy-docs/demo-snippets/tutorials/drawing2D/index.ts b/legacy-docs/demo-snippets/tutorials/drawing2D/index.ts deleted file mode 100644 index a098ce1d..00000000 --- a/legacy-docs/demo-snippets/tutorials/drawing2D/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import drawing2d from "./drawing_2d.ts?raw"; -import { demo } from "../../misc"; - -export const drawing2D = { - ...demo("drawing2D", "drawing_2d", drawing2d, {}, "Measure API can be used to draw measure entity or results into a 2D canvas."), -}; diff --git a/legacy-docs/demo-snippets/tutorials/dynamic_objects/dynamic_object.ts b/legacy-docs/demo-snippets/tutorials/dynamic_objects/dynamic_object.ts deleted file mode 100644 index 39565503..00000000 --- a/legacy-docs/demo-snippets/tutorials/dynamic_objects/dynamic_object.ts +++ /dev/null @@ -1,70 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, canvas }: IParams) { - // initialize the webgl api - const api = webglApi.createAPI(); - - // create a view - const view = await api.createView({ background: { color: [0, 0, 0.1, 1] } }, canvas); - - // create an empty scene, available scenes are cube, oilrig, condos - const scene = (view.scene = await api.loadScene(webglApi.WellKnownSceneUrls.empty)); - - // provide a camera controller, available controller types are static, orbit, flight and turntable - view.camera.controller = api.createCameraController({ kind: "orbit" }, canvas); - - // load dynamic object asset - const asset = await api.loadAsset(new URL("https://api.novorender.com/assets/gltf/shaderball.glb")); - - // Add instance into scene - const instance = scene.createDynamicObject(asset); // we can make multiple instances from same asset. - - // render the object - instance.visible = true; - - // create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} diff --git a/legacy-docs/demo-snippets/tutorials/dynamic_objects/index.ts b/legacy-docs/demo-snippets/tutorials/dynamic_objects/index.ts deleted file mode 100644 index 31faddfa..00000000 --- a/legacy-docs/demo-snippets/tutorials/dynamic_objects/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import dynamicObject from "./dynamic_object.ts?raw"; -import { demo } from "../../misc"; - -export const dynamicObjects = { - ...demo("dynamic_objects", "dynamic_object", dynamicObject, {}, "Adding dynamic 3D objects into the view."), -}; diff --git a/legacy-docs/demo-snippets/tutorials/getting_started/basic_condos.ts b/legacy-docs/demo-snippets/tutorials/getting_started/basic_condos.ts deleted file mode 100644 index a616c602..00000000 --- a/legacy-docs/demo-snippets/tutorials/getting_started/basic_condos.ts +++ /dev/null @@ -1,61 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, canvas }: IParams) { - // initialize the webgl api - const api = webglApi.createAPI(); - - // Create a view - const view = await api.createView({ background: { color: [0, 0, 0.25, 1] } }, canvas); - - // load a predefined scene into the view, available scenes are cube, oilrig, condos - view.scene = await api.loadScene(webglApi.WellKnownSceneUrls.condos); - - // provide a camera controller, available controller types are static, orbit, flight and turntable - view.camera.controller = api.createCameraController({ kind: "turntable" }); - - // Create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // render-loop https://dens.website/tutorials/webgl/render-loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} diff --git a/legacy-docs/demo-snippets/tutorials/getting_started/basic_condos_1.ts b/legacy-docs/demo-snippets/tutorials/getting_started/basic_condos_1.ts deleted file mode 100644 index 6c6a7c90..00000000 --- a/legacy-docs/demo-snippets/tutorials/getting_started/basic_condos_1.ts +++ /dev/null @@ -1,61 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, canvas }: IParams) { - // initialize the webgl api - const api = webglApi.createAPI(); - - // Create a view - const view = await api.createView({ background: { color: [0, 0, 0, 0] } }, canvas); - - // load a predefined scene into the view, available scenes are cube, oilrig, condos - view.scene = await api.loadScene(webglApi.WellKnownSceneUrls.condos); - - // provide a camera controller, available controller types are static, orbit, flight and turntable - view.camera.controller = api.createCameraController({ kind: "turntable" }); - - // Create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // render loop: https://dens.website/tutorials/webgl/render-loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} diff --git a/legacy-docs/demo-snippets/tutorials/getting_started/basic_cube.ts b/legacy-docs/demo-snippets/tutorials/getting_started/basic_cube.ts deleted file mode 100644 index 12ca7de1..00000000 --- a/legacy-docs/demo-snippets/tutorials/getting_started/basic_cube.ts +++ /dev/null @@ -1,61 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, canvas }: IParams) { - // initialize the webgl api - const api = webglApi.createAPI(); - - // Create a view - const view = await api.createView({ background: { color: [0, 0, 0.25, 1] } }, canvas); - - // load a predefined scene into the view, available scenes are cube, oilrig, condos - view.scene = await api.loadScene(webglApi.WellKnownSceneUrls.cube); - - // provide a controller, available controller types are static, orbit, flight and turntable - view.camera.controller = api.createCameraController({ kind: "turntable" }); - - // Create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // render-loop https://dens.website/tutorials/webgl/render-loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} diff --git a/legacy-docs/demo-snippets/tutorials/getting_started/index.ts b/legacy-docs/demo-snippets/tutorials/getting_started/index.ts deleted file mode 100644 index 109b7091..00000000 --- a/legacy-docs/demo-snippets/tutorials/getting_started/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import basicCube from "./basic_cube.ts?raw"; -import basicCondos from "./basic_condos.ts?raw"; -import basicCondos1 from "./basic_condos_1.ts?raw"; - -import { demo } from "../../misc"; - -export const gettingStarted = { - ...demo("getting_started", "basic_cube", basicCube, {}, "A basic demonstration of the WebGL API using a predefined `cube` scene."), - ...demo("getting_started", "basic_condos", basicCondos, {}, "A basic demonstration of the WebGL API."), - ...demo("getting_started", "basic_condos_1", basicCondos1, {}, "A basic demonstration of the WebGL API using `ResizeObserver`."), -}; diff --git a/legacy-docs/demo-snippets/tutorials/index.ts b/legacy-docs/demo-snippets/tutorials/index.ts deleted file mode 100644 index 10016f37..00000000 --- a/legacy-docs/demo-snippets/tutorials/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -export * from "./clipping_volumes"; -export * from "./dynamic_objects"; -export * from "./object_selection"; -export * from "./measure"; -export * from "./getting_started"; -export * from "./loading_scenes"; -export * from "./searching"; -export * from "./object_groups"; -export * from "./drawing2D"; -export * from "./object_metadata"; -export * from "./pdf_placement"; -export * from "./minimap"; diff --git a/legacy-docs/demo-snippets/tutorials/loading_scenes/index.ts b/legacy-docs/demo-snippets/tutorials/loading_scenes/index.ts deleted file mode 100644 index 8360f6bf..00000000 --- a/legacy-docs/demo-snippets/tutorials/loading_scenes/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import publicScene from "./public_scene.ts?raw"; -import privateScene from "./private_scene.ts?raw"; -import { demo } from "../../misc"; - -export const loadingScenes = { - ...demo("loading_scenes", "public_scene", publicScene, {}, "Loading public scenes."), - ...demo("loading_scenes", "private_scene", privateScene, {}, "Loading private scenes."), -}; diff --git a/legacy-docs/demo-snippets/tutorials/loading_scenes/private_scene.ts b/legacy-docs/demo-snippets/tutorials/loading_scenes/private_scene.ts deleted file mode 100644 index 0dbb25ec..00000000 --- a/legacy-docs/demo-snippets/tutorials/loading_scenes/private_scene.ts +++ /dev/null @@ -1,138 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -const DATA_API_SERVICE_URL = "https://data.novorender.com/api"; - -export async function main({ webglApi, dataJsApi, canvas }: IParams) { - // For the demo we have simplified the login flow to always run the login call - const accessToken = await login(); - - // Initialize the data API with the Novorender data server service - // and a callback which returns the auth header with the access token - const dataApi = dataJsApi.createAPI({ - serviceUrl: DATA_API_SERVICE_URL, - authHeader: async () => ({ - header: "Authorization", - value: `Bearer ${accessToken}`, - }), - }); - - // From here on everything except the scene ID is the same as for loading public scenes - - try { - // Load scene metadata - const sceneData = await dataApi - // Condos scene ID, but this one requires authentication - .loadScene("7a0a302fe9b24ddeb3c496fb36e932b0") - .then((res) => { - if ("error" in res) { - throw res; - } else { - return res; - } - }); - - // Destructure relevant properties into variables - const { url, db, settings, camera: cameraParams } = sceneData; - - // initialize the webgl api - const api = webglApi.createAPI(); - - // Load scene - const scene = await api.loadScene(url, db); - - // The code above is all you need to load the scene, - // however there is more scene data loaded that you can apply - - // Create a view with the scene's saved settings - const view = await api.createView(settings, canvas); - - // Set resolution scale to 1 - view.applySettings({ quality: { resolution: { value: 1 } } }); - - // Create a camera controller with the saved parameters with turntable as fallback - // available controller types are static, orbit, flight and turntable - const camera = cameraParams ?? ({ kind: "turntable" } as any); - view.camera.controller = api.createCameraController(camera, canvas); - - // Assign the scene to the view - view.scene = scene; - - // Run render loop and the resizeObserver - run(view, canvas); - } catch (e) { - // Handle errors however you like - console.warn(e); - } -} - -async function login(): Promise { - // Hardcoded values for demo purposes - const username = "demouser"; - const password = "demopassword"; - - // POST to the dataserver service's /user/login endpoint - const res: { token: string } = await fetch(DATA_API_SERVICE_URL + "/user/login", { - method: "POST", - headers: { - "Content-Type": "application/x-www-form-urlencoded", - }, - body: `username=${username}&password=${password}`, - }) - .then((res) => res.json()) - .catch(() => { - // Handle however you like - return { token: "" }; - }); - - return res.token; -} - -// HiddenRangeStarted -async function run(view: WebglApi.View, canvas: HTMLCanvasElement): Promise { - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // Create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} -// HiddenRangeEnded diff --git a/legacy-docs/demo-snippets/tutorials/loading_scenes/public_scene.ts b/legacy-docs/demo-snippets/tutorials/loading_scenes/public_scene.ts deleted file mode 100644 index de10cbc5..00000000 --- a/legacy-docs/demo-snippets/tutorials/loading_scenes/public_scene.ts +++ /dev/null @@ -1,103 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, dataJsApi, canvas }: IParams) { - // Initialize the data API with the Novorender data server service - const dataApi = dataJsApi.createAPI({ - serviceUrl: "https://data.novorender.com/api", - }); - - try { - // Load scene metadata - const sceneData = await dataApi - // Condos scene ID, but can be changed to any public scene ID - .loadScene("3b5e65560dc4422da5c7c3f827b6a77c") - .then((res) => { - if ("error" in res) { - throw res; - } else { - return res; - } - }); - - // Destructure relevant properties into variables - const { url, db, settings, camera: cameraParams } = sceneData; - - // initialize webgl api - const api = webglApi.createAPI(); - - // Load scene - const scene = await api.loadScene(url, db); - - // The code above is all you need to load the scene, - // however there is more scene data loaded that you can apply - - // Create a view with the scene's saved settings - const view = await api.createView(settings, canvas); - - // Set resolution scale to 1 - view.applySettings({ quality: { resolution: { value: 1 } } }); - - // Create a camera controller with the saved parameters with turntable as fallback - // available controller types are static, orbit, flight and turntable - const camera = cameraParams ?? ({ kind: "turntable" } as any); - view.camera.controller = api.createCameraController(camera, canvas); - - // Assign the scene to the view - view.scene = scene; - - // Run render loop and the resizeObserver - run(view, canvas); - } catch (e) { - // Handle errors however you like - console.warn(e); - } -} -// HiddenRangeStarted -async function run(view: WebglApi.View, canvas: HTMLCanvasElement): Promise { - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.clientWidth, height: canvas.clientHeight }, - }); - } - }).observe(canvas); - - // Create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} -// HiddenRangeEnded diff --git a/legacy-docs/demo-snippets/tutorials/measure/index.ts b/legacy-docs/demo-snippets/tutorials/measure/index.ts deleted file mode 100644 index 94ef329b..00000000 --- a/legacy-docs/demo-snippets/tutorials/measure/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import parametricMeasure from "./parametric_measure.ts?raw"; -import { demo } from "../../misc"; - -export const measure = { - ...demo("measure", "parametric_measure", parametricMeasure, {}, "Measure API can be used to fetch parametric data based on real world position, and calculate measurements between 2 objects."), -}; diff --git a/legacy-docs/demo-snippets/tutorials/measure/parametric_measure.ts b/legacy-docs/demo-snippets/tutorials/measure/parametric_measure.ts deleted file mode 100644 index dced63cd..00000000 --- a/legacy-docs/demo-snippets/tutorials/measure/parametric_measure.ts +++ /dev/null @@ -1,105 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// we export this function to our react component which will then execute it once the demo started running. -export function showTip() { - return openAlert( - "Click to select parametric object, parametric data will be shown in an alert dialog. Select another object and the measurement data between the objects will be shown in the alert dialog. Clicking further objects will alternate between first and second selected and show measure values within an alert dialog.", - ); -} - -// HiddenRangeEnded -export async function main({ webglApi, measureApi, canvas }: IParams) { - // initialize the webgl api - const api = webglApi.createAPI(); - - // initialize the measure api instance - const _measureApi = await measureApi.createMeasureAPI(); - - // load a predefined scene into the measure api, available scenes are cube, oilrig, condos - const measureScene = await _measureApi.loadScene(webglApi.WellKnownSceneUrls.condos); - - // create a view - const view = await api.createView({ background: { color: [0, 0, 0.1, 1] } }, canvas); - - // provide a camera controller, available controller types are static, orbit, flight and turntable - view.camera.controller = api.createCameraController({ kind: "orbit" }, canvas); - - // create an empty scene, other available scenes are cube, oilrig, condos - view.scene = await api.loadScene(webglApi.WellKnownSceneUrls.condos); - - // create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - let output: WebglApi.RenderOutput | undefined = undefined; - - // Parametric entities used to measure between - let measureEntity1: MeasureApi.MeasureEntity | undefined = undefined; - let measureEntity2: MeasureApi.MeasureEntity | undefined = undefined; - // number to alternate between selected entities. - let selectEntity: 1 | 2 = 1; - - canvas.addEventListener("click", async (e) => { - if (output) { - const result = await output.pick(e.offsetX, e.offsetY); - if (result) { - if (selectEntity === 1) { - // Find measure entity at pick location - measureEntity1 = (await measureScene.pickMeasureEntity(result.objectId, result.position)).entity; - selectEntity = 2; - } else { - // Find measure entity at pick location - measureEntity2 = (await measureScene.pickMeasureEntity(result.objectId, result.position)).entity; - selectEntity = 1; - } - // As long as one object is selected log out the values - // Note that if measureEntity2 is undefined then the result will be the parametric values of measureEntity1 - if (measureEntity1) { - const _log = await measureScene.measure(measureEntity1, measureEntity2); - openInfoPane(_log); - } - } - } - }); - - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // render loop - while (true) { - // Render frame - output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} diff --git a/legacy-docs/demo-snippets/tutorials/minimap/basic_minimap.ts b/legacy-docs/demo-snippets/tutorials/minimap/basic_minimap.ts deleted file mode 100644 index 99622346..00000000 --- a/legacy-docs/demo-snippets/tutorials/minimap/basic_minimap.ts +++ /dev/null @@ -1,727 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; -import type { RecursivePartial, RenderSettings, RenderOutput, View } from "@novorender/webgl-api"; -import type { SceneData } from "@novorender/data-js-api"; -import type { vec2, vec3, quat } from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// we export this function to our react component which will then execute it once the demo started running. -export function showTip() { - return openAlert("Clicking any position on the minimap (right-side) will navigate the camera to the same position on the 3D view (left-side), you can also zoom in/out on the minimap using mouse wheel or touchpad."); -} -const DATA_API_SERVICE_URL = "https://data.novorender.com/api"; - -// HiddenRangeEnded -export async function main({ webglApi, dataJsApi, glMatrix, canvas, previewCanvas }: IParams) { - // Initialize the data API with the Novorender data server service - const dataApi = dataJsApi.createAPI({ - // we're loading a public scene so it doesn't require any auth header, - // see `https://docs.novorender.com/docs/tutorials/loading_scenes#private-scenes` if you want to load private scenes. - serviceUrl: DATA_API_SERVICE_URL, - }); - - // load a public scene - const sceneData = (await dataApi.loadScene("fa20cb75e20e42b789c8e0f18ef5cc6f")) as SceneData; - - // render config, adjust however you want - const renderSettings: RecursivePartial = { - quality: { - resolution: { value: 1 }, // Set resolution scale to 1 - }, - clippingVolume: { - enabled: true, - mode: "union", - planes: [[0, 1, 0, -5.5]], - }, - }; - - // create webgl api, view and load scene and set cameraController. - const view = await initView(webglApi, canvas, sceneData, renderSettings); - - const previewCanvasContext2D = previewCanvas.getContext("2d"); - let preview: string | undefined; - let minimap: MinimapHelper; - if (sceneData && !(sceneData as any).error) { - minimap = await downloadMinimap(previewCanvas.width, previewCanvas.height, sceneData, glMatrix); - - preview = minimap.getMinimapImage(); - minimap.pixelWidth = previewCanvas.width; // Set canvas width - minimap.pixelHeight = previewCanvas.height; // Set canvas height in minimap helper - } - - let currentOutput: RenderOutput; - - // PDF view click listener - previewCanvas.onclick = (e: MouseEvent) => { - // Get the position of the click relative to the canvas - const rect = previewCanvas.getBoundingClientRect(); - let x = e.clientX - rect.left; - let y = e.clientY - rect.top; - - if (currentArea) { - x = currentArea.x + x / currentLevel; - y = currentArea.y + y / currentLevel; - } - - view.camera.controller.moveTo(minimap.toWorld(glMatrix.vec2.fromValues(x, y)), view.camera.rotation); - }; - - let wheelDelta = 1, - level: number, - currentLevel = 1, - currentArea: NodeGeometry | undefined, - elements: QuadNode[] | undefined, - zoomedImage: string | undefined; - - // PDF view wheel event - previewCanvas.onwheel = async (e) => { - e.preventDefault(); - - wheelDelta += e.deltaY * -0.01; - wheelDelta = Math.min(Math.max(1, wheelDelta), 5); - currentLevel = Math.ceil(wheelDelta); - - if (currentLevel === 1) { - // reset the zoom - level = currentLevel; - try { - const initialImage = await loadImage(preview as string); - if (previewCanvasContext2D) { - previewCanvasContext2D.clearRect(0, 0, previewCanvas.width, previewCanvas.height); - previewCanvasContext2D.drawImage(initialImage, 0, 0, previewCanvas.width, previewCanvas.height); - } - } catch (error) { - console.error("Failed to load the preview image ", error); - } - currentArea = undefined; - elements = undefined; - zoomedImage = undefined; - return; - } - if (level === currentLevel) { - return; - } - if (level === 2) { - level++; - } - level = currentLevel; - - // Get the position of the click relative to the canvas - const rect = previewCanvas.getBoundingClientRect(); - let centerX = e.clientX - rect.left; - let centerY = e.clientY - rect.top; - - const width = previewCanvas.width / currentLevel; - const height = previewCanvas.height / currentLevel; - if (currentArea) { - const previousAreaMinX = currentArea.x; - const previousAreaMinY = currentArea.y; - centerX = previousAreaMinX + centerX / currentLevel; - centerY = previousAreaMinY + centerY / currentLevel; - } - - const right = previewCanvas.width - (centerX + width / 2); - const bot = previewCanvas.height - (centerY + height / 2); - let x = centerX - width / 2; - if (right < 0) { - x += right; - } - let y = centerY - height / 2; - if (bot < 0) { - y += bot; - } - const area: NodeGeometry = { - x: Math.max(0, x), - y: Math.max(0, y), - width: width, - height: height, - }; - - currentArea = area; - elements = minimap.retrieve(currentArea, currentLevel); - await drawAndStitchOnCanvas(elements, currentArea); - }; - - // draws one or more image tiles on canvas - const drawAndStitchOnCanvas = async (elements: QuadNode[], area: NodeGeometry) => { - // clear the canvas - previewCanvasContext2D?.clearRect(0, 0, previewCanvas.width, previewCanvas.height); - - // Loop through the found nodes and draw images based on node on the canvas - for (let i = 0; i < elements.length; i++) { - const node = elements[i]; - - const nodeBoundsWidth = node.bounds.width; - const nodeBoundsHeight = node.bounds.height; - - try { - const loadedImage = await loadImage(preview as string, node.Id); - - const boundsWRatio = loadedImage.naturalWidth / nodeBoundsWidth; - const boundsHRatio = loadedImage.naturalHeight / nodeBoundsHeight; - - const cutLeft = Math.max(0, area.x - node.bounds.x); - const cutRight = Math.max(0, node.bounds.x + node.bounds.width - (area.x + area.width)); - const cutX = cutLeft + cutRight; - - const cutTop = Math.max(0, area.y - node.bounds.y); - const cutBot = Math.max(0, node.bounds.y + node.bounds.height - (area.y + area.height)); - const cutY = cutTop + cutBot; - - const zoom = currentLevel; - const x = (Math.max(node.bounds.x, area.x) - area.x) * zoom; - const y = (Math.max(node.bounds.y, area.y) - area.y) * zoom; - const sx = cutLeft * boundsWRatio; - const sy = cutTop * boundsHRatio; - - const sWidth = loadedImage.naturalWidth - sx - cutRight * boundsWRatio; - const sHeight = loadedImage.naturalHeight - sy - cutBot * boundsHRatio; - const dWidth = (node.bounds.width - cutX) * zoom; - const dHeight = (node.bounds.height - cutY) * zoom; - - previewCanvasContext2D?.drawImage(loadedImage, sx, sy, sWidth, sHeight, x, y, dWidth + 1, dHeight + 1); // +1 for pixel overlap to avoid grid like lines - } catch (err) { - console.error("Something went wrong", err); - } - } - - zoomedImage = previewCanvas.toDataURL(); - }; - - let prevCamPos: vec3; - let prevCamRot: quat; - - function animate() { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const ctx = previewCanvas.getContext("2d")!; - - // Run every frame to check if the camera has changed - if (!prevCamRot || !glMatrix.quat.equals(prevCamRot, view.camera.rotation) || !prevCamPos || !glMatrix.vec3.equals(prevCamPos, view.camera.position)) { - prevCamRot = glMatrix.quat.clone(view.camera.rotation); - prevCamPos = glMatrix.vec3.clone(view.camera.position); - if (minimap) { - // Update minimap info based on camera position. Returns true if it changed the pdf to another floor - minimap.update(view.camera.position as vec3); - - let imgUrl: string; - - if (elements?.length && currentLevel !== 1 && zoomedImage) { - imgUrl = zoomedImage; - } else { - imgUrl = minimap.getMinimapImage(); - } - - loadImage(imgUrl).then((img) => { - // Redraw the image for te minimap - ctx.clearRect(0, 0, previewCanvas.width, previewCanvas.height); - // ctx.drawImage(img, 300, 0, img.width, img.height, 0, 0, img.width * 1.5, img.height * 1.5); - ctx.drawImage(img, 0, 0, previewCanvas.width, previewCanvas.height); - drawLine(ctx); - }); - } - } - } - - const drawLine = (ctx: CanvasRenderingContext2D) => { - // Gets the camera position in minimap space - const minimapPos = minimap.toMinimap(view.camera.position as vec3); - - // Gets a cone of the camera direction in minimap space, point[0] is the camera position - const dirPath = minimap.directionPoints(view.camera.position as vec3, view.camera.rotation as quat, 5 / currentLevel); - if (currentArea) { - minimapPos[0] = (minimapPos[0] - currentArea.x) * currentLevel; - minimapPos[1] = (minimapPos[1] - currentArea.y) * currentLevel; - for (let i = 0; i < 3; ++i) { - dirPath[i][0] = (dirPath[i][0] - currentArea.x) * currentLevel; - dirPath[i][1] = (dirPath[i][1] - currentArea.y) * currentLevel; - } - } - ctx.strokeStyle = "green"; - for (let i = 1; i < dirPath.length; ++i) { - ctx.beginPath(); - ctx.lineWidth = 3; - ctx.moveTo(dirPath[0][0], dirPath[0][1]); - ctx.lineTo(dirPath[i][0], dirPath[i][1]); - ctx.stroke(); - } - ctx.fillStyle = "green"; - ctx.beginPath(); - ctx.ellipse(minimapPos[0], minimapPos[1], 5, 5, 0, 0, Math.PI * 2); - ctx.fill(); - }; - - // Create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // runs resizeObserver for main canvas (3D view), just to update width/height. - runResizeObserver(view, canvas); - - // render loop - // eslint-disable-next-line no-constant-condition - while (true) { - // Render frame - currentOutput = await view.render(); - { - // Finalize output image - const image = await currentOutput.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - - animate(); - - (currentOutput as any).dispose(); - } -} - -async function initView(webglApi: typeof WebglApi, canvas: HTMLCanvasElement, sceneData: SceneData, renderSettings: RecursivePartial): Promise { - // Destructure relevant properties into variables - const { url, db, settings, camera: cameraParams } = sceneData; - - // initialize the webgl api - const api = webglApi.createAPI(); - - // Load scene - const scene = await api.loadScene(url, db); - - // Create a view with the scene's saved settings - const view = await api.createView(settings, canvas); - - view.applySettings(renderSettings); - - // Create a camera controller with the saved parameters with ortho as fallback - let camera: WebglApi.CameraControllerParams = cameraParams ?? { - kind: "flight", - }; - camera = { ...camera, ...{ yaw: 0, pitch: -90 } }; - view.camera.controller = api.createCameraController(camera as WebglApi.FlightControllerParams, canvas); - - // Assign the scene to the view - view.scene = scene; - - return view; -} - -async function runResizeObserver(view: View, canvas: HTMLCanvasElement): Promise { - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const { target, contentRect } of entries) { - canvas.width = contentRect.width; - canvas.height = contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); -} - -// Function to load an image -function loadImage(url: string, id?: string): Promise { - return new Promise((resolve, reject) => { - const image = new Image(); - image.crossOrigin = "anonymous"; - image.onload = () => resolve(image); - image.onerror = reject; - image.src = id ? url.replace(/(\.jpeg)/, `_${id}$1`) : url; - }); -} - -/** - * ***************************************************************************************************** - * ***************************************************************************************************** - * MINIMAP CLASS & HELPERS - * ***************************************************************************************************** - * ***************************************************************************************************** - */ - -/** - * Interface for geometry of a Quadtree node - */ -export interface NodeGeometry { - /** - * X position of the node - */ - x: number; - - /** - * Y position of the node - */ - y: number; - - /** - * Width of the node - */ - width: number; - - /** - * Height of the node - */ - height: number; -} - -interface MinimapInfo { - aspect: number; - elevation: number; - image: string; - corner: vec3; - dx: number; - dy: number; - dirX: vec3; - dirY: vec3; -} - -class QuadNode { - /** - * The numeric boundaries of this node. - * @readonly - */ - bounds: NodeGeometry; - - /** - * The level of this node. - * @defaultValue `0` - * @readonly - */ - level: number; - - Id: string; - - empty = false; - - nodes: QuadNode[]; - - constructor(bounds: { x: number; y: number; width: number; height: number; Id: string }, level: number) { - this.bounds = { - x: bounds.x || 0, - y: bounds.y || 0, - width: bounds.width, - height: bounds.height, - }; - this.level = level || 0; - this.nodes = []; - this.Id = bounds.Id; - } - - /** - * Split the node into 4 subnodes. - */ - split(splitWidth: number, splitHeight: number): void { - const level = this.level + 1; - const { bounds } = this; - - const width = splitWidth / 2, - height = splitHeight / 2, - x = bounds.x, - y = bounds.y; - - // max 5 levels - if (level > 6) { - return; - } - - const coords = [ - { x: x, y: y }, - { x: x + width, y: y }, - { x: x, y: y + height }, - { x: x + width, y: y + height }, - ]; - let _id; - { - for (let i = 0; i < coords.length; i++) { - if (level === 0) { - _id = "root"; - } - if (level === 1) { - _id = i.toString(); - } else { - _id = this.Id + i.toString(); - } - const childWidth = Math.min(width, bounds.width - (coords[i].x - bounds.x)); - const childHeight = Math.min(height, bounds.height - (coords[i].y - bounds.y)); - this.nodes[i] = new QuadNode( - { - x: coords[i].x, - y: coords[i].y, - height: childHeight, - width: childWidth, - Id: _id, - }, - level, - ); - - if (childWidth <= 0 || childHeight <= 0) { - this.nodes[i].empty = true; - } else { - this.nodes[i].split(width, height); - } - } - } - } - - overlaps(obj: NodeGeometry): boolean { - const { bounds } = this; - const maxBoundX = bounds.x + bounds.width; - const maxBoundY = bounds.y + bounds.height; - const maxObjX = obj.x + obj.width; - const maxObjY = obj.y + obj.height; - const insideX = (obj.x >= bounds.x && obj.x <= maxBoundX) || (maxObjX >= maxBoundX && obj.x <= maxBoundX) || (maxObjX >= bounds.x && maxObjX < maxBoundX); - const insideY = (obj.y >= bounds.y && obj.y <= maxBoundY) || (maxObjY >= maxBoundY && obj.y <= maxBoundY) || (maxObjY >= bounds.y && maxObjY < maxBoundY); - if (insideX && insideY) { - return true; - } - return false; - } - - /** - * Return all objects that could collide with the given geometry. - * @param obj - geometry to be checked - * @param testLevel - level to be checked - * @returns Array containing all detected objects. - */ - retrieve(obj: NodeGeometry, testLevel: number): QuadNode[] { - let returnObjects: QuadNode[] = []; - //if we have subnodes, retrieve their objects - if (this.nodes.length && this.level < testLevel) { - for (let i = 0; i < this.nodes.length; i++) { - const node = this.nodes[i]; - if (!node.empty && node.overlaps(obj)) { - returnObjects = returnObjects.concat(node.retrieve(obj, testLevel)); - } - } - } else { - returnObjects.push(this); - } - return returnObjects; - } -} - -/** - * Class representing a MinimapHelper that also contains an instance of `QuadNode` class. - */ -export class MinimapHelper { - /** - * Subnodes of this node - * @defaultValue `[]` - * @readonly - */ - quadTree: QuadNode; - - pixelWidth = 0; - pixelHeight = 0; - currentIndex = 0; - - glMatrix!: typeof GlMatrix; - - /** - * Minimap Constructor - * @param minimaps - minimap info - * @param glMatrix - glMatrix dependency - * @param quadTreeProps - bounds and properties of the node - * @param level - depth level (internal use only, required for subnodes) - */ - constructor( - width: number, - height: number, - readonly minimaps: MinimapInfo[], - glMatrix: typeof GlMatrix, - ) { - this.pixelWidth = width; - this.pixelHeight = height; - this.glMatrix = glMatrix; - this.quadTree = new QuadNode({ x: 0, y: 0, width, height, Id: "" }, 1); - } - - async split(topLevelWidth: number, topLevelHeight: number) { - const numImagesWidth = topLevelWidth / 256; - const cw = Math.ceil(Math.log(numImagesWidth) / Math.log(2)); - const widthSplitBy = Math.pow(2, cw) / 2; - const widthSplit = widthSplitBy / numImagesWidth; - - const numImagesHeight = topLevelHeight / 256; - const ch = Math.ceil(Math.log(numImagesHeight) / Math.log(2)); - const heightSplitBy = Math.pow(2, ch) / 2; - const heightSplit = heightSplitBy / numImagesHeight; - this.quadTree.split(this.pixelWidth * widthSplit * 2, this.pixelHeight * heightSplit * 2); - } - - retrieve(obj: NodeGeometry, testLevel: number): QuadNode[] { - return this.quadTree.retrieve(obj, testLevel); - } - - toMinimap(worldPos: vec3): vec2 { - const curInfo = this.getCurrentInfo(); - const diff = this.glMatrix.vec3.sub(this.glMatrix.vec3.create(), worldPos, curInfo.corner); - const diffX = this.glMatrix.vec3.dot(diff, curInfo.dirX); - const diffY = this.glMatrix.vec3.dot(diff, curInfo.dirY); - - const x = (diffX / curInfo.dx) * this.pixelWidth; - const y = this.pixelHeight - (diffY / curInfo.dy) * this.pixelHeight; - return this.glMatrix.vec2.fromValues(x, y); - } - - toWorld(minimapPos: vec2): vec3 { - const curInfo = this.getCurrentInfo(); - const diffX = minimapPos[0] / this.pixelWidth; - const diffY = 1 - minimapPos[1] / this.pixelHeight; - const pos = this.glMatrix.vec3.clone(curInfo.corner); - pos[1] += 10; - this.glMatrix.vec3.scaleAndAdd(pos, pos, curInfo.dirX, curInfo.dx * diffX); - this.glMatrix.vec3.scaleAndAdd(pos, pos, curInfo.dirY, curInfo.dy * diffY); - return pos; - } - - directionPoints(worldPos: vec3, rot: quat, length: number): vec2[] { - const path: vec2[] = []; - path.push(this.toMinimap(worldPos)); - const rotA = this.glMatrix.quat.rotateY(this.glMatrix.quat.create(), rot, Math.PI / 8); - const dirZ = this.glMatrix.vec3.fromValues(0, 0, -1); - const dirA = this.glMatrix.vec3.transformQuat(this.glMatrix.vec3.create(), dirZ, rotA); - const posA = this.glMatrix.vec3.scaleAndAdd(this.glMatrix.vec3.create(), worldPos, dirA, length); - path.push(this.toMinimap(posA)); - - const rotB = this.glMatrix.quat.rotateY(this.glMatrix.quat.create(), rot, -Math.PI / 8); - const dirB = this.glMatrix.vec3.transformQuat(this.glMatrix.vec3.create(), dirZ, rotB); - const posB = this.glMatrix.vec3.scaleAndAdd(this.glMatrix.vec3.create(), worldPos, dirB, length); - path.push(this.toMinimap(posB)); - - return path; - } - - getCurrentInfo() { - return this.minimaps[this.currentIndex]; - } - - getMinimapImage() { - return this.getCurrentInfo().image; - } - - getAspect() { - return this.getCurrentInfo().aspect; - } - - update(camPos: vec3): boolean { - for (let i = 1; i < this.minimaps.length; ++i) { - if (camPos[1] - 0.5 < this.minimaps[i].elevation) { - if (i !== this.currentIndex) { - this.currentIndex = i - 1; - return true; - } - return false; - } - } - if (this.currentIndex !== this.minimaps.length - 1) { - this.currentIndex = this.minimaps.length - 1; - return true; - } - return false; - } -} - -async function downloadMinimap(width: number, height: number, scene: SceneData, glMatrix: typeof GlMatrix): Promise { - const minimaps: MinimapInfo[] = []; - - // perform a db search to get the metadata - const iterator = scene?.db?.search( - { - searchPattern: [{ property: "Novorender/Document/Preview", exact: true }], - }, - undefined, - ); - const iteratorResult = await iterator?.next(); - const data = await iteratorResult?.value.loadMetaData(); - - let corner = glMatrix.vec3.create(); - const dirX = glMatrix.vec3.create(); - const dirY = glMatrix.vec3.create(); - let dx = 0; - let dy = 0; - let aspect = 0; - let elevation = 0; - let image = ""; - let topLevelWidth = 0; - let topLevelHeight = 0; - for (const prop of data.properties) { - switch (prop[0]) { - // get the corners - case "Novorender/Document/Corners": { - const points = prop[1].split("]"); - const c1 = points[0].replaceAll("[", "").split(","); - const c2 = points[1].replaceAll("[", "").split(","); - const c3 = points[2].replaceAll("[", "").split(","); - const a = glMatrix.vec3.fromValues(Number(c1[0]), Number(c1[1]), Number(c1[2])); - const b = glMatrix.vec3.fromValues(Number(c2[1]), Number(c2[2]), Number(c2[3])); - const c = glMatrix.vec3.fromValues(Number(c3[1]), Number(c3[2]), Number(c3[3])); - glMatrix.vec3.sub(dirX, b, a); - dx = glMatrix.vec3.len(dirX); - glMatrix.vec3.normalize(dirX, dirX); - glMatrix.vec3.sub(dirY, c, b); - dy = glMatrix.vec3.len(dirY); - glMatrix.vec3.normalize(dirY, dirY); - corner = glMatrix.vec3.clone(a); - elevation = a[1]; - aspect = dx / dy; - break; - } - - // get the image preview - case "Novorender/Document/Preview": { - const url = new URL((scene as SceneData).url); - url.pathname += prop[1]; - // This is the PDF image URL - image = url.toString(); - break; - } - - // get the top-level dimensions of quadtree - case "Novorender/Document/Size": { - const sizes = prop[1].split(","); - topLevelWidth = Number(sizes[0]); - topLevelHeight = Number(sizes[1]); - break; - } - } - } - minimaps.push({ - aspect, - image, - dx, - dy, - corner, - dirX, - dirY, - elevation, - }); - - minimaps.sort((a, b) => a.elevation - b.elevation); - - const minimap = new MinimapHelper(width, height, minimaps, glMatrix); - - // split the quadtree - await minimap.split(topLevelWidth, topLevelHeight); - - return minimap; -} - -/** - * ***************************************************************************************************** - * ***************************************************************************************************** - * END OF MINIMAP CLASS & HELPERS - * ***************************************************************************************************** - * ***************************************************************************************************** - */ diff --git a/legacy-docs/demo-snippets/tutorials/minimap/index.ts b/legacy-docs/demo-snippets/tutorials/minimap/index.ts deleted file mode 100644 index a9f3deaf..00000000 --- a/legacy-docs/demo-snippets/tutorials/minimap/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import basicMinimap from "./basic_minimap.ts?raw"; -import { demo } from "../../misc"; - -export const minimap = { - ...demo("minimap", "basic_minimap", basicMinimap, { enablePreviewCanvas: true }, "Using tiled images as minimap."), -}; diff --git a/legacy-docs/demo-snippets/tutorials/object_groups/floors.ts b/legacy-docs/demo-snippets/tutorials/object_groups/floors.ts deleted file mode 100644 index 4d8a3e31..00000000 --- a/legacy-docs/demo-snippets/tutorials/object_groups/floors.ts +++ /dev/null @@ -1,198 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// we export this function to our react component which will then execute it once the demo started running. -export function showTip() { - return openAlert("Choose and click on any floor from the top-left to isolate the objectGroups in the selected floor's group."); -} - -// Condos demo scene -const SCENE_ID = "c132d3eecf4f4247ace112410f4219aa"; - -// HiddenRangeEnded -export async function main({ webglApi, dataJsApi, canvas }: IParams) { - try { - // load scene into data api, create webgl api, view and load scene. - const [view, dataApi, objectGroups] = await initView(webglApi, dataJsApi, canvas); - - const scene = view.scene!; - - // run render loop and canvas resizeObserver - run(view, canvas); - - // Find floor groups - const floors = objectGroups.filter((group) => group.grouping?.toLowerCase() === "floors"); - - // Create buttons - createFloorButtons(canvas.parentElement!, floors, (floor: DataJsApi.ObjectGroup | undefined) => { - if (floor) { - // Hide all floors - floors.forEach((floor) => (floor.hidden = true)); - - // Show clicked - floor.hidden = false; - } else { - // Show all floors - floors.forEach((floor) => (floor.hidden = false)); - } - - // Handle visibility changes - handleVisibilityChanges(dataApi, scene, objectGroups); - }); - } catch (e) { - // Handle errors however you like - console.warn(e); - } -} - -// ID to track if handleVisibilityChanges has been called again before IDs have finished loading -let refillId = 0; -// Hide check groups' .hidden property and toggle their objects' visibility -async function handleVisibilityChanges(dataApi: DataJsApi.API, scene: WebglApi.Scene, groups: DataJsApi.ObjectGroup[]) { - // Reset highlights - scene.objectHighlighter.objectHighlightIndices.fill(0); - - // For groups that have large .ids lists we have to explicitly load the IDs - // when needed as to not bloat the .loadScene() response - const groupIdRequests: Promise[] = groups.map(async (group) => { - if ((group.selected || group.hidden) && !group.ids) { - group.ids = await dataApi.getGroupIds(SCENE_ID, group.id).catch(() => { - console.warn("failed to load ids for group - ", group.id); - return []; - }); - } - }); - - // Increment current refillId and assign local copy - const id = ++refillId; - - // Wait for IDs to be loaded if necessary - await Promise.all(groupIdRequests); - - // Abort changes if they are stale - if (id !== refillId) { - return; - } - - // Hide groups that have .hidden == true - groups.filter((group) => group.hidden).forEach((group) => group.ids?.forEach((id) => (scene.objectHighlighter.objectHighlightIndices[id] = 255))); - - scene.objectHighlighter.commit(); -} - -// HiddenRangeStarted -// UI setup -function createFloorButtons(container: HTMLElement, floors: DataJsApi.ObjectGroup[], onClick: (floor?: DataJsApi.ObjectGroup) => void): void { - const wrapper = document.createElement("div"); - wrapper.style.position = "absolute"; - wrapper.style.top = "0"; - - floors.forEach((floor) => { - const btn = document.createElement("button"); - btn.innerText = floor.name; - btn.onclick = () => { - onClick(floor); - }; - - wrapper.append(btn); - }); - - const btn = document.createElement("button"); - btn.innerText = "All"; - btn.onclick = () => { - onClick(); - }; - - wrapper.append(btn); - container.append(wrapper); -} - -async function initView(webglApi: typeof WebglApi, dataJsAPI: typeof DataJsApi, canvas: HTMLCanvasElement): Promise<[WebglApi.View, DataJsApi.API, DataJsApi.ObjectGroup[]]> { - // Initialize the data API with the Novorender data server service - const dataApi = dataJsAPI.createAPI({ - serviceUrl: "https://data.novorender.com/api", - }); - - // Load scene metadata - const sceneData = await dataApi - // Condos scene ID, but can be changed to any public scene ID - .loadScene(SCENE_ID) - .then((res) => { - if ("error" in res) { - throw res; - } else { - return res; - } - }); - - // Destructure relevant properties into variables - const { url, db, settings, camera: cameraParams, objectGroups } = sceneData; - - // initialize the webgl api - const api = webglApi.createAPI(); - - // Load scene - const scene = await api.loadScene(url, db); - - // Create a view with the scene's saved settings - const view = await api.createView(settings, canvas); - - // Set resolution scale to 1 - view.applySettings({ quality: { resolution: { value: 1 } } }); - - // Create a camera controller with the saved parameters with turntable as fallback - const camera = cameraParams ?? ({ kind: "turntable" } as any); - view.camera.controller = api.createCameraController(camera, canvas); - - // Assign the scene to the view - view.scene = scene; - - return [view, dataApi, objectGroups]; -} - -async function run(view: WebglApi.View, canvas: HTMLCanvasElement): Promise { - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // Create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} -// HiddenRangeEnded diff --git a/legacy-docs/demo-snippets/tutorials/object_groups/index.ts b/legacy-docs/demo-snippets/tutorials/object_groups/index.ts deleted file mode 100644 index 3931f226..00000000 --- a/legacy-docs/demo-snippets/tutorials/object_groups/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import floors from "./floors.ts?raw"; -import { demo } from "../../misc"; - -export const objectGroups = { - ...demo("object_groups", "floors", floors, {}, "Predefined groups that are set up for each floor and buttons that isolate objectGroups in the group of the clicked level."), -}; diff --git a/legacy-docs/demo-snippets/tutorials/object_metadata/fly_to.ts b/legacy-docs/demo-snippets/tutorials/object_metadata/fly_to.ts deleted file mode 100644 index 28007f5f..00000000 --- a/legacy-docs/demo-snippets/tutorials/object_metadata/fly_to.ts +++ /dev/null @@ -1,213 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} -// HiddenRangeEnded -export async function main({ webglApi, dataJsApi, glMatrix, canvas }: IParams) { - try { - // load scene into data api, create webgl api, view and load scene. - const view = await initView(webglApi, dataJsApi, canvas); - - const scene = view.scene!; - - // run render loop and canvas resizeObserver - run(view, canvas); - - // Run search and fly to on load - // We set up a click listener below - { - const iterator = scene.search({ - searchPattern: [ - { - property: "GUID", - value: ["06yaxhMh5CwutD_i1oN9HO", "06yaxhMh5CwutD_i1oN9HR", "0aq88u2xXFvBCrfVLun4gr", "0aq88u2xXFvBCrfVLun4gH"], - }, - ], - // false/undefined because we don't need full metadata as the object bounds - // are included in the lightweight HierarcicalObjectReference. - full: false, - }); - - const searchResult: WebglApi.HierarcicalObjectReference[] = []; - for await (const object of iterator) { - searchResult.push(object); - } - - // Highlight results - highlightObjects( - scene, - searchResult.map((object) => object.id), - ); - - // Calculate bounds of multiple objects and fly to them - const bounds = getTotalBoundingSphere(searchResult, glMatrix); - if (bounds) { - view.camera.controller.zoomTo(bounds); - } - } - - // Listen to click events on the canvas - canvas.onclick = async (event) => { - // Pick object at clicked position - const result = await view.lastRenderOutput?.pick(event.offsetX, event.offsetY); - - // If picked position does not have any objects result will be undefined - if (!result) { - return; - } - - // Highlight picked object - highlightObjects(scene, [result.objectId]); - - // Load metadata as object bounds are not included in the pick result - const objectData = await scene.getObjectReference(result.objectId).loadMetaData(); - - // No calculation needed for single object - if (objectData.bounds?.sphere) { - view.camera.controller.zoomTo(objectData.bounds.sphere); - } - }; - } catch (e) { - // Handle however you like - console.warn(e); - } -} - -function getTotalBoundingSphere(nodes: WebglApi.HierarcicalObjectReference[], glMatrix: typeof GlMatrix): WebglApi.BoundingSphere | undefined { - const vec3 = glMatrix.vec3; - - const spheres: WebglApi.BoundingSphere[] = []; - for (const node of nodes) { - const sphere = node.bounds?.sphere; - - if (sphere) { - spheres.push(sphere); - } - } - - if (spheres.length < 1) { - return; - } - - const center = vec3.clone(spheres[0].center); - let radius = spheres[0].radius; - - for (let sphere of spheres) { - const delta = vec3.sub(vec3.create(), sphere.center, center); - const dist = vec3.len(delta) + sphere.radius; - - if (dist > radius) { - radius = (radius + dist) * 0.5; - vec3.add(center, center, vec3.scale(delta, delta, 1 - radius / dist)); - } - } - - return { center, radius }; -} - -function highlightObjects(scene: WebglApi.Scene, ids: number[]) { - // Reset highlights - scene.objectHighlighter.objectHighlightIndices.fill(0); - - // Set highlight to 1 for the selected objects - // In this case the highlight is green, set in initView() - ids.forEach((id) => (scene.objectHighlighter.objectHighlightIndices[id] = 1)); - - scene.objectHighlighter.commit(); -} -// HiddenRangeStarted -async function initView(webglApi: typeof WebglApi, dataJsAPI: typeof DataJsApi, canvas: HTMLCanvasElement) { - // Initialize the data API with the Novorender data server service - const dataApi = dataJsAPI.createAPI({ - serviceUrl: "https://data.novorender.com/api", - }); - - // Load scene metadata - const sceneData = await dataApi - // Condos scene ID, but can be changed to any public scene ID - .loadScene("3b5e65560dc4422da5c7c3f827b6a77c") - .then((res) => { - if ("error" in res) { - throw res; - } else { - return res; - } - }); - - // Destructure relevant properties into variables - const { url, db, settings, camera: cameraParams } = sceneData; - - // initialize the webgl api - const api = webglApi.createAPI(); - - // Load scene - const scene = await api.loadScene(url, db); - - // Create a view with the scene's saved settings - const view = await api.createView(settings, canvas); - - // Set resolution scale to 1 - view.applySettings({ quality: { resolution: { value: 1 } } }); - - // Create a camera controller with the saved parameters with turntable as fallback - const camera = cameraParams ?? ({ kind: "turntable" } as any); - view.camera.controller = api.createCameraController(camera, canvas); - - // Assign the scene to the view - view.scene = scene; - - // make object highlights - const highlightGroup0 = api.createHighlight({ kind: "neutral" }); - const highlightGroup1 = api.createHighlight({ - kind: "color", - color: [0, 1, 0], - }); - view.settings.objectHighlights = [highlightGroup0, highlightGroup1]; - - return view; -} - -async function run(view: WebglApi.View, canvas: HTMLCanvasElement) { - // Create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} -// HiddenRangeEnded diff --git a/legacy-docs/demo-snippets/tutorials/object_metadata/index.ts b/legacy-docs/demo-snippets/tutorials/object_metadata/index.ts deleted file mode 100644 index 3f5e304f..00000000 --- a/legacy-docs/demo-snippets/tutorials/object_metadata/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import fromPick from "./metadata_from_pick.ts?raw"; -import fromSearch from "./metadata_from_search.ts?raw"; -import flyTo from "./fly_to.ts?raw"; -import { demo } from "../../misc"; - -export const objectMetadata = { - ...demo("object_metadata", "metadata_from_pick", fromPick, {}, "Metadata from picking objects."), - ...demo("object_metadata", "metadata_from_search", fromSearch, {}, "Metadata from search."), - ...demo("object_metadata", "fly_to", flyTo, {}, "How to fly to objects using CameraController.zoomTo(), When the example is run it will first do a quick search for 4 objects and fly to them. After that it will fly to any object you click."), -}; diff --git a/legacy-docs/demo-snippets/tutorials/object_metadata/metadata_from_pick.ts b/legacy-docs/demo-snippets/tutorials/object_metadata/metadata_from_pick.ts deleted file mode 100644 index 57d5332f..00000000 --- a/legacy-docs/demo-snippets/tutorials/object_metadata/metadata_from_pick.ts +++ /dev/null @@ -1,152 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// we export this function to our react component which will then execute it once the demo started running. -export function showTip() { - return openAlert("Select any object to display its metadata"); -} - -// HiddenRangeEnded -export async function main({ webglApi, dataJsApi, canvas }: IParams) { - try { - // load scene into data api, create webgl api, view and load scene. - const view = await initView(webglApi, dataJsApi, canvas); - - const scene = view.scene!; - - // run render loop and canvas resizeObserver - run(view, canvas); - - // Listen to click events on the canvas - canvas.onclick = async (event) => { - // Pick object at clicked position - const result = await view.lastRenderOutput?.pick(event.offsetX, event.offsetY); - - // If picked position does not have any objects result will be undefined - if (!result) { - return; - } - - // Highlight object that the metadata belong to - highlightObject(scene, result.objectId); - - // Load metadata - const objectData = await scene.getObjectReference(result.objectId).loadMetaData(); - - // Display metadata - openInfoPane(objectData); - }; - } catch (e) { - // Handle however you like - console.warn(e); - } -} - -function highlightObject(scene: WebglApi.Scene, id: number): void { - // Reset highlights - scene.objectHighlighter.objectHighlightIndices.fill(0); - - // Set highlight to 1 for the selected object - // In this case the highlight is green, set in initView() - scene.objectHighlighter.objectHighlightIndices[id] = 1; - - scene.objectHighlighter.commit(); -} - -// HiddenRangeStarted -async function initView(webglApi: typeof WebglApi, dataJsAPI: typeof DataJsApi, canvas: HTMLCanvasElement): Promise { - // Initialize the data API with the Novorender data server service - const dataApi = dataJsAPI.createAPI({ - serviceUrl: "https://data.novorender.com/api", - }); - - // Load scene metadata - const sceneData = await dataApi - .loadScene("3b5e65560dc4422da5c7c3f827b6a77c") // Condos scene ID, but can be changed to any public scene ID - .then((res) => { - if ("error" in res) { - throw res; - } else { - return res; - } - }); - - // Destructure relevant properties into variables - const { url, db, settings, camera: cameraParams } = sceneData; - - // initialize the webgl api - const api = webglApi.createAPI(); - - // Load scene - const scene = await api.loadScene(url, db); - - // Create a view with the scene's saved settings - const view = await api.createView(settings, canvas); - - // Set resolution scale to 1 - view.applySettings({ quality: { resolution: { value: 1 } } }); - - // Create a camera controller with the saved parameters with turntable as fallback - const camera = cameraParams ?? ({ kind: "turntable" } as any); - view.camera.controller = api.createCameraController(camera, canvas); - - // Assign the scene to the view - view.scene = scene; - - // make object highlights - const highlightGroup0 = api.createHighlight({ kind: "neutral" }); - const highlightGroup1 = api.createHighlight({ - kind: "color", - color: [0, 1, 0], - }); - view.settings.objectHighlights = [highlightGroup0, highlightGroup1]; - - return view; -} - -async function run(view: WebglApi.View, canvas: HTMLCanvasElement): Promise { - // Create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} -// HiddenRangeEnded diff --git a/legacy-docs/demo-snippets/tutorials/object_metadata/metadata_from_search.ts b/legacy-docs/demo-snippets/tutorials/object_metadata/metadata_from_search.ts deleted file mode 100644 index 9fabc323..00000000 --- a/legacy-docs/demo-snippets/tutorials/object_metadata/metadata_from_search.ts +++ /dev/null @@ -1,160 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, dataJsApi, canvas }: IParams) { - try { - // load scene into data api, create webgl api, view and load scene. - const view = await initView(webglApi, dataJsApi, canvas); - - const scene = view.scene!; - - // run render loop and canvas resizeObserver - run(view, canvas); - - const iterator = scene.search({ - searchPattern: "Roof", - // True so that metadata is preloaded - full: true, - }); - - const searchResult: WebglApi.ObjectData[] = []; - - // Use the first 5 results to keep the properties in the property box - // relatively short - for (let i = 0; i < 5; i++) { - const iteratorResult = await iterator.next(); - - if (iteratorResult.done) { - break; - } - - // Because we have set the search option "full: true" - // .loadMetadata() will not result in any more requests being made - // Try flipping it to false and see the difference in the network request log - const objectWithMetadata = await iteratorResult.value.loadMetaData(); - searchResult.push(objectWithMetadata); - } - - // Highlight results - highlightObjects( - scene, - searchResult.map((object) => object.id), - ); - // Display metadata - openInfoPane(searchResult); - } catch (e) { - // Handle however you like - console.warn(e); - } -} - -function highlightObjects(scene: WebglApi.Scene, ids: number[]): void { - // Reset highlights - scene.objectHighlighter.objectHighlightIndices.fill(0); - - // Set highlight to 1 for the selected objects - // In this case the highlight is green, set in initView() - ids.forEach((id) => (scene.objectHighlighter.objectHighlightIndices[id] = 1)); - - scene.objectHighlighter.commit(); -} - -// HiddenRangeStarted -async function initView(webglApi: typeof WebglApi, dataJsAPI: typeof DataJsApi, canvas: HTMLCanvasElement): Promise { - // Initialize the data API with the Novorender data server service - const dataApi = dataJsAPI.createAPI({ - serviceUrl: "https://data.novorender.com/api", - }); - - // Load scene metadataa - const sceneData = await dataApi - // Condos scene ID, but can be changed to any public scene ID - .loadScene("3b5e65560dc4422da5c7c3f827b6a77c") - .then((res) => { - if ("error" in res) { - throw res; - } else { - return res; - } - }); - - // Destructure relevant properties into variables - const { url, db, settings, camera: cameraParams } = sceneData; - - // initialize the webgl api - const api = webglApi.createAPI(); - - // Load scene - const scene = await api.loadScene(url, db); - - // Create a view with the scene's saved settings - const view = await api.createView(settings, canvas); - - // Set resolution scale to 1 - view.applySettings({ quality: { resolution: { value: 1 } } }); - - // Create a camera controller with the saved parameters with turntable as fallback - const camera = cameraParams ?? ({ kind: "turntable" } as any); - view.camera.controller = api.createCameraController(camera, canvas); - - // Assign the scene to the view - view.scene = scene; - - // make object highlights - const highlightGroup0 = api.createHighlight({ kind: "neutral" }); - const highlightGroup1 = api.createHighlight({ - kind: "color", - color: [0, 1, 0], - }); - view.settings.objectHighlights = [highlightGroup0, highlightGroup1]; - - return view; -} - -async function run(view: WebglApi.View, canvas: HTMLCanvasElement): Promise { - // Create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} -// HiddenRangeEnded diff --git a/legacy-docs/demo-snippets/tutorials/object_selection/index.ts b/legacy-docs/demo-snippets/tutorials/object_selection/index.ts deleted file mode 100644 index a33b6564..00000000 --- a/legacy-docs/demo-snippets/tutorials/object_selection/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import pick from "./pick.ts?raw"; -import { demo } from "../../misc"; - -export const objectSelection = { - ...demo("object_selection", "pick", pick, {}, "Highlighting sets/groups of objects."), -}; diff --git a/legacy-docs/demo-snippets/tutorials/object_selection/pick.ts b/legacy-docs/demo-snippets/tutorials/object_selection/pick.ts deleted file mode 100644 index f8326ef7..00000000 --- a/legacy-docs/demo-snippets/tutorials/object_selection/pick.ts +++ /dev/null @@ -1,107 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, canvas }: IParams) { - // initialize the webgl api - const api = webglApi.createAPI(); - - // Create View, camera controller and load scene - const view = await initView(api, canvas); - - const scene = view.scene!; - - // run render loop and canvas resizeObserver - run(view, canvas); - - // Set up highlight groups - const deSaturated = api.createHighlight({ - kind: "hsla", - saturation: 0.5, - }); - const limeGreen = api.createHighlight({ - kind: "color", - color: [0, 1, 0], - }); - - view.settings.objectHighlights = [deSaturated, limeGreen]; - - // Listen to click events to pick objects - canvas.onclick = async (e: MouseEvent) => { - const result = await view.lastRenderOutput?.pick(e.offsetX, e.offsetY); - if (result) { - // Reset highlights - // Here we set all objects to use the highlight found at view.settings.objectHighlights[0] - // In this case "deSaturated" - scene.objectHighlighter.objectHighlightIndices.fill(0); - - // Set selected object to use highlight found at view.settings.objectHighlights[1] - // In this case "limeGreen" - scene.objectHighlighter.objectHighlightIndices[result.objectId] = 1; - - scene.objectHighlighter.commit(); - } - }; -} -// HiddenRangeStarted -async function initView(api: WebglApi.API, canvas: HTMLCanvasElement): Promise { - // Create a view - const view = await api.createView( - { background: { color: [0, 0, 0, 0] } }, // Transparent - canvas, - ); - - // Provide a camera controller - view.camera.controller = api.createCameraController({ kind: "flight" }, canvas); - - // Load the Condos demo scene - view.scene = await api.loadScene(WebglApi.WellKnownSceneUrls.condos); - - return view; -} -async function run(view: WebglApi.View, canvas: HTMLCanvasElement): Promise { - // Create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} -// HiddenRangeEnded diff --git a/legacy-docs/demo-snippets/tutorials/pdf_placement/index.ts b/legacy-docs/demo-snippets/tutorials/pdf_placement/index.ts deleted file mode 100644 index b4dbbdb5..00000000 --- a/legacy-docs/demo-snippets/tutorials/pdf_placement/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import pdfPlacement from "./pdf_placement.ts?raw"; - -import { demo } from "../../misc"; - -export const PDFPlacement = { - ...demo("pdf_placement", "pdf_placement", pdfPlacement, { enablePreviewCanvas: true }, "Use two reference points on both the model and the PDF to place and scale the PDF in 3D space."), -}; diff --git a/legacy-docs/demo-snippets/tutorials/pdf_placement/pdf_placement.ts b/legacy-docs/demo-snippets/tutorials/pdf_placement/pdf_placement.ts deleted file mode 100644 index f0aef883..00000000 --- a/legacy-docs/demo-snippets/tutorials/pdf_placement/pdf_placement.ts +++ /dev/null @@ -1,419 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; -import type { API, RecursivePartial, RenderSettings, RenderOutput, View, OrthoControllerParams, Scene } from "@novorender/webgl-api"; -import type { SceneData } from "@novorender/data-js-api"; -import type { DrawPart, DrawProduct } from "@novorender/measure-api"; -import type { vec2, ReadonlyVec3 } from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// we export this function to our react component which will then execute it once the demo started running. -export function showTip() { - return openAlert("Choose 2 points from the 3D view (on the left) and 2 points from the PDF view (on the right), both in the identical locations, to show the computations."); -} -const DATA_API_SERVICE_URL = "https://data.novorender.com/api"; - -// HiddenRangeEnded -export async function main({ webglApi, measureApi, dataJsApi, glMatrix, canvas, canvas2D, previewCanvas }: IParams) { - // Initialize the data API with the Novorender data server service - const dataApi = dataJsApi.createAPI({ - // we're loading a public scene so it doesn't require any auth header, - // see `https://docs.novorender.com/docs/tutorials/loading_scenes#private-scenes` if you want to load private scenes. - serviceUrl: DATA_API_SERVICE_URL, - }); - - // Initialize measureApi instance - const _measureApi = await measureApi.createMeasureAPI(); - - // load a public scene - const pdfScene = (await dataApi.loadScene("4f50d89ea8cd493ea3bc16f504ad5a1f")) as SceneData; - - // render config, adjust however you want - const renderSettings: RecursivePartial = { - quality: { - resolution: { value: 1 }, // Set resolution scale to 1 - }, - clippingVolume: { - enabled: true, - mode: "union", - planes: [[0, 1, 0, -5.5]], - }, - }; - - // create webgl api, view and load scene and set cameraController. - const view = await initView(webglApi, canvas, pdfScene, renderSettings); - - // @todo - re-enable - // const elevation = await getElevation(view.scene as Scene); - - let preview: string | undefined; - - if (pdfScene && !(pdfScene as any).error) { - preview = await downloadPdfPreview(pdfScene as SceneData); - } - const previewCanvasContext2D = previewCanvas.getContext("2d"); - - if (preview) { - // image to draw on PDF view (right side). - const img = new Image(); - img.onload = () => { - if (previewCanvasContext2D) { - previewCanvasContext2D.drawImage( - img, - 0, - 0, - previewCanvas.width, - previewCanvas.height, - // 0, - // 0, - // previewCanvas.width, - // previewCanvas.height - ); - } - }; - img.src = preview as string; - } else { - // just to show error details on previewCanvas, if preview failed to load - showErrorDetails(previewCanvas, previewCanvasContext2D, (pdfScene as any).error); - } - - /** vars for 3D view click listener */ - const context2D = canvas2D.getContext("2d"); - let currentOutput: RenderOutput; - let selectEntity: 1 | 2 = 1; - let posA: ReadonlyVec3 | undefined; - let posB: ReadonlyVec3 | undefined; - let draw: MeasureApi.DrawProduct | undefined; - /** END */ - - // 3D view click listener - canvas.onclick = async (e: MouseEvent) => { - if (currentOutput) { - const pickInfo = await currentOutput.pick(e.offsetX, e.offsetY); - if (pickInfo) { - if (selectEntity === 1) { - posA = pickInfo.position; - selectEntity = 2; - } else { - posB = pickInfo.position; - selectEntity = 1; - } - if (posA && posB) { - draw = _measureApi.getDrawObjectFromPoints(view, [posA, posB], false, false); - } else if (posA) { - draw = _measureApi.getDrawObjectFromPoints(view, [posA], false, false); - } - await drawProduct(context2D, draw, 3, canvas2D); - } - } - }; - - /** vars for PDF view (right-side) click listener */ - let pdfPosA: vec2 | undefined; - let pdfPosB: vec2 | undefined; - let imgHeight: number; - let imgWidth: number; - let previewCanvasWidth: number; - let previewCanvasHeight: number; - let updatedPdfPosA: vec2 | null; - let updatedPdfPosB: vec2 | null; - let selectingA = true; - /** END */ - - // Preview Canvas (right-side) click listener - previewCanvas.onclick = (e: MouseEvent) => { - // destructure necessary glMatrix functions - const { - vec2: { fromValues, dist, sub, create, normalize, dot }, - } = glMatrix; - - if (previewCanvas && preview && previewCanvasContext2D) { - // check if positions were updated via pane resizes - // not necessary if you don't resize pane/canvas - if (updatedPdfPosA) { - pdfPosA = updatedPdfPosA; - updatedPdfPosA = null; - } - if (updatedPdfPosB) { - pdfPosB = updatedPdfPosB; - updatedPdfPosB = null; - } - - previewCanvasWidth = previewCanvas.width; - previewCanvasHeight = previewCanvas.height; - - const x = e.offsetX; - const y = e.offsetY; - - if (selectingA) { - pdfPosA = fromValues(x, y); - } else { - pdfPosB = fromValues(x, y); - } - selectingA = !selectingA; - if (preview && previewCanvasContext2D) { - const img = new Image(); - img.onload = () => { - if (previewCanvasContext2D && preview) { - // Redraw the image to the preview canvas - previewCanvasContext2D.clearRect(0, 0, previewCanvasWidth, previewCanvasHeight); - previewCanvasContext2D.drawImage(img, 0, 0, previewCanvasWidth, previewCanvasHeight); - imgHeight = img.height; - imgWidth = img.width; - if (pdfPosA) { - drawArc(previewCanvasContext2D, pdfPosA[0], pdfPosA[1], "green"); - } - if (pdfPosB) { - drawArc(previewCanvasContext2D, pdfPosB[0], pdfPosB[1], "blue"); - } - } - }; - img.src = preview; - } - if (posA && posB && draw) { - if (pdfPosA && pdfPosB) { - const modelPosA = fromValues(posA[0], posA[2] * -1); - const modelPosB = fromValues(posB[0], posB[2] * -1); - const canvasToImageScaleX = imgWidth / previewCanvasWidth; - const canvasToImageScaleY = imgHeight / previewCanvasHeight; - //Invert Y axis on the pixel positions on the pdf image - const pixelPosA = fromValues(pdfPosA[0] * canvasToImageScaleX, imgHeight - pdfPosA[1] * canvasToImageScaleY); - const pixelPosB = fromValues(pdfPosB[0] * canvasToImageScaleX, imgHeight - pdfPosB[1] * canvasToImageScaleY); - const pixelLength = dist(pixelPosA, pixelPosB); - const modelLength = dist(modelPosA, modelPosB); - const modelDir = sub(create(), modelPosB, modelPosA); - normalize(modelDir, modelDir); - const pixDir = sub(create(), pixelPosA, pixelPosB); - normalize(pixDir, pixDir); - const scale = modelLength / pixelLength; - const radAroundZ = Math.acos(dot(modelDir, pixDir)) * -1; - const degreesAroundZ = (radAroundZ / Math.PI) * 180; - const pdfToWorldScale = imgHeight * scale; - const translation = sub(create(), modelPosA, fromValues(pixelPosA[0] * scale * Math.cos(radAroundZ), pixelPosA[1] * scale * Math.sin(radAroundZ))); - - // calculations to show/log in the info pane - const calculations = { radians: radAroundZ, degrees: degreesAroundZ, pdfToWorldScale, translation }; - openInfoPane(calculations, "PDF Transformation"); - } - } - } - }; - - // Create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // runs resizeObserver for main canvas (3D view), just to update width/height. - runResizeObserver(view, canvas); - - // resizeObserver for preview canvas (right-side) to re-draw images/arc or update size on pane resizes. - new ResizeObserver((entries) => { - for (const { contentRect } of entries) { - const scaledWidth = contentRect.width / previewCanvasWidth; - const scaledHeight = contentRect.height / previewCanvasHeight; - if (pdfPosA) { - updatedPdfPosA = glMatrix.vec2.fromValues(scaledWidth * pdfPosA[0], scaledHeight * pdfPosA[1]); - } - if (pdfPosB) { - updatedPdfPosB = glMatrix.vec2.fromValues(scaledWidth * pdfPosB[0], scaledHeight * pdfPosB[1]); - } - if (preview && previewCanvasContext2D) { - const img = new Image(); - img.onload = () => { - if (previewCanvasContext2D && preview) { - previewCanvasContext2D.clearRect(0, 0, contentRect.width, contentRect.height); - // Redraw the image to the preview canvas - previewCanvasContext2D.drawImage(img, 0, 0, contentRect.width, contentRect.height); - if (updatedPdfPosA) { - drawArc(previewCanvasContext2D, updatedPdfPosA[0], updatedPdfPosA[1], "green"); - } - if (updatedPdfPosB) { - drawArc(previewCanvasContext2D, updatedPdfPosB[0], updatedPdfPosB[1], "blue"); - } - } - }; - img.src = preview; - } - } - }).observe(previewCanvas); - - // render loop - while (true) { - // Render frame - currentOutput = await view.render(); - { - // Finalize output image - const image = await currentOutput.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - if (posA && posB) { - draw = _measureApi.getDrawObjectFromPoints(view, [posA, posB], false, false); - } else if (posA) { - draw = _measureApi.getDrawObjectFromPoints(view, [posA], false, false); - } - await drawProduct(context2D, draw, 3, canvas2D); - (currentOutput as any).dispose(); - } -} - -async function getElevation(scene: Scene): Promise { - try { - const iterator = scene.search( - { - searchPattern: [{ property: "IfcClass", value: "IfcBuildingStorey", exact: true }], - }, - undefined, - ); - const iteratorResult = await iterator.next(); - const data = await iteratorResult.value.loadMetaData(); - for (const prop of data.properties) { - if (prop[0] === "Novorender/Elevation") { - return Number(prop[1]); - } - } - return undefined; - } catch (error) { - console.log(error); - } -} - -async function downloadPdfPreview(scene: SceneData): Promise { - if (scene.db) { - // perform a db search to get the metadata - const iterator = scene.db.search( - { - searchPattern: [{ property: "Novorender/Document/Preview", exact: true }], - }, - undefined, - ); - const iteratorResult = await iterator.next(); - const data = await iteratorResult.value.loadMetaData(); - for (const prop of data.properties) { - if (prop[0] === "Novorender/Document/Preview") { - const url = new URL((scene as any).url); - url.pathname += prop[1]; - // This is the PDF image URL - return url.toString(); - } - } - } - return undefined; -} - -// HiddenRangeStarted -function showErrorDetails(canvas: HTMLCanvasElement, ctx: CanvasRenderingContext2D | null, error: string) { - ctx!.font = "18px Arial"; - ctx!.fillStyle = "red"; - ctx!.textAlign = "center"; - ctx!.fillText(`Failed to load the PDF Preview.`, canvas.width / 2, canvas.height / 2); - ctx!.fillText(`Error: ${error}`, canvas.width / 2, canvas.height / 1.8); -} - -async function initView(webglApi: typeof WebglApi, canvas: HTMLCanvasElement, pdfScene: SceneData, renderSettings: RecursivePartial): Promise { - // Destructure relevant properties into variables - const { settings } = pdfScene; - - // initialize the webgl api - const api = webglApi.createAPI(); - - // Load scene - const scene = await api.loadScene(WebglApi.WellKnownSceneUrls.condos); - - // Create a view with the scene's saved settings - const view = await api.createView(settings, canvas); - - view.applySettings(renderSettings); - - //set up camera controller - const orthoController = api.createCameraController({ kind: "ortho" }, canvas); - (orthoController as any).init([750, 18, -180], [0, 0, 0], view.camera); - (orthoController.params as OrthoControllerParams).referenceCoordSys = [1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 728, 7, -230, 1]; - (orthoController.params as OrthoControllerParams).fieldOfView = 35; - view.camera.controller = orthoController; - - // Assign the scene to the view - view.scene = scene; - - return view; -} - -async function runResizeObserver(view: View, canvas: HTMLCanvasElement): Promise { - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const { target, contentRect } of entries) { - canvas.width = contentRect.width; - canvas.height = contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); -} - -// Below are utility functions copied from our frontend (https://github.com/novorender/novoweb/blob/develop/src/features/engine2D/utils.ts) -interface ColorSettings { - lineColor?: string | CanvasGradient; - fillColor?: string; - pointColor?: string | { start: string; middle: string; end: string }; - outlineColor?: string; - complexCylinder?: boolean; -} - -function drawProduct(context2D: CanvasRenderingContext2D | null, product: DrawProduct | undefined, pixelWidth: number, canvas2D: HTMLCanvasElement): void { - if (product) { - if (context2D) { - context2D.clearRect(0, 0, canvas2D.width, canvas2D.height); - for (const obj of (product as DrawProduct).objects) { - obj.parts.forEach((part) => { - drawPart(context2D, part, pixelWidth); - }); - } - } - } -} - -function drawPart(ctx: CanvasRenderingContext2D, part: DrawPart, pixelWidth: number): void { - if (part.vertices2D) { - ctx.lineWidth = pixelWidth; - drawPoints(ctx, part); - } -} - -function drawPoints(ctx: CanvasRenderingContext2D, part: DrawPart): void { - const colorSettings: Array = [ - { fillColor: "green", outlineColor: "green", lineColor: "green" }, - { fillColor: "blue", outlineColor: "blue", lineColor: "blue" }, - ]; - - if (part.vertices2D) { - for (let i = 0; i < part.vertices2D.length; ++i) { - drawArc(ctx, part.vertices2D[i][0], part.vertices2D[i][1], colorSettings[i].fillColor as string); - } - } -} - -function drawArc(ctx: CanvasRenderingContext2D, x: number, y: number, fillStyle: string): void { - ctx.fillStyle = fillStyle; - ctx.lineWidth = 2; - ctx.strokeStyle = "black"; - ctx.beginPath(); - ctx.arc(x, y, 5, 0, 2 * Math.PI); - ctx.fill(); - ctx.stroke(); -} -// HiddenRangeEnded diff --git a/legacy-docs/demo-snippets/tutorials/searching/exact_search.ts b/legacy-docs/demo-snippets/tutorials/searching/exact_search.ts deleted file mode 100644 index 3c757f98..00000000 --- a/legacy-docs/demo-snippets/tutorials/searching/exact_search.ts +++ /dev/null @@ -1,134 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, dataJsApi, canvas }: IParams) { - try { - // load scene into data api, create webgl api, view and load scene and set cameraController. - const view = await initView(webglApi, dataJsApi, canvas); - - const scene = view.scene!; - - // run render loop and canvas resizeObserver - run(view, canvas); - - // Run the searches - // Exact search only checking the property "ifcClass" and the exact value "ifcRoof" - const iterator = scene.search({ - searchPattern: [{ property: "ifcClass", value: "ifcRoof", exact: true }], - }); - - // In this example we just want to isolate the objects so all we need is the object ID - const result: number[] = []; - for await (const object of iterator) { - result.push(object.id); - } - - // Then we isolate the objects found - isolateObjects(scene, result); - } catch (e) { - console.warn(e); - } -} - -function isolateObjects(scene: WebglApi.Scene, ids: number[]): void { - // Set highlight 255 on all objects - // Highlight index 255 is reserved fully transparent - scene.objectHighlighter.objectHighlightIndices.fill(255); - - // Set highlight back to 0 for objects to be isolated - // Highlight 0 should be neutral as we haven't changed view.settings.objectHighlights - ids.forEach((id) => (scene.objectHighlighter.objectHighlightIndices[id] = 0)); - - scene.objectHighlighter.commit(); -} -// HiddenRangeStarted -async function initView(webglApi: typeof WebglApi, dataJsAPI: typeof DataJsApi, canvas: HTMLCanvasElement): Promise { - // Initialize the data API with the Novorender data server service - const dataApi = dataJsAPI.createAPI({ - serviceUrl: "https://data.novorender.com/api", - }); - - // Load scene metadata - const sceneData = await dataApi - // Condos scene ID, but can be changed to any public scene ID - .loadScene("3b5e65560dc4422da5c7c3f827b6a77c") - .then((res) => { - if ("error" in res) { - throw res; - } else { - return res; - } - }); - - // Destructure relevant properties into variables - const { url, db, settings, camera: cameraParams } = sceneData; - - // initialize the webgl api - const api = webglApi.createAPI(); - - // Load scene - const scene = await api.loadScene(url, db); - - // Create a view with the scene's saved settings - const view = await api.createView(settings, canvas); - - // Set resolution scale to 1 - view.applySettings({ quality: { resolution: { value: 1 } } }); - - // Create a camera controller with the saved parameters with turntable as fallback - const camera = cameraParams ?? ({ kind: "turntable" } as any); - view.camera.controller = api.createCameraController(camera, canvas); - - // Assign the scene to the view - view.scene = scene; - - return view; -} - -async function run(view: WebglApi.View, canvas: HTMLCanvasElement): Promise { - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // Create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} -// HiddenRangeEnded diff --git a/legacy-docs/demo-snippets/tutorials/searching/exact_search_excluding_result.ts b/legacy-docs/demo-snippets/tutorials/searching/exact_search_excluding_result.ts deleted file mode 100644 index 002bde4a..00000000 --- a/legacy-docs/demo-snippets/tutorials/searching/exact_search_excluding_result.ts +++ /dev/null @@ -1,134 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, dataJsApi, canvas }: IParams) { - try { - // load scene into data api, create webgl api, view and load scene and set cameraController. - const view = await initView(webglApi, dataJsApi, canvas); - - const scene = view.scene!; - - // run render loop and canvas resizeObserver - run(view, canvas); - - // Run the searches - // Same as the exact search, but with exclude. This will return all object except the ones found above. - const iterator = scene.search({ - searchPattern: [{ property: "ifcClass", value: "ifcRoof", exact: true, exclude: true }], - }); - - // In this example we just want to isolate the objects so all we need is the object ID - const result: number[] = []; - for await (const object of iterator) { - result.push(object.id); - } - - // Then we isolate the objects found - isolateObjects(scene, result); - } catch (e) { - console.warn(e); - } -} - -function isolateObjects(scene: WebglApi.Scene, ids: number[]): void { - // Set highlight 255 on all objects - // Highlight index 255 is reserved fully transparent - scene.objectHighlighter.objectHighlightIndices.fill(255); - - // Set highlight back to 0 for objects to be isolated - // Highlight 0 should be neutral as we haven't changed view.settings.objectHighlights - ids.forEach((id) => (scene.objectHighlighter.objectHighlightIndices[id] = 0)); - - scene.objectHighlighter.commit(); -} -// HiddenRangeStarted -async function initView(webglApi: typeof WebglApi, dataJsAPI: typeof DataJsApi, canvas: HTMLCanvasElement): Promise { - // Initialize the data API with the Novorender data server service - const dataApi = dataJsAPI.createAPI({ - serviceUrl: "https://data.novorender.com/api", - }); - - // Load scene metadata - const sceneData = await dataApi - // Condos scene ID, but can be changed to any public scene ID - .loadScene("3b5e65560dc4422da5c7c3f827b6a77c") - .then((res) => { - if ("error" in res) { - throw res; - } else { - return res; - } - }); - - // Destructure relevant properties into variables - const { url, db, settings, camera: cameraParams } = sceneData; - - // initialize the webgl api - const api = webglApi.createAPI(); - - // Load scene - const scene = await api.loadScene(url, db); - - // Create a view with the scene's saved settings - const view = await api.createView(settings, canvas); - - // Set resolution scale to 1 - view.applySettings({ quality: { resolution: { value: 1 } } }); - - // Create a camera controller with the saved parameters with turntable as fallback - const camera = cameraParams ?? ({ kind: "turntable" } as any); - view.camera.controller = api.createCameraController(camera, canvas); - - // Assign the scene to the view - view.scene = scene; - - return view; -} - -async function run(view: WebglApi.View, canvas: HTMLCanvasElement): Promise { - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // Create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} -// HiddenRangeEnded diff --git a/legacy-docs/demo-snippets/tutorials/searching/fluffy_search.ts b/legacy-docs/demo-snippets/tutorials/searching/fluffy_search.ts deleted file mode 100644 index 1e1ac5b9..00000000 --- a/legacy-docs/demo-snippets/tutorials/searching/fluffy_search.ts +++ /dev/null @@ -1,133 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, dataJsApi, canvas }: IParams) { - try { - // load scene into data api, create webgl api, view and load scene and set cameraController. - const view = await initView(webglApi, dataJsApi, canvas); - - const scene = view.scene!; - - // run render loop and canvas resizeObserver - run(view, canvas); - - // Run the searches - // Fluffy search which will search all properties for words starting with "Roof" - // "Roo" will still find roofs, but "oof" will not - const iterator = scene.search({ searchPattern: "Roof" }); - - // In this example we just want to isolate the objects so all we need is the object ID - const result: number[] = []; - for await (const object of iterator) { - result.push(object.id); - } - - // Then we isolate the objects found - isolateObjects(scene, result); - } catch (e) { - console.warn(e); - } -} - -function isolateObjects(scene: WebglApi.Scene, ids: number[]): void { - // Set highlight 255 on all objects - // Highlight index 255 is reserved fully transparent - scene.objectHighlighter.objectHighlightIndices.fill(255); - - // Set highlight back to 0 for objects to be isolated - // Highlight 0 should be neutral as we haven't changed view.settings.objectHighlights - ids.forEach((id) => (scene.objectHighlighter.objectHighlightIndices[id] = 0)); - - scene.objectHighlighter.commit(); -} -// HiddenRangeStarted -async function initView(webglApi: typeof WebglApi, dataJsAPI: typeof DataJsApi, canvas: HTMLCanvasElement): Promise { - // Initialize the data API with the Novorender data server service - const dataApi = dataJsAPI.createAPI({ - serviceUrl: "https://data.novorender.com/api", - }); - - // Load scene metadata - const sceneData = await dataApi - // Condos scene ID, but can be changed to any public scene ID - .loadScene("3b5e65560dc4422da5c7c3f827b6a77c") - .then((res) => { - if ("error" in res) { - throw res; - } else { - return res; - } - }); - - // Destructure relevant properties into variables - const { url, db, settings, camera: cameraParams } = sceneData; - - // initialize the webgl api - const api = webglApi.createAPI(); - - // Load scene - const scene = await api.loadScene(url, db); - - // Create a view with the scene's saved settings - const view = await api.createView(settings, canvas); - - // Set resolution scale to 1 - view.applySettings({ quality: { resolution: { value: 1 } } }); - - // Create a camera controller with the saved parameters with turntable as fallback - const camera = cameraParams ?? ({ kind: "turntable" } as any); - view.camera.controller = api.createCameraController(camera, canvas); - - // Assign the scene to the view - view.scene = scene; - - return view; -} - -async function run(view: WebglApi.View, canvas: HTMLCanvasElement): Promise { - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // Create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} -// HiddenRangeEnded diff --git a/legacy-docs/demo-snippets/tutorials/searching/index.ts b/legacy-docs/demo-snippets/tutorials/searching/index.ts deleted file mode 100644 index f968ee5a..00000000 --- a/legacy-docs/demo-snippets/tutorials/searching/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import searchByPath from "./search_by_path.ts?raw"; -import fluffySearch from "./fluffy_search.ts?raw"; -import exactSearch from "./exact_search.ts?raw"; -import exactSearchExcludingResult from "./exact_search_excluding_result.ts?raw"; - -import { demo } from "../../misc"; - -export const searching = { - ...demo("searching", "searchByPath", searchByPath, {}, "Demonstration path search pattern where the resulting objects are isolated in the view."), - ...demo("searching", "fluffySearch", fluffySearch, {}, 'Fluffy search pattern which will search all properties for words starting with "Roof".'), - ...demo("searching", "exactSearch", exactSearch, {}, 'Exact search only checking the property "ifcClass" and the exact value "ifcRoof".'), - ...demo("searching", "exactSearchExcludingResult", exactSearchExcludingResult, {}, "Same as the Exact search pattern, but with exclude. This will return all objects except the ones found above."), -}; diff --git a/legacy-docs/demo-snippets/tutorials/searching/search_by_path.ts b/legacy-docs/demo-snippets/tutorials/searching/search_by_path.ts deleted file mode 100644 index deb8598c..00000000 --- a/legacy-docs/demo-snippets/tutorials/searching/search_by_path.ts +++ /dev/null @@ -1,136 +0,0 @@ -// HiddenRangeStarted -import * as WebglApi from "@novorender/webgl-api"; -import * as MeasureApi from "@novorender/measure-api"; -import * as DataJsApi from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -export interface IParams { - webglApi: typeof WebglApi; - measureApi: typeof MeasureApi; - dataJsApi: typeof DataJsApi; - glMatrix: typeof GlMatrix; - canvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; - previewCanvas: HTMLCanvasElement; -} - -// HiddenRangeEnded -export async function main({ webglApi, dataJsApi, canvas }: IParams) { - try { - // load scene into data api, create webgl api, view and load scene and set cameraController. - const view = await initView(webglApi, dataJsApi, canvas); - - const scene = view.scene!; - - // run render loop and canvas resizeObserver - run(view, canvas); - - // Run the searches - // Path is similar to filesystem file/folder hierarchical paths, e.g. my_folder/my_object - // Paths reflect original CAD model hierarchy (.ifc, .rvm, etc) - // This will find all objects on the 2nd floor - const iterator = scene.search({ - parentPath: "Condos.ifc/3/Surface:2481563/Apartment with 12 condos/2ND FLOOR", - }); - - // In this example we just want to isolate the objects so all we need is the object ID - const result: number[] = []; - for await (const object of iterator) { - result.push(object.id); - } - - // Then we isolate the objects found - isolateObjects(scene, result); - } catch (e) { - console.warn(e); - } -} - -function isolateObjects(scene: WebglApi.Scene, ids: number[]): void { - // Set highlight 255 on all objects - // Highlight index 255 is reserved fully transparent - scene.objectHighlighter.objectHighlightIndices.fill(255); - - // Set highlight back to 0 for objects to be isolated - // Highlight 0 should be neutral as we haven't changed view.settings.objectHighlights - ids.forEach((id) => (scene.objectHighlighter.objectHighlightIndices[id] = 0)); - - scene.objectHighlighter.commit(); -} -// HiddenRangeStarted -async function initView(webglApi: typeof WebglApi, dataJsAPI: typeof DataJsApi, canvas: HTMLCanvasElement): Promise { - // Initialize the data API with the Novorender data server service - const dataApi = dataJsAPI.createAPI({ - serviceUrl: "https://data.novorender.com/api", - }); - - // Load scene metadata - const sceneData = await dataApi - // Condos scene ID, but can be changed to any public scene ID - .loadScene("3b5e65560dc4422da5c7c3f827b6a77c") - .then((res) => { - if ("error" in res) { - throw res; - } else { - return res; - } - }); - - // Destructure relevant properties into variables - const { url, db, settings, camera: cameraParams } = sceneData; - - // initialize the webgl api - const api = webglApi.createAPI(); - - // Load scene - const scene = await api.loadScene(url, db); - - // Create a view with the scene's saved settings - const view = await api.createView(settings, canvas); - - // Set resolution scale to 1 - view.applySettings({ quality: { resolution: { value: 1 } } }); - - // Create a camera controller with the saved parameters with turntable as fallback - const camera = cameraParams ?? ({ kind: "turntable" } as any); - view.camera.controller = api.createCameraController(camera, canvas); - - // Assign the scene to the view - view.scene = scene; - - return view; -} - -async function run(view: WebglApi.View, canvas: HTMLCanvasElement): Promise { - // Handle canvas resizes - new ResizeObserver((entries) => { - for (const entry of entries) { - canvas.width = entry.contentRect.width; - canvas.height = entry.contentRect.height; - view.applySettings({ - display: { width: canvas.width, height: canvas.height }, - }); - } - }).observe(canvas); - - // Create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // render loop - while (true) { - // Render frame - const output = await view.render(); - { - // Finalize output image - const image = await output.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - (output as any).dispose(); - } -} -// HiddenRangeEnded diff --git a/legacy-docs/demo-snippets/typings.d.ts b/legacy-docs/demo-snippets/typings.d.ts deleted file mode 100644 index 5fa4857e..00000000 --- a/legacy-docs/demo-snippets/typings.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -// whenever we import typescript files with the .ts extension, it's a demo code snippet that we want to treat as a url rather than actual code. -declare module "*.ts?raw" { - const content: string; - export default content; -} - -/** -* @description opens an alert that displays provided content -* @param content string to show in the alert -*/ -declare function openAlert(content: string, type: 'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'danger' = 'info'): void; - -/** -* @description opens a pane in bottom left of renderer to show any text -* @param content string to show in the info pane -*/ -declare function openInfoPane(content: object | string | any, title?: string): void; \ No newline at end of file diff --git a/legacy-docs/docs/test.ts b/legacy-docs/docs/test.ts deleted file mode 100644 index 0fadabe0..00000000 --- a/legacy-docs/docs/test.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * @description a simple greeting function - * @param name any name - * @returns a string that greets user - */ -function helloWorld(name: string): string { - // begin_code_block_1 - const greet = "Hello"; - // end_code_block_1 - - // begin_code_block_2 - return `${greet} ${name}`; - // end_code_block_2 -} - -/** - * @description a simple greeting function - * @param name any name - * @returns a string that greets user - */ -function foo(name: string): string { - // begin_code_block_3 - return `Hello foo`; - // end_code_block_3 -} - -/** - * @description a simple greeting function - * @param name any name - * @returns a string that greets user - */ -function bar(name: string): string { - // begin_code_block_4 - return `Hello bar`; - // end_code_block_4 -} diff --git a/legacy-docs/docs/tutorials/clipping_volumes.mdx b/legacy-docs/docs/tutorials/clipping_volumes.mdx deleted file mode 100644 index 99bdc457..00000000 --- a/legacy-docs/docs/tutorials/clipping_volumes.mdx +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: "Clipping Volumes" -description: "Clipping allows you to render only part of a scene." -keywords: ["novorender api docs", "webgl api", "clipping volumes"] ---- - -import { tutorials } from "@site/demo-snippets/index"; - -Clipping allows you to render only part of a scene. -This can be useful to reveal internal structures that would otherwise be obscured by surrounding geometry, such as walls and outer shells. - -:::note -Clipping volumes does not currently apply to dynamic objects or the test cube scene! -::: - -Clipping volumes are formed by a set of planes, or halfspaces. -Each halfspace is defined by a plane normal vector `nx,ny,nz` and an offset (negative distance) along that vector `o`. -From this we can compute a signed distance to that plane for any given 3D coordinate (x,y,z). - -```typescript -signed_distance = (x, y, z) => x * nx + y * ny + z * nz + o; -``` - -This can be expressed as a 4D dot product where the w component of the input is 1. - -```typescript -signed_distance = dot_product([x, y, z, 1], [nx, ny, nz, o]); -``` - -The positive side of this plane, i.e. signed_distance > 0, is considered "outside" the halfspace, whereas the negative sinde "inside". -Points that lie outside will we clipped, while the negative ones will be rendered. - -### Single plane - -To illustrate this, let's create a simple clipping volume with a single plane along the yz axes, effectively clipping everything to the right of center. - - - -### Single plane with offset - -We used the center of the scene (which is far from origo) to position the plane. -Let's add a few meters extra to observe the effects - - - -### Single plane, flipped - -You may flip the plane by flipping the direction of the normal. -When doing so, also remember to negate the offset. -Or, to put another way, simply negate all the elements `[-nx,-ny,-nz,-o]`. - - - -### Single plane, rotated - -Of course, you may use any normal you like for the plane, as long as it's length = 1. - - - -### Dual plane - -Adding additional planes allows us to further shape the clipping volume. -Each plane forms a half space, which you may think of as the volume of everything that lies on the positive side of the plane to infinity. -When combining multiple such half spaces, we must determine whether to use the intersection or union of these halfspace volumes. -Put simply, intersection is the volume that lies on the positive side of all the planes, while union is the volume that lines on the positive side of any of the planes. - -```typescript -intersection = sd1 > 0 && sd2 > 0; -union = sd1 > 0 || sd2 > 0; -``` - -:::info -For those familiar with [CSG (constructive solid geometry)](https://en.wikipedia.org/wiki/Constructive_solid_geometry), the clipping volume is defined by a simple CSG expression. -::: - -Let's create a more complex clipping volume with an additional plane along the xz axes, effectively clipping everything to the right and above center. - - - -### Dual plane, slab - -A perhaps more useful volume is a slab, consisting of a top and bottom plane, but otherwise extending into infinity. - - - -### Inverted slab - -If you wish to clip everything inside of the volume, rather than outside, simply flip the planes (negate all elements) and change the combination mode. - - - -### Box - -We currently support up to 6 planes, allowing you to define simple polyhedra of any size, rotation and position. -Let's define an axis aligned clipping box. - - -
- -:::info - -Using clipping volumes currently does not affect memory usage or significantly impact rendering performance. -They simply work by excluding pixels that lie outside the volume at the very last stage of the rendering pipeline. -Their intended use it as a visual aid, not as an optimization. - -::: diff --git a/legacy-docs/docs/tutorials/drawing2D.mdx b/legacy-docs/docs/tutorials/drawing2D.mdx deleted file mode 100644 index 8c9189aa..00000000 --- a/legacy-docs/docs/tutorials/drawing2D.mdx +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: "Draw measure objects and results" -description: "Draw measure entity or results into a 2D canvas using Measure API." -keywords: ["novorender api docs", "measure api", "2D drawing"] ---- - -import { tutorials } from "@site/demo-snippets/index"; - -Novorender measure API can be used to draw measure entity or results into a 2D canvas. -It can be used with utility functions found in the open source Novoweb [github repository](https://github.com/novorender/novoweb/blob/develop/src/features/engine2D/utils.ts). -These functions are placed in the frontend code to make it easy for developers to change the style of 2d drawings to fit their own application. -These functions can also be found at the bottom of the demo - -### Draw entities - -Many objects returned from the measure API contains a [drawkind](/docs/measure-api/interfaces/Measure.DrawableEntity#drawkind), as long as the returned value contains this value then it can be drawn using [getDrawMeasureEntity()](/docs/measure-api/interfaces/Measure.MeasureAPI#getdrawmeasureentity). [getDrawMeasureEntity()](/docs/measure-api/interfaces/Measure.MeasureAPI#getdrawmeasureentity) found in the measure API will return a hierarchical set of objects that be used to draw to screen. - -The objects contains both 3d and 2d data and various information about drawing types, names, display text and more. -The function will require [view](/docs/webgl-api/interfaces/NovoRender.View) from the Novorender webgl-API to transform the 3d data to 2d. -The [camera](/docs/webgl-api/interfaces/NovoRender.View#camera) from webgl-API view is also used in the draw utility function to remove certain drawing parts and text based on camera angle and distance - -:::note -Check the parametric measure tutorial on how to select measure entities. -::: - -```typescript -const entity = await measureScene.pickMeasureEntity(objectId, position); -const drawProd = await measureApi.getDrawMeasureEntity(view, measureScene, entity); -const { camera } = view; -const cameraDirection = vec3.transformQuat(vec3.create(), vec3.fromValues(0, 0, -1), camera.rotation); -const camSettings = { pos: camera.position, dir: cameraDirection }; -if (drawProd) { - //Function found in the utility ts file - drawProduct(context2D, camSettings, drawProd, { lineColor: "yellow", fillColor: "blue" }, 3); -} -``` - -### Draw measure result - -The measure result also contains [drawkind](/docs/measure-api/interfaces/Measure.DrawableEntity#drawkind) and can be drawn using [getDrawMeasureEntity()](/docs/measure-api/interfaces/Measure.MeasureAPI#getdrawmeasureentity). -The result will contain information on how to draw the measure line, x, y and z dimensions of the measurement as well as certain angles. -The result object can be drawn using the utility function [drawProduct()](https://github.com/novorender/novoweb/blob/develop/src/features/engine2D/utils.ts#L24) as above but we have chosen to handle each part of the result separately to give more flexibility on style and colour. - -Example shows distance line drawn in blue, the z-axis line and angle drawn in green - -```typescript -const measureResult = await measurescene.measure(entity1, entity2); -const drawProd = await measureApi.getDrawMeasureEntity(view, measureScene, measureResult); -for (const obj of drawProd.objects) { - for (const part of obj.parts) { - if (part.vertices2D === undefined) { - continue; - } - switch (part.name) { - case "result": - drawPart(context2D, camSettings, part, { lineColor: "blue" }, 3, { - type: "distance", - }); - break; - case "z-axis": - drawPart(context2D, camSettings, part, { lineColor: "green" }, 3, { - type: "distance", - }); - break; - case "z-angle": - drawPart(context2D, camSettings, part, { lineColor: "green" }, 2, { - type: "distance", - }); - break; - } - } -} -``` - -### Draw line strip or polygon - -The measure API allows for multiple 3d points to be transformed to an on screen-linestrip or polygon. -This is used in the Novoweb frontend to display area and measurement between multiple points. -To get draw objects from a list of points use [getDrawObjectFromPoints()](/docs/measure-api/interfaces/Measure.MeasureAPI#getdrawobjectfrompoints) on the measure API. -Like other draw function it takes the webgl API view as an input, there are also options to display angle between the lines and whether or not to close it to create a polygon. -The position from webgl API [pick()](/docs/webgl-api/interfaces/NovoRender.View#pick) function can be stored to create lines between multiple clicked points. - -```typescript -//Draw a point line with line names and angles -const drawProd = measureApi.getDrawObjectFromPoints(view, pointLinePoints, false, true); -if (drawProd) { - const textList = pointLineResult.segmentLengths.map((v) => v.toFixed(2)); - drawProd.objects.forEach((obj) => { - obj.parts.forEach((part) => { - drawPart(context2D, camSettings, part, { lineColor: "yellow", pointColor: { start: "green" } }, 2, { type: "distance", customText: textList }); - }); - }); -} -``` - -### Demo - -Click to select parametric object, the selected parametric object will be draw, do note that a point will be drawn if the selected object does not contain parametric info. -Click another object to measure against, the parametric object will be drawn as well as the measure result. -Continued clicks will alternate between objects and log out the measurement values. - - diff --git a/legacy-docs/docs/tutorials/dynamic_objects.mdx b/legacy-docs/docs/tutorials/dynamic_objects.mdx deleted file mode 100644 index 1e9f3343..00000000 --- a/legacy-docs/docs/tutorials/dynamic_objects.mdx +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: "Dynamic Objects" -description: "Adding dynamic 3D objects into the view." -keywords: ["novorender api docs", "webgl api", "dynamic objects"] ---- - -import { tutorials } from "@site/demo-snippets/index"; - -While Novorender is mostly about streaming and rendering large, static 3D scenes, sometimes you may want to add smaller, dynamic 3D objects into the view. -Dynamic objects are meant for small and lightweight objects, such as 3D widgets or avatars. -Currently we support [glTF 2.0](https://www.khronos.org/gltf/) (.gltf/.glb). -You can download these from any url, but we do provide a few gltf models on our server: https://api.novorender.com/assets/gltf/ - -:::caution -Please note that we don't currently support any glTF extensions. Nor do we support animations or skinning, among other things. -We recommend verifying your files using https://github.khronos.org/glTF-Validator/ or similar before use. -::: - -### Creation - -To download and parse a gltf file, call the [api.loadAsset()](/docs/webgl-api/interfaces/NovoRender.API#loadasset) function with a valid url, where api is an instance of our [webgl-api](/docs/webgl-api/interfaces/NovoRender.API). - -```typescript -const asset = await api.loadAsset(new URL("https://api.novorender.com/assets/gltf/logo.glb")); -``` - -:::caution -Avoid using large gltf files on mobile devices as these have quite severe memory and triangle restrictions! -::: -Now you can create instances of this asset in your scenes. You may reuse the same asset in multiple scenes. - -```typescript -const instance = scene.createDynamicObject(asset); -``` - -By default, new objects will have position `[0,0,0]` and no rotation `[0,0,0,1]`. - -:::info -The size of the gltf files should match the size of your scene. -The camera will not auto-fit to dynamic objects, so make sure the units are in meters and that the coordinates are in the same space as your scene, which could be geo-referenced. -::: - -To change object orientation, assign new position and/or rotation. - -```typescript -instance.position = [x, y, z]; // 3D vector -instance.rotation = [0, 0, 0, 1]; // identity quaternion -``` - -While you can use raw arrays like above for trivial cases, it's likely that you will want to use a linear algebra library, like [gl-matrix](https://glmatrix.net/). - -```typescript -instance.position = vec3.fromValues(px, py, pz); // 3D vector -instance.rotation = quat.fromEuler(quat.create(), rx, ry, rz); // Quaternion from euler angles -``` - -New objects are invisible by default. To actually render your object, change the visible flag. - -```typescript -instance.visible = true; -``` - -### Demo - - - -### Disposing - -To delete/remove an instance, call [dispose()](/docs/webgl-api/interfaces/NovoRender.API#dispose). - -```typescript -instance.dispose(); -``` - -Once you've disposed all the instances of an asset, you may dispose the asset itself to free up all the associated memory. - -```typescript -asset.dispose(); -``` - -:::note -When disposing an asset, the render pipeline may still have a reference to the model for the next frame. -If so, you would get an error. -You may want to render a frame or two first, to flush out any such lingering references. -::: diff --git a/legacy-docs/docs/tutorials/getting_started.mdx b/legacy-docs/docs/tutorials/getting_started.mdx deleted file mode 100644 index 6119f233..00000000 --- a/legacy-docs/docs/tutorials/getting_started.mdx +++ /dev/null @@ -1,223 +0,0 @@ ---- -title: "Getting started" -sidebar_position: 1 -description: "Setting up instructions for the various Novorender packages." -keywords: ["novorender api docs", "webgl api", "measure api", "data js api", "getting started"] ---- - -import { tutorials } from "@site/demo-snippets/index"; -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; -import Link from "@docusaurus/Link"; - -## Installation - -All our APIs are available on NPM and can be installed with your preferred JS package manager. -To get started with Novorender and load a demo scene you will only need our [webgl-api](https://www.npmjs.com/package/@novorender/webgl-api) package. - - - - -```bash -npm install @novorender/webgl-api@next @novorender/data-js-api @novorender/measure-api -``` - - - - -```bash -yarn add @novorender/webgl-api@next @novorender/data-js-api @novorender/measure-api -``` - - - - ---- - -## Bundlers - -The webgl and measure APIs depend on workers which are not bundled and should be hosted as static files on your server. -The recommended approach is to copy them over to a static folder (often called public) after installation, which can be done with the `dependencies` or `postinstall` lifecycle scripts depending on your package manager. - -```js title="scripts/copy-novorender-workers.js" -const fs = require("fs"); - -const options = { - force: true, // overwrite files - recursive: true, -}; - -fs.cpSync("node_modules/@novorender/webgl-api", "public/novorender/webgl-api", options); -fs.cpSync("node_modules/@novorender/measure-api", "public/novorender/measure-api", options); -``` - - - - -```json title="package.json" -{ - // ..., - "scripts": { - // ..., - "dependencies": "node ./scripts/copy-novorender-workers.js" - } -} -``` - - - - -```json title="package.json" -{ - // ..., - "scripts": { - // ..., - "postinstall": "node ./scripts/copy-novorender-workers.js" - } -} -``` - - - - -export const CodeExamplesTip = () => ( -
-
-
💡
-
-

Looking for more examples?

-

Check out these sample projects that utilise some of the common module bundlers.

-
-
-
- {["vite", "webpack", "webpack_typescript", "local_esm"].map((i) => ( - - - - ))} -
-
-); - - - ---- - -## Basic usage - -```html title="index.html" - - - - - - Novorender demo - - - - - - - -``` - -```typescript title="src/main.ts" -import { API, createAPI, WellKnownSceneUrls } from "@novorender/webgl-api"; - -const api = createAPI({ - // Path to where the files previously copied from node_modules are hosted - scriptBaseUrl: `${window.location.origin}/novorender/webgl-api/`, -}); -const canvas = document.querySelector("#canvas")!; -main(api, canvas); - -async function main(api: API, canvas: HTMLCanvasElement) { - // create a view - const view = await api.createView( - { background: { color: [0, 0, 0, 0] } }, // transparent - canvas, - ); - - // provide a camera controller - view.camera.controller = api.createCameraController({ kind: "turntable" }); - - // load the Condos demo scene - view.scene = await api.loadScene(WellKnownSceneUrls.condos); - - // create a bitmap context to display render output - const ctx = canvas.getContext("bitmaprenderer"); - - // main render loop - while (true) { - // handle canvas resizes - const { clientWidth, clientHeight } = canvas; - view.applySettings({ - display: { width: clientWidth, height: clientHeight }, - }); - - // render frame - const output = await view.render(); - { - // finalize output image - const image = await output.getImage(); - if (image) { - // display in canvas - ctx?.transferFromImageBitmap(image); - image.close(); - } - } - } -} -``` - ---- - -## Demo - -Only the function `main()` is included in the live editors. -Try changing the [background color](../webgl-api/interfaces/NovoRender.RenderSettings#background) on line 18 or the [camera controller](../webgl-api/interfaces/NovoRender.API#createcameracontroller) on line 23 in the example below. - - - -export const PlaygroundTip = () => ( -
-
-
💡
-
-

Need more demonstrations?

-

The Playground page contains 20+ demos covering various aspects of different Novorender packages.

-
-
- - Go to Playground - -
-); - - diff --git a/legacy-docs/docs/tutorials/loading_scenes.mdx b/legacy-docs/docs/tutorials/loading_scenes.mdx deleted file mode 100644 index b192bdfc..00000000 --- a/legacy-docs/docs/tutorials/loading_scenes.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Loading scenes" -sidebar_position: 2 -description: "Loading scenes via Data JS API or Data REST API." -keywords: ["novorender api docs", "webgl api", "data js api", "loading scenes"] ---- - -import { tutorials } from "@site/demo-snippets/index"; - -To load your own scenes we recommend that you use the [`@novorender/data-js-api`](../data-js-api) package, but you can also use the [Novorender data REST API](/docs/category/data-rest-api-v1) directly if you prefer. -We will be using the npm package in all our examples. - -## Public scenes - - - -## Private scenes - -Only scene related endpoints are covered by the NPM package, so for user / authentication endpoints you will have to use the REST API as well. - -### Username / Password - - -
- -:::note - -Above demo retrieves access token using POST [/api/user/login](/docs/rest-api/login) endpoint which is part of legacy authentication APIs, also known as the [V1 REST API](/docs/category/data-rest-api-v1). We advise transitioning to the new [V2 REST API](/docs/category/data-rest-api-v2), which incorporates OAuth 2.0 for authorization. - -::: - -### Active Directory - -To get started authenticating with Active Directory we recommend you use [MSAL](https://learn.microsoft.com/en-us/azure/active-directory/develop/msal-overview) with the following config: - -```json -{ - "clientId": "074eb42a-f94a-4a97-b7ad-0a187eb57f96", - "authority": "https://login.microsoftonline.com/{YOUR_TENANT_ID}", - "scopes": ["api://074eb42a-f94a-4a97-b7ad-0a187eb57f96/resource.read", "api://074eb42a-f94a-4a97-b7ad-0a187eb57f96/scene.edit"] -} -``` - -Once you have authenticated and acquired an access token you can follow the [example for username/password flow](#username--password), just use the access token you got from AD instead of POST [/api/user/login](/docs/rest-api/login). - -:::note - -The above documentation regarding Active Directory is only applicable when utilizing the legacy authentication APIs, also known as the [V1 REST API](/docs/category/data-rest-api-v1). - -::: diff --git a/legacy-docs/docs/tutorials/minimap.mdx b/legacy-docs/docs/tutorials/minimap.mdx deleted file mode 100644 index 549a58b3..00000000 --- a/legacy-docs/docs/tutorials/minimap.mdx +++ /dev/null @@ -1,811 +0,0 @@ ---- -title: "Using tiled images as minimap" -description: "Tutorial for using image tiles as minimap" -keywords: ["novorender api docs", "webgl api", "quadtree", "minimap", "image tiles"] ---- - -import { tutorials } from "@site/demo-snippets/index"; -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; -import Link from "@docusaurus/Link"; - -## Introduction - -In this tutorial, we will learn to create a minimap using tiled images. The code is written in TypeScript and will also demonstrate how to achieve zoom on minimap by loading and rendering image tiles at different zoom levels using quadtree data structure, we will also learn to sync the camera movements between minimap and 3D space using [novorender's webgl-api](./getting_started.mdx). - -:::note before we begin -This tutorial assumes that you have a basic understating of [HTML 5 Canvas API](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API), [novorender's webgl-api](./getting_started.mdx) (including [loading scenes](./loading_scenes.mdx) and [searching](./searching)), and finally, a basic knowledge of [Quadtree data structure](https://en.wikipedia.org/wiki/Quadtree).
It is recommend to get a quick grasp of these concepts before moving forward. -::: - ---- - -## Structure - -We will use two HTML canvas elements: one for the 3D model, and the other will be used to show the minimap. In the demo code, they're referred to as `canvas` and `previewCanvas`. -:::info -In some places you'll notice that we use the gl-matrix library for linear algebra (vector and matrix math). 3D vectors are defined as vec3 types, which equates to a array of length=3. If all you wish to do is to pass in parameters or read values, you may treat these types a regular array of numbers, i.e. you don't need the gl-matrix library itself for this. If you do wish to perform some linear algebra yourself, however, we recommend you do add it to your own code as well. Just make sure you use same major version as us (^3.3.0). -::: - ---- - -## Loading and displaying the scene - -Let's start by loading a public scene using [Data JS API](/docs/data-js-api) - -```typescript -// Initialize the data API with the Novorender data server service -const dataApi = dataJsApi.createAPI({ - // we're loading a public scene so it doesn't require any auth header, - // see `https://docs.novorender.com/docs/tutorials/loading_scenes#private-scenes` if you want to load private scenes. - serviceUrl: DATA_API_SERVICE_URL, -}); - -// load a public scene -const sceneData = await dataApi.loadScene("fa20cb75e20e42b789c8e0f18ef5cc6f"); - -// some necessary render config, that will be applied to the loaded scene -const renderSettings: RecursivePartial = { - quality: { - resolution: { value: 1 }, // Set resolution scale to 1 - }, - clippingVolume: { - enabled: true, - mode: "union", - planes: [[0, 1, 0, -5.5]], - }, -}; -``` - -Next, we'll create a function that will create the [view](/docs/webgl-api/interfaces/NovoRender.View) and a [camera controller](/docs/webgl-api/interfaces/NovoRender.CameraController) for the 3D space: - -```typescript -async function initView(webglApi: typeof WebglApi, canvas: HTMLCanvasElement, sceneData: SceneData, renderSettings: RecursivePartial): Promise { - // Destructure relevant properties into variables - const { url, db, settings, camera: cameraParams } = sceneData; - - // initialize the webgl api - const api = webglApi.createAPI(); - - // Load scene - const scene = await api.loadScene(url, db); - - // Create a view with the scene's saved settings - const view = await api.createView(settings, canvas); - - view.applySettings(renderSettings); - - // Create a camera controller with the saved parameters with flight as fallback - let camera: WebglApi.CameraControllerParams = cameraParams ?? { kind: "flight" }; - camera = { ...camera, ...{ yaw: 0, pitch: -90 } }; - view.camera.controller = api.createCameraController(camera as WebglApi.FlightControllerParams, canvas); - - // Assign the scene to the view - view.scene = scene; - - return view; -} -``` - -this function will be invoked after loading the scene. - -Finally, run the render loop to display the output: - -```typescript -// Create a bitmap context to display render output -const ctx = canvas.getContext("bitmaprenderer"); - -// render loop -while (true) { - // Render frame - currentOutput = await view.render(); - { - // Finalize output image - const image = await currentOutput.getImage(); - if (image) { - // Display the given ImageBitmap in the canvas associated with this rendering context. - ctx?.transferFromImageBitmap(image); - // release bitmap data - image.close(); - } - } - currentOutput.dispose(); -} -``` - -That is all the code that's necessary for loading a scene. - ---- - -## Loading and displaying the preview image - -PDF documents uploaded to Novorender will have a preview property that can be used to display the PDF as an image. This image can be found by using database search and getting the metadata. - -Below is the code that we will be using the fetch the image: - -```typescript -// perform a db search to get the metadata -const iterator = scene?.db?.search( - { - searchPattern: [{ property: "Novorender/Document/Preview", exact: true }], - }, - undefined, -); -const iteratorResult = await iterator?.next(); -const data = await iteratorResult?.value.loadMetaData(); -let image = ""; -for (const prop of data.properties) { - if (prop[0] === "Novorender/Document/Preview") { - const url = new URL((scene as any).url); - url.pathname += prop[1]; - // This is the PDF image URL - image = url.toString(); - } -} -``` - -Now the image can be drawn on the `previewCanvas`: - -```typescript -// get the 2D context -const context = previewCanvas.getContext("2d"); - -const img = new Image(); -img.onload = function () { - context.drawImage(img, 0, 0, img.width, img.height, 0, 0, img.width, img.height); -}; -img.src = image; -``` - -Now that we have completed the initial steps, we will now proceed to implementing the core logic of the minimap. - ---- - -## Quadtree - -When dealing with large images or PDF previews, loading the entire high-quality image at once and then zooming can be resource-intensive and slow. Quadtree provides an effective solution by breaking down the image into smaller tiles, enabling efficient storage and retrieval. Each tile represents a specific region of the image, allowing us to load only the required portions based on the user's viewport and zoom level. - -![An example image showing the usage of quadtree](../../static/assets/5cff54de-5133-4369-8680-52d2723eb756.jpg) - -Each tile is represented by its Quadkey, Quadkeys have some important characteristics. Firstly, the length of a quadkey is the same as the level of detail for the tile it represents. Secondly, the quadkey of a tile always begins with the quadkey of its parent tile (the tile that contains it at the previous level). For instance, in the example given, tile 2 is the parent of tiles 20 through 23, and tile 13 is the parent of tiles 130 through 133. - -The image for each tile can be fetched by its quadkey. For instance, if we wanted to load the image for the first tile in level 2, we would simply have to append its quadkey to the original image's URL like this: `"sample_image_" + 00 + ".jpg"` - -### Creating Quadtree - -Let's start by creating a class named `QuadNode`. This class will define some methods for creating (see the `split()` method) and searching (`retrieve()`) the quads within the quadtree. -Below is the implementation that we'll use in the demo: - -```typescript -class QuadNode { - /** - * The numeric boundaries of this node. - * @readonly - */ - bounds: NodeGeometry; - - /** - * The level of this node. - * @defaultValue `0` - * @readonly - */ - level: number; - - Id: string; - - empty = false; - - nodes: QuadNode[]; - - constructor(bounds: { x: number; y: number; width: number; height: number; Id: string }, level: number) { - this.bounds = { - x: bounds.x || 0, - y: bounds.y || 0, - width: bounds.width, - height: bounds.height, - }; - this.level = level || 0; - this.nodes = []; - this.Id = bounds.Id; - } - - /** - * Split the node into 4 subnodes. - */ - split(splitWidth: number, splitHeight: number): void { - const level = this.level + 1; - const { bounds } = this; - - const width = splitWidth / 2, - height = splitHeight / 2, - x = bounds.x, - y = bounds.y; - - // max 5 levels - if (level > 6) { - return; - } - - const coords = [ - { x: x, y: y }, - { x: x + width, y: y }, - { x: x, y: y + height }, - { x: x + width, y: y + height }, - ]; - let _id; - { - for (let i = 0; i < coords.length; i++) { - if (level === 0) { - _id = "root"; - } - if (level === 1) { - _id = i.toString(); - } else { - _id = this.Id + i.toString(); - } - const childWidth = Math.min(width, bounds.width - (coords[i].x - bounds.x)); - const childHeight = Math.min(height, bounds.height - (coords[i].y - bounds.y)); - this.nodes[i] = new QuadNode( - { - x: coords[i].x, - y: coords[i].y, - height: childHeight, - width: childWidth, - Id: _id, - }, - level, - ); - - if (childWidth <= 0 || childHeight <= 0) { - this.nodes[i].empty = true; - } else { - this.nodes[i].split(width, height); - } - } - } - } - - overlaps(obj: NodeGeometry): boolean { - const { bounds } = this; - const maxBoundX = bounds.x + bounds.width; - const maxBoundY = bounds.y + bounds.height; - const maxObjX = obj.x + obj.width; - const maxObjY = obj.y + obj.height; - const insideX = (obj.x >= bounds.x && obj.x <= maxBoundX) || (maxObjX >= maxBoundX && obj.x <= maxBoundX) || (maxObjX >= bounds.x && maxObjX < maxBoundX); - const insideY = (obj.y >= bounds.y && obj.y <= maxBoundY) || (maxObjY >= maxBoundY && obj.y <= maxBoundY) || (maxObjY >= bounds.y && maxObjY < maxBoundY); - if (insideX && insideY) { - return true; - } - return false; - } - - /** - * Return all objects that could collide with the given geometry. - * @param obj - geometry to be checked - * @param testLevel - level to be checked - * @returns Array containing all detected objects. - */ - retrieve(obj: NodeGeometry, testLevel: number): QuadNode[] { - let returnObjects: QuadNode[] = []; - // if we have subnodes, retrieve their objects - if (this.nodes.length && this.level < testLevel) { - for (let i = 0; i < this.nodes.length; i++) { - const node = this.nodes[i]; - if (!node.empty && node.overlaps(obj)) { - returnObjects = returnObjects.concat(node.retrieve(obj, testLevel)); - } - } - } else { - returnObjects.push(this); - } - return returnObjects; - } -} -``` - -### Usage example - -The `QuadNode` class can be used to create a quadtree using the following example: - -```typescript -const width = 800; // width of the root Quad. -const height = 600; // height of the root Quad. -const level = 1; // root level -const quadTree = new QuadNode({ x: 0, y: 0, width, height, Id: "" }, level); - -// Split the nodes into 4 subnodes/quads until reaching max levels of 5. -quadTree.split(splitWidth, splitHeight); -``` - -### Zooming in/out on canvas using quadtree - -Now that we know how to create a quadtree, we can now move forward to implement the tile based zoom on our `previewCanvas`, let's start by adding an `onWheel` event listener on our minimap (aka `previewCanvas`). -Below code shows how to use `onwheel` event listener to zoom in/out on canvas using mouse wheel or touchpad: - -```typescript -previewCanvas.onwheel = async (e) => { - e.preventDefault(); - - wheelDelta += e.deltaY * -0.01; - wheelDelta = Math.min(Math.max(1, wheelDelta), 5); - currentLevel = Math.ceil(wheelDelta); - - if (currentLevel === 1) { - // reset the zoom - level = currentLevel; - try { - const initialImage = await loadImage(preview as string); - if (previewCanvasContext2D) { - previewCanvasContext2D.clearRect(0, 0, previewCanvas.width, previewCanvas.height); - previewCanvasContext2D.drawImage(initialImage, 0, 0, previewCanvas.width, previewCanvas.height); - } - } catch (error) { - console.error("Failed to load the preview image ", error); - } - currentArea = undefined; - elements = undefined; - zoomedImage = undefined; - return; - } - if (level === currentLevel) { - return; - } - if (level === 2) { - level++; - } - - level = currentLevel; - - // Get the position of the click relative to the canvas - const rect = previewCanvas.getBoundingClientRect(); - let centerX = e.clientX - rect.left; - let centerY = e.clientY - rect.top; - const width = previewCanvas.width / currentLevel; - const height = previewCanvas.height / currentLevel; - - if (currentArea) { - const previousAreaMinX = currentArea.x; - const previousAreaMinY = currentArea.y; - centerX = previousAreaMinX + centerX / currentLevel; - centerY = previousAreaMinY + centerY / currentLevel; - } - - const right = previewCanvas.width - (centerX + width / 2); - const bot = previewCanvas.height - (centerY + height / 2); - - let x = centerX - width / 2; - if (right < 0) { - x += right; - } - - let y = centerY - height / 2; - if (bot < 0) { - y += bot; - } - - const area: NodeGeometry = { - x: Math.max(0, x), - y: Math.max(0, y), - width: width, - height: height, - }; - - currentArea = area; - elements = quadTree.retrieve(currentArea, currentLevel); - - // draw and stitch the found images on canvas - await drawAndStitchOnCanvas(elements, currentArea); -}; -``` - -#### Breakdown of above code - -We start by defining a rectangle to retrieve the quads that intersect with it: - -```typescript -const area: NodeGeometry = { - x: Math.max(0, x), - y: Math.max(0, y), - width: width, - height: height, -}; -``` - -Then we call `retrieve()` method of `MinimapHelper` to search for all the quads that intersect with the rectangle created above: - -```typescript -elements = quadTree.retrieve(previousArea, currentLevel); -``` - -And finally call `drawAndStitchOnCanvas()` on found elements to load the image tiles and stitch them together on the minimap (`previewCanvas`): - -```typescript -const drawAndStitchOnCanvas = async (elements: QuadNode[], area: NodeGeometry) => { - // clear the canvas - previewCanvasContext2D?.clearRect(0, 0, previewCanvas.width, previewCanvas.height); - // Loop through the found nodes and draw images based on node on the canvas - for (let i = 0; i < elements.length; i++) { - const node = elements[i]; - const nodeBoundsWidth = node.bounds.width; - const nodeBoundsHeight = node.bounds.height; - try { - const loadedImage = await loadImage(preview as string, node.Id); - - const boundsWRatio = loadedImage.naturalWidth / nodeBoundsWidth; - const boundsHRatio = loadedImage.naturalHeight / nodeBoundsHeight; - - const cutLeft = Math.max(0, area.x - node.bounds.x); - const cutRight = Math.max(0, node.bounds.x + node.bounds.width - (area.x + area.width)); - const cutX = cutLeft + cutRight; - - const cutTop = Math.max(0, area.y - node.bounds.y); - const cutBot = Math.max(0, node.bounds.y + node.bounds.height - (area.y + area.height)); - const cutY = cutTop + cutBot; - - const zoom = currentLevel; - - const x = (Math.max(node.bounds.x, area.x) - area.x) * zoom; - const y = (Math.max(node.bounds.y, area.y) - area.y) * zoom; - - const sx = cutLeft * boundsWRatio; - const sy = cutTop * boundsHRatio; - - const sWidth = loadedImage.naturalWidth - sx - cutRight * boundsWRatio; - const sHeight = loadedImage.naturalHeight - sy - cutBot * boundsHRatio; - - const dWidth = (node.bounds.width - cutX) * zoom; - const dHeight = (node.bounds.height - cutY) * zoom; - - previewCanvasContext2D?.drawImage(loadedImage, sx, sy, sWidth, sHeight, x, y, dWidth + 1, dHeight + 1); // +1 for pixel overlap to avoid grid like lines - } catch (err) { - console.error("Something went wrong", err); - } - } -}; -``` - ---- - -## Minimap - -In this section, we will learn how to download and create the minimap. - -### Creating minimap - -Let's initialize a class called `MinimapHelper`. This class contains useful methods for interacting between the PDF preview (`toMinimap()`) and the 3D Space (`toWorld()`), you'll see their actual usage in the demo provided at the end of this tutorial. - -```typescript -/** - * Class representing a MinimapHelper that also contains an instance of `QuadNode` class. - */ -export class MinimapHelper { - /** - * Subnodes of this node - * @defaultValue `[]` - * @readonly - */ - quadTree: QuadNode; - - pixelWidth = 0; - pixelHeight = 0; - currentIndex = 0; - - glMatrix!: typeof GlMatrix; - - /** - * Minimap Constructor - * @param minimaps - minimap info - * @param glMatrix - glMatrix dependency - * @param quadTreeProps - bounds and properties of the node - * @param level - depth level (internal use only, required for subnodes) - */ - constructor( - width: number, - height: number, - readonly minimaps: MinimapInfo[], - glMatrix: typeof GlMatrix, - ) { - this.pixelWidth = width; - this.pixelHeight = height; - this.glMatrix = glMatrix; - this.quadTree = new QuadNode({ x: 0, y: 0, width, height, Id: "" }, 1); - } - - async split(topLevelWidth: number, topLevelHeight: number) { - const numImagesWidth = topLevelWidth / 256; - const cw = Math.ceil(Math.log(numImagesWidth) / Math.log(2)); - const widthSplitBy = Math.pow(2, cw) / 2; - const widthSplit = widthSplitBy / numImagesWidth; - - const numImagesHeight = topLevelHeight / 256; - const ch = Math.ceil(Math.log(numImagesHeight) / Math.log(2)); - const heightSplitBy = Math.pow(2, ch) / 2; - const heightSplit = heightSplitBy / numImagesHeight; - - this.quadTree.split(this.pixelWidth * widthSplit * 2, this.pixelHeight * heightSplit * 2); - } - - retrieve(obj: NodeGeometry, testLevel: number): QuadNode[] { - return this.quadTree.retrieve(obj, testLevel); - } - - toMinimap(worldPos: vec3): vec2 { - const curInfo = this.getCurrentInfo(); - const diff = this.glMatrix.vec3.sub(this.glMatrix.vec3.create(), worldPos, curInfo.corner); - const diffX = this.glMatrix.vec3.dot(diff, curInfo.dirX); - const diffY = this.glMatrix.vec3.dot(diff, curInfo.dirY); - - const x = (diffX / curInfo.dx) * this.pixelWidth; - const y = this.pixelHeight - (diffY / curInfo.dy) * this.pixelHeight; - return this.glMatrix.vec2.fromValues(x, y); - } - - toWorld(minimapPos: vec2): vec3 { - const curInfo = this.getCurrentInfo(); - const diffX = minimapPos[0] / this.pixelWidth; - const diffY = 1 - minimapPos[1] / this.pixelHeight; - const pos = this.glMatrix.vec3.clone(curInfo.corner); - pos[1] += 10; - this.glMatrix.vec3.scaleAndAdd(pos, pos, curInfo.dirX, curInfo.dx * diffX); - this.glMatrix.vec3.scaleAndAdd(pos, pos, curInfo.dirY, curInfo.dy * diffY); - return pos; - } - - directionPoints(worldPos: vec3, rot: quat, length: number): vec2[] { - const path: vec2[] = []; - path.push(this.toMinimap(worldPos)); - const rotA = this.glMatrix.quat.rotateY(this.glMatrix.quat.create(), rot, Math.PI / 8); - const dirZ = this.glMatrix.vec3.fromValues(0, 0, -1); - const dirA = this.glMatrix.vec3.transformQuat(this.glMatrix.vec3.create(), dirZ, rotA); - const posA = this.glMatrix.vec3.scaleAndAdd(this.glMatrix.vec3.create(), worldPos, dirA, length); - path.push(this.toMinimap(posA)); - - const rotB = this.glMatrix.quat.rotateY(this.glMatrix.quat.create(), rot, -Math.PI / 8); - const dirB = this.glMatrix.vec3.transformQuat(this.glMatrix.vec3.create(), dirZ, rotB); - const posB = this.glMatrix.vec3.scaleAndAdd(this.glMatrix.vec3.create(), worldPos, dirB, length); - path.push(this.toMinimap(posB)); - - return path; - } - - getCurrentInfo() { - return this.minimaps[this.currentIndex]; - } - - getMinimapImage() { - return this.getCurrentInfo().image; - } - - getAspect() { - return this.getCurrentInfo().aspect; - } - - update(camPos: vec3): boolean { - for (let i = 1; i < this.minimaps.length; ++i) { - if (camPos[1] - 0.5 < this.minimaps[i].elevation) { - if (i !== this.currentIndex) { - this.currentIndex = i - 1; - return true; - } - return false; - } - } - if (this.currentIndex !== this.minimaps.length - 1) { - this.currentIndex = this.minimaps.length - 1; - return true; - } - return false; - } -} -``` - -The `MinimapHelper` class also creates a new instance of the `QuadNode` in the constructor. Therefore, when we create a new instance of `MinimapHelper`, it will contain our quadtree, which can be accessed using the `quadTree` property. - -### Downloading the minimap - -After initializing the class mentioned above, we will proceed to create a function responsible for downloading the minimap. It should be noted that this function includes a DB search to obtain information about the "Corners" and "Size" of Quadtree, which is necessary for the `MinimapHelper` class we created earlier. "Corners" info is utilized for the transformation between image space and 3D space and the "Size" property is used to correctly split the Quadtree. - -```typescript -async function downloadMinimap(width: number, height: number, scene: SceneData, glMatrix: typeof GlMatrix): Promise { - const minimaps: MinimapInfo[] = []; - - // perform a db search to get the metadata - const iterator = scene?.db?.search( - { - searchPattern: [{ property: "Novorender/Document/Preview", exact: true }], - }, - undefined, - ); - const iteratorResult = await iterator?.next(); - const data = await iteratorResult?.value.loadMetaData(); - - let corner = glMatrix.vec3.create(); - const dirX = glMatrix.vec3.create(); - const dirY = glMatrix.vec3.create(); - let dx = 0; - let dy = 0; - let aspect = 0; - let elevation = 0; - let image = ""; - let topLevelWidth = 0; - let topLevelHeight = 0; - - for (const prop of data.properties) { - switch (prop[0]) { - // get the corners - case "Novorender/Document/Corners": { - const points = prop[1].split("]"); - const c1 = points[0].replaceAll("[", "").split(","); - const c2 = points[1].replaceAll("[", "").split(","); - const c3 = points[2].replaceAll("[", "").split(","); - const a = glMatrix.vec3.fromValues(Number(c1[0]), Number(c1[1]), Number(c1[2])); - const b = glMatrix.vec3.fromValues(Number(c2[1]), Number(c2[2]), Number(c2[3])); - const c = glMatrix.vec3.fromValues(Number(c3[1]), Number(c3[2]), Number(c3[3])); - glMatrix.vec3.sub(dirX, b, a); - dx = glMatrix.vec3.len(dirX); - glMatrix.vec3.normalize(dirX, dirX); - glMatrix.vec3.sub(dirY, c, b); - dy = glMatrix.vec3.len(dirY); - glMatrix.vec3.normalize(dirY, dirY); - corner = glMatrix.vec3.clone(a); - elevation = a[1]; - aspect = dx / dy; - break; - } - - // get the image preview - case "Novorender/Document/Preview": { - const url = new URL((scene as SceneData).url); - url.pathname += prop[1]; - // This is the PDF image URL - image = url.toString(); - break; - } - - // get the top-level dimensions of quadtree - case "Novorender/Document/Size": { - const sizes = prop[1].split(","); - topLevelWidth = Number(sizes[0]); - topLevelHeight = Number(sizes[1]); - break; - } - } - } - - minimaps.push({ - aspect, - image, - dx, - dy, - corner, - dirX, - dirY, - elevation, - }); - - minimaps.sort((a, b) => a.elevation - b.elevation); - - const minimap = new MinimapHelper(width, height, minimaps, glMatrix); - - // split the quadtree - await minimap.split(); - - return minimap; -} -``` - -:::note -In addition to obtaining the corner information, the function above also downloads the image URL for the `previewCanvas`, eliminating the need for separate downloading as [mentioned earlier](/docs/tutorials/minimap#loading-and-displaying-the-preview-image). -::: - -### Usage example - -Invoking the above method, `downloadMinimap()`, will provide us with a new instance of the `MinimapHelper` class. This instance will contain our quadtree, as well as other useful methods for interacting with both the minimap and the 3D space. The example below demonstrates the usage of the `downloadMinimap` function: - -```typescript -let preview: string | undefined; -let minimap: MinimapHelper; - -if (sceneData) { - minimap = await downloadMinimap(previewCanvas.width, previewCanvas.height, sceneData, glMatrix); - - // get the image URL for `previewCanvas` - preview = minimap.getMinimapImage(); -} -``` - -### Updating the camera movements between minimap and 3D space - -In this section we'll implement a mechanism to update the camera position on 3D space using minimap's `x` and `y` coordinates. -Let's start by adding a `click` listener on the minimap (`previewCanvas`) that will move the camera on the 3D space to the same position as the minimap: - -```typescript -previewCanvas.onclick = (e: MouseEvent) => { - // Get the position of the click relative to the canvas - const rect = previewCanvas.getBoundingClientRect(); - let x = e.clientX - rect.left; - let y = e.clientY - rect.top; - - // `currenArea` will have a value if the previewCanvas is zoomed in - if (currentArea) { - const canvasScaleX = currentArea.width / previewCanvas.width; - const canvasScaleY = currentArea.height / previewCanvas.height; - x = currentArea.x + (x * canvasScaleX) / currentLevel; - y = currentArea.y + (y * canvasScaleY) / currentLevel; - } - - // this will move the camera on 3D space to same position as minimap - view.camera.controller.moveTo(minimap.toWorld(glMatrix.vec2.fromValues(x, y)), view.camera.rotation); -}; -``` - -The next step is to draw two direction vectors on the minimap. These vectors will point to the click positions (`x` and `y`) obtained from the click listener mentioned above. -The function below handles drawing and animating the direction vectors. We need to run this function on every frame change to detect the camera change, which is why you'll notice it being called within the render loop in demo. - -```typescript -function animate() { - const ctx = previewCanvas.getContext("2d")!; - // Run every frame to check if the camera has changed - if (!prevCamRot || !glMatrix.quat.equals(prevCamRot, view.camera.rotation) || !prevCamPos || !glMatrix.vec3.equals(prevCamPos, view.camera.position)) { - prevCamRot = glMatrix.quat.clone(view.camera.rotation); - prevCamPos = glMatrix.vec3.clone(view.camera.position); - if (minimap) { - // Update minimap info based on camera position. Returns true if it changed the pdf to another floor - minimap.update(view.camera.position as vec3); - let imgUrl: string; - if (elements?.length && currentLevel !== 1 && zoomedImage) { - imgUrl = zoomedImage; - } else { - imgUrl = minimap.getMinimapImage(); - } - loadImage(imgUrl).then((img) => { - // Redraw the image for te minimap - ctx.clearRect(0, 0, previewCanvas.width, previewCanvas.height); - ctx.drawImage(img, 0, 0, previewCanvas.width, previewCanvas.height); - // draw and animate directions vectors - drawVectors(ctx); - }); - } - } -} - -// handles the drawing and animating of direction vectors -const drawVectors = (ctx: CanvasRenderingContext2D) => { - //Gets the camera position in minimap space - const minimapPos = minimap.toMinimap(view.camera.position as vec3); - - //Gets a cone of the camera direction in minimap space, point[0] is the camera position - const dirPath = minimap.directionPoints(view.camera.position as vec3, view.camera.rotation as quat, 5 / currentLevel); - if (currentArea) { - minimapPos[0] = (minimapPos[0] - currentArea.x) * currentLevel; - minimapPos[1] = (minimapPos[1] - currentArea.y) * currentLevel; - for (let i = 0; i < 3; ++i) { - dirPath[i][0] = (dirPath[i][0] - currentArea.x) * currentLevel; - dirPath[i][1] = (dirPath[i][1] - currentArea.y) * currentLevel; - } - } - ctx.strokeStyle = "green"; - for (let i = 1; i < dirPath.length; ++i) { - ctx.beginPath(); - ctx.lineWidth = 3; - ctx.moveTo(dirPath[0][0], dirPath[0][1]); - ctx.lineTo(dirPath[i][0], dirPath[i][1]); - ctx.stroke(); - } - ctx.fillStyle = "green"; - ctx.beginPath(); - ctx.ellipse(minimapPos[0], minimapPos[1], 5, 5, 0, 0, Math.PI * 2); - ctx.fill(); -}; -``` - -Clicking on the mininmap now should draw 2 direction vectors pointing towards the click position. - ---- - -## Putting all the pieces together - -The following demo combines all the code we previously discussed to create a quadtree, minimap, and synchronize camera movements between both views. - -Please feel free to make any desired changes in the playground editorto suit your preferences or to meet your specific requirements. - - diff --git a/legacy-docs/docs/tutorials/object_groups.mdx b/legacy-docs/docs/tutorials/object_groups.mdx deleted file mode 100644 index 893ca096..00000000 --- a/legacy-docs/docs/tutorials/object_groups.mdx +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: "Object groups" -sidebar_position: 5 -description: "Object grouping." -keywords: ["novorender api docs", "webgl api", "data js api", "object groups"] ---- - -import { tutorials } from "@site/demo-snippets/index"; - -Although the [ObjectGroup interface](/docs/data-js-api/interfaces/DataJsAPI.ObjectGroup) itself is not particularly noteworthy, -the [SceneData.objectGroups](/docs/data-js-api/interfaces/DataJsAPI.SceneData#objectgroups) property can be extremely useful. -Object IDs in Novorender are not fixed and may change whenever the scene's resources are modified. -Therefore if you store the IDs from a search (e.g. all objects on the first floor) and then later modify the scene's resources, -the scene's objects' IDs may have changed and your stored list of IDs will be stale. - -The search patterns assigned to each object group is run every time a scene's resources are modified so that the list of IDs always will be correct. -That way you can easily create cached searches by using object groups. - -In the case where the [objectGroups.ids](/docs/data-js-api/interfaces/DataJsAPI.Bookmark.ObjectGroup#ids) list is quite large, the .ids property is `undefined` and should be explicity loaded as shown in the [Floors example](#floors-example). - -## Create group - -```typescript -// Search utility fn to return array of object IDs -async function search(scene: Scene, searchPattern: SearchPattern[]): Promise { - const iterator = scene.search({ searchPattern }); - - const result: number[] = []; - for await (const object of iterator) { - result.push(object.id); - } - - return result; -} - -// Search pattern to assign to group -const searchPattern: SearchPattern[] = [ - { - property: "path", - value: "Farger.IFC/3/Surface:2481563/Apartment with 12 condos/2ND FLOOR", - exact: true, - }, -]; - -const secondFloor: ObjectGroup = { - // This search is run on the server every time the scene is rebuilt - // and the resulting object IDs are saved to the group.ids property - search: searchPattern, - // The search is not run when the groups are saved - // so you have to run it client side and set the .ids property yourself when you create the group - ids: await search(scene, searchPattern), - // Search deep - includeDescendants: true, - // The remaining properties are not used for anything on the server - // Group id - UUIDv4 in this case, but it's up to you - id: "56196cbf-f5aa-4f65-9934-911546f89225", - name: "2nd floor", // Display name - grouping: "", // We use this as a path style string to nest groups in the UI - color: [1, 0, 0, 1], // Can be used to highlight objects in group - selected: false, - hidden: false, -}; - -// Before saving it is a good idea to load the latest scene data -// in case it has been modified by someone else as there is currently no way of just adding groups -const sceneData = await dataApi.loadScene(SCENE_ID); - -dataApi.putScene({ - // Keep most of the data - ...sceneData, - // scene.id is the id of the main/admin scene while SCENE_ID is the viewer scene id - url: `${SCENE_ID}:${scene.id}`, - // Overwrite .objectGroups - objectGroups: [secondFloor], -}); - -// Now that the group is saved the .ids property will be kept up to date by the server -``` - -## Modify groups - -```typescript title="Edit a group" -// Load scene data -const sceneData = await dataApi.loadScene(SCENE_ID); -// ID of group to edit -const toEdit = "56196cbf-f5aa-4f65-9934-911546f89225"; -// Create new array with the changes applied. -// In this case name is set to "Updated name" -const updatedGroups = sceneData.objectGroups.map((group) => (group.id === toEdit ? { ...group, name: "Updated name" } : group)); - -// Save scene -dataApi.putScene({ - ...sceneData, - url: `${SCENE_ID}:${scene.id}`, - objectGroups: updatedGroups, -}); -``` - -```typescript title="Delete a group" -// Load scene data -const sceneData = await dataApi.loadScene(SCENE_ID); -// ID of group to delete -const toDelete = "56196cbf-f5aa-4f65-9934-911546f89225"; -// Create new array without the group to delete -const updatedGroups = sceneData.objectGroups.filter((group) => group.id !== toDelete); - -// Save scene -dataApi.putScene({ - ...sceneData, - url: `${SCENE_ID}:${scene.id}`, - objectGroups: updatedGroups, -}); -``` - -## Floors example - -In this example we have predefined groups which are set up for each floor and created buttons to isolate [objectGroups](/docs/data-js-api/interfaces/DataJsAPI.Bookmark-1#objectgroups) -in clicked floor's group. - - diff --git a/legacy-docs/docs/tutorials/object_metadata.mdx b/legacy-docs/docs/tutorials/object_metadata.mdx deleted file mode 100644 index ef67a0b4..00000000 --- a/legacy-docs/docs/tutorials/object_metadata.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: "Object metadata" -sidebar_position: 6 -description: "Object metadata." -tags: - - Properties - - Zoom to - - Move to - - Fly to -keywords: ["novorender api docs", "webgl api", "object metadata"] ---- - -import { tutorials } from "@site/demo-snippets/index"; - -Object metadata is not loaded automatically with the scene and may require additional server requests depending on what data you need. -Generally you will work with either [HierarchicalObjectReference](/docs/webgl-api/interfaces/NovoRender.HierarcicalObjectReference) or the full [ObjectData](/docs/webgl-api/interfaces/NovoRender.ObjectData) metadata set. - -## From pick - -If you are not already familiar with picking, see [Object selection](./object_selection) first. - - - -## From search - -If you are not already familiar with searching, see [Searching](./searching) first. - - - -## Fly to objects - -The previous examples show how to load object data and dump it in a box. -In this example we will show how to fly to objects using [CameraController.zoomTo()](/docs/webgl-api/interfaces/NovoRender.CameraController#zoomto). -When the example is run it will first do a quick search for 4 objects and fly to them. After that it will fly to any object you click. - - diff --git a/legacy-docs/docs/tutorials/object_selection.mdx b/legacy-docs/docs/tutorials/object_selection.mdx deleted file mode 100644 index 818c5c03..00000000 --- a/legacy-docs/docs/tutorials/object_selection.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "Object Selection" -sidebar_position: 3 -description: "Highlighting sets of objects using WebGL API." -keywords: ["novorender api docs", "webgl api", "object selection"] ---- - -import { tutorials } from "@site/demo-snippets/index"; - -Novorender lets you highlight sets of objects. -This could be used to visualize current object selection, or groups of objects, for instance the results of data queries. - -### Object Identity - -All the objects in a scene are enumerated and assigned a unique integer id/index, expressed as [ObjectId](/docs/webgl-api/interfaces/NovoRender.PickInfo#objectid). - -One way of obtaining such an id is using the [pick()](/docs/webgl-api/interfaces/NovoRender.View#pick) function, which lets you pick the frontmost object, if any, at the given x,y canvas coordinate. - -```typescript -const result = await renderOutput.pick(x, y); -if (result) { - const { objectId } = result; -} -``` - -### Object highlighting - -To highlight the picked object, we must create a highlight object. -Highlighting works by performing a linear transform of the red, green, blue and alpha (opacity) channels. -For now, we'll simply make the selected object lime green. - -```typescript -const red = 0.0; -const green = 1.0; -const blue = 0.0; -const highlightGroup1 = api.createHighlight({ - kind: "color", - color: [red, green, blue], -}); -``` - -Highlights are applied to groups of objects. -By default, all objects are assigned to group #0. -To make our picked object stand out, we assign it to group #1. - -```typescript -scene.objectHighlighter.objectHighlightIndices[objectId] = 1; -scene.objectHighlighter.commit(); // call this to commit all changes -``` - -To make our selected objects stand out even further, we make all other objects less colorful by halving their color saturation. - -```typescript -const highlightGroup0 = api.createHighlight({ kind: "hsla", saturation: 0.5 }); -``` - -We then assign these highlights to our two groups, default and selected respectively: - -```typescript -view.settings.objectHighlights = [highlightGroup0, highlightGroup1]; -``` - -### Demo - -Click on objects to turn them green. - - -
- -:::note -Currently, there are a maximum of 256 highlight groups, the last one (#255) being reserved for objects that should not be rendered. -::: diff --git a/legacy-docs/docs/tutorials/parametric_measure.mdx b/legacy-docs/docs/tutorials/parametric_measure.mdx deleted file mode 100644 index bbfa700b..00000000 --- a/legacy-docs/docs/tutorials/parametric_measure.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: "Parametric measure" -description: "Fetch parametric data based on real world position, and calculate measurements between 2 objects using Measure API." -keywords: ["novorender api docs", "webgl api", "measure api", "parametric measure"] ---- - -import { tutorials } from "@site/demo-snippets/index"; - -Novorender measure API can be used to fetch parametric data based on real world position, and calculate measurements between 2 objects - -### Measure entity - -A measure entity refers to a part of a parametric object, for example the inner or outer cylinder of a pipe. -A measure entity can also be a single point, this is usually used if no parametric object exists at a clicked location. - -The normal way of getting measure entities is to used the [pickMeasureEntity()](/docs/measure-api/interfaces/Measure.MeasureScene#pickmeasureentity) function on the measure [scene](/docs/measure-api/interfaces/Measure.MeasureScene#pickmeasureentity) object. This will use world coordinates and [objectId](/docs/webgl-api/interfaces/NovoRender.PickInfo#objectid) to find the closest edge surface or point. It will return the picked point if no parametric data is found near the input point. [objectId](/docs/webgl-api/interfaces/NovoRender.PickInfo#objectid) and [position](/docs/webgl-api/interfaces/NovoRender.PickInfo#position) can be used from the novorender webgl-api [pick](/docs/webgl-api/interfaces/NovoRender.View#pick) function on render [renderOutput](/docs/webgl-api/interfaces/NovoRender.RenderOutput) - -```typescript -const output = await view.render(); -const result = output.pick(x, y); -if (result) { - const entity = await measureScene.pickMeasureEntity(result.objectId, result.position); -} -``` - -### Parametric values on entity - -To get the parametric values such as the the radius, and centerline of a cylinder the [measure()](/docs/measure-api/interfaces/Measure.MeasureScene#measure) -function can be used. This function be be used to get values from a single object by leaving the second argument as undefined. - -```typescript -const measureValues = measurescene.measure(entity); -if (measureValues.kind === "cylinder") { - console.log(`Radius of cylinder is: ${measureValues.radius}`); -} -``` - -### Measure against another entity - -A measure between two entities is done by using the [measure()](/docs/measure-api/interfaces/Measure.MeasureScene#measure) function on scene with 2 arguments. -What property the resulting object has will depend on the input arguments. There is also an option parameter -to support additional options such as where a cylinder should measure from - -```typescript -const output = await view.render(); -const result1 = output.pick(x1, y1); - -const result2 = output.pick(x2, y2); -if (result1 && result2) { - const entity1 = await measureScene.pickMeasureEntity(result1.objectId, result1.position); - - const entity2 = await measureScene.pickMeasureEntity(result2.objectId, result2.position); - - const measureValues = (await measurescene.measure(entity1, entity2)) as DuoMeasurementValues | undefined; - if (measureValues && measureValues.distance) { - console.log(`Distance between objects is: ${measureValues.distance}`); - } -} -``` - -### Demo - -Click to select parametric object, parametric data will be shown in an alert dialog. Select another object and the measurement data between the objects will be shown in the alert dialog. -Clicking further objects will alternate between first and second selected and show measure values within an alert dialog. - - -
- -:::note -Currently, there are a maximum of 256 highlight groups, the last one (#255) being reserved for objects that should not be rendered. -::: diff --git a/legacy-docs/docs/tutorials/placing_pdf.mdx b/legacy-docs/docs/tutorials/placing_pdf.mdx deleted file mode 100644 index 492b94c0..00000000 --- a/legacy-docs/docs/tutorials/placing_pdf.mdx +++ /dev/null @@ -1,163 +0,0 @@ ---- -title: "Utility to place PDF correctly on a 3D asset" -description: "Use two reference points on both the model and the PDF to place and scale the PDF in 3D space" -keywords: ["novorender api docs", "webgl api", "measure api", "data js api", "placing pdf"] ---- - -import { tutorials } from "@site/demo-snippets/index"; - -Normally PDF drawing are not scaled to the 3D geometry, correctly placing and scaling the PDF to fit the 3D geometry -by manipulaing scale, rotation and translations can be difficult. This tutorial will show how we can use the Novorender framework -to help place the PDF correctly. The tutorial is using a floorplan for a building as an example. - -:::note -This tutorial is using database search multiple times, For more information on how to search and loading SceneData, see [Searching](./searching) first. -::: - -### Fetch and draw PDF preview - -PDF documents uploaded to Novorender will have a preview property that can be used to display the PDF as an image. -This image can be found by using database search and getting the metadata. - -```typescript -const pdfScene = (await dataApi.loadScene("bad260f94a5340b9b767ea2756392be4")) as SceneData; -if (pdfScene.db) { - //Search for preview Property - const iterator = pdfScene.db.search( - { - searchPattern: [{ property: "Novorender/Document/Preview", exact: true }], - }, - undefined, - ); - const iteratorResult = await iterator.next(); - const data = await iteratorResult.value.loadMetaData(); - for (const prop of data.properties) { - if (prop[0] === "Novorender/Document/Preview") { - const url = new URL((scene as any).url); - url.pathname += prop[1]; - // This is the PDF image URL - return url.toString(); - } - } -} -return undefined; - -for (let i = 0; i < 5; i++) { - const iteratorResult = await iterator.next(); - - if (iteratorResult.done) { - break; - } - - // Because we have set the search option "full: true" - // .loadMetadata() will not result in any more requests being made - // Try flipping it to false and see the difference in the network request log - const objectWithMetadata = await iteratorResult.value.loadMetaData(); - searchResult.push(objectWithMetadata); -} -``` - -The image can be drawn on a 2d canvas - -```typescript -const img = new Image(); -img.onload = function () { - if (context) { - context.drawImage(img, 0, 0, img.width, img.height, 0, 0, img.width, img.height); - } -}; -img.src = previewImage; -``` - -:::note -This tutorial is written without scaling or moving the image, if scaling and translations are used then these needs to be reveresed in -calculation section below -::: - -### Fetch elevation from storey info - -Storey elevations are normally stored in IFC files so this can be used to find the PDF elevation, -if not then manual input or other metadata is needed, the SceneData for this will need to be from the 3D model asset. - -```typescript -const iterator = scene.search( - { - searchPattern: [ - { property: "IfcClass", value: "IfcBuildingStorey", exact: true }, - ], - }, - undefined -); -... - if (prop[0] === "Novorender/Elevation") { - return Number(prop[1]); - } -... -``` - -### Calculate rotation, scale and position - -:::note -The PDF is scaled to fit one meter on the Y axis -::: - -For these calculations we rely on two selected points from the PDF in pixels, that match two points on the 3D model. -To get the points from the PDF simply use the x and y position on the canvas, for points in the 3D model a top down -orthographic camera can be used with the pick() functionality on the webgl view. Elevation can be used to set a clipping plane, -for information on how to clip the model see [Clipping Volumes](./clipping_volumes), and for more information on -picking and drawing on top of a novorender model see [Draw measure object](./drawing2D). - -:::note -To move the model coordinates to 2D Y must be discarded, Z will be flipped and used instead, -Elevation will be used to put it into 3D pace again -::: - -```typescript -const modelPosA = vec2.fromValues(pickPositionA[0], pickPositionA[2] * -1); -const modelPosB = vec2.fromValues(pickPositionB[0], pickPositionB[2] * -1); -//Invert Y axis on the pixel positions on the pdf image -const pixelPosA = vec2.fromValues(pdfPosA[0], imgHeight.current - pdfPosA[1]); -const pixelPosB = vec2.fromValues(pdfPosB[0], imgHeight.current - pdfPosB[1]); -const pixelLength = vec2.dist(pixelPosA, pixelPosB); -const modelLength = vec2.dist(modelPosA, modelPosB); -const modelDir = vec2.sub(vec2.create(), modelPosB, modelPosA); -vec2.normalize(modelDir, modelDir); -const pixDir = vec2.sub(vec2.create(), pixelPosB, pixelPosA); -vec2.normalize(pixDir, pixDir); -const scale = modelLength / pixelLength; - -const radAroundZ = Math.acos(vec2.dot(modelDir, pixDir)) * -1; -const degreesAroundZ = (angleAroundZRad / Math.PI) * 180; -const pdfToWorldScale = imgHeight.current * scale; -const translation = vec2.sub(vec2.create(), modelPos[0], vec2.fromValues(pixelPosA[0] * scale * Math.cos(radAroundZ), pixelPosA[1] * scale * Math.sin(radAroundZ))); -``` - -### Placing a preview of PDF in scene and update - -Dynamic object will be used to place a preview of the PDF in model space, for more information on how dynamic objects are used -see [Dynamic Objects](./dynamic_objects). The dynamic model data can be found using the data api. Values found in the previous -section will be used to set scale, translation and rotation. - -```typescript -const resource = await this.dataApi.getResource("bad260f94a5340b9b767ea2756392be4"); -const url = new URL(resource.gltf); -const asset = await this.api.loadAsset(url); -const instance = this.view.scene.createDynamicObject(asset); -instance.scale = vec3.fromValues(pdfToWorldScale, pdfToWorldScale, 1); -instance.visible = true; - -// Rotate back to y as height -const rotation = quat.fromValues(-0.70710677, 0, 0, 0.70710677); -instance.position = vec3.transformQuat(vec3.create(), vec3.fromValues(translation[0], translation[1], 161.9), rotation); - -// Rotate around Z to match -instance.rotation = quat.multiply(rotation, rotation, quat.fromEuler(quat.create(), 0, 0, degreesAroundZ)); -``` - -When it looks good this asset can be added to the scene. - -### Demo - -Below example shows how to create a 2d view of the model and the PDF. placing two matching points on each will calculate the translation scale and roatation needed to place the pdf properly in model space - - diff --git a/legacy-docs/docs/tutorials/searching.mdx b/legacy-docs/docs/tutorials/searching.mdx deleted file mode 100644 index 56d68847..00000000 --- a/legacy-docs/docs/tutorials/searching.mdx +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: "Searching" -sidebar_position: 4 -description: "Search using Novorender." -keywords: ["novorender api docs", "webgl api", "searching"] ---- - -import { tutorials } from "@site/demo-snippets/index"; - -Searching will be integral part of most applications using Novorender. -In the example below we demonstrate a few different search patterns where the resulting objects are isolated in the view. -Make sure to also check out the [Scene.search()](/docs/webgl-api/interfaces/NovoRender.Scene#search) documentation. - -### Search By Path - -Example of a Path search pattern where the isolated objects represent the results. - - -
- -### Fluffy Search - -Fluffy search pattern that looks for terms beginning with "Roof" in all properties. - - -
- -### Exact Search - -Exact search that only checks the property "ifcClass" and the exact value "ifcRoof". - - -
- -### Exact Search Excluding Results - -Very similar to the Exact search pattern, but with exclude. All objects other than those located above will be returned. - - diff --git a/legacy-docs/docusaurus.config.js b/legacy-docs/docusaurus.config.js deleted file mode 100644 index 40e71885..00000000 --- a/legacy-docs/docusaurus.config.js +++ /dev/null @@ -1,293 +0,0 @@ -// @ts-check -// Note: type annotations allow type checking and IDEs autocompletion - -const { webpackPlugin } = require("./src/plugins"); - -const lightCodeTheme = require("prism-react-renderer/themes/github"); -const darkCodeTheme = require("prism-react-renderer/themes/dracula"); - -const baseGithub = "https://github.com/novorender"; -const baseAPI = "https://data.novorender.com"; -const baseUrl = "/legacy/"; - -/** @type {import('@docusaurus/types').Config} */ -const config = { - title: "Novorender", - tagline: "Novorender API Docs (Legacy)", - url: "https://novorender.com/", - baseUrl: baseUrl, - onBrokenLinks: "warn", - onBrokenMarkdownLinks: "warn", - favicon: "img/favicon.ico", - organizationName: "novorender", - projectName: "novorender-api-docs", - presets: [ - [ - "classic", - /** @type {import('@docusaurus/preset-classic').Options} */ - ({ - docs: { - sidebarPath: require.resolve("./sidebars.js"), - editUrl: `${baseGithub}/docs/edit/main`, - showLastUpdateTime: true, - docItemComponent: "@theme/ApiItem", - }, - blog: { - showReadingTime: true, - editUrl: `${baseGithub}/docs`, - }, - theme: { - customCss: require.resolve("./src/css/custom.css"), - }, - }), - ], - ], - - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - metadata: [{ name: "keywords", content: "novorender, novorender docs, novorender documentation, novorender/webgl-api, novorender/data-js-api, novorender/measure-api, novorender rest api docs, api docs" }], - docs: { - sidebar: { - hideable: true, - }, - }, - navbar: { - title: "", - logo: { - alt: "novorender logo", - src: "img/novorender_logo_RGB_2021.png", - srcDark: "img/novorender_logo_RGB_2021_white.png", - }, - items: [ - { - to: "docs/category/documentation", - position: "left", - label: "Docs", - }, - { - to: "docs/webgl-api", - position: "left", - label: "WebGL API", - }, - { - to: "docs/data-js-api", - position: "left", - label: "Data JS API", - }, - { - to: "docs/measure-api", - position: "left", - label: "Measure API", - }, - { - to: "docs/category/data-rest-api-v1", - position: "left", - label: "Data Rest API", - }, - { - to: "/playground/", - position: "left", - label: "Playground", - }, - // { to: '/blog', label: 'Blog', position: 'left' }, - { - href: baseGithub, - className: "header-github-link", - position: "right", - "aria-label": "GitHub repository", - }, - ], - }, - footer: { - style: "dark", - links: [ - { - title: "Docs", - items: [ - { - label: "WebGL API", - to: "/docs/webgl-api", - }, - { - label: "Data JS API", - to: "/docs/data-js-api", - }, - { - label: "Measure API", - to: "/docs/measure-api/", - }, - { - label: "Data Rest API", - to: "docs/category/data-rest-api-v1", - }, - ], - }, - { - title: "Community", - items: [ - { - label: "Stack Overflow", - href: "https://stackoverflow.com/questions/tagged/novorender", - }, - // { - // label: 'Discord', - // href: 'https://discordapp.com/invite/docusaurus', - // }, - { - label: "Twitter", - href: "https://twitter.com/novorender", - }, - ], - }, - { - title: "More", - items: [ - // { - // label: 'Blog', - // to: '/blog', - // }, - { - label: "GitHub", - href: baseGithub, - }, - { - label: "Resources", - href: "https://novorender.com/resources/", - }, - ], - }, - { - title: "Legal", - items: [ - { - label: "Privacy Policy", - href: "https://novorender.com/privacy-policy/", - }, - { - label: "Cookie Policy", - href: "https://novorender.com/cookie-policy/", - }, - ], - }, - { - title: "Get in touch", - items: [ - { - label: "LinkedIn", - href: "https://www.linkedin.com/company/novorender/", - }, - { - label: "info@novorender.com", - href: "mailto:info@novorender.com", - }, - ], - }, - ], - copyright: `Copyright © ${new Date().getFullYear()} Novorender.`, - }, - prism: { - theme: lightCodeTheme, - darkTheme: darkCodeTheme, - }, - colorMode: { - disableSwitch: false, - defaultMode: "dark", - }, - announcementBar: { - id: "legacy_announcement_banner", - content: `🚧 This documentation is intended for our Legacy APIs, which have been retired from active maintenance. For the most current documentation, please visit the latest version. 🚧`, - isCloseable: false - }, - }), - plugins: [ - webpackPlugin, - [ - "docusaurus-plugin-typedoc", - - // Plugin / TypeDoc options - { - id: "webgl-api", - entryPoints: ["type-definitions/webgl-api.ts"], - logLevel: "Error", - out: "webgl-api", - tsconfig: "type-definitions/tsconfig.json", - readme: require.resolve("@novorender/webgl-api/README.md"), - disableSources: true, - frontmatter: { - description: "A Web API for scalable 3D rendering in the cloud.", - title: "WebGL API", - }, - }, - ], - [ - "docusaurus-plugin-typedoc", - { - id: "data-js-api", - entryPoints: ["type-definitions/data-js-api.ts"], - logLevel: "Error", - out: "data-js-api", - tsconfig: "type-definitions/tsconfig.json", - readme: require.resolve("@novorender/data-js-api/README.md"), - disableSources: true, - frontmatter: { - description: "A Data JS API for managing scalable Novorender 3D rendering in the cloud.", - title: "Data JS API", - }, - }, - ], - [ - "docusaurus-plugin-typedoc", - { - id: "measure-api", - entryPoints: ["type-definitions/measure-api.ts"], - logLevel: "Error", - out: "measure-api", - tsconfig: "type-definitions/tsconfig.json", - readme: require.resolve("@novorender/measure-api/README.md"), - disableSources: true, - frontmatter: { - description: "for detailed measuring show distances, differences, elevations and more.", - title: "Measure API", - }, - }, - ], - [ - "docusaurus-plugin-openapi-docs", - { - id: "apiDocs", - docsPluginId: "classic", - config: { - rest_api_versioned: { - specPath: "https://api-old-wa-test.azurewebsites.net/swagger/v1/swagger.json", - outputDir: "docs/rest-api", - sidebarOptions: { - groupPathsBy: "tag", - categoryLinkSource: "tag", - }, - version: "1.0", - label: "V1", - baseUrl: `${baseUrl}docs/category/data-rest-api-v1`, - versions: { - "2.0": { - specPath: "https://data-v2.novorender.com/swagger/v2/swagger.json", - outputDir: "docs/rest-api/2.0", - label: "V2", - baseUrl: `${baseUrl}docs/category/data-rest-api-v2`, - }, - }, - }, - }, - }, - ], - require.resolve("@cmfcmf/docusaurus-search-local"), - ], - themes: ["@docusaurus/theme-live-codeblock", "docusaurus-theme-openapi-docs"], - customFields: { - swaggerUI: `https://data-v2.novorender.com/swagger`, - swaggerJSON_V1: `https://api-old-wa-test.azurewebsites.net/swagger/v1/swagger.json`, - swaggerJSON_V2: `https://data-v2.novorender.com/swagger/v2/swagger.json`, - }, -}; - -module.exports = config; diff --git a/legacy-docs/package-lock.json b/legacy-docs/package-lock.json deleted file mode 100644 index 91df7031..00000000 --- a/legacy-docs/package-lock.json +++ /dev/null @@ -1,18565 +0,0 @@ -{ - "name": "novorender-api-docs", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "novorender-api-docs", - "version": "1.0.0", - "dependencies": { - "@cmfcmf/docusaurus-search-local": "1.1.0", - "@docusaurus/core": "2.4.1", - "@docusaurus/preset-classic": "2.4.1", - "@docusaurus/theme-live-codeblock": "2.4.1", - "@fortawesome/fontawesome-svg-core": "6.4.0", - "@fortawesome/free-solid-svg-icons": "6.4.0", - "@fortawesome/react-fontawesome": "0.2.0", - "@mdx-js/react": "1.6.22", - "@monaco-editor/react": "4.5.1", - "@novorender/data-js-api": "0.2.26", - "@novorender/measure-api": "0.0.143", - "@novorender/webgl-api": "0.4.61", - "allotment": "1.19.2", - "clsx": "1.2.1", - "monaco-editor": "0.40.0", - "raw-loader": "4.0.2", - "react": "18.0.0", - "react-dom": "18.0.0", - "react-tiny-popover": "7.2.4", - "react-transition-group": "4.4.5" - }, - "devDependencies": { - "@docusaurus/eslint-plugin": "2.4.1", - "@docusaurus/module-type-aliases": "2.4.1", - "@tsconfig/docusaurus": "1.0.6", - "@tsconfig/node16": "1.0.3", - "@types/puppeteer": "5.4.6", - "@typescript-eslint/eslint-plugin": "^5.54.0", - "@typescript-eslint/parser": "^5.54.0", - "ajv-cli": "5.0.0", - "buffer": "6.0.3", - "copy-webpack-plugin": "11.0.0", - "css-minimizer-webpack-plugin": "4.1.0", - "docusaurus-plugin-openapi-docs": "2.2.3", - "docusaurus-plugin-typedoc": "0.19.2", - "docusaurus-theme-openapi-docs": "2.2.3", - "eslint": "^8.35.0", - "eslint-plugin-react": "^7.32.2", - "lint-staged": "13.2.3", - "path-browserify": "1.0.1", - "process": "0.11.10", - "puppeteer": "13.5.2", - "stream-browserify": "3.0.0", - "string_decoder": "1.3.0", - "typedoc": "0.24.8", - "typedoc-plugin-markdown": "3.15.4", - "typescript": "4.9.4", - "url": "0.11.0", - "util": "0.12.4", - "yargs": "17.4.1" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.8.3", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.8.3" - } - }, - "node_modules/@algolia/autocomplete-js": { - "version": "1.8.3", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-core": "1.8.3", - "@algolia/autocomplete-preset-algolia": "1.8.3", - "@algolia/autocomplete-shared": "1.8.3", - "htm": "^3.1.1", - "preact": "^10.0.0" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.5.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", - "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", - "dependencies": { - "@algolia/autocomplete-shared": "1.9.3" - }, - "peerDependencies": { - "search-insights": ">= 1 < 3" - } - }, - "node_modules/@algolia/autocomplete-plugin-algolia-insights/node_modules/@algolia/autocomplete-shared": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", - "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.8.3", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.8.3" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.8.3", - "license": "MIT" - }, - "node_modules/@algolia/autocomplete-theme-classic": { - "version": "1.8.3", - "license": "MIT" - }, - "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.16.0", - "license": "MIT", - "dependencies": { - "@algolia/cache-common": "4.16.0" - } - }, - "node_modules/@algolia/cache-common": { - "version": "4.16.0", - "license": "MIT" - }, - "node_modules/@algolia/cache-in-memory": { - "version": "4.16.0", - "license": "MIT", - "dependencies": { - "@algolia/cache-common": "4.16.0" - } - }, - "node_modules/@algolia/client-account": { - "version": "4.16.0", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.16.0", - "@algolia/client-search": "4.16.0", - "@algolia/transporter": "4.16.0" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "4.16.0", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.16.0", - "@algolia/client-search": "4.16.0", - "@algolia/requester-common": "4.16.0", - "@algolia/transporter": "4.16.0" - } - }, - "node_modules/@algolia/client-common": { - "version": "4.16.0", - "license": "MIT", - "dependencies": { - "@algolia/requester-common": "4.16.0", - "@algolia/transporter": "4.16.0" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "4.16.0", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.16.0", - "@algolia/requester-common": "4.16.0", - "@algolia/transporter": "4.16.0" - } - }, - "node_modules/@algolia/client-search": { - "version": "4.16.0", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.16.0", - "@algolia/requester-common": "4.16.0", - "@algolia/transporter": "4.16.0" - } - }, - "node_modules/@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" - }, - "node_modules/@algolia/logger-common": { - "version": "4.16.0", - "license": "MIT" - }, - "node_modules/@algolia/logger-console": { - "version": "4.16.0", - "license": "MIT", - "dependencies": { - "@algolia/logger-common": "4.16.0" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "4.16.0", - "license": "MIT", - "dependencies": { - "@algolia/requester-common": "4.16.0" - } - }, - "node_modules/@algolia/requester-common": { - "version": "4.16.0", - "license": "MIT" - }, - "node_modules/@algolia/requester-node-http": { - "version": "4.16.0", - "license": "MIT", - "dependencies": { - "@algolia/requester-common": "4.16.0" - } - }, - "node_modules/@algolia/transporter": { - "version": "4.16.0", - "license": "MIT", - "dependencies": { - "@algolia/cache-common": "4.16.0", - "@algolia/logger-common": "4.16.0", - "@algolia/requester-common": "4.16.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@apidevtools/json-schema-ref-parser": { - "version": "11.7.2", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.7.2.tgz", - "integrity": "sha512-4gY54eEGEstClvEkGnwVkTkrx0sqwemEFG5OSRRn3tD91XH0+Q8XIkYIfo7IwEWPpJZwILb9GUXeShtplRc/eA==", - "dev": true, - "dependencies": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.15", - "js-yaml": "^4.1.0" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/philsturgeon" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.21.0", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.21.3", - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.3", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.3", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.3", - "@babel/types": "^7.21.3", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.21.3", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.21.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.7", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.21.0", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.21.0", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.21.0", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.21.2", - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.20.7", - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.20.5", - "license": "MIT", - "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.21.0", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.21.3", - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.21.0", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.21.0", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.21.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.21.0", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.21.2", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "license": "MIT", - "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.21.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.21.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.21.0", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.21.0", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.20.7", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.21.3", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.20.2", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.21.0", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-transform-typescript": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "license": "MIT" - }, - "node_modules/@babel/runtime": { - "version": "7.21.0", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.21.0", - "license": "MIT", - "dependencies": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.20.7", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.21.3", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.3", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.3", - "@babel/types": "^7.21.3", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.21.3", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@cmfcmf/docusaurus-search-local": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@cmfcmf/docusaurus-search-local/-/docusaurus-search-local-1.1.0.tgz", - "integrity": "sha512-0IVb/aA0IK8ZlktuxmgXmluXfcSpo6Vdd2nG21y1aOH9nVYnPP231Dn0H8Ng9Qf9ronQQCDWHnuWpYOr9rUrEQ==", - "dependencies": { - "@algolia/autocomplete-js": "^1.8.2", - "@algolia/autocomplete-theme-classic": "^1.8.2", - "@algolia/client-search": "^4.12.0", - "algoliasearch": "^4.12.0", - "cheerio": "^1.0.0-rc.9", - "clsx": "^1.1.1", - "lunr-languages": "^1.4.0", - "mark.js": "^8.11.1" - }, - "peerDependencies": { - "@docusaurus/core": "^2.0.0", - "nodejieba": "^2.5.0" - }, - "peerDependenciesMeta": { - "nodejieba": { - "optional": true - } - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docsearch/css": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.1.tgz", - "integrity": "sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA==" - }, - "node_modules/@docsearch/react": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.1.tgz", - "integrity": "sha512-t5mEODdLzZq4PTFAm/dvqcvZFdPDMdfPE5rJS5SC8OUq9mPzxEy6b+9THIqNM9P0ocCb4UC5jqBrxKclnuIbzQ==", - "dependencies": { - "@algolia/autocomplete-core": "1.9.3", - "@algolia/autocomplete-preset-algolia": "1.9.3", - "@docsearch/css": "3.5.1", - "algoliasearch": "^4.0.0" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 19.0.0", - "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-core": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", - "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", - "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", - "@algolia/autocomplete-shared": "1.9.3" - } - }, - "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", - "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", - "dependencies": { - "@algolia/autocomplete-shared": "1.9.3" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-shared": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", - "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@docusaurus/core": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.4.1.tgz", - "integrity": "sha512-SNsY7PshK3Ri7vtsLXVeAJGS50nJN3RgF836zkyUfAD01Fq+sAk5EwWgLw+nnm5KVNGDu7PRR2kRGDsWvqpo0g==", - "dependencies": { - "@babel/core": "^7.18.6", - "@babel/generator": "^7.18.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.18.6", - "@babel/preset-env": "^7.18.6", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@babel/runtime": "^7.18.6", - "@babel/runtime-corejs3": "^7.18.6", - "@babel/traverse": "^7.18.8", - "@docusaurus/cssnano-preset": "2.4.1", - "@docusaurus/logger": "2.4.1", - "@docusaurus/mdx-loader": "2.4.1", - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.4.1", - "@docusaurus/utils-common": "2.4.1", - "@docusaurus/utils-validation": "2.4.1", - "@slorber/static-site-generator-webpack-plugin": "^4.0.7", - "@svgr/webpack": "^6.2.1", - "autoprefixer": "^10.4.7", - "babel-loader": "^8.2.5", - "babel-plugin-dynamic-import-node": "^2.3.3", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "clean-css": "^5.3.0", - "cli-table3": "^0.6.2", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "copy-webpack-plugin": "^11.0.0", - "core-js": "^3.23.3", - "css-loader": "^6.7.1", - "css-minimizer-webpack-plugin": "^4.0.0", - "cssnano": "^5.1.12", - "del": "^6.1.1", - "detect-port": "^1.3.0", - "escape-html": "^1.0.3", - "eta": "^2.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "html-minifier-terser": "^6.1.0", - "html-tags": "^3.2.0", - "html-webpack-plugin": "^5.5.0", - "import-fresh": "^3.3.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.6.1", - "postcss": "^8.4.14", - "postcss-loader": "^7.0.0", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "react-helmet-async": "^1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.3", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.3", - "rtl-detect": "^1.0.4", - "semver": "^7.3.7", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.3", - "tslib": "^2.4.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^6.0.1", - "webpack": "^5.73.0", - "webpack-bundle-analyzer": "^4.5.0", - "webpack-dev-server": "^4.9.3", - "webpack-merge": "^5.8.0", - "webpackbar": "^5.0.2" - }, - "bin": { - "docusaurus": "bin/docusaurus.mjs" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.1.tgz", - "integrity": "sha512-ka+vqXwtcW1NbXxWsh6yA1Ckii1klY9E53cJ4O9J09nkMBgrNX3iEFED1fWdv8wf4mJjvGi5RLZ2p9hJNjsLyQ==", - "dependencies": { - "cssnano-preset-advanced": "^5.3.8", - "postcss": "^8.4.14", - "postcss-sort-media-queries": "^4.2.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@docusaurus/eslint-plugin": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/eslint-plugin/-/eslint-plugin-2.4.1.tgz", - "integrity": "sha512-Sb+aLgf07v2xenPHlcBtvADFkE6xi1Nx9cKNb98Tq5MGoywHpxUfwT3RHar+eA8vCjR3fu0npSzuRt26AJa5lw==", - "dev": true, - "dependencies": { - "@typescript-eslint/utils": "^5.30.5", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "eslint": ">=6" - } - }, - "node_modules/@docusaurus/logger": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.4.1.tgz", - "integrity": "sha512-5h5ysIIWYIDHyTVd8BjheZmQZmEgWDR54aQ1BX9pjFfpyzFo5puKXKYrYJXbjEHGyVhEzmB9UXwbxGfaZhOjcg==", - "dependencies": { - "chalk": "^4.1.2", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@docusaurus/mdx-loader": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.4.1.tgz", - "integrity": "sha512-4KhUhEavteIAmbBj7LVFnrVYDiU51H5YWW1zY6SmBSte/YLhDutztLTBE0PQl1Grux1jzUJeaSvAzHpTn6JJDQ==", - "dependencies": { - "@babel/parser": "^7.18.8", - "@babel/traverse": "^7.18.8", - "@docusaurus/logger": "2.4.1", - "@docusaurus/utils": "2.4.1", - "@mdx-js/mdx": "^1.6.22", - "escape-html": "^1.0.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "image-size": "^1.0.1", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.2.0", - "stringify-object": "^3.3.0", - "tslib": "^2.4.0", - "unified": "^9.2.2", - "unist-util-visit": "^2.0.3", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.1.tgz", - "integrity": "sha512-gLBuIFM8Dp2XOCWffUDSjtxY7jQgKvYujt7Mx5s4FCTfoL5dN1EVbnrn+O2Wvh8b0a77D57qoIDY7ghgmatR1A==", - "dependencies": { - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "2.4.1", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.1.tgz", - "integrity": "sha512-E2i7Knz5YIbE1XELI6RlTnZnGgS52cUO4BlCiCUCvQHbR+s1xeIWz4C6BtaVnlug0Ccz7nFSksfwDpVlkujg5Q==", - "dependencies": { - "@docusaurus/core": "2.4.1", - "@docusaurus/logger": "2.4.1", - "@docusaurus/mdx-loader": "2.4.1", - "@docusaurus/types": "2.4.1", - "@docusaurus/utils": "2.4.1", - "@docusaurus/utils-common": "2.4.1", - "@docusaurus/utils-validation": "2.4.1", - "cheerio": "^1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "tslib": "^2.4.0", - "unist-util-visit": "^2.0.3", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.1.tgz", - "integrity": "sha512-Lo7lSIcpswa2Kv4HEeUcGYqaasMUQNpjTXpV0N8G6jXgZaQurqp7E8NGYeGbDXnb48czmHWbzDL4S3+BbK0VzA==", - "dependencies": { - "@docusaurus/core": "2.4.1", - "@docusaurus/logger": "2.4.1", - "@docusaurus/mdx-loader": "2.4.1", - "@docusaurus/module-type-aliases": "2.4.1", - "@docusaurus/types": "2.4.1", - "@docusaurus/utils": "2.4.1", - "@docusaurus/utils-validation": "2.4.1", - "@types/react-router-config": "^5.0.6", - "combine-promises": "^1.1.0", - "fs-extra": "^10.1.0", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.1.tgz", - "integrity": "sha512-/UjuH/76KLaUlL+o1OvyORynv6FURzjurSjvn2lbWTFc4tpYY2qLYTlKpTCBVPhlLUQsfyFnshEJDLmPneq2oA==", - "dependencies": { - "@docusaurus/core": "2.4.1", - "@docusaurus/mdx-loader": "2.4.1", - "@docusaurus/types": "2.4.1", - "@docusaurus/utils": "2.4.1", - "@docusaurus/utils-validation": "2.4.1", - "fs-extra": "^10.1.0", - "tslib": "^2.4.0", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-debug": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.4.1.tgz", - "integrity": "sha512-7Yu9UPzRShlrH/G8btOpR0e6INFZr0EegWplMjOqelIwAcx3PKyR8mgPTxGTxcqiYj6hxSCRN0D8R7YrzImwNA==", - "dependencies": { - "@docusaurus/core": "2.4.1", - "@docusaurus/types": "2.4.1", - "@docusaurus/utils": "2.4.1", - "fs-extra": "^10.1.0", - "react-json-view": "^1.21.3", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.1.tgz", - "integrity": "sha512-dyZJdJiCoL+rcfnm0RPkLt/o732HvLiEwmtoNzOoz9MSZz117UH2J6U2vUDtzUzwtFLIf32KkeyzisbwUCgcaQ==", - "dependencies": { - "@docusaurus/core": "2.4.1", - "@docusaurus/types": "2.4.1", - "@docusaurus/utils-validation": "2.4.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.1.tgz", - "integrity": "sha512-mKIefK+2kGTQBYvloNEKtDmnRD7bxHLsBcxgnbt4oZwzi2nxCGjPX6+9SQO2KCN5HZbNrYmGo5GJfMgoRvy6uA==", - "dependencies": { - "@docusaurus/core": "2.4.1", - "@docusaurus/types": "2.4.1", - "@docusaurus/utils-validation": "2.4.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.1.tgz", - "integrity": "sha512-Zg4Ii9CMOLfpeV2nG74lVTWNtisFaH9QNtEw48R5QE1KIwDBdTVaiSA18G1EujZjrzJJzXN79VhINSbOJO/r3g==", - "dependencies": { - "@docusaurus/core": "2.4.1", - "@docusaurus/types": "2.4.1", - "@docusaurus/utils-validation": "2.4.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.1.tgz", - "integrity": "sha512-lZx+ijt/+atQ3FVE8FOHV/+X3kuok688OydDXrqKRJyXBJZKgGjA2Qa8RjQ4f27V2woaXhtnyrdPop/+OjVMRg==", - "dependencies": { - "@docusaurus/core": "2.4.1", - "@docusaurus/logger": "2.4.1", - "@docusaurus/types": "2.4.1", - "@docusaurus/utils": "2.4.1", - "@docusaurus/utils-common": "2.4.1", - "@docusaurus/utils-validation": "2.4.1", - "fs-extra": "^10.1.0", - "sitemap": "^7.1.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/preset-classic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.4.1.tgz", - "integrity": "sha512-P4//+I4zDqQJ+UDgoFrjIFaQ1MeS9UD1cvxVQaI6O7iBmiHQm0MGROP1TbE7HlxlDPXFJjZUK3x3cAoK63smGQ==", - "dependencies": { - "@docusaurus/core": "2.4.1", - "@docusaurus/plugin-content-blog": "2.4.1", - "@docusaurus/plugin-content-docs": "2.4.1", - "@docusaurus/plugin-content-pages": "2.4.1", - "@docusaurus/plugin-debug": "2.4.1", - "@docusaurus/plugin-google-analytics": "2.4.1", - "@docusaurus/plugin-google-gtag": "2.4.1", - "@docusaurus/plugin-google-tag-manager": "2.4.1", - "@docusaurus/plugin-sitemap": "2.4.1", - "@docusaurus/theme-classic": "2.4.1", - "@docusaurus/theme-common": "2.4.1", - "@docusaurus/theme-search-algolia": "2.4.1", - "@docusaurus/types": "2.4.1" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/react-loadable": { - "version": "5.5.2", - "license": "MIT", - "dependencies": { - "@types/react": "*", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/@docusaurus/theme-classic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.4.1.tgz", - "integrity": "sha512-Rz0wKUa+LTW1PLXmwnf8mn85EBzaGSt6qamqtmnh9Hflkc+EqiYMhtUJeLdV+wsgYq4aG0ANc+bpUDpsUhdnwg==", - "dependencies": { - "@docusaurus/core": "2.4.1", - "@docusaurus/mdx-loader": "2.4.1", - "@docusaurus/module-type-aliases": "2.4.1", - "@docusaurus/plugin-content-blog": "2.4.1", - "@docusaurus/plugin-content-docs": "2.4.1", - "@docusaurus/plugin-content-pages": "2.4.1", - "@docusaurus/theme-common": "2.4.1", - "@docusaurus/theme-translations": "2.4.1", - "@docusaurus/types": "2.4.1", - "@docusaurus/utils": "2.4.1", - "@docusaurus/utils-common": "2.4.1", - "@docusaurus/utils-validation": "2.4.1", - "@mdx-js/react": "^1.6.22", - "clsx": "^1.2.1", - "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.43", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.14", - "prism-react-renderer": "^1.3.5", - "prismjs": "^1.28.0", - "react-router-dom": "^5.3.3", - "rtlcss": "^3.5.0", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-common": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.4.1.tgz", - "integrity": "sha512-G7Zau1W5rQTaFFB3x3soQoZpkgMbl/SYNG8PfMFIjKa3M3q8n0m/GRf5/H/e5BqOvt8c+ZWIXGCiz+kUCSHovA==", - "dependencies": { - "@docusaurus/mdx-loader": "2.4.1", - "@docusaurus/module-type-aliases": "2.4.1", - "@docusaurus/plugin-content-blog": "2.4.1", - "@docusaurus/plugin-content-docs": "2.4.1", - "@docusaurus/plugin-content-pages": "2.4.1", - "@docusaurus/utils": "2.4.1", - "@docusaurus/utils-common": "2.4.1", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^1.2.1", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^1.3.5", - "tslib": "^2.4.0", - "use-sync-external-store": "^1.2.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-live-codeblock": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-live-codeblock/-/theme-live-codeblock-2.4.1.tgz", - "integrity": "sha512-KBKrm34kcdNbSeEm6RujN5GWWg4F2dmAYZyHMMQM8FXokx8mNShRx6uq17WXi23JNm7niyMhNOBRfZWay+5Hkg==", - "dependencies": { - "@docusaurus/core": "2.4.1", - "@docusaurus/theme-common": "2.4.1", - "@docusaurus/theme-translations": "2.4.1", - "@docusaurus/utils-validation": "2.4.1", - "@philpl/buble": "^0.19.7", - "clsx": "^1.2.1", - "fs-extra": "^10.1.0", - "react-live": "2.2.3", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-live-codeblock/node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "hasInstallScript": true - }, - "node_modules/@docusaurus/theme-live-codeblock/node_modules/react-live": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-live/-/react-live-2.2.3.tgz", - "integrity": "sha512-tpKruvfytNETuzO3o1mrQUj180GVrq35IE8F5gH1NJVPt4szYCx83/dOSCOyjgRhhc3gQvl0pQ3k/CjOjwJkKQ==", - "dependencies": { - "buble": "0.19.6", - "core-js": "^2.4.1", - "dom-iterator": "^1.0.0", - "prism-react-renderer": "^1.0.1", - "prop-types": "^15.5.8", - "react-simple-code-editor": "^0.10.0", - "unescape": "^1.0.1" - }, - "engines": { - "node": ">= 0.12.0", - "npm": ">= 2.0.0" - } - }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.1.tgz", - "integrity": "sha512-6BcqW2lnLhZCXuMAvPRezFs1DpmEKzXFKlYjruuas+Xy3AQeFzDJKTJFIm49N77WFCTyxff8d3E4Q9pi/+5McQ==", - "dependencies": { - "@docsearch/react": "^3.1.1", - "@docusaurus/core": "2.4.1", - "@docusaurus/logger": "2.4.1", - "@docusaurus/plugin-content-docs": "2.4.1", - "@docusaurus/theme-common": "2.4.1", - "@docusaurus/theme-translations": "2.4.1", - "@docusaurus/utils": "2.4.1", - "@docusaurus/utils-validation": "2.4.1", - "algoliasearch": "^4.13.1", - "algoliasearch-helper": "^3.10.0", - "clsx": "^1.2.1", - "eta": "^2.0.0", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-translations": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.4.1.tgz", - "integrity": "sha512-T1RAGP+f86CA1kfE8ejZ3T3pUU3XcyvrGMfC/zxCtc2BsnoexuNI9Vk2CmuKCb+Tacvhxjv5unhxXce0+NKyvA==", - "dependencies": { - "fs-extra": "^10.1.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@docusaurus/types": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.4.1.tgz", - "integrity": "sha512-0R+cbhpMkhbRXX138UOc/2XZFF8hiZa6ooZAEEJFp5scytzCw4tC1gChMFXrpa3d2tYE6AX8IrOEpSonLmfQuQ==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.6.0", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0", - "webpack-merge": "^5.8.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.4.1.tgz", - "integrity": "sha512-1lvEZdAQhKNht9aPXPoh69eeKnV0/62ROhQeFKKxmzd0zkcuE/Oc5Gpnt00y/f5bIsmOsYMY7Pqfm/5rteT5GA==", - "dependencies": { - "@docusaurus/logger": "2.4.1", - "@svgr/webpack": "^6.2.1", - "escape-string-regexp": "^4.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "github-slugger": "^1.4.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.4.0", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true - } - } - }, - "node_modules/@docusaurus/utils-common": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.4.1.tgz", - "integrity": "sha512-bCVGdZU+z/qVcIiEQdyx0K13OC5mYwxhSuDUR95oFbKVuXYRrTVrwZIqQljuo1fyJvFTKHiL9L9skQOPokuFNQ==", - "dependencies": { - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true - } - } - }, - "node_modules/@docusaurus/utils-validation": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.4.1.tgz", - "integrity": "sha512-unII3hlJlDwZ3w8U+pMO3Lx3RhI4YEbY3YNsQj4yzrkZzlpqZOLuAiZK2JyULnD+TKbceKU0WyWkQXtYbLNDFA==", - "dependencies": { - "@docusaurus/logger": "2.4.1", - "@docusaurus/utils": "2.4.1", - "joi": "^17.6.0", - "js-yaml": "^4.1.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.35.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@exodus/schemasafe": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.2.3.tgz", - "integrity": "sha512-hmdFF4vVyvXosVdCCnZPCfrgwNPA79y3K5l0QzlKFcK5Qd3nkM9oGKcQYCTnTRWJXIV5SUMkkTFIEIdDFtxQPQ==", - "dev": true - }, - "node_modules/@faker-js/faker": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-5.5.3.tgz", - "integrity": "sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==", - "deprecated": "Please update to a newer version.", - "dev": true - }, - "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.0.tgz", - "integrity": "sha512-HNii132xfomg5QVZw0HwXXpN22s7VBHQBv9CeOu9tfJnhsWQNd2lmTNi8CSrnw5B+5YOmzu1UoPAyxaXsJ6RgQ==", - "hasInstallScript": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.0.tgz", - "integrity": "sha512-Bertv8xOiVELz5raB2FlXDPKt+m94MQ3JgDfsVbrqNpLU9+UE2E18GKjLKw+d3XbeYPqg1pzyQKGsrzbw+pPaw==", - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.0.tgz", - "integrity": "sha512-kutPeRGWm8V5dltFP1zGjQOEAzaLZj4StdQhWVZnfGFCvAPVvHh8qk5bRrU4KXnRRRNni5tKQI9PBAdI6MP8nQ==", - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/react-fontawesome": { - "version": "0.2.0", - "license": "MIT", - "dependencies": { - "prop-types": "^15.8.1" - }, - "peerDependencies": { - "@fortawesome/fontawesome-svg-core": "~1 || ~6", - "react": ">=16.3" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "license": "BSD-3-Clause" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@hookform/error-message": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@hookform/error-message/-/error-message-2.0.1.tgz", - "integrity": "sha512-U410sAr92xgxT1idlu9WWOVjndxLdgPUHEB8Schr27C9eh7/xUnITWpCMF93s+lGiG++D4JnbSnrb5A21AdSNg==", - "dev": true, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0", - "react-hook-form": "^7.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", - "dev": true - }, - "node_modules/@juggle/resize-observer": { - "version": "3.4.0", - "license": "Apache-2.0" - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "license": "MIT" - }, - "node_modules/@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@mdx-js/mdx/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/react": { - "version": "1.6.22", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" - } - }, - "node_modules/@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@monaco-editor/loader": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.3.3.tgz", - "integrity": "sha512-6KKF4CTzcJiS8BJwtxtfyYt9shBiEv32ateQ9T4UVogwn4HM/uPo9iJd2Dmbkpz8CM6Y0PDUpjnZzCwC+eYo2Q==", - "dependencies": { - "state-local": "^1.0.6" - }, - "peerDependencies": { - "monaco-editor": ">= 0.21.0 < 1" - } - }, - "node_modules/@monaco-editor/react": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@monaco-editor/react/-/react-4.5.1.tgz", - "integrity": "sha512-NNDFdP+2HojtNhCkRfE6/D6ro6pBNihaOzMbGK84lNWzRu+CfBjwzGt4jmnqimLuqp5yE5viHS2vi+QOAnD5FQ==", - "dependencies": { - "@monaco-editor/loader": "^1.3.3" - }, - "peerDependencies": { - "monaco-editor": ">= 0.25.0 < 1", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@novorender/data-js-api": { - "version": "0.2.26", - "resolved": "https://registry.npmjs.org/@novorender/data-js-api/-/data-js-api-0.2.26.tgz", - "integrity": "sha512-WM4jQUuak45pTQo+vaqwwCRmvP/cSskL62KJnQJxvwwXzhYnqtAL0CrsEXBVMQLfV3GlOVEScucoFqszSw9K/Q==", - "dependencies": { - "gl-matrix": "^3.3.0" - }, - "optionalDependencies": { - "@novorender/webgl-api": "^0.3.90" - } - }, - "node_modules/@novorender/data-js-api/node_modules/@novorender/webgl-api": { - "version": "0.3.130", - "license": "UNLICENSED", - "optional": true, - "optionalDependencies": { - "gl-matrix": "^3.3.0" - } - }, - "node_modules/@novorender/measure-api": { - "version": "0.0.143", - "resolved": "https://registry.npmjs.org/@novorender/measure-api/-/measure-api-0.0.143.tgz", - "integrity": "sha512-wjouL52QOzG0v/heFDlgvRt9eLfy0aG3uHUNSV3AVIaLJ5z7S39hp+oj0XRhu3cJjXaW2itxBKZvEwwCnlWbYg==", - "dependencies": { - "@novorender/webgl-api": "^0.3.84", - "comlink": "^4.3.1", - "gl-matrix": "^3.4.3", - "tslib": "^2.4.0" - } - }, - "node_modules/@novorender/measure-api/node_modules/@novorender/webgl-api": { - "version": "0.3.130", - "resolved": "https://registry.npmjs.org/@novorender/webgl-api/-/webgl-api-0.3.130.tgz", - "integrity": "sha512-g/JQndUmIqAsh193qrr1XTqXu/fjMHvPnWBER9YfFdkf8jXD3C+dO79ls9RhdokGhGhqvszhbmCVmC1ImXNHmw==", - "optionalDependencies": { - "gl-matrix": "^3.3.0" - } - }, - "node_modules/@novorender/webgl-api": { - "version": "0.4.61", - "resolved": "https://registry.npmjs.org/@novorender/webgl-api/-/webgl-api-0.4.61.tgz", - "integrity": "sha512-umO+kNNaskaAUZ56kZFFGXQnrqRhnWTFfujSuE2JXyUhB0Rzk9KiP0WjFT5ppQl9txQzaqrvU87+OqnIoiSHtw==", - "optionalDependencies": { - "gl-matrix": "^3.3.0" - } - }, - "node_modules/@philpl/buble": { - "version": "0.19.7", - "license": "MIT", - "dependencies": { - "acorn": "^6.1.1", - "acorn-class-fields": "^0.2.1", - "acorn-dynamic-import": "^4.0.0", - "acorn-jsx": "^5.0.1", - "chalk": "^2.4.2", - "magic-string": "^0.25.2", - "minimist": "^1.2.0", - "os-homedir": "^1.0.1", - "regexpu-core": "^4.5.4" - }, - "bin": { - "buble": "bin/buble" - } - }, - "node_modules/@philpl/buble/node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@philpl/buble/node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@philpl/buble/node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@philpl/buble/node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/@philpl/buble/node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@philpl/buble/node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@philpl/buble/node_modules/jsesc": { - "version": "0.5.0", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/@philpl/buble/node_modules/regenerate-unicode-properties": { - "version": "9.0.0", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@philpl/buble/node_modules/regexpu-core": { - "version": "4.8.0", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@philpl/buble/node_modules/regjsparser": { - "version": "0.7.0", - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/@philpl/buble/node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.21", - "license": "MIT" - }, - "node_modules/@redocly/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js-replace": "^1.0.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@redocly/config": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.12.1.tgz", - "integrity": "sha512-RW3rSirfsPdr0uvATijRDU3f55SuZV3m7/ppdTDvGw4IB0cmeZRkFmqTrchxMqWP50Gfg1tpHnjdxUCNo0E2qg==", - "dev": true - }, - "node_modules/@redocly/openapi-core": { - "version": "1.25.7", - "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.25.7.tgz", - "integrity": "sha512-qidGKk4Bq0Ud0O8gRuXnDSLwVopwrf5+roNvpkvdQPVIHFSYJ5dscJkThdsn7OW8bNqahumQPWWczEh9l93FZw==", - "dev": true, - "dependencies": { - "@redocly/ajv": "^8.11.2", - "@redocly/config": "^0.12.1", - "colorette": "^1.2.0", - "https-proxy-agent": "^7.0.4", - "js-levenshtein": "^1.1.6", - "js-yaml": "^4.1.0", - "lodash.isequal": "^4.5.0", - "minimatch": "^5.0.1", - "node-fetch": "^2.6.1", - "pluralize": "^8.0.0", - "yaml-ast-parser": "0.0.43" - }, - "engines": { - "node": ">=14.19.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@redocly/openapi-core/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@redocly/openapi-core/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@redocly/openapi-core/node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true - }, - "node_modules/@redocly/openapi-core/node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", - "dev": true, - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@redocly/openapi-core/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@reduxjs/toolkit": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz", - "integrity": "sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==", - "dev": true, - "dependencies": { - "immer": "^9.0.21", - "redux": "^4.2.1", - "redux-thunk": "^2.4.2", - "reselect": "^4.1.8" - }, - "peerDependencies": { - "react": "^16.9.0 || ^17.0.0 || ^18", - "react-redux": "^7.2.1 || ^8.0.2" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-redux": { - "optional": true - } - } - }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "license": "BSD-3-Clause" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "license": "BSD-3-Clause" - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.7", - "license": "MIT", - "dependencies": { - "eval": "^0.1.8", - "p-map": "^4.0.0", - "webpack-sources": "^3.2.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.5.1", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.5.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.5.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.5.1", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.5.1", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.5.1", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.5.1", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "6.5.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "6.5.1", - "license": "MIT", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", - "@svgr/babel-plugin-remove-jsx-attribute": "*", - "@svgr/babel-plugin-remove-jsx-empty-expression": "*", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", - "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", - "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", - "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", - "@svgr/babel-plugin-transform-svg-component": "^6.5.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/core": { - "version": "6.5.1", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "6.5.1", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "^6.0.0" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "6.5.1", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/webpack": { - "version": "6.5.1", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-constant-elements": "^7.18.12", - "@babel/preset-env": "^7.19.4", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@svgr/core": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "@svgr/plugin-svgo": "^6.5.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "license": "MIT", - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "license": "ISC", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@tsconfig/docusaurus": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", - "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", - "dev": true, - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.21.3", - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.51", - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "4.17.17", - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.33", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/hast": { - "version": "2.3.4", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/history": { - "version": "4.7.11", - "license": "MIT" - }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "dev": true, - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.10", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" - }, - "node_modules/@types/mdast": { - "version": "3.0.11", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mime": { - "version": "3.0.1", - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.15.5", - "license": "MIT" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" - }, - "node_modules/@types/prismjs": { - "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.0.tgz", - "integrity": "sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "license": "MIT" - }, - "node_modules/@types/puppeteer": { - "version": "5.4.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.0.28", - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-redux": { - "version": "7.1.25", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.25.tgz", - "integrity": "sha512-bAGh4e+w5D8dajd6InASVIyCo4pZLJ66oLb80F9OBLO1gKESbZcRCJpTT6uLXX+HAB57zw1WTdwJdAsewuTweg==", - "dev": true, - "dependencies": { - "@types/hoist-non-react-statics": "^3.3.0", - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0", - "redux": "^4.0.0" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-config": { - "version": "5.0.6", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "license": "MIT" - }, - "node_modules/@types/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.3", - "license": "MIT" - }, - "node_modules/@types/semver": { - "version": "7.3.13", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.1", - "license": "MIT", - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/unist": { - "version": "2.0.6", - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.5.4", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.54.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "5.54.0", - "@typescript-eslint/type-utils": "5.54.0", - "@typescript-eslint/utils": "5.54.0", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "5.54.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/visitor-keys": "5.54.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "5.54.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.54.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/visitor-keys": "5.54.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "5.54.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.54.0", - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/typescript-estree": "5.54.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.54.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.54.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.54.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "5.54.0", - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/typescript-estree": "5.54.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "5.54.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/visitor-keys": "5.54.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "5.54.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.54.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/visitor-keys": "5.54.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.54.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.54.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.56.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/visitor-keys": "5.56.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.54.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "5.54.0", - "@typescript-eslint/utils": "5.54.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "5.54.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/visitor-keys": "5.54.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "5.54.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.54.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/visitor-keys": "5.54.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "5.54.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.54.0", - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/typescript-estree": "5.54.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.54.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.54.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.56.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.56.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/visitor-keys": "5.56.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.56.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.56.0", - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/typescript-estree": "5.56.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.56.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.56.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "license": "Apache-2.0" - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "6.4.2", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-class-fields": { - "version": "0.2.1", - "license": "MIT", - "engines": { - "node": ">=4.8.2" - }, - "peerDependencies": { - "acorn": "^6.0.0" - } - }, - "node_modules/acorn-dynamic-import": { - "version": "4.0.0", - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.12.0", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-cli": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0", - "fast-json-patch": "^2.0.0", - "glob": "^7.1.0", - "js-yaml": "^3.14.0", - "json-schema-migrate": "^2.0.0", - "json5": "^2.1.3", - "minimist": "^1.2.0" - }, - "bin": { - "ajv": "dist/index.js" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/ajv-cli/node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/ajv-cli/node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/ajv-draft-04": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", - "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", - "dev": true, - "peerDependencies": { - "ajv": "^8.5.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/algoliasearch": { - "version": "4.16.0", - "license": "MIT", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.16.0", - "@algolia/cache-common": "4.16.0", - "@algolia/cache-in-memory": "4.16.0", - "@algolia/client-account": "4.16.0", - "@algolia/client-analytics": "4.16.0", - "@algolia/client-common": "4.16.0", - "@algolia/client-personalization": "4.16.0", - "@algolia/client-search": "4.16.0", - "@algolia/logger-common": "4.16.0", - "@algolia/logger-console": "4.16.0", - "@algolia/requester-browser-xhr": "4.16.0", - "@algolia/requester-common": "4.16.0", - "@algolia/requester-node-http": "4.16.0", - "@algolia/transporter": "4.16.0" - } - }, - "node_modules/algoliasearch-helper": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.14.0.tgz", - "integrity": "sha512-gXDXzsSS0YANn5dHr71CUXOo84cN4azhHKUbg71vAWnH+1JBiR4jf7to3t3JHXknXkbV0F7f055vUSBKrltHLQ==", - "dependencies": { - "@algolia/events": "^4.0.1" - }, - "peerDependencies": { - "algoliasearch": ">= 3.1 < 6" - } - }, - "node_modules/allotment": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/allotment/-/allotment-1.19.2.tgz", - "integrity": "sha512-RiiCLa4AQATPsQDXvleyvdRzSsd2J7naLuY+eK1sn1zeXBKMdsCwWuICZ+ZCeDCrJXjVV+q/mHfB2LT7PEYmTw==", - "dependencies": { - "classnames": "^2.3.0", - "eventemitter3": "^5.0.0", - "lodash.clamp": "^4.0.0", - "lodash.debounce": "^4.0.0", - "lodash.isequal": "^4.5.0", - "use-resize-observer": "^9.0.0" - }, - "peerDependencies": { - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "license": "ISC", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-sequence-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", - "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", - "dev": true - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.3", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "node_modules/argparse": { - "version": "2.0.1", - "license": "Python-2.0" - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/array-includes": { - "version": "3.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", - "dev": true, - "dependencies": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "0.25.0", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.14.7" - } - }, - "node_modules/babel-loader": { - "version": "8.3.0", - "license": "MIT", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@babel/core": "^7.11.6" - } - }, - "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "license": "MIT", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-extract-import-names": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", - "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/bail": { - "version": "1.0.5", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/batch": { - "version": "0.6.1", - "license": "MIT" - }, - "node_modules/big.js": { - "version": "5.2.2", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "node_modules/body-parser": { - "version": "1.20.1", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/boxen": { - "version": "6.2.1", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserslist": { - "version": "4.21.5", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buble": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/buble/-/buble-0.19.6.tgz", - "integrity": "sha512-9kViM6nJA1Q548Jrd06x0geh+BG2ru2+RMDkIHHgJY/8AcyCs34lTHwra9BX7YdPrZXd5aarkpr/SY8bmPgPdg==", - "dependencies": { - "chalk": "^2.4.1", - "magic-string": "^0.25.1", - "minimist": "^1.2.0", - "os-homedir": "^1.0.1", - "regexpu-core": "^4.2.0", - "vlq": "^1.0.0" - }, - "bin": { - "buble": "bin/buble" - } - }, - "node_modules/buble/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/buble/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/buble/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/buble/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/buble/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/buble/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/buble/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/buble/node_modules/regenerate-unicode-properties": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", - "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/buble/node_modules/regexpu-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/buble/node_modules/regjsparser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/buble/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "license": "MIT" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true - }, - "node_modules/bytes": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/normalize-url": { - "version": "4.5.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-me-maybe": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", - "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", - "dev": true - }, - "node_modules/callsites": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001469", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/ccount": { - "version": "1.1.0", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/character-entities": { - "version": "1.2.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/charset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz", - "integrity": "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "dev": true, - "license": "ISC" - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/classnames": { - "version": "2.3.2", - "license": "MIT" - }, - "node_modules/clean-css": { - "version": "5.3.2", - "license": "MIT", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-table3": { - "version": "0.6.3", - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-table3/node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clsx": { - "version": "1.2.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/colord": { - "version": "2.9.3", - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.19", - "license": "MIT" - }, - "node_modules/combine-promises": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/comlink": { - "version": "4.4.1", - "license": "Apache-2.0" - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/component-props": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/component-props/-/component-props-1.1.1.tgz", - "integrity": "sha512-69pIRJs9fCCHRqCz3390YF2LV1Lu6iEMZ5zuVqqUn+G20V9BNXlMs0cWawWeW9g4Ynmg29JmkG6R7/lUJoGd1Q==" - }, - "node_modules/component-xor": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/component-xor/-/component-xor-0.0.4.tgz", - "integrity": "sha512-ZIt6sla8gfo+AFVRZoZOertcnD5LJaY2T9CKE2j13NJxQt/mUafD69Bl7/Y4AnpI2LGjiXH7cOfJDx/n2G9edA==" - }, - "node_modules/compressible": { - "version": "2.0.18", - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/compute-gcd": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz", - "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==", - "dev": true, - "dependencies": { - "validate.io-array": "^1.0.3", - "validate.io-function": "^1.0.2", - "validate.io-integer-array": "^1.0.0" - } - }, - "node_modules/compute-lcm": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz", - "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==", - "dev": true, - "dependencies": { - "compute-gcd": "^1.2.1", - "validate.io-array": "^1.0.3", - "validate.io-function": "^1.0.2", - "validate.io-integer-array": "^1.0.0" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/configstore": { - "version": "5.0.1", - "license": "BSD-2-Clause", - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/consola": { - "version": "2.15.3", - "license": "MIT" - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.5.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "license": "MIT" - }, - "node_modules/copy-text-to-clipboard": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", - "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "license": "MIT", - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.1.3", - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/core-js": { - "version": "3.29.1", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.29.1", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.29.1", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "license": "MIT", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", - "dev": true - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.4.0", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-loader": { - "version": "6.7.3", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.19", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "cssnano": "^5.1.8", - "jest-worker": "^27.5.1", - "postcss": "^8.4.13", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "lightningcss": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.15", - "license": "MIT", - "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-advanced": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", - "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", - "dependencies": { - "autoprefixer": "^10.4.12", - "cssnano-preset-default": "^5.2.14", - "postcss-discard-unused": "^5.1.0", - "postcss-merge-idents": "^5.1.1", - "postcss-reduce-idents": "^5.2.0", - "postcss-zindex": "^5.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "license": "MIT", - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "license": "MIT", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csstype": { - "version": "3.1.1", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.4", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "dev": true, - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decode-named-character-reference/node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "license": "MIT", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "license": "BSD-2-Clause", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/default-gateway/node_modules/execa": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/default-gateway/node_modules/human-signals": { - "version": "2.1.0", - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/default-gateway/node_modules/is-stream": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-gateway/node_modules/mimic-fn": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/npm-run-path": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/default-gateway/node_modules/onetime": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-gateway/node_modules/strip-final-newline": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/del": { - "version": "6.1.1", - "license": "MIT", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "dependencies": { - "repeat-string": "^1.5.4" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/detect-package-manager": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-3.0.2.tgz", - "integrity": "sha512-8JFjJHutStYrfWwzfretQoyNGoZVW1Fsrp4JO9spa7h/fBfwgTMEIy4/LBzRDGsxwVPHU0q+T9YvwLDJoOApLQ==", - "dev": true, - "dependencies": { - "execa": "^5.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/detect-package-manager/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/detect-package-manager/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/detect-package-manager/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/detect-package-manager/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/detect-package-manager/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-package-manager/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/detect-package-manager/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/detect-port": { - "version": "1.5.1", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "4" - }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" - } - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/devtools-protocol": { - "version": "0.0.969999", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/dns-packet": { - "version": "5.4.0", - "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/docusaurus-plugin-openapi-docs": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/docusaurus-plugin-openapi-docs/-/docusaurus-plugin-openapi-docs-2.2.3.tgz", - "integrity": "sha512-JyUJGH/nF5C2ugmuHHC5xSalV1qPT+SbOpuXtM4KZ8XKV/BNOHugUq+8hEWxJbfPuLCCcR+G0SeDlKO95ho5tA==", - "dev": true, - "dependencies": { - "@apidevtools/json-schema-ref-parser": "^11.5.4", - "@docusaurus/plugin-content-docs": ">=2.4.1 <=2.4.3", - "@docusaurus/utils": ">=2.4.1 <=2.4.3", - "@docusaurus/utils-validation": ">=2.4.1 <=2.4.3", - "@redocly/openapi-core": "^1.10.5", - "chalk": "^4.1.2", - "clsx": "^1.1.1", - "fs-extra": "^9.0.1", - "json-pointer": "^0.6.2", - "json-schema-merge-allof": "^0.8.1", - "lodash": "^4.17.20", - "mustache": "^4.2.0", - "openapi-to-postmanv2": "^4.21.0", - "postman-collection": "^4.4.0", - "slugify": "^1.6.5", - "swagger2openapi": "^7.0.8", - "xml-formatter": "^2.6.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/docusaurus-plugin-openapi-docs/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/docusaurus-plugin-sass": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/docusaurus-plugin-sass/-/docusaurus-plugin-sass-0.2.5.tgz", - "integrity": "sha512-Z+D0fLFUKcFpM+bqSUmqKIU+vO+YF1xoEQh5hoFreg2eMf722+siwXDD+sqtwU8E4MvVpuvsQfaHwODNlxJAEg==", - "dev": true, - "dependencies": { - "sass-loader": "^10.1.1" - }, - "peerDependencies": { - "@docusaurus/core": "^2.0.0-beta || ^3.0.0-alpha", - "sass": "^1.30.0" - } - }, - "node_modules/docusaurus-plugin-typedoc": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/docusaurus-plugin-typedoc/-/docusaurus-plugin-typedoc-0.19.2.tgz", - "integrity": "sha512-N4B2MOaXIyu+FloFn6zVbGgSqszeFQE/7ZIgFakpkVg5F0rfysiDGac2PHbPf4o8DWdyyviJOAuhXk6U7Febeg==", - "dev": true, - "peerDependencies": { - "typedoc": ">=0.24.0", - "typedoc-plugin-markdown": ">=3.15.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/docusaurus-theme-openapi-docs/-/docusaurus-theme-openapi-docs-2.2.3.tgz", - "integrity": "sha512-d4kPdOiLNYl2/VlYn5nyUCBCqIf/U2s1xJRRKFJ0twS7Zid8P9iy+3u2mZg03jNmwsTDMU+GC/U67RoHsVeHFQ==", - "dev": true, - "dependencies": { - "@docusaurus/theme-common": ">=2.4.1 <=2.4.3", - "@hookform/error-message": "^2.0.1", - "@reduxjs/toolkit": "^1.7.1", - "clsx": "^1.1.1", - "copy-text-to-clipboard": "^3.1.0", - "crypto-js": "^4.1.1", - "docusaurus-plugin-openapi-docs": "^2.2.3", - "docusaurus-plugin-sass": "^0.2.3", - "file-saver": "^2.0.5", - "lodash": "^4.17.20", - "node-polyfill-webpack-plugin": "^2.0.1", - "postman-code-generators": "^1.10.1", - "postman-collection": "^4.4.0", - "prism-react-renderer": "^1.3.5", - "react-hook-form": "^7.43.8", - "react-live": "^4.0.0", - "react-magic-dropzone": "^1.0.1", - "react-markdown": "^8.0.1", - "react-modal": "^3.15.1", - "react-redux": "^7.2.0", - "rehype-raw": "^6.1.1", - "sass": "^1.58.1", - "sass-loader": "^13.3.2", - "webpack": "^5.61.0", - "xml-formatter": "^2.6.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.4 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/react-live": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/react-live/-/react-live-4.1.3.tgz", - "integrity": "sha512-D8mX8iFICW7KSYzy//AepC1svCLiXBuxO6bQVzcIjz6BP3EdrMZbyyC7lKg07Ou0fRWi1NYdOhigzeMlzAVg5Q==", - "dev": true, - "dependencies": { - "prism-react-renderer": "2.0.5", - "sucrase": "^3.31.0", - "use-editable": "^2.3.3" - }, - "engines": { - "node": ">= 0.12.0", - "npm": ">= 2.0.0" - }, - "peerDependencies": { - "react": ">=18.0.0", - "react-dom": ">=18.0.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/react-live/node_modules/prism-react-renderer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.0.5.tgz", - "integrity": "sha512-VHTC2ZhOImeC3/mu/3TkEuRCa1K+kTCZQeCkwvWzQa01/ahU3dibyxWf3XiPLuO4k/rGjSTea1lEsfza6fMofw==", - "dev": true, - "dependencies": { - "@types/prismjs": "^1.26.0", - "clsx": "^1.2.1" - }, - "peerDependencies": { - "react": ">=16.0.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/sass-loader": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.3.tgz", - "integrity": "sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==", - "dev": true, - "dependencies": { - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "license": "MIT", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dom-iterator/-/dom-iterator-1.0.0.tgz", - "integrity": "sha512-7dsMOQI07EMU98gQM8NSB3GsAiIeBYIPKpnxR3c9xOvdvBjChAcOM0iJ222I3p5xyiZO9e5oggkNaCusuTdYig==", - "dependencies": { - "component-props": "1.1.1", - "component-xor": "0.0.4" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domain-browser": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.22.0.tgz", - "integrity": "sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.0.1", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "license": "MIT" - }, - "node_modules/duplexer3": { - "version": "0.1.5", - "license": "BSD-3-Clause" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.337", - "license": "ISC" - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.12.0", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.4.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.21.2", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "license": "MIT" - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", - "dev": true - }, - "node_modules/es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.35.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint/eslintrc": "^2.0.0", - "@eslint/js": "8.35.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.5.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/acorn": { - "version": "8.8.2", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eval": { - "version": "0.1.8", - "dependencies": { - "@types/node": "*", - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.0", - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exenv": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", - "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==", - "dev": true - }, - "node_modules/express": { - "version": "4.18.2", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/express/node_modules/content-disposition": { - "version": "0.5.4", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "license": "MIT" - }, - "node_modules/express/node_modules/range-parser": { - "version": "1.2.1", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "license": "MIT" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-patch": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^2.0.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fast-json-patch/node_modules/fast-deep-equal": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true - }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "license": "MIT", - "dependencies": { - "punycode": "^1.3.2" - } - }, - "node_modules/fast-url-parser/node_modules/punycode": { - "version": "1.4.1", - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.15.0", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "dependencies": { - "fbjs": "^3.0.0" - } - }, - "node_modules/fbjs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", - "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", - "dependencies": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^1.0.35" - } - }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/ajv": { - "version": "6.12.6", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/file-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/file-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/file-saver": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/filter-obj": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-2.0.2.tgz", - "integrity": "sha512-lO3ttPjHZRfjMcxWKb1j1eDhTFsu4meeR3lnMcnBFhk6RuLhvEiuALu2TlfL310ph4lCYYwgF/ElIjdP739tdg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "dev": true, - "license": "ISC" - }, - "node_modules/flux": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", - "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", - "dependencies": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - }, - "peerDependencies": { - "react": "^15.0.2 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/foreach": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", - "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==", - "dev": true - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "license": "Unlicense" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "license": "ISC" - }, - "node_modules/get-stream": { - "version": "6.0.1", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/github-slugger": { - "version": "1.5.0", - "license": "ISC" - }, - "node_modules/gl-matrix": { - "version": "3.4.3", - "license": "MIT" - }, - "node_modules/glob": { - "version": "7.2.3", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "license": "BSD-2-Clause" - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "9.6.0", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "license": "ISC" - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "dev": true, - "dependencies": { - "lodash": "^4.17.15" - } - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "license": "MIT" - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", - "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", - "dependencies": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5/node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-from-parse5/node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5/node_modules/hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5/node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-from-parse5/node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-from-parse5/node_modules/web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", - "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", - "dev": true, - "dependencies": { - "@types/hast": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/hast-util-raw/node_modules/web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "dependencies": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5/node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-to-parse5/node_modules/hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", - "dependencies": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5/node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-to-parse5/node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-to-parse5/node_modules/web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", - "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", - "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", - "dev": true, - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^3.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/history": { - "version": "4.10.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/htm": { - "version": "3.1.1", - "license": "Apache-2.0" - }, - "node_modules/html-entities": { - "version": "2.3.3", - "license": "MIT" - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "8.3.0", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-tags": { - "version": "3.2.0", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "license": "BSD-2-Clause" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/http-proxy/node_modules/eventemitter3": { - "version": "4.0.7", - "license": "MIT" - }, - "node_modules/http-reasons": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/http-reasons/-/http-reasons-0.1.0.tgz", - "integrity": "sha512-P6kYh0lKZ+y29T2Gqz+RlC9WBLhKe8kDmcJ+A+611jFfxdPsbMRQ5aNmFRM3lENqFkK+HTTL+tlQviAiv0AbLQ==", - "dev": true - }, - "node_modules/http2-client": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/http2-client/-/http2-client-1.3.5.tgz", - "integrity": "sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==", - "dev": true - }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "dev": true, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.2.4", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", - "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/immer": { - "version": "9.0.21", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/immutable": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.2.tgz", - "integrity": "sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.43", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz", - "integrity": "sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "license": "ISC" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "license": "MIT" - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "1.0.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "license": "MIT", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-npm": { - "version": "5.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "license": "MIT" - }, - "node_modules/isarray": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/joi": { - "version": "17.9.1", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/js-sdsl": { - "version": "4.4.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "license": "MIT" - }, - "node_modules/json-pointer": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.2.tgz", - "integrity": "sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==", - "dev": true, - "dependencies": { - "foreach": "^2.0.4" - } - }, - "node_modules/json-schema-compare": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz", - "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==", - "dev": true, - "dependencies": { - "lodash": "^4.17.4" - } - }, - "node_modules/json-schema-merge-allof": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz", - "integrity": "sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==", - "dev": true, - "dependencies": { - "compute-lcm": "^1.1.2", - "json-schema-compare": "^0.2.2", - "lodash": "^4.17.20" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/json-schema-migrate": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/launch-editor": { - "version": "2.6.0", - "license": "MIT", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "license": "MIT" - }, - "node_modules/lint-staged": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.2.3.tgz", - "integrity": "sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg==", - "dev": true, - "dependencies": { - "chalk": "5.2.0", - "cli-truncate": "^3.1.0", - "commander": "^10.0.0", - "debug": "^4.3.4", - "execa": "^7.0.0", - "lilconfig": "2.1.0", - "listr2": "^5.0.7", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.3", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.2.2" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/lint-staged/node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/liquid-json": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/liquid-json/-/liquid-json-0.3.1.tgz", - "integrity": "sha512-wUayTU8MS827Dam6MxgD72Ui+KOSF+u/eIqpatOtjnvgJ0+mnDq33uC2M7J0tPK+upe/DpUAuK4JUU89iBoNKQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr2": { - "version": "5.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.19", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.8.0", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash.clamp": { - "version": "4.0.3", - "license": "MIT" - }, - "node_modules/lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "license": "MIT" - }, - "node_modules/lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "license": "MIT" - }, - "node_modules/log-update": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "node_modules/lunr-languages": { - "version": "1.10.0", - "license": "MPL-1.1" - }, - "node_modules/magic-string": { - "version": "0.25.9", - "license": "MIT", - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/mark.js": { - "version": "8.11.1", - "license": "MIT" - }, - "node_modules/markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true, - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "dependencies": { - "unist-util-remove": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "license": "CC0-1.0" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.4.13", - "license": "Unlicense", - "dependencies": { - "fs-monkey": "^1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromatch": { - "version": "4.0.5", - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/mime": { - "version": "1.6.0", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-format": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mime-format/-/mime-format-2.0.1.tgz", - "integrity": "sha512-XxU3ngPbEnrYnNbIX+lYSaYg0M01v6p2ntd2YaFksTu0vayaw5OJvbdRyWs07EYRlLED5qadUZ+xo+XhOvFhwg==", - "dev": true, - "dependencies": { - "charset": "^1.0.0" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.5", - "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "license": "ISC" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "dev": true, - "license": "MIT" - }, - "node_modules/monaco-editor": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.40.0.tgz", - "integrity": "sha512-1wymccLEuFSMBvCk/jT1YDW/GuxMLYwnFwF9CDyYCxoTw2Pt379J3FUhwy9c43j51JdcxVPjwk0jm0EVDsBS2g==" - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/mrmime": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "dev": true, - "bin": { - "mustache": "bin/mustache" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.4", - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "license": "MIT" - }, - "node_modules/neotraverse": { - "version": "0.6.15", - "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.15.tgz", - "integrity": "sha512-HZpdkco+JeXq0G+WWpMJ4NsX3pqb5O7eR9uGz3FfoFt+LYzU8iRWp49nJtud6hsDoywM8tIrDo3gjgmOqJA8LA==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/no-case": { - "version": "3.0.4", - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch-h2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz", - "integrity": "sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==", - "dev": true, - "dependencies": { - "http2-client": "^1.2.5" - }, - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-polyfill-webpack-plugin": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-polyfill-webpack-plugin/-/node-polyfill-webpack-plugin-2.0.1.tgz", - "integrity": "sha512-ZUMiCnZkP1LF0Th2caY6J/eKKoA0TefpoVa68m/LQU1I/mE8rGt4fNYGgNuCcK+aG8P8P43nbeJ2RqJMOL/Y1A==", - "dev": true, - "dependencies": { - "assert": "^2.0.0", - "browserify-zlib": "^0.2.0", - "buffer": "^6.0.3", - "console-browserify": "^1.2.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.12.0", - "domain-browser": "^4.22.0", - "events": "^3.3.0", - "filter-obj": "^2.0.2", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "^1.0.1", - "process": "^0.11.10", - "punycode": "^2.1.1", - "querystring-es3": "^0.2.1", - "readable-stream": "^4.0.0", - "stream-browserify": "^3.0.0", - "stream-http": "^3.2.0", - "string_decoder": "^1.3.0", - "timers-browserify": "^2.0.12", - "tty-browserify": "^0.0.1", - "type-fest": "^2.14.0", - "url": "^0.11.0", - "util": "^0.12.4", - "vm-browserify": "^1.1.2" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "webpack": ">=5" - } - }, - "node_modules/node-polyfill-webpack-plugin/node_modules/readable-stream": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", - "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/node-readfiles": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/node-readfiles/-/node-readfiles-0.2.0.tgz", - "integrity": "sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==", - "dev": true, - "dependencies": { - "es6-promise": "^3.2.1" - } - }, - "node_modules/node-releases": { - "version": "2.0.10", - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/oas-kit-common": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/oas-kit-common/-/oas-kit-common-1.0.8.tgz", - "integrity": "sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==", - "dev": true, - "dependencies": { - "fast-safe-stringify": "^2.0.7" - } - }, - "node_modules/oas-linter": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/oas-linter/-/oas-linter-3.2.2.tgz", - "integrity": "sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==", - "dev": true, - "dependencies": { - "@exodus/schemasafe": "^1.0.0-rc.2", - "should": "^13.2.1", - "yaml": "^1.10.0" - }, - "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" - } - }, - "node_modules/oas-resolver": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/oas-resolver/-/oas-resolver-2.5.6.tgz", - "integrity": "sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==", - "dev": true, - "dependencies": { - "node-fetch-h2": "^2.3.0", - "oas-kit-common": "^1.0.8", - "reftools": "^1.1.9", - "yaml": "^1.10.0", - "yargs": "^17.0.1" - }, - "bin": { - "resolve": "resolve.js" - }, - "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" - } - }, - "node_modules/oas-resolver-browser": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/oas-resolver-browser/-/oas-resolver-browser-2.5.6.tgz", - "integrity": "sha512-Jw5elT/kwUJrnGaVuRWe1D7hmnYWB8rfDDjBnpQ+RYY/dzAewGXeTexXzt4fGEo6PUE4eqKqPWF79MZxxvMppA==", - "dev": true, - "dependencies": { - "node-fetch-h2": "^2.3.0", - "oas-kit-common": "^1.0.8", - "path-browserify": "^1.0.1", - "reftools": "^1.1.9", - "yaml": "^1.10.0", - "yargs": "^17.0.1" - }, - "bin": { - "resolve": "resolve.js" - }, - "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" - } - }, - "node_modules/oas-schema-walker": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz", - "integrity": "sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==", - "dev": true, - "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" - } - }, - "node_modules/oas-validator": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/oas-validator/-/oas-validator-5.0.8.tgz", - "integrity": "sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==", - "dev": true, - "dependencies": { - "call-me-maybe": "^1.0.1", - "oas-kit-common": "^1.0.8", - "oas-linter": "^3.2.2", - "oas-resolver": "^2.5.6", - "oas-schema-walker": "^1.1.5", - "reftools": "^1.1.9", - "should": "^13.2.1", - "yaml": "^1.10.0" - }, - "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/openapi-to-postmanv2": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/openapi-to-postmanv2/-/openapi-to-postmanv2-4.24.0.tgz", - "integrity": "sha512-SfWo8fftwTVmBs61ZY9SciNlQ7ddSBmPS7NTBdf+LyjHdzr2/TNuvFjyftGJ7Jnm48oghi+R9At2geq1NoBOLA==", - "dev": true, - "dependencies": { - "ajv": "8.11.0", - "ajv-draft-04": "1.0.0", - "ajv-formats": "2.1.1", - "async": "3.2.4", - "commander": "2.20.3", - "graphlib": "2.1.8", - "js-yaml": "4.1.0", - "json-pointer": "0.6.2", - "json-schema-merge-allof": "0.8.1", - "lodash": "4.17.21", - "neotraverse": "0.6.15", - "oas-resolver-browser": "2.5.6", - "object-hash": "3.0.0", - "path-browserify": "1.0.1", - "postman-collection": "^4.4.0", - "swagger2openapi": "7.0.8", - "yaml": "1.10.2" - }, - "bin": { - "openapi2postmanv2": "bin/openapi2postmanv2.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/openapi-to-postmanv2/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/openapi-to-postmanv2/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/opener": { - "version": "1.5.2", - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "license": "MIT", - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/param-case": { - "version": "3.0.4", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-entities": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" - }, - "node_modules/parse5": { - "version": "7.1.2", - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", - "dev": true, - "dependencies": { - "process": "^0.11.1", - "util": "^0.10.3" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "license": "(WTFPL OR MIT)" - }, - "node_modules/path-key": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/path-to-regexp": { - "version": "1.8.0", - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/path/node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.6.0", - "dev": true, - "license": "MIT", - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss": { - "version": "8.4.21", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-unused": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", - "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-loader": { - "version": "7.1.0", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.0.0", - "klona": "^2.0.6", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-loader/node_modules/cosmiconfig": { - "version": "8.1.3", - "license": "MIT", - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/postcss-merge-idents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", - "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-idents": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", - "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.11", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-sort-media-queries": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz", - "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==", - "dependencies": { - "sort-css-media-queries": "2.1.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.16" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "license": "MIT" - }, - "node_modules/postcss-zindex": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", - "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postman-code-generators": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/postman-code-generators/-/postman-code-generators-1.14.0.tgz", - "integrity": "sha512-//hTHsxtl4wZHJdjRhywkpAWBWkeOsvxdpsi2d9P8D7yhsDfOo3kYexoNsOiDv57PB9YZrftrhDtTbzejmIqCA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "async": "3.2.2", - "detect-package-manager": "3.0.2", - "lodash": "4.17.21", - "path": "0.12.7", - "postman-collection": "^4.4.0", - "shelljs": "0.8.5" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/postman-code-generators/node_modules/async": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz", - "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==", - "dev": true - }, - "node_modules/postman-collection": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.5.0.tgz", - "integrity": "sha512-152JSW9pdbaoJihwjc7Q8lc3nPg/PC9lPTHdMk7SHnHhu/GBJB7b2yb9zG7Qua578+3PxkQ/HYBuXpDSvsf7GQ==", - "dev": true, - "dependencies": { - "@faker-js/faker": "5.5.3", - "file-type": "3.9.0", - "http-reasons": "0.1.0", - "iconv-lite": "0.6.3", - "liquid-json": "0.3.1", - "lodash": "4.17.21", - "mime-format": "2.0.1", - "mime-types": "2.1.35", - "postman-url-encoder": "3.0.5", - "semver": "7.6.3", - "uuid": "8.3.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postman-url-encoder": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.5.tgz", - "integrity": "sha512-jOrdVvzUXBC7C+9gkIkpDJ3HIxOHTIqjpQ4C1EMt1ZGeMvSEpbFCKq23DEfgsj46vMnDgyQf+1ZLp2Wm+bKSsA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/preact": { - "version": "10.13.1", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/preact" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "1.3.5", - "license": "MIT", - "peerDependencies": { - "react": ">=0.14.9" - } - }, - "node_modules/prismjs": { - "version": "1.29.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/process": { - "version": "0.11.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "license": "MIT" - }, - "node_modules/progress": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", - "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pupa": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/puppeteer": { - "version": "13.5.2", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.969999", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.0", - "pkg-dir": "4.2.0", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.5.0" - }, - "engines": { - "node": ">=10.18.1" - } - }, - "node_modules/pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" - }, - "node_modules/qs": { - "version": "6.11.0", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/raw-loader": { - "version": "4.0.2", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/raw-loader/node_modules/ajv": { - "version": "6.12.6", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/raw-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/raw-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/raw-loader/node_modules/schema-utils": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.0.0.tgz", - "integrity": "sha512-x+VL6wbT4JRVPm7EGxXhZ8w8LTROaxPXOqhlGyVSrv0sB1jkyFGgXxJ8LVoPRLvPR6/CIZGFmfzqUa2NYeMr2A==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", - "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" - } - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.1", - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dom": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.0.0.tgz", - "integrity": "sha512-XqX7uzmFo0pUceWFCt7Gff6IyIMzFUn7QMZrbrQfGxtaxXZIcGQzoNpRLE3fQLnS4XzLLPMZX2T9TRcSrasicw==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.21.0" - }, - "peerDependencies": { - "react": "^18.0.0" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "license": "MIT" - }, - "node_modules/react-fast-compare": { - "version": "3.2.1", - "license": "MIT" - }, - "node_modules/react-helmet-async": { - "version": "1.3.0", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-hook-form": { - "version": "7.45.4", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.45.4.tgz", - "integrity": "sha512-HGDV1JOOBPZj10LB3+OZgfDBTn+IeEsNOKiq/cxbQAIbKaiJUe/KV8DBUzsx0Gx/7IG/orWqRRm736JwOfUSWQ==", - "dev": true, - "engines": { - "node": ">=12.22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/react-hook-form" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17 || ^18" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "license": "MIT" - }, - "node_modules/react-json-view": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", - "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", - "dependencies": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" - }, - "peerDependencies": { - "react": "^17.0.0 || ^16.3.0 || ^15.5.4", - "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" - } - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "5.5.2", - "license": "MIT", - "dependencies": { - "@types/react": "*", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.3" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" - } - }, - "node_modules/react-magic-dropzone": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-magic-dropzone/-/react-magic-dropzone-1.0.1.tgz", - "integrity": "sha512-0BIROPARmXHpk4AS3eWBOsewxoM5ndk2psYP/JmbCq8tz3uR2LIV1XiroZ9PKrmDRMctpW+TvsBCtWasuS8vFA==", - "dev": true - }, - "node_modules/react-markdown": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-8.0.7.tgz", - "integrity": "sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==", - "dev": true, - "dependencies": { - "@types/hast": "^2.0.0", - "@types/prop-types": "^15.0.0", - "@types/unist": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^2.0.0", - "prop-types": "^15.0.0", - "property-information": "^6.0.0", - "react-is": "^18.0.0", - "remark-parse": "^10.0.0", - "remark-rehype": "^10.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.0", - "unified": "^10.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } - }, - "node_modules/react-markdown/node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/react-markdown/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-markdown/node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/react-markdown/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/react-markdown/node_modules/remark-parse": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz", - "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/style-to-object": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.2.tgz", - "integrity": "sha512-1JGpfPB3lo42ZX8cuPrheZbfQ6kqPPnPHlKMyeRYtfKD+0jG+QsXgXN57O/dvJlzlB2elI6dGmrPnl5VPQFPaA==", - "dev": true, - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/react-markdown/node_modules/trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/react-markdown/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-modal": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.16.1.tgz", - "integrity": "sha512-VStHgI3BVcGo7OXczvnJN7yT2TWHJPDXZWyI/a0ssFNhGZWsPmB8cF0z33ewDXq4VfYMO1vXgiv/g8Nj9NDyWg==", - "dev": true, - "dependencies": { - "exenv": "^1.2.0", - "prop-types": "^15.7.2", - "react-lifecycles-compat": "^3.0.0", - "warning": "^4.0.3" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "react": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18", - "react-dom": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18" - } - }, - "node_modules/react-redux": { - "version": "7.2.9", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", - "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.15.4", - "@types/react-redux": "^7.1.20", - "hoist-non-react-statics": "^3.3.2", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" - }, - "peerDependencies": { - "react": "^16.8.3 || ^17 || ^18" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, - "node_modules/react-redux/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/react-router": { - "version": "5.3.4", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-config": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" - } - }, - "node_modules/react-router-dom": { - "version": "5.3.4", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-simple-code-editor": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/react-simple-code-editor/-/react-simple-code-editor-0.10.0.tgz", - "integrity": "sha512-bL5W5mAxSW6+cLwqqVWY47Silqgy2DKDTR4hDBrLrUqC5BXc29YVx17l2IZk5v36VcDEq1Bszu2oHm1qBwKqBA==", - "peerDependencies": { - "react": "^16.0.0", - "react-dom": "^16.0.0" - } - }, - "node_modules/react-textarea-autosize": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.2.tgz", - "integrity": "sha512-uOkyjkEl0ByEK21eCJMHDGBAAd/BoFQBawYK5XItjAmCTeSbjxghd8qnt7nzsLYzidjnoObu6M26xts0YGKsGg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-tiny-popover": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/react-tiny-popover/-/react-tiny-popover-7.2.4.tgz", - "integrity": "sha512-T7ZSwXcUtPXCog3Bux9+TjoTvUeMi/+zI0Yv/TkIznZCWUg0XTt2797G0IiT5mTVeJeLivUzdOmKA1hOQdMfOQ==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "node_modules/react-transition-group/node_modules/dom-helpers": { - "version": "5.2.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "license": "MIT", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/redux": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.9.2" - } - }, - "node_modules/redux-thunk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", - "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", - "dev": true, - "peerDependencies": { - "redux": "^4" - } - }, - "node_modules/reftools": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/reftools/-/reftools-1.1.9.tgz", - "integrity": "sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==", - "dev": true, - "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "license": "MIT", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.2", - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/regjsgen": { - "version": "0.5.2", - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/rehype-raw": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-6.1.1.tgz", - "integrity": "sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ==", - "dev": true, - "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-raw": "^7.2.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/node_modules/@types/parse5": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", - "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", - "dev": true - }, - "node_modules/rehype-raw/node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/rehype-raw/node_modules/hast-util-from-parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz", - "integrity": "sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==", - "dev": true, - "dependencies": { - "@types/hast": "^2.0.0", - "@types/unist": "^2.0.0", - "hastscript": "^7.0.0", - "property-information": "^6.0.0", - "vfile": "^5.0.0", - "vfile-location": "^4.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/node_modules/hast-util-raw": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.3.tgz", - "integrity": "sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==", - "dev": true, - "dependencies": { - "@types/hast": "^2.0.0", - "@types/parse5": "^6.0.0", - "hast-util-from-parse5": "^7.0.0", - "hast-util-to-parse5": "^7.0.0", - "html-void-elements": "^2.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/node_modules/hast-util-to-parse5": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz", - "integrity": "sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==", - "dev": true, - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/node_modules/html-void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", - "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/rehype-raw/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rehype-raw/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/rehype-raw/node_modules/trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/rehype-raw/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/node_modules/unist-util-position": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", - "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/node_modules/vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/node_modules/vfile-location": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz", - "integrity": "sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/node_modules/vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", - "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", - "dependencies": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.3" - } - }, - "node_modules/remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/remark-mdx/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remark-mdx/node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", - "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", - "dev": true, - "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-to-hast": "^12.1.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype/node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-rehype/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-rehype/node_modules/mdast-util-definitions": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", - "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype/node_modules/mdast-util-to-hast": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz", - "integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==", - "dev": true, - "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-definitions": "^5.0.0", - "micromark-util-sanitize-uri": "^1.1.0", - "trim-lines": "^3.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype/node_modules/trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-rehype/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype/node_modules/unist-util-generated": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz", - "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype/node_modules/unist-util-position": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", - "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype/node_modules/vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype/node_modules/vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "dependencies": { - "mdast-squeeze-paragraphs": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/renderkid/node_modules/css-select": { - "version": "4.3.0", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.1", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "engines": { - "node": "*" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/reselect": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", - "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.1", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/responselike": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rtl-detect": { - "version": "1.0.4", - "license": "BSD-3-Clause" - }, - "node_modules/rtlcss": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", - "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", - "dependencies": { - "find-up": "^5.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.3.11", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "rtlcss": "bin/rtlcss.js" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.0", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/sass": { - "version": "1.65.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.65.1.tgz", - "integrity": "sha512-9DINwtHmA41SEd36eVPQ9BJKpn7eKDQmUHmpI0y5Zv2Rcorrh0zS+cFrt050hdNbmmCNKTW3hV5mWfuegNRsEA==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-loader": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.4.1.tgz", - "integrity": "sha512-aX/iJZTTpNUNx/OSYzo2KsjIUQHqvWsAhhUijFjAPdZTEhstjZI9zTNvkTTwsx+uNUJqUwOw5gacxQMx4hJxGQ==", - "dev": true, - "dependencies": { - "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "sass": "^1.3.0", - "webpack": "^4.36.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/sass-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/sass-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/sass-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/sass-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/scheduler": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.21.0.tgz", - "integrity": "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "6.12.6", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "3.5.2", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.18.0", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/send/node_modules/range-parser": { - "version": "1.2.1", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-handler": { - "version": "6.1.5", - "license": "MIT", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/mime-db": { - "version": "1.33.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/mime-types": { - "version": "2.1.18", - "license": "MIT", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "2.2.1", - "license": "MIT" - }, - "node_modules/serve-index": { - "version": "1.9.1", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "license": "MIT", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "license": "ISC" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.0", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/shiki": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.3.tgz", - "integrity": "sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==", - "dev": true, - "dependencies": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" - } - }, - "node_modules/shiki/node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/should": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", - "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", - "dev": true, - "dependencies": { - "should-equal": "^2.0.0", - "should-format": "^3.0.3", - "should-type": "^1.4.0", - "should-type-adaptors": "^1.0.1", - "should-util": "^1.0.0" - } - }, - "node_modules/should-equal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", - "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", - "dev": true, - "dependencies": { - "should-type": "^1.4.0" - } - }, - "node_modules/should-format": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", - "integrity": "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==", - "dev": true, - "dependencies": { - "should-type": "^1.3.0", - "should-type-adaptors": "^1.0.1" - } - }, - "node_modules/should-type": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", - "integrity": "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==", - "dev": true - }, - "node_modules/should-type-adaptors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", - "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", - "dev": true, - "dependencies": { - "should-type": "^1.3.0", - "should-util": "^1.0.0" - } - }, - "node_modules/should-util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", - "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", - "dev": true - }, - "node_modules/side-channel": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "license": "ISC" - }, - "node_modules/sirv": { - "version": "1.0.19", - "license": "MIT", - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "license": "MIT" - }, - "node_modules/sitemap": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", - "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", - "dependencies": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - }, - "node_modules/slash": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slugify": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", - "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sort-css-media-queries": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", - "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "license": "MIT" - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdy": { - "version": "4.0.2", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "license": "BSD-3-Clause" - }, - "node_modules/stable": { - "version": "0.1.8", - "license": "MIT" - }, - "node_modules/state-local": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz", - "integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==" - }, - "node_modules/state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.3.2", - "license": "MIT" - }, - "node_modules/stream-browserify": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "node_modules/stream-http": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", - "dev": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-argv": { - "version": "0.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "license": "BSD-2-Clause", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/stylehacks": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/sucrase": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", - "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "license": "MIT" - }, - "node_modules/svgo": { - "version": "2.8.0", - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/svgo/node_modules/css-select": { - "version": "4.3.0", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "1.4.1", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/svgo/node_modules/domhandler": { - "version": "4.3.1", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "2.8.0", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/svgo/node_modules/entities": { - "version": "2.2.0", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/swagger2openapi": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/swagger2openapi/-/swagger2openapi-7.0.8.tgz", - "integrity": "sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==", - "dev": true, - "dependencies": { - "call-me-maybe": "^1.0.1", - "node-fetch": "^2.6.1", - "node-fetch-h2": "^2.3.0", - "node-readfiles": "^0.2.0", - "oas-kit-common": "^1.0.8", - "oas-resolver": "^2.5.6", - "oas-schema-walker": "^1.1.5", - "oas-validator": "^5.0.8", - "reftools": "^1.1.9", - "yaml": "^1.10.0", - "yargs": "^17.0.1" - }, - "bin": { - "boast": "boast.js", - "oas-validate": "oas-validate.js", - "swagger2openapi": "swagger2openapi.js" - }, - "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.16.6", - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.7", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.5" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser/node_modules/acorn": { - "version": "8.8.2", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "license": "MIT" - }, - "node_modules/text-table": { - "version": "0.2.0", - "license": "MIT" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/thunky": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "license": "MIT" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "license": "MIT" - }, - "node_modules/trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==", - "deprecated": "Use String.prototype.trim() instead" - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trim-trailing-lines": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "1.0.5", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true - }, - "node_modules/tslib": { - "version": "2.5.0", - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "2.19.0", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typedoc": { - "version": "0.24.8", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", - "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", - "dev": true, - "dependencies": { - "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.0", - "shiki": "^0.14.1" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 14.14" - }, - "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x" - } - }, - "node_modules/typedoc-plugin-markdown": { - "version": "3.15.4", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.15.4.tgz", - "integrity": "sha512-KpjFL/NDrQAbY147oIoOgob2vAdEchsMcTVd6+e6H2lC1l5xhi48bhP/fMJI7qYQ8th5nubervgqw51z7gY66A==", - "dev": true, - "dependencies": { - "handlebars": "^4.7.7" - }, - "peerDependencies": { - "typedoc": ">=0.24.0" - } - }, - "node_modules/typedoc/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typescript": { - "version": "4.9.4", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "1.0.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", - "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/unbzip2-stream/node_modules/buffer": { - "version": "5.7.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/unescape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unescape/-/unescape-1.0.1.tgz", - "integrity": "sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==", - "dependencies": { - "extend-shallow": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "dependencies": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "9.2.2", - "license": "MIT", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", - "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", - "dependencies": { - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-notifier": { - "version": "5.1.0", - "license": "BSD-2-Clause", - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/cli-boxes": { - "version": "2.2.1", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/update-notifier/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/type-fest": { - "version": "0.20.2", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/widest-line": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/wrap-ansi": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js-replace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uri-js-replace/-/uri-js-replace-1.0.1.tgz", - "integrity": "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==", - "dev": true - }, - "node_modules/url": { - "version": "0.11.0", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/ajv": { - "version": "6.12.6", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/url-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/url-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "dev": true, - "license": "MIT" - }, - "node_modules/use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/use-editable": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/use-editable/-/use-editable-2.3.3.tgz", - "integrity": "sha512-7wVD2JbfAFJ3DK0vITvXBdpd9JAz5BcKAAolsnLBuBn6UDDwBGuCIAGvR3yA2BNKm578vAMVHFCWaOcA+BhhiA==", - "dev": true, - "peerDependencies": { - "react": ">= 16.8.0" - } - }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "dependencies": { - "use-isomorphic-layout-effect": "^1.1.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-resize-observer": { - "version": "9.1.0", - "license": "MIT", - "dependencies": { - "@juggle/resize-observer": "^3.3.1" - }, - "peerDependencies": { - "react": "16.8.0 - 18", - "react-dom": "16.8.0 - 18" - } - }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/util": { - "version": "0.12.4", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/utila": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/utility-types": { - "version": "3.10.0", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "dev": true, - "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/uvu/node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/validate.io-array": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", - "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==", - "dev": true - }, - "node_modules/validate.io-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", - "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==", - "dev": true - }, - "node_modules/validate.io-integer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", - "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==", - "dev": true, - "dependencies": { - "validate.io-number": "^1.0.3" - } - }, - "node_modules/validate.io-integer-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", - "integrity": "sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==", - "dev": true, - "dependencies": { - "validate.io-array": "^1.0.3", - "validate.io-integer": "^1.0.4" - } - }, - "node_modules/validate.io-number": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", - "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==", - "dev": true - }, - "node_modules/value-equal": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/vary": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "4.2.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "2.0.4", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vlq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", - "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==" - }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true - }, - "node_modules/vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "dev": true - }, - "node_modules/wait-on": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "axios": "^0.25.0", - "joi": "^17.6.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" - }, - "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dev": true, - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "license": "BSD-2-Clause" - }, - "node_modules/webpack": { - "version": "5.76.3", - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.8.0", - "license": "MIT", - "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/acorn": { - "version": "8.8.2", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/ws": { - "version": "7.5.9", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "license": "MIT", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/range-parser": { - "version": "1.2.1", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.13.1", - "license": "MIT", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.13.0", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.8.2", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/acorn-import-assertions": { - "version": "1.8.0", - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpackbar": { - "version": "5.0.2", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "8.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/xml-formatter": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/xml-formatter/-/xml-formatter-2.6.1.tgz", - "integrity": "sha512-dOiGwoqm8y22QdTNI7A+N03tyVfBlQ0/oehAzxIZtwnFAHGeSlrfjF73YQvzSsa/Kt6+YZasKsrdu6OIpuBggw==", - "dev": true, - "dependencies": { - "xml-parser-xo": "^3.2.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/xml-parser-xo": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/xml-parser-xo/-/xml-parser-xo-3.2.0.tgz", - "integrity": "sha512-8LRU6cq+d7mVsoDaMhnkkt3CTtAs4153p49fRo+HIB3I1FD1o5CeXRjRH29sQevIfVJIcPjKSsPU/+Ujhq09Rg==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "license": "ISC" - }, - "node_modules/yaml": { - "version": "1.10.2", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yaml-ast-parser": { - "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", - "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", - "dev": true - }, - "node_modules/yargs": { - "version": "17.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "1.0.5", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} diff --git a/legacy-docs/package.json b/legacy-docs/package.json deleted file mode 100644 index ddcc424f..00000000 --- a/legacy-docs/package.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "name": "novorender-api-docs", - "version": "1.0.0", - "private": true, - "engines": { - "node": ">=16.14" - }, - "scripts": { - "docusaurus": "docusaurus", - "start": "npm run re-gen && docusaurus start --port 3001", - "build": "npm run validate-snippets && npm run re-gen && docusaurus build --out-dir ../build/legacy", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids", - "typecheck": "tsc", - "validate:json-config": "ajv validate -s scene-screenshot-gen/schema.json -d scene-screenshot-gen/config.json", - "gen:demo-screenshots": "tsc -p scene-screenshot-gen/tsconfig.json && node scene-screenshot-gen/index.js", - "validate-and-gen": "npm run validate:json-config && npm run gen:demos-screenshots --", - "validate-snippets": "npx --no-install tsc -p demo-snippets/tsconfig.json", - "lint": "eslint src/ demo-snippets/ --max-warnings=0", - "gen-api-docs": "docusaurus gen-api-docs", - "clean-api-docs": "docusaurus clean-api-docs", - "gen-api-docs:version": "docusaurus gen-api-docs:version", - "clean-api-docs:version": "docusaurus clean-api-docs:version", - "gen-all": "docusaurus gen-api-docs all && docusaurus gen-api-docs:version rest_api_versioned:all", - "clean-all": "docusaurus clean-api-docs all && docusaurus clean-api-docs:version rest_api_versioned:all", - "re-gen": "npm run clean-all && npm run gen-all", - "re-gen-v2": "docusaurus clean-api-docs:version rest_api_versioned:2.0 && docusaurus gen-api-docs:version rest_api_versioned:2.0" - }, - "dependencies": { - "@cmfcmf/docusaurus-search-local": "1.1.0", - "@docusaurus/core": "2.4.1", - "@docusaurus/preset-classic": "2.4.1", - "@docusaurus/theme-live-codeblock": "2.4.1", - "@fortawesome/fontawesome-svg-core": "6.4.0", - "@fortawesome/free-solid-svg-icons": "6.4.0", - "@fortawesome/react-fontawesome": "0.2.0", - "@mdx-js/react": "1.6.22", - "@monaco-editor/react": "4.5.1", - "@novorender/data-js-api": "0.2.26", - "@novorender/measure-api": "0.0.143", - "@novorender/webgl-api": "0.4.61", - "allotment": "1.19.2", - "clsx": "1.2.1", - "monaco-editor": "0.40.0", - "raw-loader": "4.0.2", - "react": "18.0.0", - "react-dom": "18.0.0", - "react-tiny-popover": "7.2.4", - "react-transition-group": "4.4.5" - }, - "devDependencies": { - "@docusaurus/eslint-plugin": "2.4.1", - "@docusaurus/module-type-aliases": "2.4.1", - "@tsconfig/docusaurus": "1.0.6", - "@tsconfig/node16": "1.0.3", - "@types/puppeteer": "5.4.6", - "@typescript-eslint/eslint-plugin": "^5.54.0", - "@typescript-eslint/parser": "^5.54.0", - "ajv-cli": "5.0.0", - "buffer": "6.0.3", - "copy-webpack-plugin": "11.0.0", - "css-minimizer-webpack-plugin": "4.1.0", - "docusaurus-plugin-openapi-docs": "2.2.3", - "docusaurus-plugin-typedoc": "0.19.2", - "docusaurus-theme-openapi-docs": "2.2.3", - "eslint": "^8.35.0", - "eslint-plugin-react": "^7.32.2", - "lint-staged": "13.2.3", - "path-browserify": "1.0.1", - "process": "0.11.10", - "puppeteer": "13.5.2", - "stream-browserify": "3.0.0", - "string_decoder": "1.3.0", - "typedoc": "0.24.8", - "typedoc-plugin-markdown": "3.15.4", - "typescript": "4.9.4", - "url": "0.11.0", - "util": "0.12.4", - "yargs": "17.4.1" - }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - } -} diff --git a/legacy-docs/sidebars.js b/legacy-docs/sidebars.js deleted file mode 100644 index d8d695c3..00000000 --- a/legacy-docs/sidebars.js +++ /dev/null @@ -1,124 +0,0 @@ -/** - * Creating a sidebar enables you to: - - create an ordered group of docs - - render a sidebar for each doc of that group - - provide next/previous navigation - - The sidebars can be generated from the filesystem, or explicitly defined here. - - Create as many sidebars as you want. - */ - -// @ts-check - -const { versionSelector, versionCrumb } = require("docusaurus-plugin-openapi-docs/lib/sidebars/utils"); -const restApiVersions = require("./docs/rest-api/versions.json"); - -/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ -const sidebars = { - // By default, Docusaurus generates a sidebar from the docs folder structure - mainSidebar: [ - { - type: "category", - label: "Documentation", - link: { - type: "generated-index", - title: "Docs", - description: "Learn more about the Novorender's open source APIs", - }, - collapsed: false, - items: [ - { - type: "category", - label: "WebGL API", - link: { - type: "doc", - id: "webgl-api/index", - }, - items: [{ type: "autogenerated", dirName: "webgl-api" }], - }, - { - type: "category", - label: "Data JS API", - link: { - type: "doc", - id: "data-js-api/index", - }, - items: [{ type: "autogenerated", dirName: "data-js-api" }], - }, - { - type: "category", - label: "Measure API", - link: { - type: "doc", - id: "measure-api/index", - }, - items: [{ type: "autogenerated", dirName: "measure-api" }], - }, - { - type: "category", - label: "Tutorials", - link: { - type: "generated-index", - title: "Tutorials", - description: "Learn more about the different features and techniques.", - }, - items: [{ type: "autogenerated", dirName: "tutorials" }], - }, - { type: "link", label: "Data Rest API", href: "/docs/category/data-rest-api-v1" }, - ], - }, - ], - "restApi-1.0": [ - { - type: "html", - defaultStyle: true, - value: versionSelector(restApiVersions), - className: "version-button", - }, - { - type: "html", - defaultStyle: true, - value: versionCrumb(`V1`), // The version label you wish to display - }, - { - type: "category", - label: "Data Rest API", - link: { - type: "generated-index", - title: "Data Rest API - V1", - description: "Novorender Data REST API Docs", - slug: "/category/data-rest-api-v1", - }, - // items: require("./docs/rest-api/sidebar.js"), - items: [{ type: "autogenerated", dirName: "rest-api" }], - }, - ], - "restApi-2.0": [ - { - type: "html", - defaultStyle: true, - value: versionSelector(restApiVersions), - className: "version-button", - }, - { - type: "html", - defaultStyle: true, - value: versionCrumb(`V2`), // The version label you wish to display - }, - { - type: "category", - label: "Data Rest API", - link: { - type: "generated-index", - title: "Data Rest API - V2", - description: "Novorender Data REST API Docs", - slug: "/category/data-rest-api-v2", - }, - items: [{ type: "autogenerated", dirName: "rest-api/2.0" }], - // items: require("./docs/rest-api/2.0/sidebar.js"), - }, - ], -}; - -module.exports = sidebars; diff --git a/legacy-docs/src/components/MonacoWrapper/index.styles.css b/legacy-docs/src/components/MonacoWrapper/index.styles.css deleted file mode 100644 index fcd5d6b3..00000000 --- a/legacy-docs/src/components/MonacoWrapper/index.styles.css +++ /dev/null @@ -1,89 +0,0 @@ -.editor-svg-icon { - fill: var(--ifm-color-primary); -} - -.editor-svg-icon path { - transform: scale(0.035); -} - -.popover-content { - background: var(--ifm-navbar-background-color); - padding: 5px; - border: 1px solid var(--ifm-color-gray-800); - font-size: 12px; - border-radius: 4px; - box-shadow: var(--ifm-global-shadow-lw); -} - -.popover-content > p { - color: var(--ifm-color-gray-800); - font-size: 12px; - margin: 0; -} - -.popover-content hr { - margin: 5px 0; -} - -.editor-config-dropdown { -} - -.editor-config-dropdown hr { - margin-top: 8px; - margin-bottom: 0px; - background: var(--ifm-color-gray-800); -} - -.editor-config-dropdown > li > span { - font-size: 10px; -} - -.editor-config-dropdown > li > div { - display: flex; - justify-content: center; - align-items: center; -} - -.editor-config-dropdown > li > div .font-size-button { - padding: 5px; - margin-right: 5px; - border-radius: 50%; - width: 25px; - font-size: 12px; - height: 25px; - line-height: 1; -} - -.editor-config-dropdown > li > div .hidden-areas-toggle-button { - padding: 5px; - margin-right: 5px; - font-size: 12; - line-height: 1; -} - -.playground_navbar { - padding-top: 0; - padding-bottom: 0; - height: 36px; - margin-bottom: 5px; -} - -.playground_footer_navbar { - padding-top: 0; - padding-bottom: 0; - height: 26px; - margin-top: 5px; -} - -.editor-error-alert { - position: absolute; - bottom: 0; - right: 30px; - max-width: 600px; -} - -.renderer-loading-message { - display: flex; - justify-content: center; - align-items: center; -} diff --git a/legacy-docs/src/components/MonacoWrapper/index.tsx b/legacy-docs/src/components/MonacoWrapper/index.tsx deleted file mode 100644 index acdd6d48..00000000 --- a/legacy-docs/src/components/MonacoWrapper/index.tsx +++ /dev/null @@ -1,676 +0,0 @@ -import React, { Fragment, useEffect, useRef, useState } from "react"; -import BrowserOnly from "@docusaurus/BrowserOnly"; -import { useColorMode } from "@docusaurus/theme-common"; -import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; -import Link from "@docusaurus/Link"; -import { useHistory } from "@docusaurus/router"; -import Editor, { Monaco, useMonaco } from "@monaco-editor/react"; -import { editor } from "monaco-editor"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import Admonition from "@theme/Admonition"; -import { Allotment } from "allotment"; -import { Popover } from "react-tiny-popover"; -import Renderer from "@site/src/components/Renderer"; -import Spinner from "@site/src/components/misc/spinner"; -const { devDependencies } = require("../../../package.json"); - -/** CSS */ -import "./index.styles.css"; -import "allotment/dist/style.css"; -/** CSS END */ - -/** Icons */ -import RotationIconSvg from "@site/static/img/landscape-portrait.svg"; -import { faSquareArrowUpRight, faUpRightAndDownLeftFromCenter, faDownload, faCopy, faPenToSquare, faCircleInfo, faCode, faSlash, faGear } from "@fortawesome/free-solid-svg-icons"; -/** Icons END */ - -import WebglDTS from "@site/node_modules/@novorender/webgl-api/index.d.ts?raw"; -import DataJsApiDTS from "@site/node_modules/@novorender/data-js-api/index.d.ts?raw"; -import MeasureApiDTS from "@site/node_modules/@novorender/measure-api/index.d.ts?raw"; -import GlMatrixDTS from "@site/node_modules/gl-matrix/index.d.ts?raw"; - -import * as MeasureAPI from "@novorender/measure-api"; -import * as DataJsAPI from "@novorender/data-js-api"; -import * as GlMatrix from "gl-matrix"; - -/** Types */ -import type { API } from "@novorender/webgl-api"; -import type { IDempProps } from "@site/demo-snippets/misc"; -/** Types END */ - -export interface IParams { - webglAPI: API; - measureAPI: typeof MeasureAPI; - dataJsAPI: typeof DataJsAPI; - glMatrix: typeof GlMatrix; - primaryCanvas: HTMLCanvasElement; - canvas2D: HTMLCanvasElement; -} - -// the namespace from the original index.d.ts needs replacing -// or Monaco doesn't like it -const dts_fixed = WebglDTS.replace(`"@novorender/webgl-api"`, "NovoRender"); -// const dts_fixed_measure_api = MeasureApiDTS.replace(`"@novorender/measure-api"`, "NovoRender1") - -/** - * @todo move to separate file - */ -function useDebounce(value: T, delay?: number): T { - const [debouncedValue, setDebouncedValue] = useState(value); - - useEffect(() => { - const timer = setTimeout(() => setDebouncedValue(value), delay || 500); - - return () => { - clearTimeout(timer); - }; - }, [value, delay]); - - return debouncedValue; -} - -const editorOptions: editor.IEditorConstructionOptions = { - minimap: { enabled: false }, - formatOnPaste: true, - formatOnType: true, - scrollBeyondLastLine: false, - automaticLayout: true, - contextmenu: false, - folding: false, - showFoldingControls: "never", - guides: { indentation: true }, - fixedOverflowWidgets: true, - lineNumbers: "off", -}; - -export default function MonacoWrapper({ code, demoName, dirName, description, editorConfig, editUrl }: IDempProps): JSX.Element { - const monaco = useMonaco(); - const { siteConfig } = useDocusaurusContext(); - const { colorMode } = useColorMode(); - const history = useHistory(); - const editorInstance = useRef(null); - const textAreaInstance = useRef(null); - const editorFooterInstance = useRef(); - const editorNavbarInstance = useRef(); - const [codeOutput, setCodeOutput] = useState(null); - const [codeError, setCodeError] = useState(null); - const [initialCode, setInitialCode] = useState(null); - const [tsCodeForClipboard, setTsCodeForClipboard] = useState(initialCode); - const [theme, setTheme] = useState<"light" | "vs-dark" | "">(""); - const [isActivity, setIsActivity] = useState(false); - const [canvasRef, setCanvasRef] = useState(null); - const [canvasWrapperRef, setCanvasWrapperRef] = useState(null); - const [api, setApiInstance] = useState(); // Create API - const [measureApiInstance, setMeasureApiInstance] = useState(); // Measure API - const [splitPaneDirectionVertical, setSplitPaneDirectionVertical] = useState(true); // Direction to split. If true then the panes will be stacked vertically, otherwise they will be stacked horizontally. - const [force_rerender_allotment, set_force_rerender_allotment] = useState(true); // allotment doesn't support dynamically changing pane positions so we must force re-render the component so it recalculates the size - const [editorHeight, setEditorHeight] = useState(editorConfig.mode === "inline" ? (innerHeight * 80) / 100 / 2 : innerHeight / 2 - 68); // minus editor top-bar and footer height - const [rendererHeight, setRendererHeight] = useState(editorConfig.mode === "inline" ? (innerHeight * 80) / 100 / 2 : innerHeight / 2 - 68); // minus editor top-bar and footer height - const [rendererPaneWidth, setRendererPaneWidth] = useState(); - const [isDemoDescPopoverOpen, setIsDemoDescPopoverOpen] = useState(false); - const [isMessagesAndAlertPopoverOpen, setIsMessagesAndAlertPopoverOpen] = useState(false); - const [messagesAndAlerts, setMessagesAndAlerts] = useState([]); - const [main, setMain] = useState(); - const [isHiddenAreasShowing, setIsHiddenAreasShowing] = useState(false); - const main_debounced = useDebounce(codeOutput, 1000); - const [hasMainChanged, setHasMainChanged] = useState(false); - const [fontSize, setFontSize] = useState(); - - useEffect(() => { - console.log("playgroundConfig ", editorConfig); - - if (code) { - setInitialCode(code); - setTsCodeForClipboard(code); // for clipboard copy - } - }, [code]); - - /** - * @description transpile and return js string - * @param editor Editor instance - * @param monaco Monaco Instance - * @returns transpiled output as string - */ - const returnTranspiledOutput = async (editor, monaco: Monaco): Promise => { - try { - const model = editor.getModel()!; - const uri = model.uri; - const worker = await monaco.languages.typescript.getTypeScriptWorker(); - const languageService = await worker(uri); - const result = await languageService.getEmitOutput(uri.toString()); - return result.outputFiles[0].text; - } catch (error) { - console.log("Failed to get transpiled output, details ==> ", error); - } - }; - - /** - * @description extract and return render config - * @param transpiledOutput string that contains config - * @returns RenderConfig - */ - const returnRenderConfigFromOutput = async (transpiledOutput: string): Promise<{ main: () => void; showTip?: () => void }> => { - const encodedJs = encodeURIComponent(transpiledOutput); - const dataUri = `data:text/javascript;charset=utf-8,${encodedJs}`; - const { main, showTip } = await import(/* webpackIgnore: true */ dataUri); - - console.log("main ==> ", main); - - return { main, showTip }; - }; - - const codeChangeHandler = async (tsCode: string) => { - setIsActivity(true); // toggle spinner. - setTsCodeForClipboard(tsCode); // for clipboard copy - const output = await returnTranspiledOutput(editorInstance.current, monaco); - - console.log("output ", output); - - // compare current output with previous output to check if anything has - // been changed. - if (codeOutput && JSON.stringify(codeOutput) === JSON.stringify(output)) { - console.log("[INFO]: Code hasn't been changed, returning."); - setIsActivity(false); // toggle spinner. - return false; - } - - // set current output in state so we can compare later - setCodeOutput(output); - setHasMainChanged(true); - }; - - useEffect(() => { - if (main_debounced) { - (async () => { - const { main } = await returnRenderConfigFromOutput(codeOutput); - if (main) { - // first reset `main` so the react forces - // the component to remount which then creates - // everything again (the view, scene etc...) - setMain(() => null); - - // set the main again - setMain(() => main); - } - setIsActivity(false); // toggle spinner. - })(); - } - }, [main_debounced]); - - useEffect(() => { - let unblock; - if (hasMainChanged) { - // Block navigation and register a callback that - // fires when a navigation attempt is blocked. - unblock = history.block((tx) => { - // Navigation was blocked! Let's show a confirmation dialog - // so the user can decide if they actually want to navigate - // away and discard changes they've made in the current page. - if (window.confirm("Are you sure you want to leave this page? changes you made could be lost.")) { - return unblock(); - } - return false; - }); - window.addEventListener("beforeunload", unloadEventHandler); - } - - return () => { - window.removeEventListener("beforeunload", unloadEventHandler); - if (unblock) { - unblock(); - } - }; - }, [hasMainChanged]); - - useEffect(() => { - (async () => { - // import dynamically for SSR - const api = await import("@novorender/webgl-api"); - const measureApi = await import("@novorender/measure-api"); - - setApiInstance(api); - setMeasureApiInstance(measureApi); - - const apiInstance = api.createAPI(); - - if (!apiInstance["supportsOffscreenCanvas"]) { - setMessagesAndAlerts([...messagesAndAlerts, "⚠ OffscreenCanvas is not supported in this browser."]); - } - })(); - - return () => { - window.removeEventListener("beforeunload", unloadEventHandler); - }; - }, []); - - const unloadEventHandler = (e) => { - if (hasMainChanged) { - e.preventDefault(); - return (e.returnValue = ""); - } - }; - - // handle editor theme based on docusaurus colorMode. - useEffect(() => { - setTheme(colorMode === "dark" ? "vs-dark" : "light"); - }, [colorMode]); - - useEffect(() => { - if (monaco) { - // Add additional d.ts files to the JavaScript language service and change. - // Also change the default compilation options. - // The sample below shows how a class Facts is declared and introduced - // to the system and how the compiler is told to use ES6 (target=2). - - // validation settings - // monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({ - // noSemanticValidation: true, - // noSyntaxValidation: false - // }); - - // compiler options - // monaco.languages.typescript.typescriptDefaults.setCompilerOptions({ - // // moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs, - // // allowSyntheticDefaultImports: true, - // moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs, - // module: monaco.languages.typescript.ModuleKind.ESNext, - // allowNonTsExtensions: true, - // // baseUrl: '.', - // // paths: { "@/*": ['node_modules/*'] }, - // target: monaco.languages.typescript.ScriptTarget.Latest - // }); - - const libUri = "index.d.ts"; - monaco.languages.typescript.typescriptDefaults.addExtraLib(WebglDTS + dts_fixed + MeasureApiDTS + GlMatrixDTS + DataJsApiDTS, libUri); - - monaco.languages.typescript.typescriptDefaults.addExtraLib( - `/** - * @description opens an alert that displays provided content - * @param content string to show in the alert - */ - declare function openAlert(content:string, type: 'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'danger' = 'info'):void - - /** - * @description opens a pane in bottom left of renderer to show any text - * @param content string to show in the info pane - */ - declare function openInfoPane(content: object | string | any, title?: string): void;`, - ); - - // monaco.languages.typescript.typescriptDefaults.addExtraLib( - // GlMatrixDTS, - // 'file:///node_modules/gl-matrix/index.d.ts' - // ); - - // When resolving definitions and references, the editor will try to use created models. - // Creating a model for the library allows "peek definition/references" commands to work with the library. - if (!monaco.editor.getModel(monaco.Uri.parse(libUri))) { - monaco.editor.createModel(WebglDTS + dts_fixed + MeasureApiDTS + GlMatrixDTS + DataJsApiDTS, "typescript", monaco.Uri.parse(libUri)); - } - } - }, [monaco]); - - function handleEditorWillMount(monaco) { - configureFontSize(); - } - - function configureFontSize(size?: number): void { - const lsKey = "playground.fontSize"; - const fontSize = size || Number(localStorage.getItem(lsKey)) || 14; // default font-size 14; - localStorage.setItem(lsKey, fontSize.toString()); - setFontSize(fontSize); - } - - async function handleEditorDidMount(editor: editor.ICodeEditor, monaco: Monaco) { - setIsActivity(true); // toggle spinner - editorInstance.current = editor; - - // hide hidden ranges upon init - toggleHiddenAreas(isHiddenAreasShowing, editor, monaco); - - const model = editor.getModel(); - // highlight ranges based on comments "\\ HighlightedRangeStarted \\ HighlightRangeEnded" - const rangesToHighlight = model.findMatches("//\\s*HighlightedRangeStarted\n([\\s\\S\\n]*?)//\\s*HighlightedRangeEnded", false, true, false, null, true); - if (rangesToHighlight && rangesToHighlight.length) { - let _rangesToHighlight = []; - let _rangesToRemove = []; - - rangesToHighlight.map((r) => { - _rangesToHighlight.push({ - range: new monaco.Range(r.range.startLineNumber === 0 ? r.range.startLineNumber : r.range.startLineNumber + 1, 0, r.range.endLineNumber - 1, 0), - options: { - inlineClassName: "playground-monaco-inline-decoration", - isWholeLine: true, - }, - }); - _rangesToRemove.push( - { - range: new monaco.Range(r.range.startLineNumber, 0, r.range.startLineNumber + 1, 0), - text: null, - }, - { - range: new monaco.Range(r.range.endLineNumber, 0, r.range.endLineNumber + 1, 0), - text: null, - }, - ); - }); - - editor.deltaDecorations([], _rangesToHighlight); - model.applyEdits(_rangesToRemove); - } - - await editor.getAction("editor.action.formatDocument").run(); - if (editorConfig.cursorPosition) { - editor.setPosition(editorConfig.cursorPosition); - } - if (editorConfig.revealLine) { - editor.revealLineNearTop(editorConfig.revealLine); - } - const output = await returnTranspiledOutput(editor, monaco); - setCodeOutput(output); - const { main, showTip } = await returnRenderConfigFromOutput(output); - - if (showTip) { - try { - showTip(); - } catch (error) { - console.error("An error occurred while trying to execute showTip"); - } - } - - if (main) { - setMain(() => main); - } - - setIsActivity(false); // toggle spinner - } - - // toggle hidden areas in the editor - function toggleHiddenAreas(show: boolean, editor: editor.ICodeEditor, monacoInstance: Monaco): void { - if (show) { - // @ts-expect-error - editor.setHiddenAreas([]); - } else { - const model = editor.getModel(); - // hide ranges based on comments "\\ HiddenRangeStarted \\ HiddenRangeEnded" - const rangesToHide = model.findMatches("//\\s*HiddenRangeStarted\n([\\s\\S\\n]*?)//\\s*HiddenRangeEnded", false, true, false, null, true); - console.log("rangesToHide ", rangesToHide); - if (rangesToHide && rangesToHide.length) { - // @ts-expect-error - editor.setHiddenAreas(rangesToHide.map((r) => new monacoInstance.Range(r.range.startLineNumber, 0, r.range.endLineNumber, 0))); - } - } - - setIsHiddenAreasShowing(show); - } - - function handleEditorValidation(markers) { - console.log("markers ", markers); - - if (markers.length && markers[0].severity > 1) { - console.log("diags ", markers[0]); - const diagnostic = markers[0]; - setCodeError(diagnostic); - } else { - setCodeError(null); - } - } - - // copy the current code output to clipboard - function copyToClipboard() { - textAreaInstance.current.select(); - document.execCommand("copy"); - } - - // download the contents of current canvas as image - function downloadCanvasAsImage(): void { - let link = document.createElement("a"); - link.download = `${demoName}.png`; - link.href = canvasRef.toDataURL(); - link.click(); - link.remove(); - } - - // change split pane mode to vertical or horizontal - function changeSplitPaneRotation(): void { - set_force_rerender_allotment(false); // hide the allotment component - setSplitPaneDirectionVertical(!splitPaneDirectionVertical); // update position - setTimeout(() => { - set_force_rerender_allotment(true); // render the allotment component again - }, 50); - } - - // toggle canvas fullscreen mode - function toggleCanvasFullscreenMode(): void { - canvasWrapperRef.requestFullscreen().catch((e) => { - console.log("Failed to request fullscreen => ", e); - alert("Failed to expand canvas"); - }); - } - - return ( - - {() => ( - -
- - -
- {force_rerender_allotment && ( - ) => { - if (e?.length > 1) { - if (splitPaneDirectionVertical) { - setEditorHeight(e[0]); - setRendererHeight(e[1]); - } else { - setRendererPaneWidth(e[1]); - } - } - }} - > -
- - {codeError && ( -
- -

{codeError.message}

-
-
- )} -
- {main ? ( - setMessagesAndAlerts(Array.from(new Set([...messagesAndAlerts, m])))} - splitPaneDirectionVertical={splitPaneDirectionVertical} - /> - ) : ( -
- Loading the renderer... -
- )} -
- )} -
-