From 31d29b084375124b1693c0bf15f6f3af13e6c9ed Mon Sep 17 00:00:00 2001 From: Zyie <24736175+Zyie@users.noreply.github.com> Date: Tue, 24 Dec 2024 15:11:36 +0000 Subject: [PATCH 1/3] wip --- .eslintrc.js | 1 + .gitignore | 1 - docs/examples/advanced/_category_.yml | 2 + .../examples/advanced/collision-detection.js | 0 .../examples/advanced/collision-detection.mdx | 11 + .../examples/advanced/mouse-trail.js | 0 docs/examples/advanced/mouse-trail.mdx | 11 + .../examples/advanced/scratch-card.js | 0 docs/examples/advanced/scratch-card.mdx | 11 + .../examples/advanced/screen-shot.js | 0 docs/examples/advanced/screen-shot.mdx | 11 + .../examples}/advanced/slots.js | 0 docs/examples/advanced/slots.mdx | 11 + docs/examples/advanced/spinners.mdx | 26 + .../examples/advanced/spinners/index.js | 2 - .../examples}/advanced/spinners/intersect.js | 0 .../examples}/advanced/spinners/spinner1.js | 1 - .../examples}/advanced/spinners/spinner2.js | 2 +- .../examples}/advanced/spinners/spinner3.js | 1 - .../examples}/advanced/spinners/spinner4.js | 0 .../examples}/advanced/spinners/spinner5.js | 0 .../examples/advanced/star-warp.js | 0 docs/examples/advanced/star-warp.mdx | 11 + docs/examples/assets/_category_.yml | 2 + .../v8.0.0 => docs/examples}/assets/async.js | 0 docs/examples/assets/async.mdx | 11 + .../examples}/assets/background.js | 0 docs/examples/assets/background.mdx | 11 + .../v8.0.0 => docs/examples}/assets/bundle.js | 0 docs/examples/assets/bundle.mdx | 11 + .../examples}/assets/multiple.js | 0 docs/examples/assets/multiple.mdx | 11 + .../examples}/assets/promise.js | 0 docs/examples/assets/promise.mdx | 11 + docs/examples/basic/_category_.yml | 2 + .../examples/basic/blend-modes.js | 0 docs/examples/basic/blend-modes.mdx | 11 + .../examples/basic/cache-as-texture.js | 0 docs/examples/basic/cache-as-texture.mdx | 11 + .../examples}/basic/container.js | 0 docs/examples/basic/container.mdx | 11 + .../examples/basic/mesh-plane.js | 0 docs/examples/basic/mesh-plane.mdx | 11 + .../examples/basic/particle-container.js | 0 docs/examples/basic/particle-container.mdx | 11 + .../examples/basic/render-group.js | 0 docs/examples/basic/render-group.mdx | 11 + .../v8.0.0 => docs/examples}/basic/tinting.js | 0 docs/examples/basic/tinting.mdx | 11 + .../examples/basic/transparent-background.js | 0 .../examples/basic/transparent-background.mdx | 11 + docs/examples/events/_category_.yml | 2 + .../v8.0.0 => docs/examples}/events/click.js | 0 docs/examples/events/click.mdx | 11 + .../examples/events/custom-hitarea.js | 0 docs/examples/events/custom-hitarea.mdx | 11 + .../examples/events/custom-mouse-icon.js | 0 docs/examples/events/custom-mouse-icon.mdx | 11 + .../examples}/events/dragging.js | 0 docs/examples/events/dragging.mdx | 11 + .../examples}/events/interactivity.js | 0 docs/examples/events/interactivity.mdx | 11 + .../v8.0.0 => docs/examples}/events/logger.js | 0 docs/examples/events/logger.mdx | 11 + .../examples/events/pointer-tracker.js | 0 docs/examples/events/pointer-tracker.mdx | 11 + .../v8.0.0 => docs/examples}/events/slider.js | 0 docs/examples/events/slider.mdx | 11 + docs/examples/filters-advanced/_category_.yml | 2 + docs/examples/filters-advanced/custom.mdx | 17 + .../filters-advanced}/custom/custom.frag | 0 .../filters-advanced}/custom/custom.vert | 0 .../filters-advanced}/custom/index.js | 0 .../filters-advanced/mouse-blending.mdx | 17 + .../filters-advanced/mouse-blending}/index.js | 0 .../mouse-blending}/mouseBlending.frag | 0 .../mouse-blending}/mouseBlending.vert | 0 docs/examples/filters-basic/_category_.yml | 2 + .../examples/filters-basic}/blur.js | 0 docs/examples/filters-basic/blur.mdx | 11 + .../examples/filters-basic/color-matrix.js | 0 docs/examples/filters-basic/color-matrix.mdx | 11 + .../displacement-map-crawlies.js | 0 .../displacement-map-crawlies.mdx | 11 + .../filters-basic/displacement-map-flag.js | 0 .../filters-basic/displacement-map-flag.mdx | 11 + docs/examples/graphics/_category_.yml | 2 + .../examples}/graphics/advanced.js | 0 docs/examples/graphics/advanced.mdx | 11 + .../examples}/graphics/dynamic.js | 0 docs/examples/graphics/dynamic.mdx | 11 + .../examples/graphics/fill-gradient.js | 0 docs/examples/graphics/fill-gradient.mdx | 11 + .../examples/graphics/mesh-from-path.js | 0 docs/examples/graphics/mesh-from-path.mdx | 11 + .../examples/graphics/pixel-line.js | 0 docs/examples/graphics/pixel-line.mdx | 11 + docs/examples/graphics/pixelLine.js | 82 +++ .../examples}/graphics/simple.js | 0 docs/examples/graphics/simple.mdx | 11 + .../examples/graphics/svg-load.js | 0 docs/examples/graphics/svg-load.mdx | 11 + .../v8.0.0 => docs/examples}/graphics/svg.js | 0 docs/examples/graphics/svg.mdx | 11 + .../examples}/graphics/texture.js | 0 docs/examples/graphics/texture.mdx | 11 + docs/examples/masks/_category_.yml | 2 + .../v8.0.0 => docs/examples}/masks/filter.js | 0 docs/examples/masks/filter.mdx | 11 + .../examples}/masks/graphics.js | 0 docs/examples/masks/graphics.mdx | 11 + .../examples/masks/inverse-mask.js | 0 docs/examples/masks/inverse-mask.mdx | 11 + .../v8.0.0 => docs/examples}/masks/sprite.js | 0 docs/examples/masks/sprite.mdx | 11 + docs/examples/mesh-and-shaders/_category_.yml | 2 + .../mesh-and-shaders/instanced-geometry.mdx | 19 + .../instanced-geometry}/index.js | 0 .../instancedGeometry.frag | 0 .../instancedGeometry.vert | 0 .../instancedGeometry.wgsl | 0 .../mesh-and-shaders/multipass-mesh.mdx | 25 + .../multipass-mesh}/combine.frag | 0 .../multipass-mesh}/grid.frag | 0 .../mesh-and-shaders/multipass-mesh}/index.js | 0 .../multipass-mesh}/multipassMesh.vert | 0 .../multipass-mesh}/noise.frag | 0 .../multipass-mesh}/ripple.frag | 0 .../multipass-mesh}/wave.frag | 0 .../mesh-and-shaders/perspective-mesh.js | 0 .../mesh-and-shaders/perspective-mesh.mdx | 11 + .../mesh-and-shaders/shader-toy-mesh.mdx | 17 + .../shader-toy-mesh}/index.js | 0 .../shader-toy-mesh}/shaderToy.frag | 0 .../shader-toy-mesh}/shaderToy.vert | 0 .../mesh-and-shaders/shared-geometry.mdx | 17 + .../shared-geometry}/index.js | 0 .../shared-geometry}/sharedGeometry.frag | 0 .../shared-geometry}/sharedGeometry.vert | 0 .../mesh-and-shaders/shared-shader.mdx | 17 + .../mesh-and-shaders/shared-shader}/index.js | 0 .../shared-shader}/sharedShader.frag | 0 .../shared-shader}/sharedShader.vert | 0 .../textured-mesh-advanced.js | 0 .../textured-mesh-advanced.mdx | 11 + .../mesh-and-shaders/textured-mesh-basic.js | 0 .../mesh-and-shaders/textured-mesh-basic.mdx | 11 + .../mesh-and-shaders/triangle-color.mdx | 19 + .../mesh-and-shaders/triangle-color}/index.js | 0 .../triangle-color}/triangleColor.frag | 0 .../triangle-color}/triangleColor.vert | 0 .../triangle-color}/triangleColor.wgsl | 0 .../mesh-and-shaders/triangle-textured.mdx | 17 + .../triangle-textured}/index.js | 0 .../triangle-textured}/triangleTextured.frag | 0 .../triangle-textured}/triangleTextured.vert | 0 docs/examples/mesh-and-shaders/triangle.mdx | 19 + .../mesh-and-shaders}/triangle/index.js | 0 .../mesh-and-shaders}/triangle/triangle.frag | 0 .../mesh-and-shaders}/triangle/triangle.vert | 0 .../mesh-and-shaders}/triangle/triangle.wgsl | 0 docs/examples/offscreen-canvas/_category_.yml | 2 + .../examples/offscreen-canvas}/basic.js | 0 docs/examples/offscreen-canvas/basic.mdx | 11 + docs/examples/sprite/_category_.yml | 2 + .../sprite/animated-sprite-animation-speed.js | 0 .../animated-sprite-animation-speed.mdx | 11 + .../sprite/animated-sprite-explosion.js | 0 .../sprite/animated-sprite-explosion.mdx | 11 + .../examples/sprite/animated-sprite-jet.js | 0 docs/examples/sprite/animated-sprite-jet.mdx | 11 + .../v8.0.0 => docs/examples}/sprite/basic.js | 0 docs/examples/sprite/basic.mdx | 11 + .../examples/sprite/texture-swap.js | 0 docs/examples/sprite/texture-swap.mdx | 11 + .../examples/sprite/tiling-sprite.js | 0 docs/examples/sprite/tiling-sprite.mdx | 11 + .../v8.0.0 => docs/examples}/sprite/video.js | 0 docs/examples/sprite/video.mdx | 11 + docs/examples/text/_category_.yml | 2 + .../examples/text/bitmap-text.js | 0 docs/examples/text/bitmap-text.mdx | 11 + .../examples/text/from-font.js | 0 docs/examples/text/from-font.mdx | 11 + .../examples/text/pixi-text.js | 0 docs/examples/text/pixi-text.mdx | 11 + .../examples/text/web-font.js | 0 docs/examples/text/web-font.mdx | 11 + docs/examples/textures/_category_.yml | 2 + .../textures/render-texture-advanced.js | 0 .../textures/render-texture-advanced.mdx | 11 + .../examples/textures/render-texture-basic.js | 0 .../textures/render-texture-basic.mdx | 11 + .../examples/textures/texture-rotate.js | 0 docs/examples/textures/texture-rotate.mdx | 11 + ...-pixel-line.md => graphics-pixel-line.mdx} | 10 +- package-lock.json | 238 ++++----- package.json | 10 +- src/components/Editor/Editor.tsx | 64 +++ src/components/Editor/EmbeddedEditor.tsx | 6 + src/components/Editor/ExampleEditor.tsx | 10 + src/components/Editor/Monaco/MonacoView.tsx | 46 ++ src/components/Editor/Monaco/glsl.ts | 359 +++++++++++++ .../Editor/Monaco/useFileLanguage.ts | 37 ++ .../Editor/Monaco/usePixiDefinitions.ts | 92 ++++ .../Editor/Sandpack/ConsoleCounterButton.tsx | 15 + src/components/Editor/Sandpack/Layout.tsx | 67 +++ .../Editor/Sandpack/ToggleCodeButton.tsx | 35 ++ .../Editor/Sandpack/useEditorResize.ts | 26 + src/components/Editor/defaults/demo.ts | 38 ++ src/components/Editor/defaults/index.html | 11 + src/components/Editor/defaults/styles.css | 4 + src/components/Editor/defaults/theme.ts | 37 ++ .../PixiPlayground/MonacoEditor.tsx | 59 ++- .../v8.0.0/advanced/spinners/index.js | 43 -- .../events/hitTestingWithSpatialHash.js | 219 -------- .../events/nestedBoundaryWithProjection.js | 230 --------- src/examples/v8.0.0/filtersAdvanced/custom.js | 58 --- .../v8.0.0/filtersAdvanced/mouseBlending.js | 72 --- .../shaderToyFilterRenderTexture.js | 125 ----- src/examples/v8.0.0/graphics/fillGradient.js | 56 --- src/examples/v8.0.0/index.ts | 476 +++++++++--------- .../meshAndShaders/instancedGeometry.js | 84 ---- .../v8.0.0/meshAndShaders/mergingGeometry.js | 83 --- .../multiPassShaderGeneratedMesh.js | 243 --------- .../v8.0.0/meshAndShaders/shaderToyMesh.js | 166 ------ .../v8.0.0/meshAndShaders/sharedShader.js | 117 ----- .../v8.0.0/meshAndShaders/sharingGeometry.js | 98 ---- .../v8.0.0/meshAndShaders/triangle.js | 47 -- .../v8.0.0/meshAndShaders/triangleColor.js | 60 --- .../v8.0.0/meshAndShaders/triangleTextured.js | 76 --- .../v8.0.0/meshAndShaders/uniforms.js | 78 --- .../v8.0.0/offscreenCanvas/webWorker.js | 84 ---- tsconfig.eslint.json | 2 +- 234 files changed, 2284 insertions(+), 2305 deletions(-) create mode 100644 docs/examples/advanced/_category_.yml rename src/examples/v8.0.0/advanced/collisionDetection.js => docs/examples/advanced/collision-detection.js (100%) create mode 100644 docs/examples/advanced/collision-detection.mdx rename src/examples/v8.0.0/advanced/mouseTrail.js => docs/examples/advanced/mouse-trail.js (100%) create mode 100644 docs/examples/advanced/mouse-trail.mdx rename src/examples/v8.0.0/advanced/scratchCard.js => docs/examples/advanced/scratch-card.js (100%) create mode 100644 docs/examples/advanced/scratch-card.mdx rename src/examples/v8.0.0/advanced/screenShot.js => docs/examples/advanced/screen-shot.js (100%) create mode 100644 docs/examples/advanced/screen-shot.mdx rename {src/examples/v8.0.0 => docs/examples}/advanced/slots.js (100%) create mode 100644 docs/examples/advanced/slots.mdx create mode 100644 docs/examples/advanced/spinners.mdx rename src/examples/v8.0.0/advanced/spinners.js => docs/examples/advanced/spinners/index.js (99%) rename {src/examples/v8.0.0 => docs/examples}/advanced/spinners/intersect.js (100%) rename {src/examples/v8.0.0 => docs/examples}/advanced/spinners/spinner1.js (99%) rename {src/examples/v8.0.0 => docs/examples}/advanced/spinners/spinner2.js (95%) rename {src/examples/v8.0.0 => docs/examples}/advanced/spinners/spinner3.js (98%) rename {src/examples/v8.0.0 => docs/examples}/advanced/spinners/spinner4.js (100%) rename {src/examples/v8.0.0 => docs/examples}/advanced/spinners/spinner5.js (100%) rename src/examples/v8.0.0/advanced/starWarp.js => docs/examples/advanced/star-warp.js (100%) create mode 100644 docs/examples/advanced/star-warp.mdx create mode 100644 docs/examples/assets/_category_.yml rename {src/examples/v8.0.0 => docs/examples}/assets/async.js (100%) create mode 100644 docs/examples/assets/async.mdx rename {src/examples/v8.0.0 => docs/examples}/assets/background.js (100%) create mode 100644 docs/examples/assets/background.mdx rename {src/examples/v8.0.0 => docs/examples}/assets/bundle.js (100%) create mode 100644 docs/examples/assets/bundle.mdx rename {src/examples/v8.0.0 => docs/examples}/assets/multiple.js (100%) create mode 100644 docs/examples/assets/multiple.mdx rename {src/examples/v8.0.0 => docs/examples}/assets/promise.js (100%) create mode 100644 docs/examples/assets/promise.mdx create mode 100644 docs/examples/basic/_category_.yml rename src/examples/v8.0.0/basic/blendModes.js => docs/examples/basic/blend-modes.js (100%) create mode 100644 docs/examples/basic/blend-modes.mdx rename src/examples/v8.0.0/basic/cacheAsTexture.js => docs/examples/basic/cache-as-texture.js (100%) create mode 100644 docs/examples/basic/cache-as-texture.mdx rename {src/examples/v8.0.0 => docs/examples}/basic/container.js (100%) create mode 100644 docs/examples/basic/container.mdx rename src/examples/v8.0.0/basic/meshPlane.js => docs/examples/basic/mesh-plane.js (100%) create mode 100644 docs/examples/basic/mesh-plane.mdx rename src/examples/v8.0.0/basic/particleContainer.js => docs/examples/basic/particle-container.js (100%) create mode 100644 docs/examples/basic/particle-container.mdx rename src/examples/v8.0.0/basic/renderGroup.js => docs/examples/basic/render-group.js (100%) create mode 100644 docs/examples/basic/render-group.mdx rename {src/examples/v8.0.0 => docs/examples}/basic/tinting.js (100%) create mode 100644 docs/examples/basic/tinting.mdx rename src/examples/v8.0.0/basic/transparentBackground.js => docs/examples/basic/transparent-background.js (100%) create mode 100644 docs/examples/basic/transparent-background.mdx create mode 100644 docs/examples/events/_category_.yml rename {src/examples/v8.0.0 => docs/examples}/events/click.js (100%) create mode 100644 docs/examples/events/click.mdx rename src/examples/v8.0.0/events/customHitarea.js => docs/examples/events/custom-hitarea.js (100%) create mode 100644 docs/examples/events/custom-hitarea.mdx rename src/examples/v8.0.0/events/customMouseIcon.js => docs/examples/events/custom-mouse-icon.js (100%) create mode 100644 docs/examples/events/custom-mouse-icon.mdx rename {src/examples/v8.0.0 => docs/examples}/events/dragging.js (100%) create mode 100644 docs/examples/events/dragging.mdx rename {src/examples/v8.0.0 => docs/examples}/events/interactivity.js (100%) create mode 100644 docs/examples/events/interactivity.mdx rename {src/examples/v8.0.0 => docs/examples}/events/logger.js (100%) create mode 100644 docs/examples/events/logger.mdx rename src/examples/v8.0.0/events/pointerTracker.js => docs/examples/events/pointer-tracker.js (100%) create mode 100644 docs/examples/events/pointer-tracker.mdx rename {src/examples/v8.0.0 => docs/examples}/events/slider.js (100%) create mode 100644 docs/examples/events/slider.mdx create mode 100644 docs/examples/filters-advanced/_category_.yml create mode 100644 docs/examples/filters-advanced/custom.mdx rename {src/examples/v8.0.0/filtersAdvanced => docs/examples/filters-advanced}/custom/custom.frag (100%) rename {src/examples/v8.0.0/filtersAdvanced => docs/examples/filters-advanced}/custom/custom.vert (100%) rename {src/examples/v8.0.0/filtersAdvanced => docs/examples/filters-advanced}/custom/index.js (100%) create mode 100644 docs/examples/filters-advanced/mouse-blending.mdx rename {src/examples/v8.0.0/filtersAdvanced/mouseBlending => docs/examples/filters-advanced/mouse-blending}/index.js (100%) rename {src/examples/v8.0.0/filtersAdvanced/mouseBlending => docs/examples/filters-advanced/mouse-blending}/mouseBlending.frag (100%) rename {src/examples/v8.0.0/filtersAdvanced/mouseBlending => docs/examples/filters-advanced/mouse-blending}/mouseBlending.vert (100%) create mode 100644 docs/examples/filters-basic/_category_.yml rename {src/examples/v8.0.0/filtersBasic => docs/examples/filters-basic}/blur.js (100%) create mode 100644 docs/examples/filters-basic/blur.mdx rename src/examples/v8.0.0/filtersBasic/colorMatrix.js => docs/examples/filters-basic/color-matrix.js (100%) create mode 100644 docs/examples/filters-basic/color-matrix.mdx rename src/examples/v8.0.0/filtersBasic/displacementMapCrawlies.js => docs/examples/filters-basic/displacement-map-crawlies.js (100%) create mode 100644 docs/examples/filters-basic/displacement-map-crawlies.mdx rename src/examples/v8.0.0/filtersBasic/displacementMapFlag.js => docs/examples/filters-basic/displacement-map-flag.js (100%) create mode 100644 docs/examples/filters-basic/displacement-map-flag.mdx create mode 100644 docs/examples/graphics/_category_.yml rename {src/examples/v8.0.0 => docs/examples}/graphics/advanced.js (100%) create mode 100644 docs/examples/graphics/advanced.mdx rename {src/examples/v8.0.0 => docs/examples}/graphics/dynamic.js (100%) create mode 100644 docs/examples/graphics/dynamic.mdx rename src/examples/v8.0.0/basic/fillGradient.js => docs/examples/graphics/fill-gradient.js (100%) create mode 100644 docs/examples/graphics/fill-gradient.mdx rename src/examples/v8.0.0/graphics/meshFromPath.js => docs/examples/graphics/mesh-from-path.js (100%) create mode 100644 docs/examples/graphics/mesh-from-path.mdx rename src/examples/v8.0.0/graphics/pixelLine.js => docs/examples/graphics/pixel-line.js (100%) create mode 100644 docs/examples/graphics/pixel-line.mdx create mode 100644 docs/examples/graphics/pixelLine.js rename {src/examples/v8.0.0 => docs/examples}/graphics/simple.js (100%) create mode 100644 docs/examples/graphics/simple.mdx rename src/examples/v8.0.0/graphics/svgLoad.js => docs/examples/graphics/svg-load.js (100%) create mode 100644 docs/examples/graphics/svg-load.mdx rename {src/examples/v8.0.0 => docs/examples}/graphics/svg.js (100%) create mode 100644 docs/examples/graphics/svg.mdx rename {src/examples/v8.0.0 => docs/examples}/graphics/texture.js (100%) create mode 100644 docs/examples/graphics/texture.mdx create mode 100644 docs/examples/masks/_category_.yml rename {src/examples/v8.0.0 => docs/examples}/masks/filter.js (100%) create mode 100644 docs/examples/masks/filter.mdx rename {src/examples/v8.0.0 => docs/examples}/masks/graphics.js (100%) create mode 100644 docs/examples/masks/graphics.mdx rename src/examples/v8.0.0/masks/inverseMask.js => docs/examples/masks/inverse-mask.js (100%) create mode 100644 docs/examples/masks/inverse-mask.mdx rename {src/examples/v8.0.0 => docs/examples}/masks/sprite.js (100%) create mode 100644 docs/examples/masks/sprite.mdx create mode 100644 docs/examples/mesh-and-shaders/_category_.yml create mode 100644 docs/examples/mesh-and-shaders/instanced-geometry.mdx rename {src/examples/v8.0.0/meshAndShaders/instancedGeometry => docs/examples/mesh-and-shaders/instanced-geometry}/index.js (100%) rename {src/examples/v8.0.0/meshAndShaders/instancedGeometry => docs/examples/mesh-and-shaders/instanced-geometry}/instancedGeometry.frag (100%) rename {src/examples/v8.0.0/meshAndShaders/instancedGeometry => docs/examples/mesh-and-shaders/instanced-geometry}/instancedGeometry.vert (100%) rename {src/examples/v8.0.0/meshAndShaders/instancedGeometry => docs/examples/mesh-and-shaders/instanced-geometry}/instancedGeometry.wgsl (100%) create mode 100644 docs/examples/mesh-and-shaders/multipass-mesh.mdx rename {src/examples/v8.0.0/meshAndShaders/multipassMesh => docs/examples/mesh-and-shaders/multipass-mesh}/combine.frag (100%) rename {src/examples/v8.0.0/meshAndShaders/multipassMesh => docs/examples/mesh-and-shaders/multipass-mesh}/grid.frag (100%) rename {src/examples/v8.0.0/meshAndShaders/multipassMesh => docs/examples/mesh-and-shaders/multipass-mesh}/index.js (100%) rename {src/examples/v8.0.0/meshAndShaders/multipassMesh => docs/examples/mesh-and-shaders/multipass-mesh}/multipassMesh.vert (100%) rename {src/examples/v8.0.0/meshAndShaders/multipassMesh => docs/examples/mesh-and-shaders/multipass-mesh}/noise.frag (100%) rename {src/examples/v8.0.0/meshAndShaders/multipassMesh => docs/examples/mesh-and-shaders/multipass-mesh}/ripple.frag (100%) rename {src/examples/v8.0.0/meshAndShaders/multipassMesh => docs/examples/mesh-and-shaders/multipass-mesh}/wave.frag (100%) rename src/examples/v8.0.0/meshAndShaders/perspectiveMesh.js => docs/examples/mesh-and-shaders/perspective-mesh.js (100%) create mode 100644 docs/examples/mesh-and-shaders/perspective-mesh.mdx create mode 100644 docs/examples/mesh-and-shaders/shader-toy-mesh.mdx rename {src/examples/v8.0.0/meshAndShaders/shaderToyMesh => docs/examples/mesh-and-shaders/shader-toy-mesh}/index.js (100%) rename {src/examples/v8.0.0/meshAndShaders/shaderToyMesh => docs/examples/mesh-and-shaders/shader-toy-mesh}/shaderToy.frag (100%) rename {src/examples/v8.0.0/meshAndShaders/shaderToyMesh => docs/examples/mesh-and-shaders/shader-toy-mesh}/shaderToy.vert (100%) create mode 100644 docs/examples/mesh-and-shaders/shared-geometry.mdx rename {src/examples/v8.0.0/meshAndShaders/sharedGeometry => docs/examples/mesh-and-shaders/shared-geometry}/index.js (100%) rename {src/examples/v8.0.0/meshAndShaders/sharedGeometry => docs/examples/mesh-and-shaders/shared-geometry}/sharedGeometry.frag (100%) rename {src/examples/v8.0.0/meshAndShaders/sharedGeometry => docs/examples/mesh-and-shaders/shared-geometry}/sharedGeometry.vert (100%) create mode 100644 docs/examples/mesh-and-shaders/shared-shader.mdx rename {src/examples/v8.0.0/meshAndShaders/sharedShader => docs/examples/mesh-and-shaders/shared-shader}/index.js (100%) rename {src/examples/v8.0.0/meshAndShaders/sharedShader => docs/examples/mesh-and-shaders/shared-shader}/sharedShader.frag (100%) rename {src/examples/v8.0.0/meshAndShaders/sharedShader => docs/examples/mesh-and-shaders/shared-shader}/sharedShader.vert (100%) rename src/examples/v8.0.0/meshAndShaders/texturedMeshAdvanced.js => docs/examples/mesh-and-shaders/textured-mesh-advanced.js (100%) create mode 100644 docs/examples/mesh-and-shaders/textured-mesh-advanced.mdx rename src/examples/v8.0.0/meshAndShaders/texturedMeshBasic.js => docs/examples/mesh-and-shaders/textured-mesh-basic.js (100%) create mode 100644 docs/examples/mesh-and-shaders/textured-mesh-basic.mdx create mode 100644 docs/examples/mesh-and-shaders/triangle-color.mdx rename {src/examples/v8.0.0/meshAndShaders/triangleColor => docs/examples/mesh-and-shaders/triangle-color}/index.js (100%) rename {src/examples/v8.0.0/meshAndShaders/triangleColor => docs/examples/mesh-and-shaders/triangle-color}/triangleColor.frag (100%) rename {src/examples/v8.0.0/meshAndShaders/triangleColor => docs/examples/mesh-and-shaders/triangle-color}/triangleColor.vert (100%) rename {src/examples/v8.0.0/meshAndShaders/triangleColor => docs/examples/mesh-and-shaders/triangle-color}/triangleColor.wgsl (100%) create mode 100644 docs/examples/mesh-and-shaders/triangle-textured.mdx rename {src/examples/v8.0.0/meshAndShaders/triangleTextured => docs/examples/mesh-and-shaders/triangle-textured}/index.js (100%) rename {src/examples/v8.0.0/meshAndShaders/triangleTextured => docs/examples/mesh-and-shaders/triangle-textured}/triangleTextured.frag (100%) rename {src/examples/v8.0.0/meshAndShaders/triangleTextured => docs/examples/mesh-and-shaders/triangle-textured}/triangleTextured.vert (100%) create mode 100644 docs/examples/mesh-and-shaders/triangle.mdx rename {src/examples/v8.0.0/meshAndShaders => docs/examples/mesh-and-shaders}/triangle/index.js (100%) rename {src/examples/v8.0.0/meshAndShaders => docs/examples/mesh-and-shaders}/triangle/triangle.frag (100%) rename {src/examples/v8.0.0/meshAndShaders => docs/examples/mesh-and-shaders}/triangle/triangle.vert (100%) rename {src/examples/v8.0.0/meshAndShaders => docs/examples/mesh-and-shaders}/triangle/triangle.wgsl (100%) create mode 100644 docs/examples/offscreen-canvas/_category_.yml rename {src/examples/v8.0.0/offscreenCanvas => docs/examples/offscreen-canvas}/basic.js (100%) create mode 100644 docs/examples/offscreen-canvas/basic.mdx create mode 100644 docs/examples/sprite/_category_.yml rename src/examples/v8.0.0/sprite/animatedSpriteAnimationSpeed.js => docs/examples/sprite/animated-sprite-animation-speed.js (100%) create mode 100644 docs/examples/sprite/animated-sprite-animation-speed.mdx rename src/examples/v8.0.0/sprite/animatedSpriteExplosion.js => docs/examples/sprite/animated-sprite-explosion.js (100%) create mode 100644 docs/examples/sprite/animated-sprite-explosion.mdx rename src/examples/v8.0.0/sprite/animatedSpriteJet.js => docs/examples/sprite/animated-sprite-jet.js (100%) create mode 100644 docs/examples/sprite/animated-sprite-jet.mdx rename {src/examples/v8.0.0 => docs/examples}/sprite/basic.js (100%) create mode 100644 docs/examples/sprite/basic.mdx rename src/examples/v8.0.0/sprite/textureSwap.js => docs/examples/sprite/texture-swap.js (100%) create mode 100644 docs/examples/sprite/texture-swap.mdx rename src/examples/v8.0.0/sprite/tilingSprite.js => docs/examples/sprite/tiling-sprite.js (100%) create mode 100644 docs/examples/sprite/tiling-sprite.mdx rename {src/examples/v8.0.0 => docs/examples}/sprite/video.js (100%) create mode 100644 docs/examples/sprite/video.mdx create mode 100644 docs/examples/text/_category_.yml rename src/examples/v8.0.0/text/bitmapText.js => docs/examples/text/bitmap-text.js (100%) create mode 100644 docs/examples/text/bitmap-text.mdx rename src/examples/v8.0.0/text/fromFont.js => docs/examples/text/from-font.js (100%) create mode 100644 docs/examples/text/from-font.mdx rename src/examples/v8.0.0/text/pixiText.js => docs/examples/text/pixi-text.js (100%) create mode 100644 docs/examples/text/pixi-text.mdx rename src/examples/v8.0.0/text/webFont.js => docs/examples/text/web-font.js (100%) create mode 100644 docs/examples/text/web-font.mdx create mode 100644 docs/examples/textures/_category_.yml rename src/examples/v8.0.0/textures/renderTextureAdvanced.js => docs/examples/textures/render-texture-advanced.js (100%) create mode 100644 docs/examples/textures/render-texture-advanced.mdx rename src/examples/v8.0.0/textures/renderTextureBasic.js => docs/examples/textures/render-texture-basic.js (100%) create mode 100644 docs/examples/textures/render-texture-basic.mdx rename src/examples/v8.0.0/textures/textureRotate.js => docs/examples/textures/texture-rotate.js (100%) create mode 100644 docs/examples/textures/texture-rotate.mdx rename docs/guides/components/{graphics-pixel-line.md => graphics-pixel-line.mdx} (94%) create mode 100644 src/components/Editor/Editor.tsx create mode 100644 src/components/Editor/EmbeddedEditor.tsx create mode 100644 src/components/Editor/ExampleEditor.tsx create mode 100644 src/components/Editor/Monaco/MonacoView.tsx create mode 100644 src/components/Editor/Monaco/glsl.ts create mode 100644 src/components/Editor/Monaco/useFileLanguage.ts create mode 100644 src/components/Editor/Monaco/usePixiDefinitions.ts create mode 100644 src/components/Editor/Sandpack/ConsoleCounterButton.tsx create mode 100644 src/components/Editor/Sandpack/Layout.tsx create mode 100644 src/components/Editor/Sandpack/ToggleCodeButton.tsx create mode 100644 src/components/Editor/Sandpack/useEditorResize.ts create mode 100644 src/components/Editor/defaults/demo.ts create mode 100644 src/components/Editor/defaults/index.html create mode 100644 src/components/Editor/defaults/styles.css create mode 100644 src/components/Editor/defaults/theme.ts delete mode 100644 src/examples/v8.0.0/advanced/spinners/index.js delete mode 100644 src/examples/v8.0.0/events/hitTestingWithSpatialHash.js delete mode 100644 src/examples/v8.0.0/events/nestedBoundaryWithProjection.js delete mode 100644 src/examples/v8.0.0/filtersAdvanced/custom.js delete mode 100644 src/examples/v8.0.0/filtersAdvanced/mouseBlending.js delete mode 100644 src/examples/v8.0.0/filtersAdvanced/shaderToyFilterRenderTexture.js delete mode 100644 src/examples/v8.0.0/graphics/fillGradient.js delete mode 100644 src/examples/v8.0.0/meshAndShaders/instancedGeometry.js delete mode 100644 src/examples/v8.0.0/meshAndShaders/mergingGeometry.js delete mode 100644 src/examples/v8.0.0/meshAndShaders/multiPassShaderGeneratedMesh.js delete mode 100644 src/examples/v8.0.0/meshAndShaders/shaderToyMesh.js delete mode 100644 src/examples/v8.0.0/meshAndShaders/sharedShader.js delete mode 100644 src/examples/v8.0.0/meshAndShaders/sharingGeometry.js delete mode 100644 src/examples/v8.0.0/meshAndShaders/triangle.js delete mode 100644 src/examples/v8.0.0/meshAndShaders/triangleColor.js delete mode 100644 src/examples/v8.0.0/meshAndShaders/triangleTextured.js delete mode 100644 src/examples/v8.0.0/meshAndShaders/uniforms.js delete mode 100644 src/examples/v8.0.0/offscreenCanvas/webWorker.js diff --git a/.eslintrc.js b/.eslintrc.js index a9d5a539e..c2b0e8220 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -48,5 +48,6 @@ module.exports = { '@typescript-eslint/no-parameter-properties': 1, '@typescript-eslint/type-annotation-spacing': 1, '@typescript-eslint/ban-ts-comment': ['error', { 'ts-ignore': 'allow-with-description' }], + '@typescript-eslint/no-non-null-assertion': 0, }, }; diff --git a/.gitignore b/.gitignore index 0f022a4c9..5106a84bc 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,6 @@ # Generated Example and Tutorial Markdowns /docs/tutorials/* !/docs/tutorials/index.md -/docs/examples/* !/docs/examples/index.md /versioned_docs/version-*/tutorials/* !/versioned_docs/version-*/tutorials/index.md diff --git a/docs/examples/advanced/_category_.yml b/docs/examples/advanced/_category_.yml new file mode 100644 index 000000000..894610266 --- /dev/null +++ b/docs/examples/advanced/_category_.yml @@ -0,0 +1,2 @@ +label: Advanced +position: 2 \ No newline at end of file diff --git a/src/examples/v8.0.0/advanced/collisionDetection.js b/docs/examples/advanced/collision-detection.js similarity index 100% rename from src/examples/v8.0.0/advanced/collisionDetection.js rename to docs/examples/advanced/collision-detection.js diff --git a/docs/examples/advanced/collision-detection.mdx b/docs/examples/advanced/collision-detection.mdx new file mode 100644 index 000000000..1d7362404 --- /dev/null +++ b/docs/examples/advanced/collision-detection.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 5 +custom_edit_url: null +title: Collision Detection +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./collision-detection'; + + diff --git a/src/examples/v8.0.0/advanced/mouseTrail.js b/docs/examples/advanced/mouse-trail.js similarity index 100% rename from src/examples/v8.0.0/advanced/mouseTrail.js rename to docs/examples/advanced/mouse-trail.js diff --git a/docs/examples/advanced/mouse-trail.mdx b/docs/examples/advanced/mouse-trail.mdx new file mode 100644 index 000000000..332ad2d8b --- /dev/null +++ b/docs/examples/advanced/mouse-trail.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 3 +custom_edit_url: null +title: Mouse Trail +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./mouse-trail'; + + diff --git a/src/examples/v8.0.0/advanced/scratchCard.js b/docs/examples/advanced/scratch-card.js similarity index 100% rename from src/examples/v8.0.0/advanced/scratchCard.js rename to docs/examples/advanced/scratch-card.js diff --git a/docs/examples/advanced/scratch-card.mdx b/docs/examples/advanced/scratch-card.mdx new file mode 100644 index 000000000..9186e89dd --- /dev/null +++ b/docs/examples/advanced/scratch-card.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 1 +custom_edit_url: null +title: Scratch Card +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./scratch-card'; + + diff --git a/src/examples/v8.0.0/advanced/screenShot.js b/docs/examples/advanced/screen-shot.js similarity index 100% rename from src/examples/v8.0.0/advanced/screenShot.js rename to docs/examples/advanced/screen-shot.js diff --git a/docs/examples/advanced/screen-shot.mdx b/docs/examples/advanced/screen-shot.mdx new file mode 100644 index 000000000..fba47abc7 --- /dev/null +++ b/docs/examples/advanced/screen-shot.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 4 +custom_edit_url: null +title: Screen Shot +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./screen-shot'; + + diff --git a/src/examples/v8.0.0/advanced/slots.js b/docs/examples/advanced/slots.js similarity index 100% rename from src/examples/v8.0.0/advanced/slots.js rename to docs/examples/advanced/slots.js diff --git a/docs/examples/advanced/slots.mdx b/docs/examples/advanced/slots.mdx new file mode 100644 index 000000000..12afc0b95 --- /dev/null +++ b/docs/examples/advanced/slots.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 0 +custom_edit_url: null +title: Slots +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./slots'; + + diff --git a/docs/examples/advanced/spinners.mdx b/docs/examples/advanced/spinners.mdx new file mode 100644 index 000000000..f3eb9ec26 --- /dev/null +++ b/docs/examples/advanced/spinners.mdx @@ -0,0 +1,26 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 6 +custom_edit_url: null +title: Spinners +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./spinners/index'; +import SpinnerGenerator1 from '!!raw-loader!./spinners/spinner1'; +import SpinnerGenerator2 from '!!raw-loader!./spinners/spinner2'; +import SpinnerGenerator3 from '!!raw-loader!./spinners/spinner3'; +import SpinnerGenerator4 from '!!raw-loader!./spinners/spinner4'; +import SpinnerGenerator5 from '!!raw-loader!./spinners/spinner5'; +import SpinnersIntersect from '!!raw-loader!./spinners/intersect'; + + + diff --git a/src/examples/v8.0.0/advanced/spinners.js b/docs/examples/advanced/spinners/index.js similarity index 99% rename from src/examples/v8.0.0/advanced/spinners.js rename to docs/examples/advanced/spinners/index.js index 64a20fd7b..1a22a872c 100644 --- a/src/examples/v8.0.0/advanced/spinners.js +++ b/docs/examples/advanced/spinners/index.js @@ -43,7 +43,6 @@ import { Application, Assets, Container, Graphics, Point, Sprite } from 'pixi.js mask.position.set(size / 2, size / 2); base.mask = mask; - window.mask = mask; container.addChild(bottom); container.addChild(base); @@ -181,7 +180,6 @@ import { Application, Assets, Container, Graphics, Point, Sprite } from 'pixi.js mask.position.set(size / 2, size / 2); base.mask = mask; - window.mask = mask; container.addChild(base); container.addChild(mask); diff --git a/src/examples/v8.0.0/advanced/spinners/intersect.js b/docs/examples/advanced/spinners/intersect.js similarity index 100% rename from src/examples/v8.0.0/advanced/spinners/intersect.js rename to docs/examples/advanced/spinners/intersect.js diff --git a/src/examples/v8.0.0/advanced/spinners/spinner1.js b/docs/examples/advanced/spinners/spinner1.js similarity index 99% rename from src/examples/v8.0.0/advanced/spinners/spinner1.js rename to docs/examples/advanced/spinners/spinner1.js index fa5d16ae3..c70f39e24 100644 --- a/src/examples/v8.0.0/advanced/spinners/spinner1.js +++ b/docs/examples/advanced/spinners/spinner1.js @@ -26,7 +26,6 @@ export function generateSpinner1(app, position) mask.position.set(size / 2, size / 2); base.mask = mask; - window.mask = mask; container.addChild(bottom); container.addChild(base); diff --git a/src/examples/v8.0.0/advanced/spinners/spinner2.js b/docs/examples/advanced/spinners/spinner2.js similarity index 95% rename from src/examples/v8.0.0/advanced/spinners/spinner2.js rename to docs/examples/advanced/spinners/spinner2.js index e94589124..0364b35d3 100644 --- a/src/examples/v8.0.0/advanced/spinners/spinner2.js +++ b/docs/examples/advanced/spinners/spinner2.js @@ -1,4 +1,4 @@ -const { Container, Sprite } = require('pixi.js'); +import { Container, Sprite } from 'pixi.js'; /* ----------------------- Spinner 2. Scaling balls. diff --git a/src/examples/v8.0.0/advanced/spinners/spinner3.js b/docs/examples/advanced/spinners/spinner3.js similarity index 98% rename from src/examples/v8.0.0/advanced/spinners/spinner3.js rename to docs/examples/advanced/spinners/spinner3.js index 0184d4a36..bd13e2044 100644 --- a/src/examples/v8.0.0/advanced/spinners/spinner3.js +++ b/docs/examples/advanced/spinners/spinner3.js @@ -20,7 +20,6 @@ export function generateSpinner3(app, position) mask.position.set(size / 2, size / 2); base.mask = mask; - window.mask = mask; container.addChild(base); container.addChild(mask); diff --git a/src/examples/v8.0.0/advanced/spinners/spinner4.js b/docs/examples/advanced/spinners/spinner4.js similarity index 100% rename from src/examples/v8.0.0/advanced/spinners/spinner4.js rename to docs/examples/advanced/spinners/spinner4.js diff --git a/src/examples/v8.0.0/advanced/spinners/spinner5.js b/docs/examples/advanced/spinners/spinner5.js similarity index 100% rename from src/examples/v8.0.0/advanced/spinners/spinner5.js rename to docs/examples/advanced/spinners/spinner5.js diff --git a/src/examples/v8.0.0/advanced/starWarp.js b/docs/examples/advanced/star-warp.js similarity index 100% rename from src/examples/v8.0.0/advanced/starWarp.js rename to docs/examples/advanced/star-warp.js diff --git a/docs/examples/advanced/star-warp.mdx b/docs/examples/advanced/star-warp.mdx new file mode 100644 index 000000000..87fe92f8d --- /dev/null +++ b/docs/examples/advanced/star-warp.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 2 +custom_edit_url: null +title: Star Warp +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./star-warp'; + + diff --git a/docs/examples/assets/_category_.yml b/docs/examples/assets/_category_.yml new file mode 100644 index 000000000..715922acd --- /dev/null +++ b/docs/examples/assets/_category_.yml @@ -0,0 +1,2 @@ +label: Assets +position: 12 \ No newline at end of file diff --git a/src/examples/v8.0.0/assets/async.js b/docs/examples/assets/async.js similarity index 100% rename from src/examples/v8.0.0/assets/async.js rename to docs/examples/assets/async.js diff --git a/docs/examples/assets/async.mdx b/docs/examples/assets/async.mdx new file mode 100644 index 000000000..2108d901d --- /dev/null +++ b/docs/examples/assets/async.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 1 +custom_edit_url: null +title: Async +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./async'; + + diff --git a/src/examples/v8.0.0/assets/background.js b/docs/examples/assets/background.js similarity index 100% rename from src/examples/v8.0.0/assets/background.js rename to docs/examples/assets/background.js diff --git a/docs/examples/assets/background.mdx b/docs/examples/assets/background.mdx new file mode 100644 index 000000000..94a5d6d3a --- /dev/null +++ b/docs/examples/assets/background.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 3 +custom_edit_url: null +title: Background +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./background'; + + diff --git a/src/examples/v8.0.0/assets/bundle.js b/docs/examples/assets/bundle.js similarity index 100% rename from src/examples/v8.0.0/assets/bundle.js rename to docs/examples/assets/bundle.js diff --git a/docs/examples/assets/bundle.mdx b/docs/examples/assets/bundle.mdx new file mode 100644 index 000000000..2068e778a --- /dev/null +++ b/docs/examples/assets/bundle.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 4 +custom_edit_url: null +title: Bundle +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./bundle'; + + diff --git a/src/examples/v8.0.0/assets/multiple.js b/docs/examples/assets/multiple.js similarity index 100% rename from src/examples/v8.0.0/assets/multiple.js rename to docs/examples/assets/multiple.js diff --git a/docs/examples/assets/multiple.mdx b/docs/examples/assets/multiple.mdx new file mode 100644 index 000000000..878acef2e --- /dev/null +++ b/docs/examples/assets/multiple.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 2 +custom_edit_url: null +title: Multiple +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./multiple'; + + diff --git a/src/examples/v8.0.0/assets/promise.js b/docs/examples/assets/promise.js similarity index 100% rename from src/examples/v8.0.0/assets/promise.js rename to docs/examples/assets/promise.js diff --git a/docs/examples/assets/promise.mdx b/docs/examples/assets/promise.mdx new file mode 100644 index 000000000..3c2060bde --- /dev/null +++ b/docs/examples/assets/promise.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 0 +custom_edit_url: null +title: Promise +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./promise'; + + diff --git a/docs/examples/basic/_category_.yml b/docs/examples/basic/_category_.yml new file mode 100644 index 000000000..0c4c76541 --- /dev/null +++ b/docs/examples/basic/_category_.yml @@ -0,0 +1,2 @@ +label: Basic +position: 1 \ No newline at end of file diff --git a/src/examples/v8.0.0/basic/blendModes.js b/docs/examples/basic/blend-modes.js similarity index 100% rename from src/examples/v8.0.0/basic/blendModes.js rename to docs/examples/basic/blend-modes.js diff --git a/docs/examples/basic/blend-modes.mdx b/docs/examples/basic/blend-modes.mdx new file mode 100644 index 000000000..2a3a89697 --- /dev/null +++ b/docs/examples/basic/blend-modes.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 4 +custom_edit_url: null +title: Blend Modes +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./blend-modes'; + + diff --git a/src/examples/v8.0.0/basic/cacheAsTexture.js b/docs/examples/basic/cache-as-texture.js similarity index 100% rename from src/examples/v8.0.0/basic/cacheAsTexture.js rename to docs/examples/basic/cache-as-texture.js diff --git a/docs/examples/basic/cache-as-texture.mdx b/docs/examples/basic/cache-as-texture.mdx new file mode 100644 index 000000000..7bcec7769 --- /dev/null +++ b/docs/examples/basic/cache-as-texture.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 7 +custom_edit_url: null +title: Cache As Texture +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./cache-as-texture'; + + diff --git a/src/examples/v8.0.0/basic/container.js b/docs/examples/basic/container.js similarity index 100% rename from src/examples/v8.0.0/basic/container.js rename to docs/examples/basic/container.js diff --git a/docs/examples/basic/container.mdx b/docs/examples/basic/container.mdx new file mode 100644 index 000000000..494b5fad5 --- /dev/null +++ b/docs/examples/basic/container.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 0 +custom_edit_url: null +title: Container +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./container'; + + diff --git a/src/examples/v8.0.0/basic/meshPlane.js b/docs/examples/basic/mesh-plane.js similarity index 100% rename from src/examples/v8.0.0/basic/meshPlane.js rename to docs/examples/basic/mesh-plane.js diff --git a/docs/examples/basic/mesh-plane.mdx b/docs/examples/basic/mesh-plane.mdx new file mode 100644 index 000000000..36a80ce5a --- /dev/null +++ b/docs/examples/basic/mesh-plane.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 5 +custom_edit_url: null +title: Mesh Plane +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./mesh-plane'; + + diff --git a/src/examples/v8.0.0/basic/particleContainer.js b/docs/examples/basic/particle-container.js similarity index 100% rename from src/examples/v8.0.0/basic/particleContainer.js rename to docs/examples/basic/particle-container.js diff --git a/docs/examples/basic/particle-container.mdx b/docs/examples/basic/particle-container.mdx new file mode 100644 index 000000000..32e985c16 --- /dev/null +++ b/docs/examples/basic/particle-container.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 3 +custom_edit_url: null +title: Particle Container +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./particle-container'; + + diff --git a/src/examples/v8.0.0/basic/renderGroup.js b/docs/examples/basic/render-group.js similarity index 100% rename from src/examples/v8.0.0/basic/renderGroup.js rename to docs/examples/basic/render-group.js diff --git a/docs/examples/basic/render-group.mdx b/docs/examples/basic/render-group.mdx new file mode 100644 index 000000000..a9c9e2a82 --- /dev/null +++ b/docs/examples/basic/render-group.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 6 +custom_edit_url: null +title: Render Group +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./render-group'; + + diff --git a/src/examples/v8.0.0/basic/tinting.js b/docs/examples/basic/tinting.js similarity index 100% rename from src/examples/v8.0.0/basic/tinting.js rename to docs/examples/basic/tinting.js diff --git a/docs/examples/basic/tinting.mdx b/docs/examples/basic/tinting.mdx new file mode 100644 index 000000000..17e4c0b98 --- /dev/null +++ b/docs/examples/basic/tinting.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 2 +custom_edit_url: null +title: Tinting +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./tinting'; + + diff --git a/src/examples/v8.0.0/basic/transparentBackground.js b/docs/examples/basic/transparent-background.js similarity index 100% rename from src/examples/v8.0.0/basic/transparentBackground.js rename to docs/examples/basic/transparent-background.js diff --git a/docs/examples/basic/transparent-background.mdx b/docs/examples/basic/transparent-background.mdx new file mode 100644 index 000000000..983debeb0 --- /dev/null +++ b/docs/examples/basic/transparent-background.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 1 +custom_edit_url: null +title: Transparent Background +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./transparent-background'; + + diff --git a/docs/examples/events/_category_.yml b/docs/examples/events/_category_.yml new file mode 100644 index 000000000..595d7dce4 --- /dev/null +++ b/docs/examples/events/_category_.yml @@ -0,0 +1,2 @@ +label: Events +position: 6 \ No newline at end of file diff --git a/src/examples/v8.0.0/events/click.js b/docs/examples/events/click.js similarity index 100% rename from src/examples/v8.0.0/events/click.js rename to docs/examples/events/click.js diff --git a/docs/examples/events/click.mdx b/docs/examples/events/click.mdx new file mode 100644 index 000000000..d2d08e4e3 --- /dev/null +++ b/docs/examples/events/click.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 0 +custom_edit_url: null +title: Click +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./click'; + + diff --git a/src/examples/v8.0.0/events/customHitarea.js b/docs/examples/events/custom-hitarea.js similarity index 100% rename from src/examples/v8.0.0/events/customHitarea.js rename to docs/examples/events/custom-hitarea.js diff --git a/docs/examples/events/custom-hitarea.mdx b/docs/examples/events/custom-hitarea.mdx new file mode 100644 index 000000000..9b2cdb6d3 --- /dev/null +++ b/docs/examples/events/custom-hitarea.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 4 +custom_edit_url: null +title: Custom Hitarea +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./custom-hitarea'; + + diff --git a/src/examples/v8.0.0/events/customMouseIcon.js b/docs/examples/events/custom-mouse-icon.js similarity index 100% rename from src/examples/v8.0.0/events/customMouseIcon.js rename to docs/examples/events/custom-mouse-icon.js diff --git a/docs/examples/events/custom-mouse-icon.mdx b/docs/examples/events/custom-mouse-icon.mdx new file mode 100644 index 000000000..b5f557cd6 --- /dev/null +++ b/docs/examples/events/custom-mouse-icon.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 3 +custom_edit_url: null +title: Custom Mouse Icon +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./custom-mouse-icon'; + + diff --git a/src/examples/v8.0.0/events/dragging.js b/docs/examples/events/dragging.js similarity index 100% rename from src/examples/v8.0.0/events/dragging.js rename to docs/examples/events/dragging.js diff --git a/docs/examples/events/dragging.mdx b/docs/examples/events/dragging.mdx new file mode 100644 index 000000000..585ed8662 --- /dev/null +++ b/docs/examples/events/dragging.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 2 +custom_edit_url: null +title: Dragging +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./dragging'; + + diff --git a/src/examples/v8.0.0/events/interactivity.js b/docs/examples/events/interactivity.js similarity index 100% rename from src/examples/v8.0.0/events/interactivity.js rename to docs/examples/events/interactivity.js diff --git a/docs/examples/events/interactivity.mdx b/docs/examples/events/interactivity.mdx new file mode 100644 index 000000000..4e5582b8b --- /dev/null +++ b/docs/examples/events/interactivity.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 1 +custom_edit_url: null +title: Interactivity +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./interactivity'; + + diff --git a/src/examples/v8.0.0/events/logger.js b/docs/examples/events/logger.js similarity index 100% rename from src/examples/v8.0.0/events/logger.js rename to docs/examples/events/logger.js diff --git a/docs/examples/events/logger.mdx b/docs/examples/events/logger.mdx new file mode 100644 index 000000000..643b1e6a1 --- /dev/null +++ b/docs/examples/events/logger.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 5 +custom_edit_url: null +title: Logger +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./logger'; + + diff --git a/src/examples/v8.0.0/events/pointerTracker.js b/docs/examples/events/pointer-tracker.js similarity index 100% rename from src/examples/v8.0.0/events/pointerTracker.js rename to docs/examples/events/pointer-tracker.js diff --git a/docs/examples/events/pointer-tracker.mdx b/docs/examples/events/pointer-tracker.mdx new file mode 100644 index 000000000..059bf310b --- /dev/null +++ b/docs/examples/events/pointer-tracker.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 6 +custom_edit_url: null +title: Pointer Tracker +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./pointer-tracker'; + + diff --git a/src/examples/v8.0.0/events/slider.js b/docs/examples/events/slider.js similarity index 100% rename from src/examples/v8.0.0/events/slider.js rename to docs/examples/events/slider.js diff --git a/docs/examples/events/slider.mdx b/docs/examples/events/slider.mdx new file mode 100644 index 000000000..9258a760d --- /dev/null +++ b/docs/examples/events/slider.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 7 +custom_edit_url: null +title: Slider +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./slider'; + + diff --git a/docs/examples/filters-advanced/_category_.yml b/docs/examples/filters-advanced/_category_.yml new file mode 100644 index 000000000..bd8bc8527 --- /dev/null +++ b/docs/examples/filters-advanced/_category_.yml @@ -0,0 +1,2 @@ +label: Filters Advanced +position: 9 \ No newline at end of file diff --git a/docs/examples/filters-advanced/custom.mdx b/docs/examples/filters-advanced/custom.mdx new file mode 100644 index 000000000..ece516fa8 --- /dev/null +++ b/docs/examples/filters-advanced/custom.mdx @@ -0,0 +1,17 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 1 +custom_edit_url: null +title: Custom +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./custom/index'; +import customVert from '!!raw-loader!./custom/custom.vert'; +import customFrag from '!!raw-loader!./custom/custom.frag'; + + diff --git a/src/examples/v8.0.0/filtersAdvanced/custom/custom.frag b/docs/examples/filters-advanced/custom/custom.frag similarity index 100% rename from src/examples/v8.0.0/filtersAdvanced/custom/custom.frag rename to docs/examples/filters-advanced/custom/custom.frag diff --git a/src/examples/v8.0.0/filtersAdvanced/custom/custom.vert b/docs/examples/filters-advanced/custom/custom.vert similarity index 100% rename from src/examples/v8.0.0/filtersAdvanced/custom/custom.vert rename to docs/examples/filters-advanced/custom/custom.vert diff --git a/src/examples/v8.0.0/filtersAdvanced/custom/index.js b/docs/examples/filters-advanced/custom/index.js similarity index 100% rename from src/examples/v8.0.0/filtersAdvanced/custom/index.js rename to docs/examples/filters-advanced/custom/index.js diff --git a/docs/examples/filters-advanced/mouse-blending.mdx b/docs/examples/filters-advanced/mouse-blending.mdx new file mode 100644 index 000000000..8ce75baf9 --- /dev/null +++ b/docs/examples/filters-advanced/mouse-blending.mdx @@ -0,0 +1,17 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 0 +custom_edit_url: null +title: Mouse Blending +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./mouse-blending/index'; +import mouseBlendingVert from '!!raw-loader!./mouse-blending/mouseBlending.vert'; +import mouseBlendingFrag from '!!raw-loader!./mouse-blending/mouseBlending.frag'; + + diff --git a/src/examples/v8.0.0/filtersAdvanced/mouseBlending/index.js b/docs/examples/filters-advanced/mouse-blending/index.js similarity index 100% rename from src/examples/v8.0.0/filtersAdvanced/mouseBlending/index.js rename to docs/examples/filters-advanced/mouse-blending/index.js diff --git a/src/examples/v8.0.0/filtersAdvanced/mouseBlending/mouseBlending.frag b/docs/examples/filters-advanced/mouse-blending/mouseBlending.frag similarity index 100% rename from src/examples/v8.0.0/filtersAdvanced/mouseBlending/mouseBlending.frag rename to docs/examples/filters-advanced/mouse-blending/mouseBlending.frag diff --git a/src/examples/v8.0.0/filtersAdvanced/mouseBlending/mouseBlending.vert b/docs/examples/filters-advanced/mouse-blending/mouseBlending.vert similarity index 100% rename from src/examples/v8.0.0/filtersAdvanced/mouseBlending/mouseBlending.vert rename to docs/examples/filters-advanced/mouse-blending/mouseBlending.vert diff --git a/docs/examples/filters-basic/_category_.yml b/docs/examples/filters-basic/_category_.yml new file mode 100644 index 000000000..82e8c9685 --- /dev/null +++ b/docs/examples/filters-basic/_category_.yml @@ -0,0 +1,2 @@ +label: Filters Basic +position: 8 \ No newline at end of file diff --git a/src/examples/v8.0.0/filtersBasic/blur.js b/docs/examples/filters-basic/blur.js similarity index 100% rename from src/examples/v8.0.0/filtersBasic/blur.js rename to docs/examples/filters-basic/blur.js diff --git a/docs/examples/filters-basic/blur.mdx b/docs/examples/filters-basic/blur.mdx new file mode 100644 index 000000000..dde2fc86e --- /dev/null +++ b/docs/examples/filters-basic/blur.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 0 +custom_edit_url: null +title: Blur +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./blur'; + + diff --git a/src/examples/v8.0.0/filtersBasic/colorMatrix.js b/docs/examples/filters-basic/color-matrix.js similarity index 100% rename from src/examples/v8.0.0/filtersBasic/colorMatrix.js rename to docs/examples/filters-basic/color-matrix.js diff --git a/docs/examples/filters-basic/color-matrix.mdx b/docs/examples/filters-basic/color-matrix.mdx new file mode 100644 index 000000000..5d66867b5 --- /dev/null +++ b/docs/examples/filters-basic/color-matrix.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 1 +custom_edit_url: null +title: Color Matrix +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./color-matrix'; + + diff --git a/src/examples/v8.0.0/filtersBasic/displacementMapCrawlies.js b/docs/examples/filters-basic/displacement-map-crawlies.js similarity index 100% rename from src/examples/v8.0.0/filtersBasic/displacementMapCrawlies.js rename to docs/examples/filters-basic/displacement-map-crawlies.js diff --git a/docs/examples/filters-basic/displacement-map-crawlies.mdx b/docs/examples/filters-basic/displacement-map-crawlies.mdx new file mode 100644 index 000000000..f3f0cfb87 --- /dev/null +++ b/docs/examples/filters-basic/displacement-map-crawlies.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 2 +custom_edit_url: null +title: Displacement Map Crawlies +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./displacement-map-crawlies'; + + diff --git a/src/examples/v8.0.0/filtersBasic/displacementMapFlag.js b/docs/examples/filters-basic/displacement-map-flag.js similarity index 100% rename from src/examples/v8.0.0/filtersBasic/displacementMapFlag.js rename to docs/examples/filters-basic/displacement-map-flag.js diff --git a/docs/examples/filters-basic/displacement-map-flag.mdx b/docs/examples/filters-basic/displacement-map-flag.mdx new file mode 100644 index 000000000..f168826b3 --- /dev/null +++ b/docs/examples/filters-basic/displacement-map-flag.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 3 +custom_edit_url: null +title: Displacement Map Flag +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./displacement-map-flag'; + + diff --git a/docs/examples/graphics/_category_.yml b/docs/examples/graphics/_category_.yml new file mode 100644 index 000000000..cd580033c --- /dev/null +++ b/docs/examples/graphics/_category_.yml @@ -0,0 +1,2 @@ +label: Graphics +position: 5 \ No newline at end of file diff --git a/src/examples/v8.0.0/graphics/advanced.js b/docs/examples/graphics/advanced.js similarity index 100% rename from src/examples/v8.0.0/graphics/advanced.js rename to docs/examples/graphics/advanced.js diff --git a/docs/examples/graphics/advanced.mdx b/docs/examples/graphics/advanced.mdx new file mode 100644 index 000000000..c99b4b439 --- /dev/null +++ b/docs/examples/graphics/advanced.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 1 +custom_edit_url: null +title: Advanced +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./advanced'; + + diff --git a/src/examples/v8.0.0/graphics/dynamic.js b/docs/examples/graphics/dynamic.js similarity index 100% rename from src/examples/v8.0.0/graphics/dynamic.js rename to docs/examples/graphics/dynamic.js diff --git a/docs/examples/graphics/dynamic.mdx b/docs/examples/graphics/dynamic.mdx new file mode 100644 index 000000000..ce16dd9b7 --- /dev/null +++ b/docs/examples/graphics/dynamic.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 2 +custom_edit_url: null +title: Dynamic +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./dynamic'; + + diff --git a/src/examples/v8.0.0/basic/fillGradient.js b/docs/examples/graphics/fill-gradient.js similarity index 100% rename from src/examples/v8.0.0/basic/fillGradient.js rename to docs/examples/graphics/fill-gradient.js diff --git a/docs/examples/graphics/fill-gradient.mdx b/docs/examples/graphics/fill-gradient.mdx new file mode 100644 index 000000000..e1f2e638e --- /dev/null +++ b/docs/examples/graphics/fill-gradient.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 6 +custom_edit_url: null +title: Fill Gradient +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./fill-gradient'; + + diff --git a/src/examples/v8.0.0/graphics/meshFromPath.js b/docs/examples/graphics/mesh-from-path.js similarity index 100% rename from src/examples/v8.0.0/graphics/meshFromPath.js rename to docs/examples/graphics/mesh-from-path.js diff --git a/docs/examples/graphics/mesh-from-path.mdx b/docs/examples/graphics/mesh-from-path.mdx new file mode 100644 index 000000000..af671364d --- /dev/null +++ b/docs/examples/graphics/mesh-from-path.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 7 +custom_edit_url: null +title: Mesh From Path +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./mesh-from-path'; + + diff --git a/src/examples/v8.0.0/graphics/pixelLine.js b/docs/examples/graphics/pixel-line.js similarity index 100% rename from src/examples/v8.0.0/graphics/pixelLine.js rename to docs/examples/graphics/pixel-line.js diff --git a/docs/examples/graphics/pixel-line.mdx b/docs/examples/graphics/pixel-line.mdx new file mode 100644 index 000000000..0896b47be --- /dev/null +++ b/docs/examples/graphics/pixel-line.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 8 +custom_edit_url: null +title: Pixel Line +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./pixel-line'; + + diff --git a/docs/examples/graphics/pixelLine.js b/docs/examples/graphics/pixelLine.js new file mode 100644 index 000000000..f001a6888 --- /dev/null +++ b/docs/examples/graphics/pixelLine.js @@ -0,0 +1,82 @@ +import { Application, Container, Graphics, Text } from 'pixi.js'; + +/** + * Creates a grid pattern using Graphics lines + * @param graphics - The Graphics object to draw on + * @returns The Graphics object with the grid drawn + */ +function buildGrid(graphics) +{ + // Draw 10 vertical lines spaced 10 pixels apart + for (let i = 0; i < 11; i++) + { + // Move to top of each line (x = i*10, y = 0) + graphics + .moveTo(i * 10, 0) + // Draw down to bottom (x = i*10, y = 100) + .lineTo(i * 10, 100); + } + + // Draw 10 horizontal lines spaced 10 pixels apart + for (let i = 0; i < 11; i++) + { + // Move to start of each line (x = 0, y = i*10) + graphics + .moveTo(0, i * 10) + // Draw across to end (x = 100, y = i*10) + .lineTo(100, i * 10); + } + + return graphics; +} + +(async () => +{ + // Create and initialize a new PixiJS application + const app = new Application(); + + await app.init({ antialias: true, resizeTo: window }); + document.body.appendChild(app.canvas); + + // Create two grids - one with pixel-perfect lines and one without + const gridPixel = buildGrid(new Graphics()).stroke({ color: 0xffffff, pixelLine: true, width: 1 }); + + const grid = buildGrid(new Graphics()).stroke({ color: 0xffffff, pixelLine: false }); + + // Position the grids side by side + grid.x = -100; + grid.y = -50; + gridPixel.y = -50; + + // Create a container to hold both grids + const container = new Container(); + + container.addChild(grid, gridPixel); + + // Center the container on screen + container.x = app.screen.width / 2; + container.y = app.screen.height / 2; + app.stage.addChild(container); + + // Animation variables + let count = 0; + + // Add animation to scale the grids over time + app.ticker.add(() => + { + count += 0.01; + container.scale = 1 + (Math.sin(count) + 1) * 2; + }); + + // Add descriptive label + const label = new Text({ + text: 'Grid Comparison: Standard Lines (Left) vs Pixel-Perfect Lines (Right)', + style: { fill: 0xffffff }, + }); + + // Position label in top-left corner + label.position.set(20, 20); + label.width = app.screen.width - 40; + label.scale.y = label.scale.x; + app.stage.addChild(label); +})(); diff --git a/src/examples/v8.0.0/graphics/simple.js b/docs/examples/graphics/simple.js similarity index 100% rename from src/examples/v8.0.0/graphics/simple.js rename to docs/examples/graphics/simple.js diff --git a/docs/examples/graphics/simple.mdx b/docs/examples/graphics/simple.mdx new file mode 100644 index 000000000..fd8eb5ddb --- /dev/null +++ b/docs/examples/graphics/simple.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 0 +custom_edit_url: null +title: Simple +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./simple'; + + diff --git a/src/examples/v8.0.0/graphics/svgLoad.js b/docs/examples/graphics/svg-load.js similarity index 100% rename from src/examples/v8.0.0/graphics/svgLoad.js rename to docs/examples/graphics/svg-load.js diff --git a/docs/examples/graphics/svg-load.mdx b/docs/examples/graphics/svg-load.mdx new file mode 100644 index 000000000..fd73d86e9 --- /dev/null +++ b/docs/examples/graphics/svg-load.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 4 +custom_edit_url: null +title: Svg Load +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./svg-load'; + + diff --git a/src/examples/v8.0.0/graphics/svg.js b/docs/examples/graphics/svg.js similarity index 100% rename from src/examples/v8.0.0/graphics/svg.js rename to docs/examples/graphics/svg.js diff --git a/docs/examples/graphics/svg.mdx b/docs/examples/graphics/svg.mdx new file mode 100644 index 000000000..f9a136a0d --- /dev/null +++ b/docs/examples/graphics/svg.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 3 +custom_edit_url: null +title: Svg +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./svg'; + + diff --git a/src/examples/v8.0.0/graphics/texture.js b/docs/examples/graphics/texture.js similarity index 100% rename from src/examples/v8.0.0/graphics/texture.js rename to docs/examples/graphics/texture.js diff --git a/docs/examples/graphics/texture.mdx b/docs/examples/graphics/texture.mdx new file mode 100644 index 000000000..d4e619a57 --- /dev/null +++ b/docs/examples/graphics/texture.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 5 +custom_edit_url: null +title: Texture +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./texture'; + + diff --git a/docs/examples/masks/_category_.yml b/docs/examples/masks/_category_.yml new file mode 100644 index 000000000..1165f57f9 --- /dev/null +++ b/docs/examples/masks/_category_.yml @@ -0,0 +1,2 @@ +label: Masks +position: 7 \ No newline at end of file diff --git a/src/examples/v8.0.0/masks/filter.js b/docs/examples/masks/filter.js similarity index 100% rename from src/examples/v8.0.0/masks/filter.js rename to docs/examples/masks/filter.js diff --git a/docs/examples/masks/filter.mdx b/docs/examples/masks/filter.mdx new file mode 100644 index 000000000..7eea39fff --- /dev/null +++ b/docs/examples/masks/filter.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 2 +custom_edit_url: null +title: Filter +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./filter'; + + diff --git a/src/examples/v8.0.0/masks/graphics.js b/docs/examples/masks/graphics.js similarity index 100% rename from src/examples/v8.0.0/masks/graphics.js rename to docs/examples/masks/graphics.js diff --git a/docs/examples/masks/graphics.mdx b/docs/examples/masks/graphics.mdx new file mode 100644 index 000000000..32a9daab3 --- /dev/null +++ b/docs/examples/masks/graphics.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 0 +custom_edit_url: null +title: Graphics +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./graphics'; + + diff --git a/src/examples/v8.0.0/masks/inverseMask.js b/docs/examples/masks/inverse-mask.js similarity index 100% rename from src/examples/v8.0.0/masks/inverseMask.js rename to docs/examples/masks/inverse-mask.js diff --git a/docs/examples/masks/inverse-mask.mdx b/docs/examples/masks/inverse-mask.mdx new file mode 100644 index 000000000..aaa59c679 --- /dev/null +++ b/docs/examples/masks/inverse-mask.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 3 +custom_edit_url: null +title: Inverse Mask +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./inverse-mask'; + + diff --git a/src/examples/v8.0.0/masks/sprite.js b/docs/examples/masks/sprite.js similarity index 100% rename from src/examples/v8.0.0/masks/sprite.js rename to docs/examples/masks/sprite.js diff --git a/docs/examples/masks/sprite.mdx b/docs/examples/masks/sprite.mdx new file mode 100644 index 000000000..4f3e99993 --- /dev/null +++ b/docs/examples/masks/sprite.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 1 +custom_edit_url: null +title: Sprite +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./sprite'; + + diff --git a/docs/examples/mesh-and-shaders/_category_.yml b/docs/examples/mesh-and-shaders/_category_.yml new file mode 100644 index 000000000..495d6bc0d --- /dev/null +++ b/docs/examples/mesh-and-shaders/_category_.yml @@ -0,0 +1,2 @@ +label: Mesh And Shaders +position: 10 \ No newline at end of file diff --git a/docs/examples/mesh-and-shaders/instanced-geometry.mdx b/docs/examples/mesh-and-shaders/instanced-geometry.mdx new file mode 100644 index 000000000..7c0643360 --- /dev/null +++ b/docs/examples/mesh-and-shaders/instanced-geometry.mdx @@ -0,0 +1,19 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 8 +custom_edit_url: null +title: Instanced Geometry +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./instanced-geometry/index'; +import instancedGeometryVert from '!!raw-loader!./instanced-geometry/instancedGeometry.vert'; +import instancedGeometryFrag from '!!raw-loader!./instanced-geometry/instancedGeometry.frag'; +import instancedGeometryWgsl from '!!raw-loader!./instanced-geometry/instancedGeometry.wgsl'; + + diff --git a/src/examples/v8.0.0/meshAndShaders/instancedGeometry/index.js b/docs/examples/mesh-and-shaders/instanced-geometry/index.js similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/instancedGeometry/index.js rename to docs/examples/mesh-and-shaders/instanced-geometry/index.js diff --git a/src/examples/v8.0.0/meshAndShaders/instancedGeometry/instancedGeometry.frag b/docs/examples/mesh-and-shaders/instanced-geometry/instancedGeometry.frag similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/instancedGeometry/instancedGeometry.frag rename to docs/examples/mesh-and-shaders/instanced-geometry/instancedGeometry.frag diff --git a/src/examples/v8.0.0/meshAndShaders/instancedGeometry/instancedGeometry.vert b/docs/examples/mesh-and-shaders/instanced-geometry/instancedGeometry.vert similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/instancedGeometry/instancedGeometry.vert rename to docs/examples/mesh-and-shaders/instanced-geometry/instancedGeometry.vert diff --git a/src/examples/v8.0.0/meshAndShaders/instancedGeometry/instancedGeometry.wgsl b/docs/examples/mesh-and-shaders/instanced-geometry/instancedGeometry.wgsl similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/instancedGeometry/instancedGeometry.wgsl rename to docs/examples/mesh-and-shaders/instanced-geometry/instancedGeometry.wgsl diff --git a/docs/examples/mesh-and-shaders/multipass-mesh.mdx b/docs/examples/mesh-and-shaders/multipass-mesh.mdx new file mode 100644 index 000000000..39cab0f50 --- /dev/null +++ b/docs/examples/mesh-and-shaders/multipass-mesh.mdx @@ -0,0 +1,25 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 10 +custom_edit_url: null +title: Multipass Mesh +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./multipass-mesh/index'; +import multipassMeshVert from '!!raw-loader!./multipass-mesh/multipassMesh.vert'; +import multipassMeshGridFrag from '!!raw-loader!./multipass-mesh/grid.frag'; +import multipassMeshRippleFrag from '!!raw-loader!./multipass-mesh/ripple.frag'; +import multipassMeshNoiseFrag from '!!raw-loader!./multipass-mesh/noise.frag'; +import multipassMeshWaveFrag from '!!raw-loader!./multipass-mesh/wave.frag'; +import multipassMeshCombineFrag from '!!raw-loader!./multipass-mesh/combine.frag'; + + diff --git a/src/examples/v8.0.0/meshAndShaders/multipassMesh/combine.frag b/docs/examples/mesh-and-shaders/multipass-mesh/combine.frag similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/multipassMesh/combine.frag rename to docs/examples/mesh-and-shaders/multipass-mesh/combine.frag diff --git a/src/examples/v8.0.0/meshAndShaders/multipassMesh/grid.frag b/docs/examples/mesh-and-shaders/multipass-mesh/grid.frag similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/multipassMesh/grid.frag rename to docs/examples/mesh-and-shaders/multipass-mesh/grid.frag diff --git a/src/examples/v8.0.0/meshAndShaders/multipassMesh/index.js b/docs/examples/mesh-and-shaders/multipass-mesh/index.js similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/multipassMesh/index.js rename to docs/examples/mesh-and-shaders/multipass-mesh/index.js diff --git a/src/examples/v8.0.0/meshAndShaders/multipassMesh/multipassMesh.vert b/docs/examples/mesh-and-shaders/multipass-mesh/multipassMesh.vert similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/multipassMesh/multipassMesh.vert rename to docs/examples/mesh-and-shaders/multipass-mesh/multipassMesh.vert diff --git a/src/examples/v8.0.0/meshAndShaders/multipassMesh/noise.frag b/docs/examples/mesh-and-shaders/multipass-mesh/noise.frag similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/multipassMesh/noise.frag rename to docs/examples/mesh-and-shaders/multipass-mesh/noise.frag diff --git a/src/examples/v8.0.0/meshAndShaders/multipassMesh/ripple.frag b/docs/examples/mesh-and-shaders/multipass-mesh/ripple.frag similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/multipassMesh/ripple.frag rename to docs/examples/mesh-and-shaders/multipass-mesh/ripple.frag diff --git a/src/examples/v8.0.0/meshAndShaders/multipassMesh/wave.frag b/docs/examples/mesh-and-shaders/multipass-mesh/wave.frag similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/multipassMesh/wave.frag rename to docs/examples/mesh-and-shaders/multipass-mesh/wave.frag diff --git a/src/examples/v8.0.0/meshAndShaders/perspectiveMesh.js b/docs/examples/mesh-and-shaders/perspective-mesh.js similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/perspectiveMesh.js rename to docs/examples/mesh-and-shaders/perspective-mesh.js diff --git a/docs/examples/mesh-and-shaders/perspective-mesh.mdx b/docs/examples/mesh-and-shaders/perspective-mesh.mdx new file mode 100644 index 000000000..196974603 --- /dev/null +++ b/docs/examples/mesh-and-shaders/perspective-mesh.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 0 +custom_edit_url: null +title: Perspective Mesh +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./perspective-mesh'; + + diff --git a/docs/examples/mesh-and-shaders/shader-toy-mesh.mdx b/docs/examples/mesh-and-shaders/shader-toy-mesh.mdx new file mode 100644 index 000000000..80dcbc789 --- /dev/null +++ b/docs/examples/mesh-and-shaders/shader-toy-mesh.mdx @@ -0,0 +1,17 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 9 +custom_edit_url: null +title: Shader Toy Mesh +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./shader-toy-mesh/index'; +import shaderToyMeshVert from '!!raw-loader!./shader-toy-mesh/shaderToy.vert'; +import shaderToyMeshFrag from '!!raw-loader!./shader-toy-mesh/shaderToy.frag'; + + diff --git a/src/examples/v8.0.0/meshAndShaders/shaderToyMesh/index.js b/docs/examples/mesh-and-shaders/shader-toy-mesh/index.js similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/shaderToyMesh/index.js rename to docs/examples/mesh-and-shaders/shader-toy-mesh/index.js diff --git a/src/examples/v8.0.0/meshAndShaders/shaderToyMesh/shaderToy.frag b/docs/examples/mesh-and-shaders/shader-toy-mesh/shaderToy.frag similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/shaderToyMesh/shaderToy.frag rename to docs/examples/mesh-and-shaders/shader-toy-mesh/shaderToy.frag diff --git a/src/examples/v8.0.0/meshAndShaders/shaderToyMesh/shaderToy.vert b/docs/examples/mesh-and-shaders/shader-toy-mesh/shaderToy.vert similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/shaderToyMesh/shaderToy.vert rename to docs/examples/mesh-and-shaders/shader-toy-mesh/shaderToy.vert diff --git a/docs/examples/mesh-and-shaders/shared-geometry.mdx b/docs/examples/mesh-and-shaders/shared-geometry.mdx new file mode 100644 index 000000000..636e58dc1 --- /dev/null +++ b/docs/examples/mesh-and-shaders/shared-geometry.mdx @@ -0,0 +1,17 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 6 +custom_edit_url: null +title: Shared Geometry +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./shared-geometry/index'; +import sharedGeometryVert from '!!raw-loader!./shared-geometry/sharedGeometry.vert'; +import sharedGeometryFrag from '!!raw-loader!./shared-geometry/sharedGeometry.frag'; + + diff --git a/src/examples/v8.0.0/meshAndShaders/sharedGeometry/index.js b/docs/examples/mesh-and-shaders/shared-geometry/index.js similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/sharedGeometry/index.js rename to docs/examples/mesh-and-shaders/shared-geometry/index.js diff --git a/src/examples/v8.0.0/meshAndShaders/sharedGeometry/sharedGeometry.frag b/docs/examples/mesh-and-shaders/shared-geometry/sharedGeometry.frag similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/sharedGeometry/sharedGeometry.frag rename to docs/examples/mesh-and-shaders/shared-geometry/sharedGeometry.frag diff --git a/src/examples/v8.0.0/meshAndShaders/sharedGeometry/sharedGeometry.vert b/docs/examples/mesh-and-shaders/shared-geometry/sharedGeometry.vert similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/sharedGeometry/sharedGeometry.vert rename to docs/examples/mesh-and-shaders/shared-geometry/sharedGeometry.vert diff --git a/docs/examples/mesh-and-shaders/shared-shader.mdx b/docs/examples/mesh-and-shaders/shared-shader.mdx new file mode 100644 index 000000000..2bdcddb75 --- /dev/null +++ b/docs/examples/mesh-and-shaders/shared-shader.mdx @@ -0,0 +1,17 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 7 +custom_edit_url: null +title: Shared Shader +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./shared-shader/index'; +import sharedShaderVert from '!!raw-loader!./shared-shader/sharedShader.vert'; +import sharedShaderFrag from '!!raw-loader!./shared-shader/sharedShader.frag'; + + diff --git a/src/examples/v8.0.0/meshAndShaders/sharedShader/index.js b/docs/examples/mesh-and-shaders/shared-shader/index.js similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/sharedShader/index.js rename to docs/examples/mesh-and-shaders/shared-shader/index.js diff --git a/src/examples/v8.0.0/meshAndShaders/sharedShader/sharedShader.frag b/docs/examples/mesh-and-shaders/shared-shader/sharedShader.frag similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/sharedShader/sharedShader.frag rename to docs/examples/mesh-and-shaders/shared-shader/sharedShader.frag diff --git a/src/examples/v8.0.0/meshAndShaders/sharedShader/sharedShader.vert b/docs/examples/mesh-and-shaders/shared-shader/sharedShader.vert similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/sharedShader/sharedShader.vert rename to docs/examples/mesh-and-shaders/shared-shader/sharedShader.vert diff --git a/src/examples/v8.0.0/meshAndShaders/texturedMeshAdvanced.js b/docs/examples/mesh-and-shaders/textured-mesh-advanced.js similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/texturedMeshAdvanced.js rename to docs/examples/mesh-and-shaders/textured-mesh-advanced.js diff --git a/docs/examples/mesh-and-shaders/textured-mesh-advanced.mdx b/docs/examples/mesh-and-shaders/textured-mesh-advanced.mdx new file mode 100644 index 000000000..8a1f7441d --- /dev/null +++ b/docs/examples/mesh-and-shaders/textured-mesh-advanced.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 2 +custom_edit_url: null +title: Textured Mesh Advanced +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./textured-mesh-advanced'; + + diff --git a/src/examples/v8.0.0/meshAndShaders/texturedMeshBasic.js b/docs/examples/mesh-and-shaders/textured-mesh-basic.js similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/texturedMeshBasic.js rename to docs/examples/mesh-and-shaders/textured-mesh-basic.js diff --git a/docs/examples/mesh-and-shaders/textured-mesh-basic.mdx b/docs/examples/mesh-and-shaders/textured-mesh-basic.mdx new file mode 100644 index 000000000..7c465cca2 --- /dev/null +++ b/docs/examples/mesh-and-shaders/textured-mesh-basic.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 1 +custom_edit_url: null +title: Textured Mesh Basic +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./textured-mesh-basic'; + + diff --git a/docs/examples/mesh-and-shaders/triangle-color.mdx b/docs/examples/mesh-and-shaders/triangle-color.mdx new file mode 100644 index 000000000..1b49a3bc4 --- /dev/null +++ b/docs/examples/mesh-and-shaders/triangle-color.mdx @@ -0,0 +1,19 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 4 +custom_edit_url: null +title: Triangle Color +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./triangle-color/index'; +import triangleColorVert from '!!raw-loader!./triangle-color/triangleColor.vert'; +import triangleColorFrag from '!!raw-loader!./triangle-color/triangleColor.frag'; +import triangleColorWgsl from '!!raw-loader!./triangle-color/triangleColor.wgsl'; + + diff --git a/src/examples/v8.0.0/meshAndShaders/triangleColor/index.js b/docs/examples/mesh-and-shaders/triangle-color/index.js similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/triangleColor/index.js rename to docs/examples/mesh-and-shaders/triangle-color/index.js diff --git a/src/examples/v8.0.0/meshAndShaders/triangleColor/triangleColor.frag b/docs/examples/mesh-and-shaders/triangle-color/triangleColor.frag similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/triangleColor/triangleColor.frag rename to docs/examples/mesh-and-shaders/triangle-color/triangleColor.frag diff --git a/src/examples/v8.0.0/meshAndShaders/triangleColor/triangleColor.vert b/docs/examples/mesh-and-shaders/triangle-color/triangleColor.vert similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/triangleColor/triangleColor.vert rename to docs/examples/mesh-and-shaders/triangle-color/triangleColor.vert diff --git a/src/examples/v8.0.0/meshAndShaders/triangleColor/triangleColor.wgsl b/docs/examples/mesh-and-shaders/triangle-color/triangleColor.wgsl similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/triangleColor/triangleColor.wgsl rename to docs/examples/mesh-and-shaders/triangle-color/triangleColor.wgsl diff --git a/docs/examples/mesh-and-shaders/triangle-textured.mdx b/docs/examples/mesh-and-shaders/triangle-textured.mdx new file mode 100644 index 000000000..fa3e0a299 --- /dev/null +++ b/docs/examples/mesh-and-shaders/triangle-textured.mdx @@ -0,0 +1,17 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 5 +custom_edit_url: null +title: Triangle Textured +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./triangle-textured/index'; +import triangleTexturedVert from '!!raw-loader!./triangle-textured/triangleTextured.vert'; +import triangleTexturedFrag from '!!raw-loader!./triangle-textured/triangleTextured.frag'; + + diff --git a/src/examples/v8.0.0/meshAndShaders/triangleTextured/index.js b/docs/examples/mesh-and-shaders/triangle-textured/index.js similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/triangleTextured/index.js rename to docs/examples/mesh-and-shaders/triangle-textured/index.js diff --git a/src/examples/v8.0.0/meshAndShaders/triangleTextured/triangleTextured.frag b/docs/examples/mesh-and-shaders/triangle-textured/triangleTextured.frag similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/triangleTextured/triangleTextured.frag rename to docs/examples/mesh-and-shaders/triangle-textured/triangleTextured.frag diff --git a/src/examples/v8.0.0/meshAndShaders/triangleTextured/triangleTextured.vert b/docs/examples/mesh-and-shaders/triangle-textured/triangleTextured.vert similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/triangleTextured/triangleTextured.vert rename to docs/examples/mesh-and-shaders/triangle-textured/triangleTextured.vert diff --git a/docs/examples/mesh-and-shaders/triangle.mdx b/docs/examples/mesh-and-shaders/triangle.mdx new file mode 100644 index 000000000..a374829de --- /dev/null +++ b/docs/examples/mesh-and-shaders/triangle.mdx @@ -0,0 +1,19 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 3 +custom_edit_url: null +title: Triangle +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./triangle/index'; +import triangleVert from '!!raw-loader!./triangle/triangle.vert'; +import triangleFrag from '!!raw-loader!./triangle/triangle.frag'; +import triangleWgsl from '!!raw-loader!./triangle/triangle.wgsl'; + + diff --git a/src/examples/v8.0.0/meshAndShaders/triangle/index.js b/docs/examples/mesh-and-shaders/triangle/index.js similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/triangle/index.js rename to docs/examples/mesh-and-shaders/triangle/index.js diff --git a/src/examples/v8.0.0/meshAndShaders/triangle/triangle.frag b/docs/examples/mesh-and-shaders/triangle/triangle.frag similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/triangle/triangle.frag rename to docs/examples/mesh-and-shaders/triangle/triangle.frag diff --git a/src/examples/v8.0.0/meshAndShaders/triangle/triangle.vert b/docs/examples/mesh-and-shaders/triangle/triangle.vert similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/triangle/triangle.vert rename to docs/examples/mesh-and-shaders/triangle/triangle.vert diff --git a/src/examples/v8.0.0/meshAndShaders/triangle/triangle.wgsl b/docs/examples/mesh-and-shaders/triangle/triangle.wgsl similarity index 100% rename from src/examples/v8.0.0/meshAndShaders/triangle/triangle.wgsl rename to docs/examples/mesh-and-shaders/triangle/triangle.wgsl diff --git a/docs/examples/offscreen-canvas/_category_.yml b/docs/examples/offscreen-canvas/_category_.yml new file mode 100644 index 000000000..5d5015476 --- /dev/null +++ b/docs/examples/offscreen-canvas/_category_.yml @@ -0,0 +1,2 @@ +label: Offscreen Canvas +position: 13 \ No newline at end of file diff --git a/src/examples/v8.0.0/offscreenCanvas/basic.js b/docs/examples/offscreen-canvas/basic.js similarity index 100% rename from src/examples/v8.0.0/offscreenCanvas/basic.js rename to docs/examples/offscreen-canvas/basic.js diff --git a/docs/examples/offscreen-canvas/basic.mdx b/docs/examples/offscreen-canvas/basic.mdx new file mode 100644 index 000000000..db083b9f2 --- /dev/null +++ b/docs/examples/offscreen-canvas/basic.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 0 +custom_edit_url: null +title: Basic +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./basic'; + + diff --git a/docs/examples/sprite/_category_.yml b/docs/examples/sprite/_category_.yml new file mode 100644 index 000000000..2dda005fc --- /dev/null +++ b/docs/examples/sprite/_category_.yml @@ -0,0 +1,2 @@ +label: Sprite +position: 3 \ No newline at end of file diff --git a/src/examples/v8.0.0/sprite/animatedSpriteAnimationSpeed.js b/docs/examples/sprite/animated-sprite-animation-speed.js similarity index 100% rename from src/examples/v8.0.0/sprite/animatedSpriteAnimationSpeed.js rename to docs/examples/sprite/animated-sprite-animation-speed.js diff --git a/docs/examples/sprite/animated-sprite-animation-speed.mdx b/docs/examples/sprite/animated-sprite-animation-speed.mdx new file mode 100644 index 000000000..2d130a78e --- /dev/null +++ b/docs/examples/sprite/animated-sprite-animation-speed.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 4 +custom_edit_url: null +title: Animated Sprite Animation Speed +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./animated-sprite-animation-speed'; + + diff --git a/src/examples/v8.0.0/sprite/animatedSpriteExplosion.js b/docs/examples/sprite/animated-sprite-explosion.js similarity index 100% rename from src/examples/v8.0.0/sprite/animatedSpriteExplosion.js rename to docs/examples/sprite/animated-sprite-explosion.js diff --git a/docs/examples/sprite/animated-sprite-explosion.mdx b/docs/examples/sprite/animated-sprite-explosion.mdx new file mode 100644 index 000000000..0b3d60e01 --- /dev/null +++ b/docs/examples/sprite/animated-sprite-explosion.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 2 +custom_edit_url: null +title: Animated Sprite Explosion +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./animated-sprite-explosion'; + + diff --git a/src/examples/v8.0.0/sprite/animatedSpriteJet.js b/docs/examples/sprite/animated-sprite-jet.js similarity index 100% rename from src/examples/v8.0.0/sprite/animatedSpriteJet.js rename to docs/examples/sprite/animated-sprite-jet.js diff --git a/docs/examples/sprite/animated-sprite-jet.mdx b/docs/examples/sprite/animated-sprite-jet.mdx new file mode 100644 index 000000000..31547c16b --- /dev/null +++ b/docs/examples/sprite/animated-sprite-jet.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 3 +custom_edit_url: null +title: Animated Sprite Jet +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./animated-sprite-jet'; + + diff --git a/src/examples/v8.0.0/sprite/basic.js b/docs/examples/sprite/basic.js similarity index 100% rename from src/examples/v8.0.0/sprite/basic.js rename to docs/examples/sprite/basic.js diff --git a/docs/examples/sprite/basic.mdx b/docs/examples/sprite/basic.mdx new file mode 100644 index 000000000..db083b9f2 --- /dev/null +++ b/docs/examples/sprite/basic.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 0 +custom_edit_url: null +title: Basic +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./basic'; + + diff --git a/src/examples/v8.0.0/sprite/textureSwap.js b/docs/examples/sprite/texture-swap.js similarity index 100% rename from src/examples/v8.0.0/sprite/textureSwap.js rename to docs/examples/sprite/texture-swap.js diff --git a/docs/examples/sprite/texture-swap.mdx b/docs/examples/sprite/texture-swap.mdx new file mode 100644 index 000000000..02338ab05 --- /dev/null +++ b/docs/examples/sprite/texture-swap.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 1 +custom_edit_url: null +title: Texture Swap +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./texture-swap'; + + diff --git a/src/examples/v8.0.0/sprite/tilingSprite.js b/docs/examples/sprite/tiling-sprite.js similarity index 100% rename from src/examples/v8.0.0/sprite/tilingSprite.js rename to docs/examples/sprite/tiling-sprite.js diff --git a/docs/examples/sprite/tiling-sprite.mdx b/docs/examples/sprite/tiling-sprite.mdx new file mode 100644 index 000000000..9db601278 --- /dev/null +++ b/docs/examples/sprite/tiling-sprite.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 5 +custom_edit_url: null +title: Tiling Sprite +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./tiling-sprite'; + + diff --git a/src/examples/v8.0.0/sprite/video.js b/docs/examples/sprite/video.js similarity index 100% rename from src/examples/v8.0.0/sprite/video.js rename to docs/examples/sprite/video.js diff --git a/docs/examples/sprite/video.mdx b/docs/examples/sprite/video.mdx new file mode 100644 index 000000000..adf14ac8d --- /dev/null +++ b/docs/examples/sprite/video.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 6 +custom_edit_url: null +title: Video +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./video'; + + diff --git a/docs/examples/text/_category_.yml b/docs/examples/text/_category_.yml new file mode 100644 index 000000000..e3786327a --- /dev/null +++ b/docs/examples/text/_category_.yml @@ -0,0 +1,2 @@ +label: Text +position: 4 \ No newline at end of file diff --git a/src/examples/v8.0.0/text/bitmapText.js b/docs/examples/text/bitmap-text.js similarity index 100% rename from src/examples/v8.0.0/text/bitmapText.js rename to docs/examples/text/bitmap-text.js diff --git a/docs/examples/text/bitmap-text.mdx b/docs/examples/text/bitmap-text.mdx new file mode 100644 index 000000000..8342a0eef --- /dev/null +++ b/docs/examples/text/bitmap-text.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 1 +custom_edit_url: null +title: Bitmap Text +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./bitmap-text'; + + diff --git a/src/examples/v8.0.0/text/fromFont.js b/docs/examples/text/from-font.js similarity index 100% rename from src/examples/v8.0.0/text/fromFont.js rename to docs/examples/text/from-font.js diff --git a/docs/examples/text/from-font.mdx b/docs/examples/text/from-font.mdx new file mode 100644 index 000000000..b637eaf7b --- /dev/null +++ b/docs/examples/text/from-font.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 2 +custom_edit_url: null +title: From Font +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./from-font'; + + diff --git a/src/examples/v8.0.0/text/pixiText.js b/docs/examples/text/pixi-text.js similarity index 100% rename from src/examples/v8.0.0/text/pixiText.js rename to docs/examples/text/pixi-text.js diff --git a/docs/examples/text/pixi-text.mdx b/docs/examples/text/pixi-text.mdx new file mode 100644 index 000000000..349e8e37b --- /dev/null +++ b/docs/examples/text/pixi-text.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 0 +custom_edit_url: null +title: Pixi Text +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./pixi-text'; + + diff --git a/src/examples/v8.0.0/text/webFont.js b/docs/examples/text/web-font.js similarity index 100% rename from src/examples/v8.0.0/text/webFont.js rename to docs/examples/text/web-font.js diff --git a/docs/examples/text/web-font.mdx b/docs/examples/text/web-font.mdx new file mode 100644 index 000000000..2c4bcdee1 --- /dev/null +++ b/docs/examples/text/web-font.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 3 +custom_edit_url: null +title: Web Font +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./web-font'; + + diff --git a/docs/examples/textures/_category_.yml b/docs/examples/textures/_category_.yml new file mode 100644 index 000000000..b5dde4f6c --- /dev/null +++ b/docs/examples/textures/_category_.yml @@ -0,0 +1,2 @@ +label: Textures +position: 11 \ No newline at end of file diff --git a/src/examples/v8.0.0/textures/renderTextureAdvanced.js b/docs/examples/textures/render-texture-advanced.js similarity index 100% rename from src/examples/v8.0.0/textures/renderTextureAdvanced.js rename to docs/examples/textures/render-texture-advanced.js diff --git a/docs/examples/textures/render-texture-advanced.mdx b/docs/examples/textures/render-texture-advanced.mdx new file mode 100644 index 000000000..c54bc8492 --- /dev/null +++ b/docs/examples/textures/render-texture-advanced.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 2 +custom_edit_url: null +title: Render Texture Advanced +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./render-texture-advanced'; + + diff --git a/src/examples/v8.0.0/textures/renderTextureBasic.js b/docs/examples/textures/render-texture-basic.js similarity index 100% rename from src/examples/v8.0.0/textures/renderTextureBasic.js rename to docs/examples/textures/render-texture-basic.js diff --git a/docs/examples/textures/render-texture-basic.mdx b/docs/examples/textures/render-texture-basic.mdx new file mode 100644 index 000000000..9c2a1740f --- /dev/null +++ b/docs/examples/textures/render-texture-basic.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 1 +custom_edit_url: null +title: Render Texture Basic +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./render-texture-basic'; + + diff --git a/src/examples/v8.0.0/textures/textureRotate.js b/docs/examples/textures/texture-rotate.js similarity index 100% rename from src/examples/v8.0.0/textures/textureRotate.js rename to docs/examples/textures/texture-rotate.js diff --git a/docs/examples/textures/texture-rotate.mdx b/docs/examples/textures/texture-rotate.mdx new file mode 100644 index 000000000..a2a9e63a9 --- /dev/null +++ b/docs/examples/textures/texture-rotate.mdx @@ -0,0 +1,11 @@ +--- +hide_table_of_contents: true +hide_edit_this_page: true +sidebar_position: 0 +custom_edit_url: null +title: Texture Rotate +--- +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; +import IndexFile from '!!raw-loader!./texture-rotate'; + + diff --git a/docs/guides/components/graphics-pixel-line.md b/docs/guides/components/graphics-pixel-line.mdx similarity index 94% rename from docs/guides/components/graphics-pixel-line.md rename to docs/guides/components/graphics-pixel-line.mdx index 7ebccf29c..8340e4ed0 100644 --- a/docs/guides/components/graphics-pixel-line.md +++ b/docs/guides/components/graphics-pixel-line.mdx @@ -1,3 +1,9 @@ +import { Sandpack } from "@codesandbox/sandpack-react"; +import { dracula } from "@codesandbox/sandpack-themes"; +import { EmbeddedEditor } from "@site/src/components/Editor/EmbeddedEditor"; +import IndexFile from '!!raw-loader!../../examples/graphics/pixelLine'; +import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; + # Graphics Pixel Line The `pixelLine` property is a neat feature of the PixiJS Graphics API that allows you to create lines that remain 1 pixel thick, regardless of scaling or zoom level. As part of the Graphics API, it gives developers all the power PixiJS provides for building and stroking shapes. This feature is especially useful for achieving crisp, pixel-perfect visuals, particularly in retro-style or grid-based games, technical drawing, or UI rendering. @@ -6,6 +12,8 @@ In this guide, we'll dive into how this property works, its use cases, and the c --- + + ## How to use `pixelLine`? Here’s a simple example: @@ -173,5 +181,3 @@ In this example, the blue box grows as it scales, but the red stroke remains at The `pixelLine` property is a super useful to have in the PixiJS toolbox for developers looking to create sharp, pixel-perfect lines that remain consistent under transformation. By understanding its strengths and limitations, you can incorporate it into your projects for clean, professional results in both visual and functional elements. -Check out the [line styling example code](../../examples/graphics/pixel-line) to see `pixelLine` in action! - diff --git a/package-lock.json b/package-lock.json index 1e2160fd3..5eb19e417 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,8 @@ "name": "pixi-docusaurus", "version": "0.0.0", "dependencies": { - "@codesandbox/sandpack-react": "^1.20.9", + "@codesandbox/sandpack-react": "^2.19.10", + "@codesandbox/sandpack-themes": "^2.0.21", "@docusaurus/core": "~3.6.3", "@docusaurus/faster": "^3.6.3", "@docusaurus/plugin-client-redirects": "~3.6.3", @@ -22,14 +23,14 @@ "classnames": "^2.5.1", "clsx": "^2.1.1", "docusaurus-plugin-sass": "^0.2.6", - "pixi.js": "^8.6.4", + "pixi.js": "^8.6.6", "prism-react-renderer": "^2.4.1", "ramda": "^0.30.1", "raw-loader": "^4.0.2", "react": "^18.3.1", "react-dom": "^18.3.1", "react-intersection-observer": "^9.13.1", - "sass": "^1.82.0" + "sass": "^1.83.0" }, "devDependencies": { "@docusaurus/module-type-aliases": "^3.6.3", @@ -2185,19 +2186,6 @@ "node": ">=6.9.0" } }, - "node_modules/@code-hike/classer": { - "version": "0.0.0-e48fa74", - "resolved": "https://registry.npmjs.org/@code-hike/classer/-/classer-0.0.0-e48fa74.tgz", - "integrity": "sha512-CyPYvfl4K5Hp9uyhLhUemul56eiGOF0FNXh5ALzzK9VNhRmRmj1O0mKtLDpoccI8W90r9kQES/nW2FC8jVVieg==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/codehike" - }, - "peerDependencies": { - "react": ">=16.8" - } - }, "node_modules/@codemirror/autocomplete": { "version": "6.18.3", "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.3.tgz", @@ -2318,23 +2306,69 @@ "w3c-keyname": "^2.2.4" } }, + "node_modules/@codesandbox/nodebox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@codesandbox/nodebox/-/nodebox-0.1.8.tgz", + "integrity": "sha512-2VRS6JDSk+M+pg56GA6CryyUSGPjBEe8Pnae0QL3jJF1mJZJVMDKr93gJRtBbLkfZN6LD/DwMtf+2L0bpWrjqg==", + "license": "SEE LICENSE IN ./LICENSE", + "dependencies": { + "outvariant": "^1.4.0", + "strict-event-emitter": "^0.4.3" + } + }, "node_modules/@codesandbox/sandpack-client": { - "version": "1.20.9", - "resolved": "https://registry.npmjs.org/@codesandbox/sandpack-client/-/sandpack-client-1.20.9.tgz", - "integrity": "sha512-Z/SXVRFzO8BOagLg6+6WQfBpAio3AZNjeposYPyoI7fxT8L9urS+G5uG/oG4vV/YkK5nmIuT7pKdTL66wMUsxA==", + "version": "2.19.8", + "resolved": "https://registry.npmjs.org/@codesandbox/sandpack-client/-/sandpack-client-2.19.8.tgz", + "integrity": "sha512-CMV4nr1zgKzVpx4I3FYvGRM5YT0VaQhALMW9vy4wZRhEyWAtJITQIqZzrTGWqB1JvV7V72dVEUCUPLfYz5hgJQ==", "license": "Apache-2.0", "dependencies": { - "codesandbox-import-utils": "^1.2.3", - "lodash.isequal": "^4.5.0" + "@codesandbox/nodebox": "0.1.8", + "buffer": "^6.0.3", + "dequal": "^2.0.2", + "mime-db": "^1.52.0", + "outvariant": "1.4.0", + "static-browser-server": "1.0.3" + } + }, + "node_modules/@codesandbox/sandpack-client/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "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/@codesandbox/sandpack-client/node_modules/mime-db": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", + "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, "node_modules/@codesandbox/sandpack-react": { - "version": "1.20.9", - "resolved": "https://registry.npmjs.org/@codesandbox/sandpack-react/-/sandpack-react-1.20.9.tgz", - "integrity": "sha512-bUfp+JjKBEwY6RDMnhjQ0qbSj2V6P+3n5Avk7AJ7eJ0uYV1ZS2v8Q8PDQw2d9RX27xgyQQ6OklY+XXrlnQZfjw==", + "version": "2.19.10", + "resolved": "https://registry.npmjs.org/@codesandbox/sandpack-react/-/sandpack-react-2.19.10.tgz", + "integrity": "sha512-X/7NzhR7R5pp5qYS+Gc31OzJvy+EzGz++H1YN9bJlDE+VzxTBsMN9dv3adzeo5wtxUhqexVOJS7mGr//e7KP2A==", "license": "Apache-2.0", "dependencies": { - "@code-hike/classer": "^0.0.0-aa6efee", "@codemirror/autocomplete": "^6.4.0", "@codemirror/commands": "^6.1.3", "@codemirror/lang-css": "^6.0.1", @@ -2343,13 +2377,14 @@ "@codemirror/language": "^6.3.2", "@codemirror/state": "^6.2.0", "@codemirror/view": "^6.7.1", - "@codesandbox/sandpack-client": "^1.20.9", + "@codesandbox/sandpack-client": "^2.19.8", "@lezer/highlight": "^1.1.3", "@react-hook/intersection-observer": "^3.1.1", "@stitches/core": "^1.2.6", + "anser": "^2.1.1", "clean-set": "^1.1.2", - "codesandbox-import-util-types": "^2.2.3", - "lodash.isequal": "^4.5.0", + "dequal": "^2.0.2", + "escape-carriage": "^1.3.1", "lz-string": "^1.4.4", "react-devtools-inline": "4.4.0", "react-is": "^17.0.2" @@ -2359,6 +2394,12 @@ "react-dom": "^16.8.0 || ^17 || ^18" } }, + "node_modules/@codesandbox/sandpack-themes": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/@codesandbox/sandpack-themes/-/sandpack-themes-2.0.21.tgz", + "integrity": "sha512-CMH/MO/dh6foPYb/3eSn2Cu/J3+1+/81Fsaj7VggICkCrmRk0qG5dmgjGAearPTnRkOGORIPHuRqwNXgw0E6YQ==", + "license": "Apache-2.0" + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -5206,6 +5247,12 @@ "node": ">= 8" } }, + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "license": "MIT" + }, "node_modules/@parcel/watcher": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.0.tgz", @@ -7769,6 +7816,12 @@ "@algolia/requester-common": "4.24.0" } }, + "node_modules/anser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/anser/-/anser-2.3.0.tgz", + "integrity": "sha512-pGGR7Nq1K/i9KGs29PvHDXA8AsfZ3OiYRMDClT3FIC085Kbns9CJ7ogq9MEiGnrjd9THOGoh7B+kWzePHzZyJQ==", + "license": "MIT" + }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -8246,7 +8299,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, "funding": [ { "type": "github", @@ -8290,18 +8342,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/binaryextensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.3.0.tgz", - "integrity": "sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==", - "license": "MIT", - "engines": { - "node": ">=0.8" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -9007,28 +9047,6 @@ "node": ">=6" } }, - "node_modules/codesandbox-import-util-types": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/codesandbox-import-util-types/-/codesandbox-import-util-types-2.2.3.tgz", - "integrity": "sha512-Qj00p60oNExthP2oR3vvXmUGjukij+rxJGuiaKM6tyUmSyimdZsqHI/TUvFFClAffk9s7hxGnQgWQ8KCce27qQ==" - }, - "node_modules/codesandbox-import-utils": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/codesandbox-import-utils/-/codesandbox-import-utils-1.3.8.tgz", - "integrity": "sha512-S12zO49QEkldoYLGh5KbkHRLOacg5BCNTue2vlyZXSpuK3oQdArwC/G1hCLKryV460bW3Ecn5xdkpfkUcFeOwQ==", - "license": "SEE LICENSE IN LICENSE", - "dependencies": { - "codesandbox-import-util-types": "^1.3.7", - "istextorbinary": "2.2.1", - "lz-string": "^1.4.4" - } - }, - "node_modules/codesandbox-import-utils/node_modules/codesandbox-import-util-types": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/codesandbox-import-util-types/-/codesandbox-import-util-types-1.3.7.tgz", - "integrity": "sha512-8oP3emA0jyEuVOM2FBTpo/AF4C9vxHn14saVWZf2CQ/QhMtonBlNPE98ElrHkW+PFNXiO7Ad52Qr73b03n8qlA==", - "license": "SEE LICENSE IN LICENSE" - }, "node_modules/collapse-white-space": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", @@ -10510,7 +10528,6 @@ "version": "16.4.7", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -10551,15 +10568,6 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "license": "MIT" }, - "node_modules/editions": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", - "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -10919,6 +10927,12 @@ "node": ">=6" } }, + "node_modules/escape-carriage": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/escape-carriage/-/escape-carriage-1.3.1.tgz", + "integrity": "sha512-GwBr6yViW3ttx1kb7/Oh+gKQ1/TrhYwxKqVmg5gS+BK+Qe2KrOa/Vh7w3HPBvgGf0LfcDGoY9I6NHKoA5Hozhw==", + "license": "MIT" + }, "node_modules/escape-goat": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", @@ -13549,7 +13563,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, "funding": [ { "type": "github", @@ -14488,20 +14501,6 @@ "node": ">=0.10.0" } }, - "node_modules/istextorbinary": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.2.1.tgz", - "integrity": "sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw==", - "license": "MIT", - "dependencies": { - "binaryextensions": "2", - "editions": "^1.3.3", - "textextensions": "2" - }, - "engines": { - "node": ">=0.12" - } - }, "node_modules/iterator.prototype": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.4.tgz", @@ -15206,12 +15205,6 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "license": "MIT" }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "license": "MIT" - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -18431,6 +18424,12 @@ "node": ">=0.10.0" } }, + "node_modules/outvariant": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.0.tgz", + "integrity": "sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==", + "license": "MIT" + }, "node_modules/p-cancelable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", @@ -18792,9 +18791,9 @@ } }, "node_modules/pixi.js": { - "version": "8.6.4", - "resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-8.6.4.tgz", - "integrity": "sha512-hPJpxh3GRjU/wnDPlGZ9WqndJpDpQuaGnRpbAci3r7loX9Zw0zKFm1fph278YFNPfywPA15vjd512OQqYKq5dA==", + "version": "8.6.6", + "resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-8.6.6.tgz", + "integrity": "sha512-o5pw7G2yuIrnBx0G4npBlmFp+XGNcapI/Ufs62rRj/4XKxc1Zo74YJr/BtEXcXTraTKd+pQvYOLvnfxRjxBMvQ==", "license": "MIT", "dependencies": { "@pixi/colord": "^2.9.6", @@ -21932,9 +21931,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.82.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.82.0.tgz", - "integrity": "sha512-j4GMCTa8elGyN9A7x7bEglx0VgSpNUG4W4wNedQ33wSMdnkqQCT8HTwOaVSV4e6yQovcu/3Oc4coJP/l0xhL2Q==", + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.0.tgz", + "integrity": "sha512-qsSxlayzoOjdvXMVLkzF84DJFc2HZEL/rFyGIKbbilYtAvlCxyuzUeff9LawTn4btVnLKg75Z8MMr1lxU1lfGw==", "license": "MIT", "dependencies": { "chokidar": "^4.0.0", @@ -22773,6 +22772,27 @@ "integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==", "license": "MIT" }, + "node_modules/static-browser-server": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/static-browser-server/-/static-browser-server-1.0.3.tgz", + "integrity": "sha512-ZUyfgGDdFRbZGGJQ1YhiM930Yczz5VlbJObrQLlk24+qNHVQx4OlLcYswEUo3bIyNAbQUIUR9Yr5/Hqjzqb4zA==", + "license": "Apache-2.0", + "dependencies": { + "@open-draft/deferred-promise": "^2.1.0", + "dotenv": "^16.0.3", + "mime-db": "^1.52.0", + "outvariant": "^1.3.0" + } + }, + "node_modules/static-browser-server/node_modules/mime-db": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", + "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -22788,6 +22808,12 @@ "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", "license": "MIT" }, + "node_modules/strict-event-emitter": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz", + "integrity": "sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==", + "license": "MIT" + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -23314,18 +23340,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "license": "MIT" }, - "node_modules/textextensions": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.6.0.tgz", - "integrity": "sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==", - "license": "MIT", - "engines": { - "node": ">=0.8" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", diff --git a/package.json b/package.json index b590b427f..f239c94a2 100644 --- a/package.json +++ b/package.json @@ -20,8 +20,7 @@ "types": "tsc --noEmit", "write-heading-ids": "docusaurus write-heading-ids", "write-translations": "docusaurus write-translations", - "generate-content": "npm run generate-example-docs && npm run generate-tutorial-docs", - "generate-example-docs": "node ./scripts/generate-example-docs.js", + "generate-content": "npm run generate-tutorial-docs", "generate-tutorial-docs": "node ./scripts/generate-tutorial-docs.js", "update-version": "node ./scripts/update-version.js", "prepare": "husky install" @@ -51,7 +50,8 @@ ] }, "dependencies": { - "@codesandbox/sandpack-react": "^1.20.9", + "@codesandbox/sandpack-react": "^2.19.10", + "@codesandbox/sandpack-themes": "^2.0.21", "@docusaurus/core": "~3.6.3", "@docusaurus/faster": "^3.6.3", "@docusaurus/plugin-client-redirects": "~3.6.3", @@ -65,14 +65,14 @@ "classnames": "^2.5.1", "clsx": "^2.1.1", "docusaurus-plugin-sass": "^0.2.6", - "pixi.js": "^8.6.4", + "pixi.js": "^8.6.6", "prism-react-renderer": "^2.4.1", "ramda": "^0.30.1", "raw-loader": "^4.0.2", "react": "^18.3.1", "react-dom": "^18.3.1", "react-intersection-observer": "^9.13.1", - "sass": "^1.82.0" + "sass": "^1.83.0" }, "devDependencies": { "@docusaurus/module-type-aliases": "^3.6.3", diff --git a/src/components/Editor/Editor.tsx b/src/components/Editor/Editor.tsx new file mode 100644 index 000000000..157a9050b --- /dev/null +++ b/src/components/Editor/Editor.tsx @@ -0,0 +1,64 @@ +import { useState } from 'react'; +import { dracula } from './defaults/theme'; +import { EditorLayout } from './Sandpack/Layout'; +import HTMLFile from '!!raw-loader!./defaults/index.html'; +import StylesFile from '!!raw-loader!./defaults/styles.css'; +import { SandpackProvider } from '@codesandbox/sandpack-react'; +import { githubLight } from '@codesandbox/sandpack-themes'; +import { useColorMode } from '@docusaurus/theme-common'; + +export interface EditorProps { + showCode?: boolean; + showPreview?: boolean; + showConsole?: boolean; + fullSizePreview?: boolean; + width?: number | string; + height?: number | string; + dependencies?: Record; + files?: Record; + fontSize?: number; +} + +export function Editor({ + showCode = true, + showPreview = true, + showConsole = false, + fullSizePreview = false, + width = '100%', + height = '100%', + dependencies = { 'pixi.js': 'latest' }, + files = { 'index.js': '// Your code here' }, + fontSize = 12, +}: EditorProps) +{ + const { colorMode } = useColorMode(); + + // useResizeHandler(showPreview, setCodeVisibility); + + const [filesState] = useState({ + '/index.html': { code: HTMLFile, hidden: true }, + '/styles.css': { code: StylesFile, hidden: true }, + 'sandbox.config.json': { code: `{"infiniteLoopProtection": false}`, hidden: true }, + 'index.ts': { code: '', hidden: true, active: false }, + 'index.js': { + code: (files['index.js'] as string) ?? '// Your code here', + hidden: false, + active: true, + }, + }); + + return ( + + + + ); +} diff --git a/src/components/Editor/EmbeddedEditor.tsx b/src/components/Editor/EmbeddedEditor.tsx new file mode 100644 index 000000000..d06960766 --- /dev/null +++ b/src/components/Editor/EmbeddedEditor.tsx @@ -0,0 +1,6 @@ +import { type EditorProps, Editor } from './Editor'; + +export function EmbeddedEditor(props: EditorProps) +{ + return ; +} diff --git a/src/components/Editor/ExampleEditor.tsx b/src/components/Editor/ExampleEditor.tsx new file mode 100644 index 000000000..08b9f6299 --- /dev/null +++ b/src/components/Editor/ExampleEditor.tsx @@ -0,0 +1,10 @@ +import { type EditorProps, Editor } from './Editor'; +import { useContainerClassNameModifier } from '@site/src/hooks/useContainerClassNameModifier'; + +export function ExampleEditor(props: EditorProps) +{ + // hack the .container class to add a modifier + useContainerClassNameModifier('example', true); + + return ; +} diff --git a/src/components/Editor/Monaco/MonacoView.tsx b/src/components/Editor/Monaco/MonacoView.tsx new file mode 100644 index 000000000..8646d28a0 --- /dev/null +++ b/src/components/Editor/Monaco/MonacoView.tsx @@ -0,0 +1,46 @@ +import { useFileLanguage } from './useFileLanguage'; +import { usePixiMonaco } from './usePixiDefinitions'; +import { FileTabs, SandpackStack, useActiveCode, useSandpack } from '@codesandbox/sandpack-react'; +import { useColorMode } from '@docusaurus/theme-common'; +import { Editor, useMonaco } from '@monaco-editor/react'; + +import type { CSSProperties } from 'react'; + +interface MonacoViewProps { + fontSize?: number; + style?: CSSProperties; +} +export function MonacoView({ fontSize = 12, style }: MonacoViewProps) +{ + const { code, updateCode } = useActiveCode(); + const { sandpack } = useSandpack(); + const monaco = useMonaco(); + const language = useFileLanguage(sandpack.activeFile); + const { colorMode } = useColorMode(); + + usePixiMonaco(monaco); + + return ( + + +
+ updateCode(value || '')} + options={{ + minimap: { enabled: false }, + scrollBeyondLastLine: false, + wordWrap: 'on', + automaticLayout: true, + fontSize, + }} + /> +
+
+ ); +} diff --git a/src/components/Editor/Monaco/glsl.ts b/src/components/Editor/Monaco/glsl.ts new file mode 100644 index 000000000..f71d0da51 --- /dev/null +++ b/src/components/Editor/Monaco/glsl.ts @@ -0,0 +1,359 @@ +/* eslint-disable camelcase */ +import type { Monaco } from '@monaco-editor/react'; + +// src/glsl.ts +export function registerGLSL(monaco: Monaco) +{ + const { languages } = monaco; + const langId = 'glsl'; + + languages.register({ + id: langId, + extensions: ['.frag', '.vert'], + }); + languages.setLanguageConfiguration(langId, { + comments: { + lineComment: '//', + blockComment: ['/*', '*/'], + }, + brackets: [ + ['{', '}'], + ['[', ']'], + ['(', ')'], + ], + autoClosingPairs: [ + { open: '{', close: '}' }, + { open: '[', close: ']' }, + { open: '(', close: ')' }, + { open: '"', close: '"', notIn: ['string'] }, + { open: '\'', close: '\'', notIn: ['string'] }, + ], + surroundingPairs: [ + { open: '{', close: '}' }, + { open: '[', close: ']' }, + { open: '(', close: ')' }, + { open: '"', close: '"' }, + { open: '\'', close: '\'' }, + ], + }); + languages.setMonarchTokensProvider(langId, { + tokenPostfix: '.glsl', + defaultToken: 'invalid', + // preprocessor directives + directives: [ + '#', + '#define', + '#undef', + '#if', + '#ifdef', + '#ifndef', + '#else', + '#elif', + '#endif', + '#error', + '#pragma', + '#extension', + '#version', + '#line', + ], + // preprocessor macros + macros: ['__LINE__', '__FILE__', '__VERSION__'], + // storage modifiers + storage: ['in', 'out', 'uniform', 'layout', 'attribute', 'varying', 'precision', 'highp', 'mediump', 'lowp'], + types: [ + 'void', + 'bool', + 'int', + 'uint', + 'float', + 'double', + 'vec2', + 'vec3', + 'vec4', + 'ivec2', + 'ivec3', + 'ivec4', + 'bvec2', + 'bvec3', + 'bvec4', + 'uvec2', + 'uvec3', + 'uvec4', + 'dvec2', + 'dvec3', + 'dvec4', + 'mat2', + 'mat3', + 'mat4', + 'mat2x2', + 'mat2x3', + 'mat2x4', + 'mat3x2', + 'mat3x3', + 'mat3x4', + 'mat4x2', + 'mat4x3', + 'mat4x4', + 'dmat2', + 'dmat3', + 'dmat4', + 'dmat2x2', + 'dmat2x3', + 'dmat2x4', + 'dmat3x2', + 'dmat3x3', + 'dmat3x4', + 'dmat4x2', + 'dmat4x3', + 'dmat4x4', + 'sampler1D', + 'texture1D', + 'image1D', + 'sampler1DShadow', + 'sampler1DArray', + 'texture1DArray', + 'image1DArray', + 'sampler1DArrayShadow', + 'sampler2D', + 'texture2D', + 'image2D', + 'sampler2DShadow', + 'sampler2DArray', + 'texture2DArray', + 'image2DArray', + 'sampler2DArrayShadow', + 'sampler2DMS', + 'texture2DMS', + 'image2DMS', + 'sampler2DMSArray', + 'texture2DMSArray', + 'image2DMSArray', + 'sampler2DRect', + 'texture2DRect', + 'image2DRect', + 'sampler2DRectShadow', + 'sampler3D', + 'texture3D', + 'image3D', + 'samplerCube', + 'textureCube', + 'imageCube', + 'samplerCubeShadow', + 'samplerCubeArray', + 'textureCubeArray', + 'imageCubeArray', + 'samplerCubeArrayShadow', + 'samplerBuffer', + 'textureBuffer', + 'imageBuffer', + 'subpassInput', + 'subpassInputMS', + 'isampler1D', + 'itexture1D', + 'iimage1D', + 'isampler1DArray', + 'itexture1DArray', + 'iimage1DArray', + 'isampler2D', + 'itexture2D', + 'iimage2D', + 'isampler2DArray', + 'itexture2DArray', + 'iimage2DArray', + 'isampler2DMS', + 'itexture2DMS', + 'iimage2DMS', + 'isampler2DMSArray', + 'itexture2DMSArray', + 'iimage2DMSArray', + 'isampler2DRect', + 'itexture2DRect', + 'iimage2DRect', + 'isampler3D', + 'itexture3D', + 'iimage3D', + 'isamplerCube', + 'itextureCube', + 'iimageCube', + 'isamplerCubeArray', + 'itextureCubeArray', + 'iimageCubeArray', + 'isamplerBuffer', + 'itextureBuffer', + 'iimageBuffer', + 'isubpassInput', + 'isubpassInputMS', + 'usampler1D', + 'utexture1D', + 'uimage1D', + 'usampler1DArray', + 'utexture1DArray', + 'uimage1DArray', + 'usampler2D', + 'utexture2D', + 'uimage2D', + 'usampler2DArray', + 'utexture2DArray', + 'uimage2DArray', + 'usampler2DMS', + 'utexture2DMS', + 'uimage2DMS', + 'usampler2DMSArray', + 'utexture2DMSArray', + 'uimage2DMSArray', + 'usampler2DRect', + 'utexture2DRect', + 'uimage2DRect', + 'usampler3D', + 'utexture3D', + 'uimage3D', + 'usamplerCube', + 'utextureCube', + 'uimageCube', + 'usamplerCubeArray', + 'utextureCubeArray', + 'uimageCubeArray', + 'usamplerBuffer', + 'utextureBuffer', + 'uimageBuffer', + 'atomic_uint', + 'usubpassInput', + 'usubpassInputMS', + 'sampler', + 'samplerShadow', + ], + operators: [ + '*', + '+', + '-', + '/', + '~', + '!', + '%', + '<<', + '>>', + '<', + '>', + '<=', + '>=', + '==', + '!=', + '&', + '^', + '|', + '&&', + '^^', + '||', + // selection ?: + '=', + '+=', + '-=', + '*=', + '/=', + '%=', + '<<=', + '>>=', + '&=', + '^=', + '|=', + ], + builtin_vars: [ + // language variables + 'gl_VertexID', + 'gl_InstanceID', + // non-vulkan + 'gl_VertexIndex', + 'gl_InstanceIndex', + // vulkan + 'gl_DrawID', + 'gl_BaseVertex', + 'gl_BaseInstance', + 'gl_Position', + 'gl_PointSize', + 'gl_ClipDistance', + 'gl_CullDistance', + // perVertex + // compatibility profile + 'gl_Color', + 'gl_SecondaryColor', + 'gl_Normal', + 'gl_Vertex', + 'gl_MultiTexCoord0', + 'gl_MultiTexCoord1', + 'gl_MultiTexCoord2', + 'gl_MultiTexCoord3', + 'gl_MultiTexCoord4', + 'gl_MultiTexCoord5', + 'gl_MultiTexCoord6', + 'gl_MultiTexCoord7', + 'gl_FogCoord', + ], + constants: [ + 'gl_MaxVertexAttribs', + 'gl_MaxVertexUniformVectors', + 'gl_MaxVertexUniformComponents', + 'gl_MaxVertexOutputComponents', + // TODO: add more constants from the 7.3 section of GLSLangSpec.4.60.pdf + ], + intsuffix: '[uU]?', + floatsuffix: '([fF]|(fl|FL))?', + tokenizer: { + root: [ + [/\/\/.*$/, 'comment.line'], + [/\/\*/, 'comment.block', '@comment'], + [ + /#[a-z]*/, + { + cases: { + '@directives': 'keyword.control.preprocessor', + '@default': 'invalid', + }, + }, + ], + ['GL_ES', 'meta.preprocessor'], + [ + /__[A-Z_]+__/, + { + cases: { + '@macros': 'meta.preprocessor', + '@default': 'invalid', + }, + }, + ], + [/[{}()\[\]]/, '@brackets'], + [/(true|false)/, 'constant'], + [ + /[\=\+\-\*\/\>\<\&\|\%\!\^]+/, + { + cases: { + '@operators': 'operator', + '@default': 'invalid', + }, + }, + ], + [/[a-zA-Z][a-zA-Z0-9_]*(?=\()/, 'entity.name.function'], + [ + /[a-zA-Z][a-zA-Z0-9_]*/, + { + cases: { + '@storage': 'storage.type', + '@types': 'entity.name.type', + '@builtin_vars': 'keyword', + '@default': 'variable.name', + }, + }, + ], + [/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/, 'number.float'], + [/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/, 'number.float'], + [/0[xX][0-9a-fA-F](@intsuffix)/, 'number.hex'], + [/0[0-7](@intsuffix)/, 'number.octal'], + [/\d+(@intsuffix)/, 'number'], + [/[;,.]/, 'delimiter'], + ], + comment: [ + ['\\*/', 'comment.block', '@pop'], + ['.*', 'comment.block'], + ], + }, + }); +} diff --git a/src/components/Editor/Monaco/useFileLanguage.ts b/src/components/Editor/Monaco/useFileLanguage.ts new file mode 100644 index 000000000..c9b8bde61 --- /dev/null +++ b/src/components/Editor/Monaco/useFileLanguage.ts @@ -0,0 +1,37 @@ +import { useMemo } from 'react'; + +const getFileExtension = (filename: string): string => +{ + const parts = filename.split('.'); + + return parts[parts.length - 1]; +}; + +const getLanguage = (filename: string): string => +{ + const extension = getFileExtension(filename); + + if (extension === 'js') + { + return 'javascript'; + } + + if (extension === 'ts') + { + return 'typescript'; + } + + if (extension === 'vert' || extension === 'frag') + { + return 'glsl'; + } + + return extension; +}; + +export const useFileLanguage = (filename: string) => +{ + const language = useMemo(() => getLanguage(filename), [filename]); + + return language; +}; diff --git a/src/components/Editor/Monaco/usePixiDefinitions.ts b/src/components/Editor/Monaco/usePixiDefinitions.ts new file mode 100644 index 000000000..2d11785c5 --- /dev/null +++ b/src/components/Editor/Monaco/usePixiDefinitions.ts @@ -0,0 +1,92 @@ +import { useEffect } from 'react'; +import { registerGLSL } from './glsl'; + +import type { Monaco } from '@monaco-editor/react'; + +function getStorageValue(key: string, defaultValue: T) +{ + // getting stored value + const saved = localStorage.getItem(key); + const initial = JSON.parse(saved as string) as T; + + return initial || defaultValue; +} + +export const getPixiDefinitions = async (version: string) => +{ + const key = `pixi-definitions-${version}`; + const value = getStorageValue(key, null); + + if (!value) + { + try + { + const response = await fetch(`https://cdn.jsdelivr.net/npm/pixi.js@${version}/dist/pixi.js.d.ts`); + const pixiTypes = await response.text(); + + if (pixiTypes.startsWith('// Generated by dts-bundle-generator')) + { + localStorage.setItem(key, JSON.stringify(pixiTypes)); + + return pixiTypes; + } + + return null; + } + catch (error) + { + console.error('Failed to fetch pixi.js types:', error); + + return null; + } + } + + return value; +}; + +export const usePixiMonaco = (monaco: Monaco | null, version = 'latest') => +{ + useEffect(() => + { + const handleEditorWillMount = async (monaco: Monaco) => + { + const pixiTypes = await getPixiDefinitions(version); + + const pixiModuleDeclaration = `declare module 'pixi.js' { ${pixiTypes} }`; + const shaderModuleDeclaration = ` + declare module '*.wgsl' { + const shader: 'string'; + export default shader; + } + + declare module '*.vert' { + const shader: 'string'; + export default shader; + } + + declare module '*.frag' { + const shader: 'string'; + export default shader; + }`; + + monaco.languages.typescript.typescriptDefaults.addExtraLib( + pixiModuleDeclaration, + `file:///node_modules/pixi.js/index.d.ts`, + ); + monaco.languages.typescript.javascriptDefaults.addExtraLib( + pixiModuleDeclaration, + `file:///node_modules/pixi.js/index.d.ts`, + ); + + monaco.languages.typescript.typescriptDefaults.addExtraLib(shaderModuleDeclaration); + monaco.languages.typescript.javascriptDefaults.addExtraLib(shaderModuleDeclaration); + + registerGLSL(monaco); + }; + + if (monaco) + { + handleEditorWillMount(monaco); + } + }, [monaco, version]); +}; diff --git a/src/components/Editor/Sandpack/ConsoleCounterButton.tsx b/src/components/Editor/Sandpack/ConsoleCounterButton.tsx new file mode 100644 index 000000000..dbfaee01f --- /dev/null +++ b/src/components/Editor/Sandpack/ConsoleCounterButton.tsx @@ -0,0 +1,15 @@ +import { ConsoleIcon, RoundedButton } from '@codesandbox/sandpack-react'; + +interface ConsoleCounterButtonProps { + onClick: () => void; +} +export const ConsoleCounterButton: React.FC = ({ onClick }: ConsoleCounterButtonProps) => ( + + + +); diff --git a/src/components/Editor/Sandpack/Layout.tsx b/src/components/Editor/Sandpack/Layout.tsx new file mode 100644 index 000000000..d4f6a2165 --- /dev/null +++ b/src/components/Editor/Sandpack/Layout.tsx @@ -0,0 +1,67 @@ +import { useState } from 'react'; +import { MonacoView } from '../Monaco/MonacoView'; +import { ConsoleCounterButton } from './ConsoleCounterButton'; +import { ToggleCodeButton } from './ToggleCodeButton'; +import { SandpackConsole, SandpackLayout, SandpackPreview, SandpackStack } from '@codesandbox/sandpack-react'; + +import type { EditorProps } from '../Editor'; + +export function EditorLayout( + props: Required>, +) +{ + const { showCode, showPreview, showConsole, fontSize, fullSizePreview } = props; + const [consoleVisibility, setConsoleVisibility] = useState(showConsole); + const [codeVisibility, setCodeVisibility] = useState(showCode); + + const actionsChildren = ( + <> + setCodeVisibility((prev) => !prev)} visible={codeVisibility} /> + setConsoleVisibility((prev) => !prev)} /> + + ); + + return ( + + + {showPreview && ( + + + {consoleVisibility && ( +
+ +
+ )} +
+ )} +
+ ); +} diff --git a/src/components/Editor/Sandpack/ToggleCodeButton.tsx b/src/components/Editor/Sandpack/ToggleCodeButton.tsx new file mode 100644 index 000000000..e093526a6 --- /dev/null +++ b/src/components/Editor/Sandpack/ToggleCodeButton.tsx @@ -0,0 +1,35 @@ +/* eslint-disable max-len */ +import { RoundedButton } from '@codesandbox/sandpack-react'; + +const SVG: React.FC> = (props) => ( + +); + +export const BackwardIcon = (): React.ReactElement => ( + + Close Code Editor + + +); + +export const ForwardIcon = (): React.ReactElement => ( + + Open Code Editor + + +); + +interface ToggleCodeButtonProps { + onClick: () => void; + visible: boolean; +} +export const ToggleCodeButton: React.FC = ({ onClick, visible }: ToggleCodeButtonProps) => ( + + {visible ? : } + +); diff --git a/src/components/Editor/Sandpack/useEditorResize.ts b/src/components/Editor/Sandpack/useEditorResize.ts new file mode 100644 index 000000000..ef112e1e1 --- /dev/null +++ b/src/components/Editor/Sandpack/useEditorResize.ts @@ -0,0 +1,26 @@ +import { useCallback, useEffect } from 'react'; + +import type React from 'react'; + +export const useResizeHandler = (showPreview: boolean, setCodeVisibility: React.Dispatch>) => +{ + const handleResize = useCallback(() => + { + if (window.innerWidth < 1200) + { + setCodeVisibility(false); + } + else + { + setCodeVisibility(showPreview); + } + }, [showPreview, setCodeVisibility]); + + useEffect(() => + { + window.addEventListener('resize', handleResize); + handleResize(); // Call handler right away so state gets updated with initial window size + + return () => window.removeEventListener('resize', handleResize); + }, [handleResize]); +}; diff --git a/src/components/Editor/defaults/demo.ts b/src/components/Editor/defaults/demo.ts new file mode 100644 index 000000000..16e6bb660 --- /dev/null +++ b/src/components/Editor/defaults/demo.ts @@ -0,0 +1,38 @@ +import { Application, Assets, Sprite } from 'pixi.js'; + +(async () => +{ + // Create a new application + const app = new Application(); + + // Initialize the application + await app.init({ background: '#1099bb', resizeTo: window }); + + // Append the application canvas to the document body + document.body.appendChild(app.canvas); + + // Load the bunny texture + const texture = await Assets.load('https://pixijs.com/assets/bunny.png'); + + // Create a bunny Sprite + const bunny = new Sprite(texture); + + // Center the sprite's anchor point + bunny.anchor.set(0.5); + + // Move the sprite to the center of the screen + bunny.x = app.screen.width / 2; + bunny.y = app.screen.height / 2; + + app.stage.addChild(bunny); + + // Listen for animate update + app.ticker.add((time) => + { + // Just for fun, let's rotate mr rabbit a little. + // * Delta is 1 if running at 100% performance * + // * Creates frame-independent transformation * + bunny.rotation += 0.1 * time.deltaTime; + }); + console.log('time.deltaTime:', bunny.rotation); +})(); diff --git a/src/components/Editor/defaults/index.html b/src/components/Editor/defaults/index.html new file mode 100644 index 000000000..9295fc1c2 --- /dev/null +++ b/src/components/Editor/defaults/index.html @@ -0,0 +1,11 @@ + + + + PixiJS Playground + + + + + + + diff --git a/src/components/Editor/defaults/styles.css b/src/components/Editor/defaults/styles.css new file mode 100644 index 000000000..ac5bac290 --- /dev/null +++ b/src/components/Editor/defaults/styles.css @@ -0,0 +1,4 @@ +body { + margin: 0; + overflow: hidden; +} diff --git a/src/components/Editor/defaults/theme.ts b/src/components/Editor/defaults/theme.ts new file mode 100644 index 000000000..b7623ea04 --- /dev/null +++ b/src/components/Editor/defaults/theme.ts @@ -0,0 +1,37 @@ +import type { SandpackThemeProp } from '@codesandbox/sandpack-react'; + +export const dracula: SandpackThemeProp = { + colors: { + surface1: '#242426', + surface2: '#444950', + surface3: '#44475a', + clickable: '#fff', + base: '#f8f8f2', + disabled: '#6272a4', + hover: '#f8f8f2', + accent: '#e91e63', + error: '#f8f8f2', + errorSurface: '#44475a', + }, + syntax: { + plain: '#f8f8f2', + comment: { + color: '#6272a4', + fontStyle: 'italic', + }, + keyword: '#ff79c6', + tag: '#ff79c6', + punctuation: '#ff79c6', + definition: '#f8f8f2', + property: '#50fa7b', + static: '#bd93f9', + string: '#f1fa8c', + }, + font: { + // eslint-disable-next-line max-len + body: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"', + mono: '"Fira Mono", "DejaVu Sans Mono", Menlo, Consolas, "Liberation Mono", Monaco, "Lucida Console", monospace', + size: '13px', + lineHeight: '20px', + }, +}; diff --git a/src/components/Playground/PixiPlayground/MonacoEditor.tsx b/src/components/Playground/PixiPlayground/MonacoEditor.tsx index 5cd96c149..ae289bdfc 100644 --- a/src/components/Playground/PixiPlayground/MonacoEditor.tsx +++ b/src/components/Playground/PixiPlayground/MonacoEditor.tsx @@ -1,9 +1,10 @@ import { useCallback, useEffect, useRef } from 'react'; import { type SandpackState, FileTabs, SandpackStack, useActiveCode, useSandpack } from '@codesandbox/sandpack-react'; import { useColorMode } from '@docusaurus/theme-common'; -import Editor from '@monaco-editor/react'; +import Editor, { useMonaco } from '@monaco-editor/react'; import type { editor } from 'monaco-editor'; +import type { Monaco } from '@monaco-editor/react'; export type CodeChangeCallbackType = (code: string | undefined, state: SandpackState) => void; @@ -76,7 +77,7 @@ export default function MonacoEditor({ useTabs, onChange }: MonacoEditorProps) switch (extension) { case 'js': - return 'javascript'; + return 'typescript'; case 'ts': return 'typescript'; case 'html': @@ -92,6 +93,60 @@ export default function MonacoEditor({ useTabs, onChange }: MonacoEditorProps) const language = getLanguage(sandpack.activeFile); + const monaco = useMonaco(); + + function handleEditorWillMount(monaco: Monaco, version: string) + { + const urlCdn = `https://cdn.jsdelivr.net/npm/pixi.js@${version}/dist/pixi.js.d.ts`; + + fetch(urlCdn) + .then((response) => response.text()) + .then((pixiTypes) => + { + monaco.languages.typescript.typescriptDefaults.addExtraLib( + `declare module 'pixi.js' { ${pixiTypes} }`, + `file:///node_modules/pixi.js/index.d.ts`, + ); + console.log('Added pixi.js types to monaco:', pixiTypes); + monaco.languages.typescript.typescriptDefaults.addExtraLib( + `declare module '*.wgsl' + { + const shader: 'string'; + + export default shader; + } + + declare module '*.vert' + { + const shader: 'string'; + + export default shader; + } + + declare module '*.frag' + { + const shader: 'string'; + + export default shader; + }`, + ); + }) + .catch((error) => + { + console.error('Failed to fetch pixi.js types:', error); + }); + } + + useEffect(() => + { + const version = '8.6.6'; // specify the version you need + + if (monaco) + { + handleEditorWillMount(monaco, version); + } + }, [monaco]); + return ( {useTabs && } diff --git a/src/examples/v8.0.0/advanced/spinners/index.js b/src/examples/v8.0.0/advanced/spinners/index.js deleted file mode 100644 index c8188cf77..000000000 --- a/src/examples/v8.0.0/advanced/spinners/index.js +++ /dev/null @@ -1,43 +0,0 @@ -import { Application, Assets, Container, Graphics, Point, Sprite } from 'pixi.js'; -import { generateSpinner1 } from './spinner1'; -import { generateSpinner2 } from './spinner2'; -import { generateSpinner3 } from './spinner3'; -import { generateSpinner4 } from './spinner4'; -import { generateSpinner5 } from './spinner5'; - -(async () => -{ - // Create a new application - const app = new Application(); - - // Initialize the application - await app.init({ antialias: true, background: '#1099bb', resizeTo: window }); - - // Append the application canvas to the document body - document.body.appendChild(app.canvas); - - // Load the textures - await Assets.load([ - 'https://pixijs.com/assets/bg_scene_rotate.jpg', - 'https://pixijs.com/assets/bg_rotate.jpg', - 'https://pixijs.com/assets/circle.png', - ]); - - const onTick = [ - generateSpinner1(app, new Point(50, 50)), - generateSpinner2(app, new Point(160, 50)), - generateSpinner3(app, new Point(270, 50)), - generateSpinner4(app, new Point(380, 50)), - generateSpinner5(app, new Point(490, 50)), - ]; - - // Listen for animate update - app.ticker.add((time) => - { - // Call tick handling for each spinner. - onTick.forEach((cb) => - { - cb(time.deltaTime); - }); - }); -})(); diff --git a/src/examples/v8.0.0/events/hitTestingWithSpatialHash.js b/src/examples/v8.0.0/events/hitTestingWithSpatialHash.js deleted file mode 100644 index 54ac85f1d..000000000 --- a/src/examples/v8.0.0/events/hitTestingWithSpatialHash.js +++ /dev/null @@ -1,219 +0,0 @@ -import * as PIXI from 'pixi.js'; - -// This example shows how you can create your own EventBoundary to accelerate -// hit-testing using spatial hashes. This can be used to optimize relatively -// "flat" scene graphs, where a container contains so many objects that it -// covers the whole scene. - -// This special event boundary overrides the hit-testing implementation to use -// HashingContainer's own childHash to find children near the pointer -// location. -class HashingEventBoundary extends PIXI.EventBoundary -{ - constructor(...args) - { - super(...args); - // Create reusable temp rectangle for hit-testing! - this.tempRect = new PIXI.Rectangle(); - } - - hitTestRecursive(currentTarget, interactive, location, testFn, pruneFn) - { - // If currentTarget isn't a HashingContainer, then default to the - // regular hit-testing implementation provided by PixiJS. - if (!currentTarget || !currentTarget.visible || !currentTarget.childHash) - { - return super.hitTestRecursive(currentTarget, interactive, location, testFn, pruneFn); - } - - // Check if the location is outside of the entire container - if (pruneFn(currentTarget, location)) return null; - - // Time to get recursive and find the next child in the propagation - // path of the event, accelerated using the childHash. - if (currentTarget.interactiveChildren) - { - /* This is where the magic happens! */ - const tempRect = this.tempRect; - - // Store the location as a 0x0 rectangle. SpatialHash requires a - // rectangle for searching. - tempRect.x = location.x; - tempRect.y = location.y; - - // Find all the children overlapping with tempRect a.k.a location, - // and then sort them by their index in the HashingContainer's - // children array. - const children = Array.from(currentTarget.childHash.search(tempRect)).sort((a, b) => a.refIndex - b.refIndex); - - /* The following is copied from EventBoundary's code. */ - for (let i = children.length - 1; i >= 0; i--) - { - const child = children[i]; - const nestedHit = this.hitTestRecursive(child, interactive || child.interactive, location, testFn, pruneFn); - - if (nestedHit) - { - // Its a good idea to check if a child has lost its - // parent. this means it has been removed whilst looping - // so its best - if (nestedHit.length > 0 && !nestedHit[nestedHit.length - 1].parent) - { - // eslint-disable-next-line no-continue - continue; - } - - // Only add the current hit-test target to the hit-test - // chain if the chain has already started (i.e. the event - // target has been found) or if the current target is - // interactive (i.e. it becomes the event target). - if (nestedHit.length > 0 || currentTarget.interactive) - { - nestedHit.push(currentTarget); - } - - return nestedHit; - } - } - } - - /* The following is copied from EventBoundary's own implementation. */ - - // Finally, hit test this DisplayObject itself. - if (interactive && testFn(currentTarget, location)) - { - // The current hit-test target is the event's target only if it - // is interactive. Otherwise, the first interactive ancestor will - // be the event's target. - return currentTarget.interactive ? [currentTarget] : []; - } - - return null; - } -} - -// HashingContainer is a special kind of container that organizes its children -// in a spatial hash. It also sets each child's refIndex property to its index -// in the hashing container's children array. -class HashingContainer extends PIXI.Container -{ - constructor() - { - super(); - this.childHash = new PIXI.SpatialHash(); - } - - // Override updateTransform to update this.childHash! - updateTransform() - { - super.updateTransform(); - - // Reset childHash & re-add all the children. This will - // make the spatial hash re-evaluate the coverage of each child. - this.childHash.reset(); - for (let i = 0; i < this.children.length; i++) - { - const child = this.children[i]; - - this.childHash.put(child); - child.refIndex = i; - } - } -} - -// This is the actual program using HashingEventBoundary, HashingContainer. -function main() -{ - // Create app. autoStart = false so that the app doesn't render until - // something changes - this prevents redundant spatial-hash updates. - const app = new PIXI.Application({ - antialias: true, - autoStart: false, - background: '#1099bb', - }); - - document.body.appendChild(app.view); - - // Install our own EventBoundary! - app.renderer.events.rootBoundary = new HashingEventBoundary(app.stage); - - // Make the hashing container - const container = app.stage.addChild(new HashingContainer()); - // Textures to choose from for each random character - const textures = [ - PIXI.Texture.from('https://pixijs.com/assets/skully.png'), - PIXI.Texture.from('https://pixijs.com/assets/eggHead.png'), - PIXI.Texture.from('https://pixijs.com/assets/flowerTop.png'), - PIXI.Texture.from('https://pixijs.com/assets/helmlok.png'), - ]; - // Rerender scene when each texture loads - - textures.forEach((tex) => tex.baseTexture.once('loaded', () => app.render())); - - // Populate the hashing container! - function makeMonster(x, y) - { - const texture = textures[Math.floor(Math.random() * textures.length)]; - const sprite = new PIXI.Sprite(texture); - - // Randomly place the character - sprite.position.set( - x || Math.random() * (app.screen.width - 64), - y || 64 + Math.random() * (app.screen.height - 128), - ); - - // Make character smaller so we can have a bunch of 'em - sprite.scale.set(0.34); - - // Make the character interactive! - sprite.eventMode = 'static'; - - // Explode on clicks! - sprite.addEventListener('click', onMonsterClicked); - - container.addChild(sprite); - - return sprite; - } - function onMonsterClicked(e) - { - const monster = this; - const pos = monster.position; - const radius = Math.max(monster.width, monster.height) * 2; - - // Remove monster from scene once the event finishes propagating. - e.manager.dispatch.once('click', () => - { - // TODO: Fix PixiJS throwing errors since the monster is removed - // from scene graph while was under hover. - - monster.parent.removeChild(monster); - PIXI.Ticker.shared.addOnce(() => app.render()); - }); - - for (let i = 0; i < 8; i++) - { - const x = pos.x + radius * Math.cos((i * Math.PI) / 4); - const y = pos.y + radius * Math.sin((i * Math.PI) / 4); - - makeMonster(x, y); - } - } - // Make initial set of monsters - for (let i = 0; i < 100; i++) makeMonster(); - - // Add a descriptive title - const title = app.stage.addChild( - new PIXI.Text('Click on a monster and see it explode into more!', { - fontSize: 12, - }), - ); - - title.position.set(12, 12); - - // Render the stage once - app.render(); -} - -// Run our program! -main(); diff --git a/src/examples/v8.0.0/events/nestedBoundaryWithProjection.js b/src/examples/v8.0.0/events/nestedBoundaryWithProjection.js deleted file mode 100644 index c9669d05a..000000000 --- a/src/examples/v8.0.0/events/nestedBoundaryWithProjection.js +++ /dev/null @@ -1,230 +0,0 @@ -import { Application, Container, EventBoundary, Graphics, Matrix, Rectangle, Sprite, Text } from 'pixi.js'; - -// This example shows how you can setup a nested boundary to propagate events -// into a disjoint scene graph. Here, a camera is used to project an different -// world onto the canvas. - -// A projector renders it's content using projection. The transforms in -// the contents scene graph don't change if you move the camera. To achieve -// this, the content is not added as a "child" to the projector; however, this -// means events won't propagate into the content by default. -// -// To solve this, we nest our own EventBoundary, and connect it using -// addEventListener! -class Projector extends Container -{ - constructor() - { - super(); - - // The content root to be rendered by this camera. - this.content = new Container(); - - // Temporary matrix to store the original projection transform. - this.originalTransform = new Matrix(); - - // The event boundary that'll map events downstream into the content - // scene. - this.boundary = new EventBoundary(this.content); - - // Override copyMouseData to apply inverse worldTransform on - // global coords - this.boundary.copyMouseData = (from, to) => - { - // Apply default implementation first - EventBoundary.prototype.copyMouseData.call(this.boundary, from, to); - - // Then bring global coords into content's world - this.worldTransform.applyInverse(to.global, to.global); - }; - - // Propagate these events down into the content's scene graph! - ['pointerdown', 'pointerup', 'pointermove', 'pointerover', 'pointerout', 'wheel'].forEach((event) => - { - this.addEventListener(event, (e) => this.boundary.mapEvent(e)); - }); - - this.eventMode = 'static'; - } - - // Pass through cursor - get cursor() - { - return this.boundary.cursor; - } - - // eslint-disable-next-line class-methods-use-this - set cursor(value) - { - throw new Error('The camera\'s cursor is derived from its content!'); - } - - // Pass through calculateBounds - calculateBounds() - { - const contentBounds = this.content.getBounds(); - - this._bounds.addFrameMatrix( - this.worldTransform, - contentBounds.x, - contentBounds.y, - contentBounds.width, - contentBounds.height, - ); - } - - // Pass through containsPoint - containsPoint(point) - { - return !!this.boundary.hitTest(point.x, point.y); - } - - // Render content with projection - render(renderer) - { - renderer.batch.flush(); - - const projectionSystem = renderer.projection; - const renderTextureSystem = renderer.renderTexture; - - projectionSystem.transform = projectionSystem.transform || new Matrix(); - projectionSystem.transform.copyTo(this.originalTransform); - projectionSystem.transform.append(this.worldTransform); - projectionSystem.update(null, null, 1, !renderTextureSystem.current); - - this.content.render(renderer); - - renderer.batch.flush(); - - projectionSystem.transform.copyFrom(this.originalTransform); - projectionSystem.update(null, null, 1, !renderTextureSystem.current); - } - - // updateTransform also updates content's transform - updateTransform() - { - super.updateTransform(); - - this.content.enableTempParent(); - this.content.updateTransform(); - this.content.disableTempParent(null); - } -} - -(async () => -{ - // Create a new application - const app = new Application(); - - // Initialize the application - await app.init({ antialias: true, background: '#1099bb', resizeTo: window }); - - // Append the application canvas to the document body - document.body.appendChild(app.canvas); - - // The projector - const projector = app.stage.addChild(new Projector()); - - // Add coordinate axes! - projector.content.addChild( - new Graphics() - .moveTo(0, -300) - .lineTo(0, 600) - .moveTo(-100, 0) - .lineTo(700, 0) - .stroke({ color: 0, alpha: 0.2, width: 2 }), - ); - - // Construct the star Graphics - const stars = [1, 2, 3].map((i) => - new Graphics().star(0, 0, 18 / i, (100 * i) / 2).fill({ color: 0xffffff, alpha: 0.75 }), - ); - - // Place the stars - stars[0].x = 0; - stars[1].x = 200; - stars[2].x = 500; - - // Add stars to the projector - projector.content.addChild(...stars); - - // Make projection x+100, y+300 - projector.x = 100; - projector.y = 300; - projector.content.hitArea = new Rectangle(-100, -300, app.screen.width, app.screen.height); - // Make hit-area cover the whole screen so we can capture - // pointermove everywhere! - projector.hitArea = projector.content.hitArea; - projector.content.eventMode = 'static'; - - // Make stars interactive & add wheel handlers - stars.forEach((star) => - { - // Make star interactive - star.eventMode = 'static'; - - // Set initial cursor - star.cursor = 'zoom-in'; - - // Add wheel rotation feedback - star.addEventListener('wheel', (e) => - { - const scroll = Math.sign(e.deltaY) * Math.min(15, Math.abs(e.deltaY)); - - star.rotation += scroll / 100; - }); - - // Add click zoom-in/zoom-out handler - star.addEventListener('click', (e) => - { - if (star.scale.x === 1) - { - star.scale.set(1.33); - star.cursor = 'zoom-out'; - } - else - { - star.scale.set(1); - star.cursor = 'zoom-in'; - } - }); - }); - - const coordinates = new Text({ - text: 'Global: (0, 0)\nScreen: (0, 0)', - style: { - fontSize: 16, - fontFamily: 'Roboto', - fill: '#272d37', - }, - }); - - coordinates.x = 110; - coordinates.y = 550; - - app.stage.addChild(coordinates); - - projector.content.addEventListener('pointermove', (e) => - { - const global = `(${e.global.x | 0}, ${e.global.y | 0})`; - const screen = `(${e.screen.x | 0}, ${e.screen.y | 0})`; - - coordinates.text = `Global: ${global}\nScreen: ${screen}`; - }); - - const description = new Text({ - text: - 'The (0, 0) world coordinates for the content is located at the center of the first star!' - + '\n * Mouse wheel over stars to rotate them' - + '\n * Click to zoom in or out', - style: { - fontSize: 16, - fontFamily: 'Roboto', - fill: '#272d37', - }, - }); - - description.position.set(110, 12); - - app.stage.addChild(description); -})(); diff --git a/src/examples/v8.0.0/filtersAdvanced/custom.js b/src/examples/v8.0.0/filtersAdvanced/custom.js deleted file mode 100644 index 613414440..000000000 --- a/src/examples/v8.0.0/filtersAdvanced/custom.js +++ /dev/null @@ -1,58 +0,0 @@ -import { Application, Assets, Filter, Sprite } from 'js'; - -(async () => -{ - // Create a new application - const app = new Application(); - - // Initialize the application - await app.init({ resizeTo: window }); - - // Append the application canvas to the document body - document.body.appendChild(app.canvas); - - // Load the texture - const texture = await Assets.load('https://pixijs.com/assets/bg_grass.jpg'); - - // Create background image - const background = Sprite.from(texture); - - background.width = app.screen.width; - background.height = app.screen.height; - app.stage.addChild(background); - - // Stop application wait for load to finish - app.stop(); - - fetch('https://pixijs.com/assets/pixi-filters/shader.frag') - .then((res) => res.text()) - .then(onLoaded); - - let filter; - - // Handle the load completed - function onLoaded(data) - { - // Create the new filter, arguments: (vertexShader, framentSource) - filter = new Filter(null, data, { - customUniform: 0.0, - }); - - // === WARNING === - // specify uniforms in filter constructor - // or set them BEFORE first use - // filter.uniforms.customUniform = 0.0 - - // Add the filter - background.filters = [filter]; - - // Resume application update - app.start(); - } - - // Animate the filter - app.ticker.add((delta) => - { - filter.uniforms.customUniform += 0.04 * delta; - }); -})(); diff --git a/src/examples/v8.0.0/filtersAdvanced/mouseBlending.js b/src/examples/v8.0.0/filtersAdvanced/mouseBlending.js deleted file mode 100644 index 23ecfbb45..000000000 --- a/src/examples/v8.0.0/filtersAdvanced/mouseBlending.js +++ /dev/null @@ -1,72 +0,0 @@ -import { Application, Assets, Container, Filter, Point, Rectangle, Sprite } from 'pixi.js'; - -/** - * https://github.com/pixijs/pixi.js/wiki/v5-Creating-Filters - */ - -(async () => -{ - // Create a new application - const app = new Application(); - - // Initialize the application - await app.init({ resizeTo: window }); - - // Append the application canvas to the document body - document.body.appendChild(app.canvas); - - // Load the grass texture - const texture = await Assets.load('https://pixijs.com/assets/bg_grass.jpg'); - - // Create background image - const background = new Sprite(texture); - - background.width = app.screen.width; - background.height = app.screen.height; - app.stage.addChild(background); - - // NOTE: this shader wont work on old devices where mediump precision is forced in fragment shader - // because v5 default vertex shader uses `inputSize` in it. Same uniform in fragment and vertex shader - // cant have different precision :( - - const shaderFrag = ` - precision highp float; - - varying vec2 vTextureCoord; - - uniform vec2 mouse; - uniform vec4 inputSize; - uniform vec4 outputFrame; - uniform float time; - - void main() { - vec2 screenPos = vTextureCoord * inputSize.xy + outputFrame.xy; - if (length(mouse - screenPos) < 25.0) { - gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0) * 0.7; //yellow circle, alpha=0.7 - } else { - // blend with underlying image, alpha=0.5 - gl_FragColor = vec4( sin(time), (mouse.xy - outputFrame.xy) / outputFrame.zw, 1.0) * 0.5; - } - } - `; - - const container = new Container(); - - container.filterArea = new Rectangle(100, 100, app.screen.width - 200, app.screen.height - 200); - app.stage.addChild(container); - const filter = new Filter({ - resources: { - shader: shaderFrag, - mouse: new Point(), - }, - }); - - container.filters = [filter]; - - app.stage.hitArea = app.screen; - app.stage.eventMode = 'static'; - app.stage.on('pointermove', (event) => - { - filter.uniforms.mouse.copyFrom(event.global); - }); -})(); diff --git a/src/examples/v8.0.0/filtersAdvanced/shaderToyFilterRenderTexture.js b/src/examples/v8.0.0/filtersAdvanced/shaderToyFilterRenderTexture.js deleted file mode 100644 index d15b32ce3..000000000 --- a/src/examples/v8.0.0/filtersAdvanced/shaderToyFilterRenderTexture.js +++ /dev/null @@ -1,125 +0,0 @@ -import { Application, Assets, Filter, Text, WRAP_MODES } from 'js'; - -/** - * Please note that this is not the most optimal way of doing pure shader generated rendering and should be used when the - * scene is wanted as input texture. Check the mesh version of example for more performant version if you need only shader - * generated content. - **/ - -(async () => -{ - // Create a new application - const app = new Application(); - - // Initialize the application - await app.init({ background: '#1099bb', resizeTo: window }); - - // Append the application canvas to the document body - document.body.appendChild(app.canvas); - - Assets.load('https://pixijs.com/assets/perlin.jpg').then(onAssetsLoaded); - - let filter = null; - - const text = new Text('PixiJS', { fill: 0xffffff, fontSize: 80 }); - - text.anchor.set(0.5, 0.5); - text.position.set(app.renderer.screen.width / 2, app.renderer.screen.height / 2); - - app.stage.addChild(text); - - let totalTime = 0; - - // Fragment shader, in real use this would be much cleaner when loaded from a file - // or embedded into the application as data resource. - const fragment = `//Based on this: https://www.shadertoy.com/view/wtlSWX - - varying vec2 vTextureCoord; - uniform sampler2D uSampler; - uniform sampler2D noise; - uniform float time; - // Distance function. Just calculates the height (z) from x,y plane with really simple length check. - // Its not exact as there could be shorter distances. - vec2 dist(vec3 p) - { - float id = floor(p.x)+floor(p.y); - id = mod(id, 2.); - float h = texture2D(noise, vec2(p.x, p.y)*0.04).r*5.1; - float h2 = texture2D(uSampler, vTextureCoord).r; - return vec2(h+h2-p.z,id); - } - //Light calculation. - vec3 calclight(vec3 p, vec3 rd) - { - vec2 eps = vec2( 0., 0.001); - vec3 n = normalize( vec3( - dist(p+eps.yxx).x - dist(p-eps.yxx).x, - dist(p+eps.xyx).x - dist(p-eps.xyx).x, - dist(p+eps.xxy).x - dist(p-eps.xxy).x - )); - - vec3 d = vec3( max( 0., dot( -rd ,n))); - - return d; - } - - void main() - { - vec2 uv = vec2(vTextureCoord.x, 1.-vTextureCoord.y); - uv *=2.; - uv-=1.; - - vec3 cam = vec3(0.,time -2., -3.); - vec3 target = vec3(sin(time)*0.1, time+cos(time)+2., 0. ); - float fov = 2.2; - vec3 forward = normalize( target - cam); - vec3 up = normalize(cross( forward, vec3(0., 1.,0.))); - vec3 right = normalize( cross( up, forward)); - vec3 raydir = normalize(vec3( uv.x *up + uv.y * right + fov*forward)); - - //Do the raymarch - vec3 col = vec3(0.); - float t = 0.; - for( int i = 0; i < 100; i++) - { - vec3 p = t * raydir + cam; - vec2 d = dist(p); - t+=d.x*0.5;//Jump only half of the distance as height function used is not really the best for heightmaps. - if(d.x < 0.001) - { - vec3 bc = d.y < 0.5 ? vec3(1.0, .8, 0.) : - vec3(0.8,0.0, 1.0); - col = vec3( 1.) * calclight(p, raydir) * (1. - t/150.) *bc; - break; - } - if(t > 1000.) - { - break; - } - } - gl_FragColor = vec4(col, 1.); - } - `; - - function onAssetsLoaded(perlin) - { - // Add perlin noise for filter, make sure it's wrapping and does not have mipmap. - perlin.baseTexture.wrapMode = WRAP_MODES.REPEAT; - perlin.baseTexture.mipmap = false; - - // Build the filter - filter = new Filter(null, fragment, { - time: 0.0, - noise: perlin, - }); - app.stage.filterArea = app.renderer.screen; - app.stage.filters = [filter]; - - // Listen for animate update. - app.ticker.add((delta) => - { - filter.uniforms.time = totalTime; - totalTime += delta / 60; - }); - } -})(); diff --git a/src/examples/v8.0.0/graphics/fillGradient.js b/src/examples/v8.0.0/graphics/fillGradient.js deleted file mode 100644 index 51fa8a58c..000000000 --- a/src/examples/v8.0.0/graphics/fillGradient.js +++ /dev/null @@ -1,56 +0,0 @@ -import { Application, FillGradient, Graphics } from 'pixi.js'; - -(async () => -{ - // Create a new application - const app = new Application(); - - // Initialize the application - await app.init({ background: '#1099bb', resizeTo: window }); - - // Append the application canvas to the document body - document.body.appendChild(app.canvas); - - // Create a color array for the linear gradient - const colorStops = [0xffffff, 0xff0000, 0x00ff00, 0x0000ff, 0x000000]; - - // Create a fill gradient - const gradientFill = new FillGradient(0, 0, 150, 150); - - // Add the color stops to the fill gradient - colorStops.forEach((number, index) => - { - const ratio = index / colorStops.length; - - gradientFill.addColorStop(ratio, number); - }); - - // Create a fill graphic - const graphic1 = new Graphics().roundRect(0, 0, 150, 150, 50).fill(gradientFill); - - // Create a stroke graphic - const graphic2 = new Graphics().roundRect(0, 0, 150, 150, 50).stroke({ width: 20, fill: gradientFill }); - - graphic1.pivot.set(75, 75); - graphic1.x = 150; - graphic1.y = 200; - - graphic2.x = 350; - graphic2.y = 125; - - app.stage.addChild(graphic1); - app.stage.addChild(graphic2); - - let tick = 0; - - // Animate the graphics - app.ticker.add(() => - { - tick += 0.025; - graphic1.rotation += 0.01; - graphic2 - .clear() - .roundRect(0, 0, 150, 150, 50) - .stroke({ width: Math.sin(tick) * 100, fill: gradientFill }); - }); -})(); diff --git a/src/examples/v8.0.0/index.ts b/src/examples/v8.0.0/index.ts index 5c96f9e05..5ee09cb08 100644 --- a/src/examples/v8.0.0/index.ts +++ b/src/examples/v8.0.0/index.ts @@ -1,114 +1,114 @@ // Defines order of examples in documentation and playground dropdown, it's defined // separately here so it can be used in runtime code and in the md generation script import examplesData from './examplesData.json'; -import collisionDetection from '!!raw-loader!./advanced/collisionDetection.js'; -import mouseTrail from '!!raw-loader!./advanced/mouseTrail.js'; -import scratchCard from '!!raw-loader!./advanced/scratchCard.js'; -import screenShot from '!!raw-loader!./advanced/screenShot.js'; -import slots from '!!raw-loader!./advanced/slots.js'; -import spinners from '!!raw-loader!./advanced/spinners/index.js'; -import spinnersIntersect from '!!raw-loader!./advanced/spinners/intersect.js'; -import spinnerGenerator1 from '!!raw-loader!./advanced/spinners/spinner1.js'; -import spinnerGenerator2 from '!!raw-loader!./advanced/spinners/spinner2.js'; -import spinnerGenerator3 from '!!raw-loader!./advanced/spinners/spinner3.js'; -import spinnerGenerator4 from '!!raw-loader!./advanced/spinners/spinner4.js'; -import spinnerGenerator5 from '!!raw-loader!./advanced/spinners/spinner5.js'; -import starWarp from '!!raw-loader!./advanced/starWarp.js'; -import async from '!!raw-loader!./assets/async.js'; -import background from '!!raw-loader!./assets/background.js'; -import bundle from '!!raw-loader!./assets/bundle.js'; -import multiple from '!!raw-loader!./assets/multiple.js'; -import promise from '!!raw-loader!./assets/promise.js'; -import blendModes from '!!raw-loader!./basic/blendModes.js'; -import cacheAsTexture from '!!raw-loader!./basic/cacheAsTexture.js'; -import container from '!!raw-loader!./basic/container.js'; -import meshPlane from '!!raw-loader!./basic/meshPlane.js'; -import particleContainer from '!!raw-loader!./basic/particleContainer.js'; -import renderGroup from '!!raw-loader!./basic/renderGroup.js'; -import tinting from '!!raw-loader!./basic/tinting.js'; -import transparentBackground from '!!raw-loader!./basic/transparentBackground.js'; -import click from '!!raw-loader!./events/click.js'; -import customHitarea from '!!raw-loader!./events/customHitarea.js'; -import customMouseIcon from '!!raw-loader!./events/customMouseIcon.js'; -import dragging from '!!raw-loader!./events/dragging.js'; -import hitTestingWithSpatialHash from '!!raw-loader!./events/hitTestingWithSpatialHash.js'; -import interactivity from '!!raw-loader!./events/interactivity.js'; -import logger from '!!raw-loader!./events/logger.js'; -import pointerTracker from '!!raw-loader!./events/pointerTracker.js'; -import slider from '!!raw-loader!./events/slider.js'; -import customFrag from '!!raw-loader!./filtersAdvanced/custom/custom.frag'; -import customVert from '!!raw-loader!./filtersAdvanced/custom/custom.vert'; -import custom from '!!raw-loader!./filtersAdvanced/custom/index.js'; -import mouseBlending from '!!raw-loader!./filtersAdvanced/mouseBlending/index.js'; -import mouseBlendingFrag from '!!raw-loader!./filtersAdvanced/mouseBlending/mouseBlending.frag'; -import mouseBlendingVert from '!!raw-loader!./filtersAdvanced/mouseBlending/mouseBlending.vert'; -import blur from '!!raw-loader!./filtersBasic/blur.js'; -import colorMatrix from '!!raw-loader!./filtersBasic/colorMatrix.js'; -import displacementMapCrawlies from '!!raw-loader!./filtersBasic/displacementMapCrawlies.js'; -import displacementMapFlag from '!!raw-loader!./filtersBasic/displacementMapFlag.js'; -import advanced from '!!raw-loader!./graphics/advanced.js'; -import dynamic from '!!raw-loader!./graphics/dynamic.js'; -import fillGradient from '!!raw-loader!./graphics/fillGradient.js'; -import meshFromPath from '!!raw-loader!./graphics/meshFromPath.js'; -import pixelLine from '!!raw-loader!./graphics/pixelLine.js'; -import simple from '!!raw-loader!./graphics/simple.js'; -import svg from '!!raw-loader!./graphics/svg.js'; -import svgLoad from '!!raw-loader!./graphics/svgLoad.js'; -import texture from '!!raw-loader!./graphics/texture.js'; -import filter from '!!raw-loader!./masks/filter.js'; -import graphics from '!!raw-loader!./masks/graphics.js'; -import inverseMask from '!!raw-loader!./masks/inverseMask.js'; -import sprite from '!!raw-loader!./masks/sprite.js'; -import instancedGeometry from '!!raw-loader!./meshAndShaders/instancedGeometry/index.js'; -import instancedGeometryFrag from '!!raw-loader!./meshAndShaders/instancedGeometry/instancedGeometry.frag'; -import instancedGeometryVert from '!!raw-loader!./meshAndShaders/instancedGeometry/instancedGeometry.vert'; -import instancedGeometryWgsl from '!!raw-loader!./meshAndShaders/instancedGeometry/instancedGeometry.wgsl'; -import multipassMeshCombineFrag from '!!raw-loader!./meshAndShaders/multipassMesh/combine.frag'; -import multipassMeshGridFrag from '!!raw-loader!./meshAndShaders/multipassMesh/grid.frag'; -import multipassMesh from '!!raw-loader!./meshAndShaders/multipassMesh/index.js'; -import multipassMeshVert from '!!raw-loader!./meshAndShaders/multipassMesh/multipassMesh.vert'; -import multipassMeshNoiseFrag from '!!raw-loader!./meshAndShaders/multipassMesh/noise.frag'; -import multipassMeshRippleFrag from '!!raw-loader!./meshAndShaders/multipassMesh/ripple.frag'; -import multipassMeshWaveFrag from '!!raw-loader!./meshAndShaders/multipassMesh/wave.frag'; -import perspectiveMesh from '!!raw-loader!./meshAndShaders/perspectiveMesh.js'; -import shaderToyMesh from '!!raw-loader!./meshAndShaders/shaderToyMesh/index.js'; -import shaderToyMeshFrag from '!!raw-loader!./meshAndShaders/shaderToyMesh/shaderToy.frag'; -import shaderToyMeshVert from '!!raw-loader!./meshAndShaders/shaderToyMesh/shaderToy.vert'; -import sharedGeometry from '!!raw-loader!./meshAndShaders/sharedGeometry/index.js'; -import sharedGeometryFrag from '!!raw-loader!./meshAndShaders/sharedGeometry/sharedGeometry.frag'; -import sharedGeometryVert from '!!raw-loader!./meshAndShaders/sharedGeometry/sharedGeometry.vert'; -import sharedShader from '!!raw-loader!./meshAndShaders/sharedShader/index.js'; -import sharedShaderFrag from '!!raw-loader!./meshAndShaders/sharedShader/sharedShader.frag'; -import sharedShaderVert from '!!raw-loader!./meshAndShaders/sharedShader/sharedShader.vert'; -import texturedMeshAdvanced from '!!raw-loader!./meshAndShaders/texturedMeshAdvanced.js'; -import texturedMeshBasic from '!!raw-loader!./meshAndShaders/texturedMeshBasic.js'; -import triangle from '!!raw-loader!./meshAndShaders/triangle/index.js'; -import triangleFrag from '!!raw-loader!./meshAndShaders/triangle/triangle.frag'; -import triangleVert from '!!raw-loader!./meshAndShaders/triangle/triangle.vert'; -import triangleWgsl from '!!raw-loader!./meshAndShaders/triangle/triangle.wgsl'; -import triangleColor from '!!raw-loader!./meshAndShaders/triangleColor/index.js'; -import triangleColorFrag from '!!raw-loader!./meshAndShaders/triangleColor/triangleColor.frag'; -import triangleColorVert from '!!raw-loader!./meshAndShaders/triangleColor/triangleColor.vert'; -import triangleColorWgsl from '!!raw-loader!./meshAndShaders/triangleColor/triangleColor.wgsl'; -import triangleTextured from '!!raw-loader!./meshAndShaders/triangleTextured/index.js'; -import triangleTexturedFrag from '!!raw-loader!./meshAndShaders/triangleTextured/triangleTextured.frag'; -import triangleTexturedVert from '!!raw-loader!./meshAndShaders/triangleTextured/triangleTextured.vert'; -import offscreenCanvasBasic from '!!raw-loader!./offscreenCanvas/basic.js'; -import webWorker from '!!raw-loader!./offscreenCanvas/webWorker.js'; -import animatedSpriteAnimationSpeed from '!!raw-loader!./sprite/animatedSpriteAnimationSpeed.js'; -import animatedSpriteExplosion from '!!raw-loader!./sprite/animatedSpriteExplosion.js'; -import animatedSpriteJet from '!!raw-loader!./sprite/animatedSpriteJet.js'; -import spriteBasic from '!!raw-loader!./sprite/basic.js'; -import textureSwap from '!!raw-loader!./sprite/textureSwap.js'; -import tilingSprite from '!!raw-loader!./sprite/tilingSprite.js'; -import video from '!!raw-loader!./sprite/video.js'; -import bitmapText from '!!raw-loader!./text/bitmapText.js'; -import fromFont from '!!raw-loader!./text/fromFont.js'; -import pixiText from '!!raw-loader!./text/pixiText.js'; -import webFont from '!!raw-loader!./text/webFont.js'; -import renderTextureAdvanced from '!!raw-loader!./textures/renderTextureAdvanced.js'; -import renderTextureBasic from '!!raw-loader!./textures/renderTextureBasic.js'; -import textureRotate from '!!raw-loader!./textures/textureRotate.js'; +// import collisionDetection from '!!raw-loader!./advanced/collisionDetection.js'; +// import mouseTrail from '!!raw-loader!./advanced/mouseTrail.js'; +// import scratchCard from '!!raw-loader!./advanced/scratchCard.js'; +// import screenShot from '!!raw-loader!./advanced/screenShot.js'; +// import slots from '!!raw-loader!./advanced/slots.js'; +// import spinners from '!!raw-loader!./advanced/spinners/index.js'; +// import spinnersIntersect from '!!raw-loader!./advanced/spinners/intersect.js'; +// import spinnerGenerator1 from '!!raw-loader!./advanced/spinners/spinner1.js'; +// import spinnerGenerator2 from '!!raw-loader!./advanced/spinners/spinner2.js'; +// import spinnerGenerator3 from '!!raw-loader!./advanced/spinners/spinner3.js'; +// import spinnerGenerator4 from '!!raw-loader!./advanced/spinners/spinner4.js'; +// import spinnerGenerator5 from '!!raw-loader!./advanced/spinners/spinner5.js'; +// import starWarp from '!!raw-loader!./advanced/starWarp.js'; +// import async from '!!raw-loader!./assets/async.js'; +// import background from '!!raw-loader!./assets/background.js'; +// import bundle from '!!raw-loader!./assets/bundle.js'; +// import multiple from '!!raw-loader!./assets/multiple.js'; +// import promise from '!!raw-loader!./assets/promise.js'; +// import blendModes from '!!raw-loader!./basic/blendModes.js'; +// import cacheAsTexture from '!!raw-loader!./basic/cacheAsTexture.js'; +// import container from '!!raw-loader!./basic/container.js'; +// import meshPlane from '!!raw-loader!./basic/meshPlane.js'; +// import particleContainer from '!!raw-loader!./basic/particleContainer.js'; +// import renderGroup from '!!raw-loader!./basic/renderGroup.js'; +// import tinting from '!!raw-loader!./basic/tinting.js'; +// import transparentBackground from '!!raw-loader!./basic/transparentBackground.js'; +// import click from '!!raw-loader!./events/click.js'; +// import customHitarea from '!!raw-loader!./events/customHitarea.js'; +// import customMouseIcon from '!!raw-loader!./events/customMouseIcon.js'; +// import dragging from '!!raw-loader!./events/dragging.js'; +// import hitTestingWithSpatialHash from '!!raw-loader!./events/hitTestingWithSpatialHash.js'; +// import interactivity from '!!raw-loader!./events/interactivity.js'; +// import logger from '!!raw-loader!./events/logger.js'; +// import pointerTracker from '!!raw-loader!./events/pointerTracker.js'; +// import slider from '!!raw-loader!./events/slider.js'; +// import customFrag from '!!raw-loader!./filtersAdvanced/custom/custom.frag'; +// import customVert from '!!raw-loader!./filtersAdvanced/custom/custom.vert'; +// import custom from '!!raw-loader!./filtersAdvanced/custom/index.js'; +// import mouseBlending from '!!raw-loader!./filtersAdvanced/mouseBlending/index.js'; +// import mouseBlendingFrag from '!!raw-loader!./filtersAdvanced/mouseBlending/mouseBlending.frag'; +// import mouseBlendingVert from '!!raw-loader!./filtersAdvanced/mouseBlending/mouseBlending.vert'; +// import blur from '!!raw-loader!./filtersBasic/blur.js'; +// import colorMatrix from '!!raw-loader!./filtersBasic/colorMatrix.js'; +// import displacementMapCrawlies from '!!raw-loader!./filtersBasic/displacementMapCrawlies.js'; +// import displacementMapFlag from '!!raw-loader!./filtersBasic/displacementMapFlag.js'; +// import advanced from '!!raw-loader!./graphics/advanced.js'; +// import dynamic from '!!raw-loader!./graphics/dynamic.js'; +// import fillGradient from '!!raw-loader!./graphics/fillGradient.js'; +// import meshFromPath from '!!raw-loader!./graphics/meshFromPath.js'; +// import pixelLine from '!!raw-loader!./graphics/pixelLine.js'; +// import simple from '!!raw-loader!./graphics/simple.js'; +// import svg from '!!raw-loader!./graphics/svg.js'; +// import svgLoad from '!!raw-loader!./graphics/svgLoad.js'; +// import texture from '!!raw-loader!./graphics/texture.js'; +// import filter from '!!raw-loader!./masks/filter.js'; +// import graphics from '!!raw-loader!./masks/graphics.js'; +// import inverseMask from '!!raw-loader!./masks/inverseMask.js'; +// import sprite from '!!raw-loader!./masks/sprite.js'; +// import instancedGeometry from '!!raw-loader!./meshAndShaders/instancedGeometry/index.js'; +// import instancedGeometryFrag from '!!raw-loader!./meshAndShaders/instancedGeometry/instancedGeometry.frag'; +// import instancedGeometryVert from '!!raw-loader!./meshAndShaders/instancedGeometry/instancedGeometry.vert'; +// import instancedGeometryWgsl from '!!raw-loader!./meshAndShaders/instancedGeometry/instancedGeometry.wgsl'; +// import multipassMeshCombineFrag from '!!raw-loader!./meshAndShaders/multipassMesh/combine.frag'; +// import multipassMeshGridFrag from '!!raw-loader!./meshAndShaders/multipassMesh/grid.frag'; +// import multipassMesh from '!!raw-loader!./meshAndShaders/multipassMesh/index.js'; +// import multipassMeshVert from '!!raw-loader!./meshAndShaders/multipassMesh/multipassMesh.vert'; +// import multipassMeshNoiseFrag from '!!raw-loader!./meshAndShaders/multipassMesh/noise.frag'; +// import multipassMeshRippleFrag from '!!raw-loader!./meshAndShaders/multipassMesh/ripple.frag'; +// import multipassMeshWaveFrag from '!!raw-loader!./meshAndShaders/multipassMesh/wave.frag'; +// import perspectiveMesh from '!!raw-loader!./meshAndShaders/perspectiveMesh.js'; +// import shaderToyMesh from '!!raw-loader!./meshAndShaders/shaderToyMesh/index.js'; +// import shaderToyMeshFrag from '!!raw-loader!./meshAndShaders/shaderToyMesh/shaderToy.frag'; +// import shaderToyMeshVert from '!!raw-loader!./meshAndShaders/shaderToyMesh/shaderToy.vert'; +// import sharedGeometry from '!!raw-loader!./meshAndShaders/sharedGeometry/index.js'; +// import sharedGeometryFrag from '!!raw-loader!./meshAndShaders/sharedGeometry/sharedGeometry.frag'; +// import sharedGeometryVert from '!!raw-loader!./meshAndShaders/sharedGeometry/sharedGeometry.vert'; +// import sharedShader from '!!raw-loader!./meshAndShaders/sharedShader/index.js'; +// import sharedShaderFrag from '!!raw-loader!./meshAndShaders/sharedShader/sharedShader.frag'; +// import sharedShaderVert from '!!raw-loader!./meshAndShaders/sharedShader/sharedShader.vert'; +// import texturedMeshAdvanced from '!!raw-loader!./meshAndShaders/texturedMeshAdvanced.js'; +// import texturedMeshBasic from '!!raw-loader!./meshAndShaders/texturedMeshBasic.js'; +// import triangle from '!!raw-loader!./meshAndShaders/triangle/index.js'; +// import triangleFrag from '!!raw-loader!./meshAndShaders/triangle/triangle.frag'; +// import triangleVert from '!!raw-loader!./meshAndShaders/triangle/triangle.vert'; +// import triangleWgsl from '!!raw-loader!./meshAndShaders/triangle/triangle.wgsl'; +// import triangleColor from '!!raw-loader!./meshAndShaders/triangleColor/index.js'; +// import triangleColorFrag from '!!raw-loader!./meshAndShaders/triangleColor/triangleColor.frag'; +// import triangleColorVert from '!!raw-loader!./meshAndShaders/triangleColor/triangleColor.vert'; +// import triangleColorWgsl from '!!raw-loader!./meshAndShaders/triangleColor/triangleColor.wgsl'; +// import triangleTextured from '!!raw-loader!./meshAndShaders/triangleTextured/index.js'; +// import triangleTexturedFrag from '!!raw-loader!./meshAndShaders/triangleTextured/triangleTextured.frag'; +// import triangleTexturedVert from '!!raw-loader!./meshAndShaders/triangleTextured/triangleTextured.vert'; +// import offscreenCanvasBasic from '!!raw-loader!./offscreenCanvas/basic.js'; +// import webWorker from '!!raw-loader!./offscreenCanvas/webWorker.js'; +// import animatedSpriteAnimationSpeed from '!!raw-loader!./sprite/animatedSpriteAnimationSpeed.js'; +// import animatedSpriteExplosion from '!!raw-loader!./sprite/animatedSpriteExplosion.js'; +// import animatedSpriteJet from '!!raw-loader!./sprite/animatedSpriteJet.js'; +// import spriteBasic from '!!raw-loader!./sprite/basic.js'; +// import textureSwap from '!!raw-loader!./sprite/textureSwap.js'; +// import tilingSprite from '!!raw-loader!./sprite/tilingSprite.js'; +// import video from '!!raw-loader!./sprite/video.js'; +// import bitmapText from '!!raw-loader!./text/bitmapText.js'; +// import fromFont from '!!raw-loader!./text/fromFont.js'; +// import pixiText from '!!raw-loader!./text/pixiText.js'; +// import webFont from '!!raw-loader!./text/webFont.js'; +// import renderTextureAdvanced from '!!raw-loader!./textures/renderTextureAdvanced.js'; +// import renderTextureBasic from '!!raw-loader!./textures/renderTextureBasic.js'; +// import textureRotate from '!!raw-loader!./textures/textureRotate.js'; import { camelCaseToSentenceCase } from '@site/src/utils/utils'; import type { CategoryDataType, ExampleDataEntry, ExamplesDataType, ExamplesJsonType, ExamplesSourceType } from '..'; @@ -116,160 +116,160 @@ import type { Option } from '@site/src/components/Select'; const examplesSource: ExamplesSourceType = { basic: { - blendModes, - container, - particleContainer, - meshPlane, - tinting, - transparentBackground, - renderGroup, - cacheAsTexture, + // blendModes, + // container, + // particleContainer, + // meshPlane, + // tinting, + // transparentBackground, + // renderGroup, + // cacheAsTexture, }, sprite: { - animatedSpriteAnimationSpeed, - animatedSpriteExplosion, - animatedSpriteJet, - basic: spriteBasic, - textureSwap, - tilingSprite, - video, + // animatedSpriteAnimationSpeed, + // animatedSpriteExplosion, + // animatedSpriteJet, + // basic: spriteBasic, + // textureSwap, + // tilingSprite, + // video, }, text: { - bitmapText, - fromFont, - pixiText, - webFont, + // bitmapText, + // fromFont, + // pixiText, + // webFont, }, graphics: { - advanced, - dynamic, - fillGradient, - meshFromPath, - pixelLine, - simple, - svg, - svgLoad, - texture, + // advanced, + // dynamic, + // fillGradient, + // meshFromPath, + // pixelLine, + // simple, + // svg, + // svgLoad, + // texture, }, events: { - click, - customHitarea, - customMouseIcon, - dragging, - hitTestingWithSpatialHash, - interactivity, - logger, - pointerTracker, - slider, + // click, + // customHitarea, + // customMouseIcon, + // dragging, + // hitTestingWithSpatialHash, + // interactivity, + // logger, + // pointerTracker, + // slider, }, masks: { - filter, - graphics, - inverseMask, - sprite, + // filter, + // graphics, + // inverseMask, + // sprite, }, textures: { - renderTextureAdvanced, - renderTextureBasic, - textureRotate, + // renderTextureAdvanced, + // renderTextureBasic, + // textureRotate, }, assets: { - async, - background, - bundle, - multiple, - promise, + // async, + // background, + // bundle, + // multiple, + // promise, }, offscreenCanvas: { - basic: offscreenCanvasBasic, - webWorker, + // basic: offscreenCanvasBasic, + // webWorker, }, filtersBasic: { - blur, - colorMatrix, - displacementMapCrawlies, - displacementMapFlag, + // blur, + // colorMatrix, + // displacementMapCrawlies, + // displacementMapFlag, }, filtersAdvanced: { - custom: { - index: custom, - 'src/custom.vert': customVert, - 'src/custom.frag': customFrag, - }, - mouseBlending: { - index: mouseBlending, - 'src/mouseBlending.vert': mouseBlendingVert, - 'src/mouseBlending.frag': mouseBlendingFrag, - }, + // custom: { + // index: custom, + // 'src/custom.vert': customVert, + // 'src/custom.frag': customFrag, + // }, + // mouseBlending: { + // index: mouseBlending, + // 'src/mouseBlending.vert': mouseBlendingVert, + // 'src/mouseBlending.frag': mouseBlendingFrag, + // }, }, advanced: { - collisionDetection, - mouseTrail, - scratchCard, - screenShot, - slots, - spinners: { - index: spinners, - 'src/spinner1.js': spinnerGenerator1, - 'src/spinner2.js': spinnerGenerator2, - 'src/spinner3.js': spinnerGenerator3, - 'src/spinner4.js': spinnerGenerator4, - 'src/spinner5.js': spinnerGenerator5, - 'src/intersect.js': spinnersIntersect, - }, - starWarp, + // collisionDetection, + // mouseTrail, + // scratchCard, + // screenShot, + // slots, + // spinners: { + // index: spinners, + // 'src/spinner1.js': spinnerGenerator1, + // 'src/spinner2.js': spinnerGenerator2, + // 'src/spinner3.js': spinnerGenerator3, + // 'src/spinner4.js': spinnerGenerator4, + // 'src/spinner5.js': spinnerGenerator5, + // 'src/intersect.js': spinnersIntersect, + // }, + // starWarp, }, meshAndShaders: { - perspectiveMesh, - instancedGeometry: { - index: instancedGeometry, - 'src/instancedGeometry.vert': instancedGeometryVert, - 'src/instancedGeometry.frag': instancedGeometryFrag, - 'src/instancedGeometry.wgsl': instancedGeometryWgsl, - }, - multipassMesh: { - index: multipassMesh, - 'src/multipassMesh.vert': multipassMeshVert, - 'src/grid.frag': multipassMeshGridFrag, - 'src/ripple.frag': multipassMeshRippleFrag, - 'src/noise.frag': multipassMeshNoiseFrag, - 'src/wave.frag': multipassMeshWaveFrag, - 'src/combine.frag': multipassMeshCombineFrag, - }, - shaderToyMesh: { - index: shaderToyMesh, - 'src/shaderToy.vert': shaderToyMeshVert, - 'src/shaderToy.frag': shaderToyMeshFrag, - }, - sharedShader: { - index: sharedShader, - 'src/sharedShader.vert': sharedShaderVert, - 'src/sharedShader.frag': sharedShaderFrag, - }, - sharedGeometry: { - index: sharedGeometry, - 'src/sharedGeometry.vert': sharedGeometryVert, - 'src/sharedGeometry.frag': sharedGeometryFrag, - }, - texturedMeshAdvanced, - texturedMeshBasic, - triangleColor: { - index: triangleColor, - 'src/triangleColor.vert': triangleColorVert, - 'src/triangleColor.frag': triangleColorFrag, - 'src/triangleColor.wgsl': triangleColorWgsl, - }, - triangleTextured: { - index: triangleTextured, - 'src/triangleTextured.vert': triangleTexturedVert, - 'src/triangleTextured.frag': triangleTexturedFrag, - }, - triangle: { - index: triangle, - 'src/triangle.vert': triangleVert, - 'src/triangle.frag': triangleFrag, - 'src/triangle.wgsl': triangleWgsl, - }, + // perspectiveMesh, + // instancedGeometry: { + // index: instancedGeometry, + // 'src/instancedGeometry.vert': instancedGeometryVert, + // 'src/instancedGeometry.frag': instancedGeometryFrag, + // 'src/instancedGeometry.wgsl': instancedGeometryWgsl, + // }, + // multipassMesh: { + // index: multipassMesh, + // 'src/multipassMesh.vert': multipassMeshVert, + // 'src/grid.frag': multipassMeshGridFrag, + // 'src/ripple.frag': multipassMeshRippleFrag, + // 'src/noise.frag': multipassMeshNoiseFrag, + // 'src/wave.frag': multipassMeshWaveFrag, + // 'src/combine.frag': multipassMeshCombineFrag, + // }, + // shaderToyMesh: { + // index: shaderToyMesh, + // 'src/shaderToy.vert': shaderToyMeshVert, + // 'src/shaderToy.frag': shaderToyMeshFrag, + // }, + // sharedShader: { + // index: sharedShader, + // 'src/sharedShader.vert': sharedShaderVert, + // 'src/sharedShader.frag': sharedShaderFrag, + // }, + // sharedGeometry: { + // index: sharedGeometry, + // 'src/sharedGeometry.vert': sharedGeometryVert, + // 'src/sharedGeometry.frag': sharedGeometryFrag, + // }, + // texturedMeshAdvanced, + // texturedMeshBasic, + // triangleColor: { + // index: triangleColor, + // 'src/triangleColor.vert': triangleColorVert, + // 'src/triangleColor.frag': triangleColorFrag, + // 'src/triangleColor.wgsl': triangleColorWgsl, + // }, + // triangleTextured: { + // index: triangleTextured, + // 'src/triangleTextured.vert': triangleTexturedVert, + // 'src/triangleTextured.frag': triangleTexturedFrag, + // }, + // triangle: { + // index: triangle, + // 'src/triangle.vert': triangleVert, + // 'src/triangle.frag': triangleFrag, + // 'src/triangle.wgsl': triangleWgsl, + // }, }, }; diff --git a/src/examples/v8.0.0/meshAndShaders/instancedGeometry.js b/src/examples/v8.0.0/meshAndShaders/instancedGeometry.js deleted file mode 100644 index 061de9883..000000000 --- a/src/examples/v8.0.0/meshAndShaders/instancedGeometry.js +++ /dev/null @@ -1,84 +0,0 @@ -import { Application, Assets, Buffer, Geometry, Mesh, Shader, TYPES } from 'js'; - -(async () => -{ - // Create a new application - const app = new Application(); - - // Initialize the application - await app.init({ resizeTo: window }); - - // Append the application canvas to the document body - document.body.appendChild(app.canvas); - - const geometry = new Geometry().addAttribute('aVPos', [-100, 0, 100, 0, 0, -150]); - - geometry.instanced = true; - geometry.instanceCount = 5; - - const positionSize = 2; - const colorSize = 3; - const buffer = new Buffer(new Float32Array(geometry.instanceCount * (positionSize + colorSize))); - - geometry.addAttribute('aIPos', buffer, positionSize, false, TYPES.FLOAT, 4 * (positionSize + colorSize), 0, true); - geometry.addAttribute( - 'aICol', - buffer, - colorSize, - false, - TYPES.FLOAT, - 4 * (positionSize + colorSize), - 4 * positionSize, - true, - ); - - for (let i = 0; i < geometry.instanceCount; i++) - { - const instanceOffset = i * (positionSize + colorSize); - - buffer.data[instanceOffset + 0] = i * 80; - buffer.data[instanceOffset + 2] = Math.random(); - buffer.data[instanceOffset + 3] = Math.random(); - buffer.data[instanceOffset + 4] = Math.random(); - } - - const shader = Shader.from( - ` - precision mediump float; - attribute vec2 aVPos; - attribute vec2 aIPos; - attribute vec3 aICol; - - uniform mat3 translationMatrix; - uniform mat3 projectionMatrix; - - varying vec3 vCol; - - void main() { - vCol = aICol; - - gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVPos + aIPos, 1.0)).xy, 0.0, 1.0); - }`, - - `precision mediump float; - - varying vec3 vCol; - - void main() { - gl_FragColor = vec4(vCol, 1.0); - } - -`, - ); - - const triangles = new Mesh(geometry, shader); - - triangles.position.set(400, 300); - - app.stage.addChild(triangles); - - app.ticker.add(() => - { - triangles.rotation += 0.01; - }); -})(); diff --git a/src/examples/v8.0.0/meshAndShaders/mergingGeometry.js b/src/examples/v8.0.0/meshAndShaders/mergingGeometry.js deleted file mode 100644 index ec4a2a40f..000000000 --- a/src/examples/v8.0.0/meshAndShaders/mergingGeometry.js +++ /dev/null @@ -1,83 +0,0 @@ -import { Application, Assets, Geometry, Mesh, Shader } from 'js'; - -(async () => -{ - // Create a new application - const app = new Application(); - - // Initialize the application - await app.init({ resizeTo: window }); - - // Append the application canvas to the document body - document.body.appendChild(app.canvas); - - // Load the texture - const texture = await Assets.load('https://pixijs.com/assets/bg_scene_rotate.jpg'); - - const geometry = new Geometry({ - attributes: { - aVertexPosition: [-100, -100, 100, -100, 100, 100, -100, 100], - aUvs: [0, 0, 1, 0, 1, 1, 0, 1], - }, - indexBuffer: [0, 1, 2, 0, 2, 3], - }); - - const geometry2 = new Geometry({ - attributes: { - aVertexPosition: [-100 + 100, -100, 100 + 100, -100, 100 + 100, 100], - aUvs: [0, 0, 1, 0, 1, 1], - }, - indexBuffer: [0, 1, 2], - }); - - const geometry3 = Geometry.merge([geometry, geometry2]); - - const shader = Shader.from( - ` - - precision mediump float; - - attribute vec2 aVertexPosition; - attribute vec2 aUvs; - - uniform mat3 translationMatrix; - uniform mat3 projectionMatrix; - - varying vec2 vUvs; - - void main() { - - vUvs = aUvs; - gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); - - }`, - - `precision mediump float; - - varying vec2 vUvs; - - uniform sampler2D uSampler2; - - void main() { - - gl_FragColor = texture2D(uSampler2, vUvs ); - } - -`, - { - uSampler2: texture, - }, - ); - - const quad = new Mesh(geometry3, shader); - - quad.position.set(400, 300); - quad.scale.set(2); - - app.stage.addChild(quad); - - app.ticker.add((delta) => - { - quad.rotation += 0.01; - }); -})(); diff --git a/src/examples/v8.0.0/meshAndShaders/multiPassShaderGeneratedMesh.js b/src/examples/v8.0.0/meshAndShaders/multiPassShaderGeneratedMesh.js deleted file mode 100644 index 891ea997e..000000000 --- a/src/examples/v8.0.0/meshAndShaders/multiPassShaderGeneratedMesh.js +++ /dev/null @@ -1,243 +0,0 @@ -import { Application, Assets, Container, Geometry, Mesh, RenderTexture, Shader, Texture } from 'js'; - -(async () => -{ - // Create a new application - const app = new Application(); - - // Initialize the application - await app.init({ height: 640, resizeTo: window }); - - // Append the application canvas to the document body - document.body.appendChild(app.canvas); - - // Build geometry. - const geometry = new Geometry() - .addAttribute( - 'aVertexPosition', // the attribute name - [ - 0, - 0, // x, y - 200, - 0, // x, y - 200, - 200, - 0, - 200, - ], // x, y - 2, - ) // the size of the attribute - .addAttribute( - 'aUvs', // the attribute name - [ - 0, - 0, // u, v - 1, - 0, // u, v - 1, - 1, - 0, - 1, - ], // u, v - 2, - ) // the size of the attribute - .addIndex([0, 1, 2, 0, 2, 3]); - - // Vertex shader. Use same shader for all passes. - const vertexSrc = ` - -precision mediump float; - -attribute vec2 aVertexPosition; -attribute vec2 aUvs; - -uniform mat3 translationMatrix; -uniform mat3 projectionMatrix; - -varying vec2 vUvs; - -void main() { - - vUvs = aUvs; - gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); - -}`; - - // Load a perlinnoise texture for one of the shaders. - const perlinTexture = Texture.from('https://pixijs.com/assets/perlin.jpg'); - - // First pass, generates a grid. - const fragmentGridSrc = ` -precision mediump float; -varying vec2 vUvs; -uniform float zoom; - -void main() -{ -//Generate a simple grid. -//Offset uv so that center is 0,0 and edges are -1,1 -vec2 uv = (vUvs-vec2(0.5))*2.0; -vec2 gUv = floor(uv*zoom); -vec4 color1 = vec4(0.8, 0.8, 0.8, 1.0); -vec4 color2 = vec4(0.4, 0.4, 0.4, 1.0); -vec4 outColor = mod(gUv.x + gUv.y, 2.) < 0.5 ? color1 : color2; -gl_FragColor = outColor; - -}`; - - const gridUniforms = { - zoom: 10, - }; - const gridShader = Shader.from(vertexSrc, fragmentGridSrc, gridUniforms); - // Sharing textures and meshes is possible. - // But for simplicity each pass has its own output texture and mesh in this example. - const gridTexture = RenderTexture.create({ width: 200, height: 200 }); - const gridQuad = new Mesh(geometry, gridShader); - const gridContainer = new Container(); - - gridContainer.addChild(gridQuad); - - // Second pass. Takes grid as input and makes it ripple. - const fragmentRippleSrc = ` -precision mediump float; -varying vec2 vUvs; -uniform float amount; -uniform float phase; -uniform sampler2D texIn; - -void main() -{ -//Generate a simple grid. -vec2 uv = vUvs; -//Calculate distance from center -float distance = length( uv - vec2(0.5)); -vec4 color = texture2D(texIn, uv); -color.rgb *= sin(distance*25.0+phase) * amount+1.; -gl_FragColor = color; -}`; - const rippleUniforms = { - amount: 0.5, - phase: 0, - texIn: gridTexture, - }; - const rippleShader = Shader.from(vertexSrc, fragmentRippleSrc, rippleUniforms); - const rippleTexture = RenderTexture.create({ width: 200, height: 200 }); - const rippleQuad = new Mesh(geometry, rippleShader); - const rippleContainer = new Container(); - - rippleContainer.addChild(rippleQuad); - - // Second effect. Generates a filtered noise. - const fragmentNoiseSrc = ` -precision mediump float; -varying vec2 vUvs; -uniform float limit; -uniform sampler2D noise; - -void main() -{ -float color = texture2D(noise, vUvs).r; -color = step(limit, color); -gl_FragColor = vec4(color); -}`; - const noiseUniforms = { - limit: 0.5, - noise: perlinTexture, - }; - const noiseShader = Shader.from(vertexSrc, fragmentNoiseSrc, noiseUniforms); - const noiseTexture = RenderTexture.create({ width: 200, height: 200 }); - const noiseQuad = new Mesh(geometry, noiseShader); - const noiseContainer = new Container(); - - noiseContainer.addChild(noiseQuad); - - // Third effect - const fragmentWaveSrc = ` -precision mediump float; -varying vec2 vUvs; -uniform float amplitude; -uniform float time; - -void main() -{ -//Offset uv so that center is 0,0 and edges are -1,1 -vec2 uv = (vUvs-vec2(0.5))*2.0; - -vec3 outColor = vec3(0.); - -//Simple wavefunctions inversed and with small offsets. -outColor += 5./length(uv.y*200. - 50.0*sin( uv.x*0.25+ time*0.25)*amplitude); -outColor += 4./length(uv.y*300. - 100.0*sin(uv.x*0.5+time*0.5)*amplitude*1.2); -outColor += 3./length(uv.y*400. - 150.0*sin(uv.x*0.75+time*0.75)*amplitude*1.4); -outColor += 2./length(uv.y*500. - 200.0*sin(uv.x+time)*amplitude*1.6); - -gl_FragColor = vec4(outColor,1.0); -}`; - const waveUniforms = { - amplitude: 0.75, - time: 0, - }; - const waveShader = Shader.from(vertexSrc, fragmentWaveSrc, waveUniforms); - const waveTexture = RenderTexture.create({ width: 200, height: 200 }); - const waveQuad = new Mesh(geometry, waveShader); - const waveContainer = new Container(); - - waveContainer.addChild(waveQuad); - - // Final combination pass - const fragmentCombineSrc = ` -precision mediump float; -varying vec2 vUvs; - -uniform sampler2D texRipple; -uniform sampler2D texNoise; -uniform sampler2D texWave; - -void main() -{ -//Read color from all -vec4 ripple = texture2D(texRipple, vUvs); -vec4 noise = texture2D(texNoise, vUvs); -vec4 wave = texture2D(texWave, vUvs); - -gl_FragColor = mix(ripple, wave,noise.r); -}`; - const combineUniforms = { - texRipple: rippleTexture, - texNoise: noiseTexture, - texWave: waveTexture, - }; - const combineShader = Shader.from(vertexSrc, fragmentCombineSrc, combineUniforms); - const combineQuad = new Mesh(geometry, combineShader); - - gridContainer.position.set(10, 10); - rippleContainer.position.set(220, 10); - noiseContainer.position.set(10, 220); - waveContainer.position.set(10, 430); - combineQuad.position.set(430, 220); - - // Add all phases to stage so all the phases can be seen separately. - app.stage.addChild(gridContainer); - app.stage.addChild(rippleContainer); - app.stage.addChild(noiseContainer); - app.stage.addChild(waveContainer); - app.stage.addChild(combineQuad); - - // start the animation.. - let time = 0; - - app.ticker.add(() => - { - time += 1 / 60; - // gridQuad.shader.uniforms.zoom = Math.sin(time)*5+10; - rippleQuad.shader.uniforms.phase = -time; - waveQuad.shader.uniforms.time = time; - noiseQuad.shader.uniforms.limit = Math.sin(time * 0.5) * 0.35 + 0.5; - - // Render the passes to get textures. - app.renderer.render(gridQuad, { renderTexture: gridTexture }); - app.renderer.render(rippleQuad, { renderTexture: rippleTexture }); - app.renderer.render(noiseQuad, { renderTexture: noiseTexture }); - app.renderer.render(waveQuad, { renderTexture: waveTexture }); - }); -})(); diff --git a/src/examples/v8.0.0/meshAndShaders/shaderToyMesh.js b/src/examples/v8.0.0/meshAndShaders/shaderToyMesh.js deleted file mode 100644 index 485bdfcad..000000000 --- a/src/examples/v8.0.0/meshAndShaders/shaderToyMesh.js +++ /dev/null @@ -1,166 +0,0 @@ -import { Application, Assets, Geometry, Mesh, Shader, WRAP_MODES } from 'js'; - -(async () => -{ - // Create a new application - const app = new Application(); - - // Initialize the application - await app.init({ resizeTo: window }); - - // Append the application canvas to the document body - document.body.appendChild(app.canvas); - - // Load the texture - const texture = await Assets.load('https://pixijs.com/assets/perlin.jpg'); - - // Build geometry. - const geometry = new Geometry() - .addAttribute( - 'aVertexPosition', // the attribute name - [ - -100, - -100, // x, y - 100, - -100, // x, y - 100, - 100, - -100, - 100, - ], // x, y - 2, - ) // the size of the attribute - .addAttribute( - 'aUvs', // the attribute name - [ - 0, - 0, // u, v - 1, - 0, // u, v - 1, - 1, - 0, - 1, - ], // u, v - 2, - ) // the size of the attribute - .addIndex([0, 1, 2, 0, 2, 3]); - - const vertexSrc = ` - -precision mediump float; - -attribute vec2 aVertexPosition; -attribute vec2 aUvs; - -uniform mat3 translationMatrix; -uniform mat3 projectionMatrix; - -varying vec2 vUvs; - -void main() { - - vUvs = aUvs; - gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); - -}`; - - const fragmentSrc = ` -//Based on this: https://www.shadertoy.com/view/wtlSWX -precision mediump float; - -varying vec2 vUvs; - -uniform sampler2D noise; -uniform float time; - -// Distance function. Just calculates the height (z) from x,y plane with really simple length check. -// Its not exact as there could be shorter distances. -vec2 dist(vec3 p) -{ -float id = floor(p.x)+floor(p.y); -id = mod(id, 2.); -float h = texture2D(noise, vec2(p.x, p.y)*0.04).r*5.1; -return vec2(h-p.z,id); -} - -//Light calculation. -vec3 calclight(vec3 p, vec3 rd) -{ -vec2 eps = vec2( 0., 0.001); -vec3 n = normalize( vec3( -dist(p+eps.yxx).x - dist(p-eps.yxx).x, -dist(p+eps.xyx).x - dist(p-eps.xyx).x, -dist(p+eps.xxy).x - dist(p-eps.xxy).x -)); - -vec3 d = vec3( max( 0., dot( -rd ,n))); - -return d; -} - -void main() -{ -vec2 uv = vec2(vUvs.x,1.-vUvs.y); -uv *=2.; -uv-=1.; - -vec3 cam = vec3(0.,time -2., -3.); -vec3 target = vec3(sin(time)*0.1, time+cos(time)+2., 0. ); -float fov = 2.2; -vec3 forward = normalize( target - cam); -vec3 up = normalize(cross( forward, vec3(0., 1.,0.))); -vec3 right = normalize( cross( up, forward)); -vec3 raydir = normalize(vec3( uv.x *up + uv.y * right + fov*forward)); - -//Do the raymarch -vec3 col = vec3(0.); -float t = 0.; -for( int i = 0; i < 100; i++) -{ -vec3 p = t * raydir + cam; -vec2 d = dist(p); -t+=d.x*0.5;//Jump only half of the distance as height function used is not really the best for heightmaps. -if(d.x < 0.001) -{ - vec3 bc = d.y < 0.5 ? vec3(1.0, .8, 0.) : - vec3(0.8,0.0, 1.0); - col = vec3( 1.) * calclight(p, raydir) * (1. - t/150.) *bc; - break; -} -if(t > 1000.) -{ - break; -} -} -gl_FragColor = vec4(col, 1.); -}`; - - const uniforms = { - noise: texture, - time: 0, - }; - // Make sure repeat wrap is used and no mipmapping. - - uniforms.noise.baseTexture.wrapMode = WRAP_MODES.REPEAT; - uniforms.noise.baseTexture.mipmap = false; - - // Build the shader and the quad. - const shader = Shader.from(vertexSrc, fragmentSrc, uniforms); - const quad = new Mesh(geometry, shader); - - quad.position.set(400, 300); - quad.scale.set(2); - - app.stage.addChild(quad); - - // start the animation.. - let time = 0; - - app.ticker.add(() => - { - time += 1 / 60; - quad.shader.uniforms.time = time; - quad.scale.set(Number(Math.cos(time)) + 2, Number(Math.sin(time * 0.7)) + 2); - }); -})(); diff --git a/src/examples/v8.0.0/meshAndShaders/sharedShader.js b/src/examples/v8.0.0/meshAndShaders/sharedShader.js deleted file mode 100644 index 2416b6524..000000000 --- a/src/examples/v8.0.0/meshAndShaders/sharedShader.js +++ /dev/null @@ -1,117 +0,0 @@ -import { Application, Assets, Geometry, Mesh, Shader } from 'js'; - -(async () => -{ - // Create a new application - const app = new Application(); - - // Initialize the application - await app.init({ resizeTo: window }); - - // Append the application canvas to the document body - document.body.appendChild(app.canvas); - - // Load the texture - const texture = await Assets.load('https://pixijs.com/assets/bg_scene_rotate.jpg'); - - const geometry = new Geometry({ - attributes: { - aVertexPosition: [-100, -100, 100, -100, 100, 100], - aUvs: [0, 0, 1, 0, 1, 1], - }, - }); - - const shader = Shader.from( - ` - - precision mediump float; - - attribute vec2 aVertexPosition; - attribute vec2 aUvs; - - uniform mat3 translationMatrix; - uniform mat3 projectionMatrix; - - varying vec2 vUvs; - - void main() { - - vUvs = aUvs; - gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); - - }`, - - `precision mediump float; - - varying vec2 vUvs; - - uniform sampler2D uSampler2; - - void main() { - - gl_FragColor = texture2D(uSampler2, vUvs); - } - -`, - { - uSampler2: texture, - }, - ); - - const shader2 = Shader.from( - ` - - precision mediump float; - - attribute vec2 aVertexPosition; - attribute vec2 aUvs; - - uniform mat3 translationMatrix; - uniform mat3 projectionMatrix; - - varying vec2 vUvs; - - void main() { - - vUvs = aUvs; - gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); - - }`, - - `precision mediump float; - - varying vec2 vUvs; - - uniform sampler2D uSampler2; - - void main() { - - gl_FragColor = texture2D(uSampler2, vUvs); - gl_FragColor.r += (abs(sin(gl_FragCoord.x * 0.06)) * 0.5) * 2.; - gl_FragColor.g += (abs(cos(gl_FragCoord.y * 0.06)) * 0.5) * 2.; - } - -`, - { - uSampler2: texture, - }, - ); - - const triangle = new Mesh(geometry, shader); - - const triangle2 = new Mesh(geometry, shader2); - - triangle.position.set(400, 300); - triangle.scale.set(2); - - triangle2.position.set(500, 400); - triangle2.scale.set(3); - - app.stage.addChild(triangle2, triangle); - - app.ticker.add((delta) => - { - triangle.rotation += 0.01; - triangle2.rotation -= 0.005; - }); -})(); diff --git a/src/examples/v8.0.0/meshAndShaders/sharingGeometry.js b/src/examples/v8.0.0/meshAndShaders/sharingGeometry.js deleted file mode 100644 index 3bc7d28d5..000000000 --- a/src/examples/v8.0.0/meshAndShaders/sharingGeometry.js +++ /dev/null @@ -1,98 +0,0 @@ -import { Application, Assets, Geometry, Mesh, Program, Shader, Texture } from 'js'; - -(async () => -{ - // Create a new application - const app = new Application(); - - // Initialize the application - await app.init({ resizeTo: window }); - - // Append the application canvas to the document body - document.body.appendChild(app.canvas); - - // Load the textures - await Assets.load([ - 'https://pixijs.com/assets/bg_scene_rotate.jpg', - 'https://pixijs.com/assets/bg_rotate.jpg', - 'https://pixijs.com/assets/bg_displacement.jpg', - ]); - - const geometry = new Geometry({ - attributes: { - aVertexPosition: [-100, -100, 100, -100, 100, 100], - aUvs: [0, 0, 1, 0, 1, 1], - }, - }); - - const program = Program.from( - ` - precision mediump float; - - attribute vec2 aVertexPosition; - attribute vec2 aUvs; - - uniform mat3 translationMatrix; - uniform mat3 projectionMatrix; - - varying vec2 vUvs; - - void main() { - - vUvs = aUvs; - gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); - - }`, - - `precision mediump float; - - varying vec2 vUvs; - - uniform sampler2D uSamplerTexture; - - void main() { - - gl_FragColor = texture2D(uSamplerTexture, vUvs); - } - -`, - ); - - const triangle = new Mesh( - geometry, - new Shader(program, { - uSamplerTexture: Texture.from('https://pixijs.com/assets/bg_scene_rotate.jpg'), - }), - ); - - const triangle2 = new Mesh( - geometry, - new Shader(program, { - uSamplerTexture: Texture.from('https://pixijs.com/assets/bg_rotate.jpg'), - }), - ); - - const triangle3 = new Mesh( - geometry, - new Shader(program, { - uSamplerTexture: Texture.from('https://pixijs.com/assets/bg_displacement.jpg'), - }), - ); - - triangle.position.set(400, 300); - triangle.scale.set(2); - - triangle2.position.set(200, 100); - - triangle3.position.set(500, 400); - triangle3.scale.set(3); - - app.stage.addChild(triangle3, triangle2, triangle); - - app.ticker.add((delta) => - { - triangle.rotation += 0.01; - triangle2.rotation -= 0.01; - triangle3.rotation -= 0.005; - }); -})(); diff --git a/src/examples/v8.0.0/meshAndShaders/triangle.js b/src/examples/v8.0.0/meshAndShaders/triangle.js deleted file mode 100644 index 244f4d92d..000000000 --- a/src/examples/v8.0.0/meshAndShaders/triangle.js +++ /dev/null @@ -1,47 +0,0 @@ -import { Application, Geometry, Mesh, Shader } from 'pixi.js'; - -(async () => -{ - // Create a new application - const app = new Application(); - - // Initialize the application - await app.init({ resizeTo: window }); - - // Append the application canvas to the document body - document.body.appendChild(app.canvas); - - const geometry = new Geometry({ attribute: { aVertexPosition: [-100, -50, 100, -50, 0, 100] } }); - - const shader = Shader.from( - ` - precision mediump float; - attribute vec2 aVertexPosition; - - uniform mat3 translationMatrix; - uniform mat3 projectionMatrix; - - void main() { - gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); - }`, - - `precision mediump float; - - void main() { - gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); - } - - `, - ); - - const triangle = new Mesh(geometry, shader); - - triangle.position.set(400, 300); - - app.stage.addChild(triangle); - - app.ticker.add((delta) => - { - triangle.rotation += 0.01; - }); -})(); diff --git a/src/examples/v8.0.0/meshAndShaders/triangleColor.js b/src/examples/v8.0.0/meshAndShaders/triangleColor.js deleted file mode 100644 index 972e3e6eb..000000000 --- a/src/examples/v8.0.0/meshAndShaders/triangleColor.js +++ /dev/null @@ -1,60 +0,0 @@ -import { Application, Geometry, Mesh, Shader } from 'pixi.js'; - -(async () => -{ - // Create a new application - const app = new Application(); - - // Initialize the application - await app.init({ resizeTo: window }); - - // Append the application canvas to the document body - document.body.appendChild(app.canvas); - - const geometry = new Geometry({ - attributes: { - aVertexPosition: [-100, -50, 100, -50, 0, 100], - aColor: [1, 0, 0, 0, 1, 0, 0, 0, 1], - }, - }); - - const shader = Shader.from( - ` - precision mediump float; - attribute vec2 aVertexPosition; - attribute vec3 aColor; - - uniform mat3 translationMatrix; - uniform mat3 projectionMatrix; - - varying vec3 vColor; - - void main() { - - vColor = aColor; - gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); - - }`, - `precision mediump float; - - varying vec3 vColor; - - void main() { - gl_FragColor = vec4(vColor, 1.0); - } - - `, - ); - - const triangle = new Mesh(geometry, shader); - - triangle.position.set(400, 300); - triangle.scale.set(2); - - app.stage.addChild(triangle); - - app.ticker.add(() => - { - triangle.rotation += 0.01; - }); -})(); diff --git a/src/examples/v8.0.0/meshAndShaders/triangleTextured.js b/src/examples/v8.0.0/meshAndShaders/triangleTextured.js deleted file mode 100644 index 980ef1014..000000000 --- a/src/examples/v8.0.0/meshAndShaders/triangleTextured.js +++ /dev/null @@ -1,76 +0,0 @@ -import { Application, Assets, Geometry, Mesh, Shader, Texture } from 'pixi.js'; - -(async () => -{ - // Create a new application - const app = new Application(); - - // Initialize the application - await app.init({ resizeTo: window }); - - // Append the application canvas to the document body - document.body.appendChild(app.canvas); - - // Load the texture - const texture = await Assets.load('https://pixijs.com/assets/bg_scene_rotate.jpg'); - - const geometry = new Geometry({ - attributes: { - aVertexPosition: [-100, -50, 100, -50, 0, 100], - aColor: [1, 0, 0, 0, 1, 0, 0, 0, 1], - aUvs: [0, 0, 1, 0, 1, 1], - }, - }); - - const vertexSrc = ` - - precision mediump float; - - attribute vec2 aVertexPosition; - attribute vec3 aColor; - attribute vec2 aUvs; - - uniform mat3 translationMatrix; - uniform mat3 projectionMatrix; - - varying vec2 vUvs; - varying vec3 vColor; - - void main() { - - vUvs = aUvs; - vColor = aColor; - gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); - - }`; - - const fragmentSrc = ` - - precision mediump float; - - varying vec3 vColor; - varying vec2 vUvs; - - uniform sampler2D uSampler2; - - void main() { - - gl_FragColor = texture2D(uSampler2, vUvs) * vec4(vColor, 1.0); - }`; - - const uniforms = { uSampler2: texture }; - - const shader = Shader.from(vertexSrc, fragmentSrc, uniforms); - - const triangle = new Mesh(geometry, shader); - - triangle.position.set(400, 300); - triangle.scale.set(2); - - app.stage.addChild(triangle); - - app.ticker.add(() => - { - triangle.rotation += 0.01; - }); -})(); diff --git a/src/examples/v8.0.0/meshAndShaders/uniforms.js b/src/examples/v8.0.0/meshAndShaders/uniforms.js deleted file mode 100644 index a50050865..000000000 --- a/src/examples/v8.0.0/meshAndShaders/uniforms.js +++ /dev/null @@ -1,78 +0,0 @@ -import { Application, Assets, Geometry, Mesh, Shader } from 'js'; - -(async () => -{ - // Create a new application - const app = new Application(); - - // Initialize the application - await app.init({ resizeTo: window }); - - // Append the application canvas to the document body - document.body.appendChild(app.canvas); - - // Load the texture - const texture = await Assets.load('https://pixijs.com/assets/bg_scene_rotate.jpg'); - - const geometry = new Geometry({ - attributes: { - aVertexPosition: [-100, -100, 100, -100, 100, 100, -100, 100], - aUvs: [0, 0, 1, 0, 1, 1, 0, 1], - indexBuffer: [0, 1, 2, 0, 2, 3], - }, - }); - - const vertexSrc = ` - - precision mediump float; - - attribute vec2 aVertexPosition; - attribute vec2 aUvs; - - uniform mat3 translationMatrix; - uniform mat3 projectionMatrix; - - varying vec2 vUvs; - - void main() { - - vUvs = aUvs; - gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); - - }`; - - const fragmentSrc = ` - - precision mediump float; - - varying vec2 vUvs; - - uniform sampler2D uSampler2; - uniform float time; - - void main() { - - gl_FragColor = texture2D(uSampler2, vUvs + sin( (time + (vUvs.x) * 14.) ) * 0.1 ); - }`; - - const uniforms = { - uSampler2: texture, - time: 0, - }; - - const shader = Shader.from(vertexSrc, fragmentSrc, uniforms); - - const quad = new Mesh(geometry, shader); - - quad.position.set(400, 300); - quad.scale.set(2); - - app.stage.addChild(quad); - - // Start the animation.. - app.ticker.add((delta) => - { - quad.rotation += 0.01; - quad.shader.uniforms.time += 0.1; - }); -})(); diff --git a/src/examples/v8.0.0/offscreenCanvas/webWorker.js b/src/examples/v8.0.0/offscreenCanvas/webWorker.js deleted file mode 100644 index 44f0b99e6..000000000 --- a/src/examples/v8.0.0/offscreenCanvas/webWorker.js +++ /dev/null @@ -1,84 +0,0 @@ -import * as PIXI from '@pixi/webworker'; - -// This example is the based on basic/container, but running in Web Worker. - -function workerSource(self) -{ - self.onmessage = async ({ data: { baseUrl, pixiWebWorkerUrl, options } }) => - { - self.importScripts(new URL(pixiWebWorkerUrl, baseUrl)); - - const app = new PIXI.Application(options); - - document.body.appendChild(app.view); - - const container = new PIXI.Container(); - - app.stage.addChild(container); - - // Create a new texture - const textureUrl = new URL('https://pixijs.com/assets/bunny.png', baseUrl).toString(); - const texture = PIXI.Texture.from(textureUrl); - - // Create a 5x5 grid of bunnies - for (let i = 0; i < 25; i++) - { - const bunny = new PIXI.Sprite(texture); - - bunny.anchor.set(0.5); - bunny.x = (i % 5) * 40; - bunny.y = Math.floor(i / 5) * 40; - container.addChild(bunny); - } - - // Move container to the center - container.x = app.screen.width / 2; - container.y = app.screen.height / 2; - - // Center bunny sprite in local container coordinates - container.pivot.x = container.width / 2; - container.pivot.y = container.height / 2; - - // Listen for animate update - app.ticker.add((delta) => - { - // rotate the container! - // use delta to create frame-independent transform - container.rotation -= 0.01 * delta; - }); - }; -} - -const blob = new Blob(['(', workerSource, ')(self);'], { type: 'application/javascript' }); - -const url = URL.createObjectURL(blob); -const worker = new Worker(url); - -URL.revokeObjectURL(url); - -const width = 800; -const height = 600; -const resolution = window.devicePixelRatio; -const canvas = document.createElement('canvas'); - -canvas.style.width = `${width}px`; -canvas.style.height = `${height}px`; -const view = canvas.transferControlToOffscreen(); - -const baseUrl = window.location.href; -const pixiWebWorkerUrl = window.PIXI_WEBWORKER_URL; - -worker.postMessage( - { - baseUrl, - pixiWebWorkerUrl, - options: { - width, - height, - resolution, - view, - background: 0x1099bb, - }, - }, - [view], -); diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json index 5349501bb..03c78825e 100644 --- a/tsconfig.eslint.json +++ b/tsconfig.eslint.json @@ -1,5 +1,5 @@ { "extends": "./tsconfig.json", "files": [".eslintrc.js", "babel.config.js", "docusaurus.config.js", "sidebars.js"], - "include": ["scripts/**/*", "src/**/*"] + "include": ["scripts/**/*", "src/**/*", "docs/**/*"], } From fe65a73e27386ab7ce2aa00bd96ee6cbf831cb6b Mon Sep 17 00:00:00 2001 From: Zyie <24736175+Zyie@users.noreply.github.com> Date: Tue, 24 Dec 2024 16:27:23 +0000 Subject: [PATCH 2/3] wip --- blog/2024-11-29-pixi-v8.6.0.md | 18 ++- docs/examples/index.md | 12 +- .../guides/components/graphics-pixel-line.mdx | 3 +- docs/playground/index.md | 2 +- package.json | 2 +- src/components/Editor/Editor.tsx | 16 ++- src/components/Editor/EmbeddedEditor.tsx | 2 +- src/components/Editor/Monaco/MonacoView.tsx | 12 +- src/components/Editor/PlaygroundEditor.tsx | 10 ++ src/components/Editor/Sandpack/Layout.tsx | 13 +- .../PixiPlayground/MonacoEditor.tsx | 59 +-------- .../PixiPlayground/useEditorCode.ts | 121 +++--------------- .../PixiPlayground/usePlaygroundURLState.ts | 23 +--- src/components/Playground/index.module.scss | 14 +- src/components/Playground/index.tsx | 55 ++------ src/examples/v8.0.0/container.js | 47 +++++++ src/theme/CodeBlock/index.tsx | 21 +-- 17 files changed, 148 insertions(+), 282 deletions(-) create mode 100644 src/components/Editor/PlaygroundEditor.tsx create mode 100644 src/examples/v8.0.0/container.js diff --git a/blog/2024-11-29-pixi-v8.6.0.md b/blog/2024-11-29-pixi-v8.6.0.md index 2b490e2fd..5b99fa58d 100644 --- a/blog/2024-11-29-pixi-v8.6.0.md +++ b/blog/2024-11-29-pixi-v8.6.0.md @@ -7,8 +7,12 @@ tags: [PixiJS, Updates, Improvements] hide_table_of_contents: true keywords: ['PixiJS', 'Updates', 'Improvements', 'QoL'] --- -import Example from '@site/src/components/Example/index'; -import version from '@site/docs/pixi-version.json'; +import { EmbeddedEditor } from "@site/src/components/Editor/EmbeddedEditor"; +import CacheAsTextureFile from '!!raw-loader!../docs/examples/basic/cache-as-texture'; +import PixelLineFile from '!!raw-loader!../docs/examples/graphics/pixel-line'; +import ParticleContainerFile from '!!raw-loader!../docs/examples/basic/particle-container'; +import InverseMaskFile from '!!raw-loader!../docs/examples/masks/inverse-mask'; +import PerspectiveMeshFile from '!!raw-loader!../docs/examples/mesh-and-shaders/perspective-mesh'; Thank you to everyone who participated in our survey! One thing came through loud and clear: **better documentation is a top priority for the PixiJS community**. We’ve taken your feedback to heart, and work is already underway to make significant improvements. @@ -55,13 +59,13 @@ We will be bringing out more detailed guides/examples on all of these features a :::info[Guide] We have a full guide on this feature [here](/8.x/guides/advanced/cache-as-texture). ::: - + - **pixelLine**: The `pixelLine` property is a neat feature of the PixiJS Graphics API that allows you to create lines that remain 1 pixel thick, regardless of scaling or zoom level. This feature is especially useful for achieving crisp, pixel-perfect visuals, particularly in retro-style or grid-based games, technical drawing, or UI rendering. :::info[Guide] We have a full guide on this feature [here](/8.x/guides/components/graphics-pixel-line). ::: - + - **New Global Methods**: We have added three new functions to Container to make it easier to work with global transforms / tints / alphas. @@ -99,12 +103,12 @@ We will be bringing out more detailed guides/examples on all of these features a :::info[Blog] We have a blog post on this feature [here](/blog/particlecontainer-v8). ::: - + - **Inverse Masking**: You can now use `element.setMask({ mask, inverse: true })` to create an inverse mask effect. This is great for creating cut-out effects or other creative visuals. - + ### v8.4.0 - **Multiview**: Support for renderering the same context to multiple canvases. Eliminating the need for multiple PixiJS instances and duplicating resources. @@ -116,7 +120,7 @@ We will be bringing out more detailed guides/examples on all of these features a ### v8.3.0 - **PerspectiveMesh**: A new mesh type that allows you to create 3D perspective effect - + ### v8.2.0 - **Container Reparenting**: You can now reparent a container to another container without it looking visually different with two new methods `reparentChild(child)` and `reparentChildAt(child, 1)`. diff --git a/docs/examples/index.md b/docs/examples/index.md index 98e22ea4b..6d1cde0a6 100644 --- a/docs/examples/index.md +++ b/docs/examples/index.md @@ -9,9 +9,9 @@ Welcome to the PixiJS Examples page! Here you can find a variety of demos and co Check out some of our featured examples below: -- [Basic Container](./basic/container.md) -- [Blend Modes](./basic/blend-modes.md) -- [Tiling Sprite](./sprite/tiling-sprite.md) -- [Animated Sprite](./sprite/animated-sprite-jet.md) -- [Text](./text/pixi-text.md) -- [Graphics](./graphics/simple.md) +- [Basic Container](./basic/container.mdx) +- [Blend Modes](./basic/blend-modes.mdx) +- [Tiling Sprite](./sprite/tiling-sprite.mdx) +- [Animated Sprite](./sprite/animated-sprite-jet.mdx) +- [Text](./text/pixi-text.mdx) +- [Graphics](./graphics/simple.mdx) diff --git a/docs/guides/components/graphics-pixel-line.mdx b/docs/guides/components/graphics-pixel-line.mdx index 8340e4ed0..7c2256eed 100644 --- a/docs/guides/components/graphics-pixel-line.mdx +++ b/docs/guides/components/graphics-pixel-line.mdx @@ -2,7 +2,6 @@ import { Sandpack } from "@codesandbox/sandpack-react"; import { dracula } from "@codesandbox/sandpack-themes"; import { EmbeddedEditor } from "@site/src/components/Editor/EmbeddedEditor"; import IndexFile from '!!raw-loader!../../examples/graphics/pixelLine'; -import { ExampleEditor } from "@site/src/components/Editor/ExampleEditor"; # Graphics Pixel Line @@ -12,7 +11,7 @@ In this guide, we'll dive into how this property works, its use cases, and the c --- - + ## How to use `pixelLine`? diff --git a/docs/playground/index.md b/docs/playground/index.md index 66ab04f5f..6a49018d3 100644 --- a/docs/playground/index.md +++ b/docs/playground/index.md @@ -8,4 +8,4 @@ custom_edit_url: null import Playground from '@site/src/components/Playground/index'; import version from '../pixi-version.json'; - \ No newline at end of file + diff --git a/package.json b/package.json index f239c94a2..25c8dc93b 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "types": "tsc --noEmit", "write-heading-ids": "docusaurus write-heading-ids", "write-translations": "docusaurus write-translations", - "generate-content": "npm run generate-tutorial-docs", + "generate-content": "", "generate-tutorial-docs": "node ./scripts/generate-tutorial-docs.js", "update-version": "node ./scripts/update-version.js", "prepare": "husky install" diff --git a/src/components/Editor/Editor.tsx b/src/components/Editor/Editor.tsx index 157a9050b..765f0fa80 100644 --- a/src/components/Editor/Editor.tsx +++ b/src/components/Editor/Editor.tsx @@ -17,6 +17,7 @@ export interface EditorProps { dependencies?: Record; files?: Record; fontSize?: number; + handleEditorCodeChanged?: (nextSourceCode: string | undefined) => void; } export function Editor({ @@ -29,6 +30,7 @@ export function Editor({ dependencies = { 'pixi.js': 'latest' }, files = { 'index.js': '// Your code here' }, fontSize = 12, + handleEditorCodeChanged, }: EditorProps) { const { colorMode } = useColorMode(); @@ -53,12 +55,22 @@ export function Editor({ theme={colorMode === 'dark' ? dracula : githubLight} files={filesState} customSetup={{ dependencies, entry: 'index.html' }} - style={{ height, width, margin: '0 auto' }} + style={{ height, width, margin: '0 auto', maxWidth: '100%' }} options={{ recompileDelay: 500, }} > - + ); } diff --git a/src/components/Editor/EmbeddedEditor.tsx b/src/components/Editor/EmbeddedEditor.tsx index d06960766..f860fa959 100644 --- a/src/components/Editor/EmbeddedEditor.tsx +++ b/src/components/Editor/EmbeddedEditor.tsx @@ -2,5 +2,5 @@ import { type EditorProps, Editor } from './Editor'; export function EmbeddedEditor(props: EditorProps) { - return ; + return ; } diff --git a/src/components/Editor/Monaco/MonacoView.tsx b/src/components/Editor/Monaco/MonacoView.tsx index 8646d28a0..addb6dfa9 100644 --- a/src/components/Editor/Monaco/MonacoView.tsx +++ b/src/components/Editor/Monaco/MonacoView.tsx @@ -9,8 +9,10 @@ import type { CSSProperties } from 'react'; interface MonacoViewProps { fontSize?: number; style?: CSSProperties; + pixiVersion: string; + handleEditorCodeChanged?: (nextSourceCode: string | undefined) => void; } -export function MonacoView({ fontSize = 12, style }: MonacoViewProps) +export function MonacoView({ fontSize = 12, style, pixiVersion, handleEditorCodeChanged }: MonacoViewProps) { const { code, updateCode } = useActiveCode(); const { sandpack } = useSandpack(); @@ -18,7 +20,7 @@ export function MonacoView({ fontSize = 12, style }: MonacoViewProps) const language = useFileLanguage(sandpack.activeFile); const { colorMode } = useColorMode(); - usePixiMonaco(monaco); + usePixiMonaco(monaco, pixiVersion); return ( @@ -31,7 +33,11 @@ export function MonacoView({ fontSize = 12, style }: MonacoViewProps) theme={colorMode === 'dark' ? 'vs-dark' : 'light'} key={sandpack.activeFile} defaultValue={code} - onChange={(value) => updateCode(value || '')} + onChange={(value) => + { + updateCode(value || ''); + handleEditorCodeChanged?.(value); + }} options={{ minimap: { enabled: false }, scrollBeyondLastLine: false, diff --git a/src/components/Editor/PlaygroundEditor.tsx b/src/components/Editor/PlaygroundEditor.tsx new file mode 100644 index 000000000..f5df5a079 --- /dev/null +++ b/src/components/Editor/PlaygroundEditor.tsx @@ -0,0 +1,10 @@ +import { type EditorProps, Editor } from './Editor'; +import { useContainerClassNameModifier } from '@site/src/hooks/useContainerClassNameModifier'; + +export function PlaygroundEditor(props: EditorProps) +{ + // hack the .container class to add a modifier + useContainerClassNameModifier('example', true); + + return ; +} diff --git a/src/components/Editor/Sandpack/Layout.tsx b/src/components/Editor/Sandpack/Layout.tsx index d4f6a2165..81dd7ef1c 100644 --- a/src/components/Editor/Sandpack/Layout.tsx +++ b/src/components/Editor/Sandpack/Layout.tsx @@ -7,10 +7,13 @@ import { SandpackConsole, SandpackLayout, SandpackPreview, SandpackStack } from import type { EditorProps } from '../Editor'; export function EditorLayout( - props: Required>, + props: Required> & { + pixiVersion: string; + handleEditorCodeChanged?: (nextSourceCode: string | undefined) => void; + }, ) { - const { showCode, showPreview, showConsole, fontSize, fullSizePreview } = props; + const { showCode, showPreview, showConsole, fontSize, fullSizePreview, pixiVersion } = props; const [consoleVisibility, setConsoleVisibility] = useState(showConsole); const [codeVisibility, setCodeVisibility] = useState(showCode); @@ -21,8 +24,10 @@ export function EditorLayout( ); + console.log(showPreview); + return ( - + {showPreview && ( diff --git a/src/components/Playground/PixiPlayground/MonacoEditor.tsx b/src/components/Playground/PixiPlayground/MonacoEditor.tsx index ae289bdfc..5cd96c149 100644 --- a/src/components/Playground/PixiPlayground/MonacoEditor.tsx +++ b/src/components/Playground/PixiPlayground/MonacoEditor.tsx @@ -1,10 +1,9 @@ import { useCallback, useEffect, useRef } from 'react'; import { type SandpackState, FileTabs, SandpackStack, useActiveCode, useSandpack } from '@codesandbox/sandpack-react'; import { useColorMode } from '@docusaurus/theme-common'; -import Editor, { useMonaco } from '@monaco-editor/react'; +import Editor from '@monaco-editor/react'; import type { editor } from 'monaco-editor'; -import type { Monaco } from '@monaco-editor/react'; export type CodeChangeCallbackType = (code: string | undefined, state: SandpackState) => void; @@ -77,7 +76,7 @@ export default function MonacoEditor({ useTabs, onChange }: MonacoEditorProps) switch (extension) { case 'js': - return 'typescript'; + return 'javascript'; case 'ts': return 'typescript'; case 'html': @@ -93,60 +92,6 @@ export default function MonacoEditor({ useTabs, onChange }: MonacoEditorProps) const language = getLanguage(sandpack.activeFile); - const monaco = useMonaco(); - - function handleEditorWillMount(monaco: Monaco, version: string) - { - const urlCdn = `https://cdn.jsdelivr.net/npm/pixi.js@${version}/dist/pixi.js.d.ts`; - - fetch(urlCdn) - .then((response) => response.text()) - .then((pixiTypes) => - { - monaco.languages.typescript.typescriptDefaults.addExtraLib( - `declare module 'pixi.js' { ${pixiTypes} }`, - `file:///node_modules/pixi.js/index.d.ts`, - ); - console.log('Added pixi.js types to monaco:', pixiTypes); - monaco.languages.typescript.typescriptDefaults.addExtraLib( - `declare module '*.wgsl' - { - const shader: 'string'; - - export default shader; - } - - declare module '*.vert' - { - const shader: 'string'; - - export default shader; - } - - declare module '*.frag' - { - const shader: 'string'; - - export default shader; - }`, - ); - }) - .catch((error) => - { - console.error('Failed to fetch pixi.js types:', error); - }); - } - - useEffect(() => - { - const version = '8.6.6'; // specify the version you need - - if (monaco) - { - handleEditorWillMount(monaco, version); - } - }, [monaco]); - return ( {useTabs && } diff --git a/src/components/Playground/PixiPlayground/useEditorCode.ts b/src/components/Playground/PixiPlayground/useEditorCode.ts index 9c31dc240..9fa893485 100644 --- a/src/components/Playground/PixiPlayground/useEditorCode.ts +++ b/src/components/Playground/PixiPlayground/useEditorCode.ts @@ -1,139 +1,53 @@ import { useCallback, useMemo } from 'react'; -import { getExampleEntry, getExampleOptions } from '@site/src/examples'; +// @ts-expect-error - Ignore TS error +import V7IndexFile from '!!raw-loader!@site/src/examples/v7.0.0/basic/container'; +// @ts-expect-error - Ignore TS error +import V8IndexFile from '!!raw-loader!@site/src/examples/v8.0.0/container'; import type { IVersion } from './usePixiVersions'; -import type { SandpackState } from '@codesandbox/sandpack-react'; -import type { SetURLStateType, URLSaveState } from '@site/src/components/Playground/PixiPlayground/usePlaygroundURLState'; -import type { OptionGroup } from '@site/src/components/Select'; -import type { ExampleSourceEntry } from '@site/src/examples'; +import type { SetURLStateType } from '@site/src/components/Playground/PixiPlayground/usePlaygroundURLState'; export const defaultExampleId = 'sprite.basic'; type UseCodeExamplesParams = { - urlState: URLSaveState | undefined; - selectedOptionId: string; + urlState: string | undefined; setURLState: SetURLStateType; pixiVersion: IVersion; }; -export const useCodeExamples = ({ urlState, selectedOptionId, setURLState, pixiVersion }: UseCodeExamplesParams) => +export const useCodeExamples = ({ urlState, setURLState, pixiVersion }: UseCodeExamplesParams) => { - const version = pixiVersion.version; - const defaultExampleOptions = getExampleOptions(version); + const version = pixiVersion.versionLabel; const hasUrlHashed = Boolean(urlState); - const exampleEntry = useMemo( - () => getExampleEntry(version, selectedOptionId), - [version, selectedOptionId], - ); - const { indexCode, extraFiles, activeFile, usesWebWorkerLibrary } = useMemo<{ + const { indexCode } = useMemo<{ indexCode: string; - extraFiles?: Record; - activeFile?: string; - usesWebWorkerLibrary: boolean; }>(() => { if (!urlState) { - const { indexCode, extraFiles } = extractSource(exampleEntry?.source ?? ''); + // versionLabel + const indexCode = version === 'v7.x' ? V7IndexFile : V8IndexFile; return { indexCode, - extraFiles, - usesWebWorkerLibrary: !!exampleEntry?.usesWebWorkerLibrary, - }; - } - - const { files, visibleFiles, activeFile } = urlState; - - if (!visibleFiles.length) - { - return { - indexCode: files['/src/index.js'].code, - activeFile, - usesWebWorkerLibrary: false, }; } - const extraFiles = Object.entries(files) - .filter(([key]) => (/^\/src\/(?!index\.js$|styles\.css$)/).test(key)) - .reduce( - (acc, [key, value]) => - { - let suffix = ''; - - if (activeFile === key) suffix = '*'; - if (!visibleFiles.includes(key)) suffix = '!'; - acc[key.substring(1) + suffix] = value.code; - - return acc; - }, - {} as Record, - ); - return { - indexCode: files['/src/index.js'].code, - extraFiles, - usesWebWorkerLibrary: false, + indexCode: urlState, }; - }, [urlState, exampleEntry]); - - const exampleOptions = useMemo( - () => - // Slightly hacky solution if user edits code, changes the example select to - // a custom option, so the Select still works as expected. It would probably - // be nicer to store the last loaded example somehow and put an edited star - // against it or something. - // Only show custom select option when user has edited code - (!hasUrlHashed - ? defaultExampleOptions - : defaultExampleOptions.concat({ - label: 'Custom Code', - options: [ - { - label: 'User Edited Code', - value: 'custom', - }, - ], - })), - [defaultExampleOptions, hasUrlHashed], - ); - - const handleOptionSelected = useCallback( - (nextSelectedId: string) => - { - if (nextSelectedId === selectedOptionId) - { - return; - } - - setURLState( - { - state: undefined, - exampleId: nextSelectedId, - }, - true, - true, - ); - }, - [selectedOptionId, setURLState], - ); + }, [version, urlState]); const handleEditorCodeChanged = useCallback( - (nextSourceCode: string | undefined, state: SandpackState) => + (nextSourceCode: string | undefined) => { if (!nextSourceCode) return; - const { files, visibleFiles, activeFile } = state; - - // Hacky solution to get the active file's code up-to-date - files[activeFile].code = nextSourceCode; - // pushState only when editing code for the first time setURLState( { - state: { files, visibleFiles, activeFile }, - exampleId: 'custom', + state: nextSourceCode, }, !hasUrlHashed, ); @@ -143,11 +57,6 @@ export const useCodeExamples = ({ urlState, selectedOptionId, setURLState, pixiV return { indexCode, - extraFiles, - activeFile, - usesWebWorkerLibrary, - exampleOptions, - handleOptionSelected, handleEditorCodeChanged, }; }; diff --git a/src/components/Playground/PixiPlayground/usePlaygroundURLState.ts b/src/components/Playground/PixiPlayground/usePlaygroundURLState.ts index ccdc98a33..5c1c5375d 100644 --- a/src/components/Playground/PixiPlayground/usePlaygroundURLState.ts +++ b/src/components/Playground/PixiPlayground/usePlaygroundURLState.ts @@ -3,18 +3,11 @@ import { useURLStateParams } from '@site/src/hooks/useURLStateParams'; import type { DeserializeParamsType, SerializeParamsType, SetStateType } from '@site/src/hooks/useURLStateParams'; -export type URLSaveState = { - files: Record; - visibleFiles: string[]; - activeFile: string; -}; - type URLStateParams = { - state?: URLSaveState; - exampleId: string; + state?: string; }; -function encodeState(state: URLSaveState) +function encodeState(state: string) { const json = JSON.stringify(state); @@ -25,7 +18,7 @@ function decodeState(encodedState: string) { try { - const state: URLSaveState = JSON.parse(atob(encodedState)); + const state: string = JSON.parse(atob(encodedState)); return state; } @@ -48,20 +41,14 @@ const deserializeParams = evolve({ export type SetURLStateType = SetStateType; -type UsePlaygroundURLStateParams = { - defaultExampleId: string; - defaultPixiVersion: string; -}; - -export const usePlaygroundURLState = ({ defaultExampleId }: UsePlaygroundURLStateParams) => +export const usePlaygroundURLState = () => useURLStateParams( (urlState) => { - const { state, exampleId } = urlState; + const { state } = urlState; return { state: state ?? undefined, - exampleId: state ? 'custom' : (exampleId ?? defaultExampleId), }; }, serializeParams, diff --git a/src/components/Playground/index.module.scss b/src/components/Playground/index.module.scss index 1454ac813..08a7bd1b5 100644 --- a/src/components/Playground/index.module.scss +++ b/src/components/Playground/index.module.scss @@ -2,16 +2,6 @@ display: flex; flex-wrap: wrap; overflow: hidden; - height: calc(100vh - var(--ifm-navbar-height)); - width: 100vw; - - .nav { - display: flex; - justify-content: space-between; - margin: 16px 18px; - - .select { - margin: 0 8px; - } - } + height: calc(100vh - 158px); + width: calc(100vw - 32px); } diff --git a/src/components/Playground/index.tsx b/src/components/Playground/index.tsx index 8eb9ec885..6eb659702 100644 --- a/src/components/Playground/index.tsx +++ b/src/components/Playground/index.tsx @@ -1,60 +1,29 @@ +import { PlaygroundEditor } from '../Editor/PlaygroundEditor'; import styles from './index.module.scss'; import BrowserOnly from '@docusaurus/BrowserOnly'; -import PixiPlayground from '@site/src/components/Playground/PixiPlayground'; -import { defaultExampleId, useCodeExamples } from '@site/src/components/Playground/PixiPlayground/useEditorCode'; +import { useCodeExamples } from '@site/src/components/Playground/PixiPlayground/useEditorCode'; import { usePlaygroundURLState } from '@site/src/components/Playground/PixiPlayground/usePlaygroundURLState'; -import Select from '@site/src/components/Select'; import type { IVersion } from '@site/src/components/Playground/PixiPlayground/usePixiVersions'; export default function Playground({ pixiVersion }: { pixiVersion: IVersion }) { - const [urlState, setURLState] = usePlaygroundURLState({ - defaultExampleId, - defaultPixiVersion: pixiVersion.version, - }); - const { state, exampleId: selectedOptionId } = urlState; + const [urlState, setURLState] = usePlaygroundURLState(); + const { state } = urlState; - const { - indexCode, - extraFiles, - activeFile, - usesWebWorkerLibrary, - exampleOptions, - handleOptionSelected, - handleEditorCodeChanged, - } = useCodeExamples({ - urlState: state, - selectedOptionId, - setURLState, - pixiVersion, - }); + const { indexCode, handleEditorCodeChanged } = useCodeExamples({ urlState: state, setURLState, pixiVersion }); return (
{() => ( - <> -
-