react-native-webrtc-kaleidoscope 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE.md +8 -8
- package/README.md +185 -56
- package/android/build.gradle +13 -0
- package/android/src/main/java/com/simiancraft/kaleidoscope/CompositeLayers.kt +127 -0
- package/android/src/main/java/com/simiancraft/kaleidoscope/EffectTuning.kt +69 -69
- package/android/src/main/java/com/simiancraft/kaleidoscope/KaleidoscopeModule.kt +86 -33
- package/android/src/main/java/com/simiancraft/kaleidoscope/Registration.kt +23 -64
- package/android/src/main/java/com/simiancraft/kaleidoscope/effects/CompositeFactory.kt +691 -0
- package/android/src/main/java/com/simiancraft/kaleidoscope/effects/LayerShaders.kt +30 -0
- package/android/src/main/java/com/simiancraft/kaleidoscope/effects/TransformFactory.kt +248 -200
- package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/Egl.kt +82 -70
- package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/Fbo.kt +50 -47
- package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/FramePipeline.kt +106 -105
- package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/GlDebug.kt +23 -23
- package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/GlProgram.kt +76 -57
- package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/Ingest.kt +92 -71
- package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/Orientation.kt +25 -25
- package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/Shaders.kt +57 -76
- package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/ShadersGenerated.kt +1162 -25
- package/android/src/main/java/com/simiancraft/kaleidoscope/segmentation/Mask.kt +254 -242
- package/android/src/main/java/com/simiancraft/kaleidoscope/segmentation/MaskTuning.kt +28 -25
- package/android/src/main/java/com/simiancraft/kaleidoscope/segmentation/SegmentationEngine.kt +104 -98
- package/android/src/test/java/com/simiancraft/kaleidoscope/CompositeLayersTest.kt +165 -0
- package/app.plugin.js +9 -255
- package/catalog/composites/clouds/clouds.controls.tsx +19 -0
- package/catalog/composites/clouds/clouds.ts +32 -0
- package/catalog/composites/corporate-blobs/corporate-blobs.controls.tsx +24 -0
- package/catalog/composites/corporate-blobs/corporate-blobs.thumb.webp +0 -0
- package/catalog/composites/corporate-blobs/corporate-blobs.ts +51 -0
- package/catalog/composites/corporate-blobs/corporate-blobs.web.ts +42 -0
- package/catalog/composites/fairy-cave/fairy-cave.controls.tsx +33 -0
- package/catalog/composites/fairy-cave/fairy-cave.thumb.webp +0 -0
- package/catalog/composites/fairy-cave/fairy-cave.ts +53 -0
- package/catalog/composites/fairy-cave/fairy-cave.web.ts +47 -0
- package/catalog/composites/fairy-grotto/fairy-grotto.controls.tsx +34 -0
- package/catalog/composites/fairy-grotto/fairy-grotto.thumb.webp +0 -0
- package/catalog/composites/fairy-grotto/fairy-grotto.ts +54 -0
- package/catalog/composites/fairy-grotto/fairy-grotto.web.ts +47 -0
- package/catalog/composites/fairy-hollow/fairy-hollow.controls.tsx +34 -0
- package/catalog/composites/fairy-hollow/fairy-hollow.thumb.webp +0 -0
- package/catalog/composites/fairy-hollow/fairy-hollow.ts +55 -0
- package/catalog/composites/fairy-hollow/fairy-hollow.web.ts +47 -0
- package/catalog/composites/nebula/nebula.controls.tsx +19 -0
- package/catalog/composites/nebula/nebula.thumb.webp +0 -0
- package/catalog/composites/nebula/nebula.ts +37 -0
- package/catalog/composites/nebula/nebula.web.ts +30 -0
- package/catalog/composites/observation-deck/observation-deck.controls.tsx +28 -0
- package/catalog/composites/observation-deck/observation-deck.thumb.webp +0 -0
- package/catalog/composites/observation-deck/observation-deck.ts +59 -0
- package/catalog/composites/observation-deck/observation-deck.web.ts +50 -0
- package/catalog/composites/simianlights/simianlights.controls.tsx +19 -0
- package/catalog/composites/simianlights/simianlights.thumb.webp +0 -0
- package/catalog/composites/simianlights/simianlights.ts +34 -0
- package/catalog/composites/simianlights/simianlights.web.ts +29 -0
- package/catalog/composites/underwater/underwater.controls.tsx +19 -0
- package/catalog/composites/underwater/underwater.thumb.webp +0 -0
- package/catalog/composites/underwater/underwater.ts +42 -0
- package/catalog/composites/underwater/underwater.web.ts +36 -0
- package/catalog/composites/wizard-tower/wizard-tower.controls.tsx +23 -0
- package/catalog/composites/wizard-tower/wizard-tower.thumb.webp +0 -0
- package/catalog/composites/wizard-tower/wizard-tower.ts +44 -0
- package/catalog/composites/wizard-tower/wizard-tower.web.ts +35 -0
- package/catalog/composites/wizard-tower-night/wizard-tower-night.controls.tsx +22 -0
- package/catalog/composites/wizard-tower-night/wizard-tower-night.thumb.webp +0 -0
- package/catalog/composites/wizard-tower-night/wizard-tower-night.ts +43 -0
- package/catalog/composites/wizard-tower-night/wizard-tower-night.web.ts +35 -0
- package/catalog/images/README.md +188 -0
- package/catalog/images/corporate/corporate-logo.thumb.webp +0 -0
- package/catalog/images/corporate/corporate-logo.ts +6 -0
- package/catalog/images/corporate/corporate-logo.web.ts +7 -0
- package/catalog/images/corporate/corporate-logo.webp +0 -0
- package/catalog/images/debug/debug-resolutions.thumb.webp +0 -0
- package/catalog/images/debug/debug-resolutions.ts +6 -0
- package/catalog/images/debug/debug-resolutions.web.ts +7 -0
- package/catalog/images/fairy-caves/grotto.thumb.webp +0 -0
- package/catalog/images/fairy-caves/grotto.ts +6 -0
- package/catalog/images/fairy-caves/grotto.web.ts +7 -0
- package/catalog/images/fairy-caves/grotto.webp +0 -0
- package/catalog/images/fairy-caves/hollow.thumb.webp +0 -0
- package/catalog/images/fairy-caves/hollow.ts +6 -0
- package/catalog/images/fairy-caves/hollow.web.ts +7 -0
- package/catalog/images/fairy-caves/hollow.webp +0 -0
- package/catalog/images/fairy-caves/treehouse-2.thumb.webp +0 -0
- package/catalog/images/fairy-caves/treehouse-2.ts +6 -0
- package/catalog/images/fairy-caves/treehouse-2.web.ts +7 -0
- package/catalog/images/fairy-caves/treehouse-2.webp +0 -0
- package/catalog/images/fairy-caves/treehouse-3.thumb.webp +0 -0
- package/catalog/images/fairy-caves/treehouse-3.ts +6 -0
- package/catalog/images/fairy-caves/treehouse-3.web.ts +7 -0
- package/catalog/images/fairy-caves/treehouse-3.webp +0 -0
- package/catalog/images/fairy-caves/treehouse.thumb.webp +0 -0
- package/catalog/images/fairy-caves/treehouse.ts +6 -0
- package/catalog/images/fairy-caves/treehouse.web.ts +7 -0
- package/catalog/images/fairy-caves/treehouse.webp +0 -0
- package/catalog/images/home/home-dark.thumb.webp +0 -0
- package/catalog/images/home/home-dark.ts +6 -0
- package/catalog/images/home/home-dark.web.ts +7 -0
- package/catalog/images/home/home-light.thumb.webp +0 -0
- package/catalog/images/home/home-light.ts +6 -0
- package/catalog/images/home/home-light.web.ts +7 -0
- package/catalog/images/image-ids.ts +42 -0
- package/catalog/images/image.types.ts +5 -0
- package/catalog/images/index.ts +7 -0
- package/catalog/images/nature/landscape-dark.thumb.webp +0 -0
- package/catalog/images/nature/landscape-dark.ts +6 -0
- package/catalog/images/nature/landscape-dark.web.ts +7 -0
- package/catalog/images/nature/landscape-light.thumb.webp +0 -0
- package/catalog/images/nature/landscape-light.ts +6 -0
- package/catalog/images/nature/landscape-light.web.ts +7 -0
- package/catalog/images/office/office-dark.thumb.webp +0 -0
- package/catalog/images/office/office-dark.ts +6 -0
- package/catalog/images/office/office-dark.web.ts +7 -0
- package/catalog/images/office/office-light.thumb.webp +0 -0
- package/catalog/images/office/office-light.ts +6 -0
- package/catalog/images/office/office-light.web.ts +7 -0
- package/catalog/images/sci-fi/sci-fi-light.thumb.webp +0 -0
- package/catalog/images/sci-fi/sci-fi-light.ts +6 -0
- package/catalog/images/sci-fi/sci-fi-light.web.ts +7 -0
- package/catalog/images/simiancraft/simiancraft-dark-transparency.thumb.webp +0 -0
- package/catalog/images/simiancraft/simiancraft-dark-transparency.ts +6 -0
- package/catalog/images/simiancraft/simiancraft-dark-transparency.web.ts +9 -0
- package/catalog/images/simiancraft/simiancraft-dark-transparency.webp +0 -0
- package/catalog/images/simiancraft/simiancraft-dark.thumb.webp +0 -0
- package/catalog/images/simiancraft/simiancraft-dark.ts +6 -0
- package/catalog/images/simiancraft/simiancraft-dark.web.ts +7 -0
- package/catalog/images/simiancraft/simiancraft-light-transparency.thumb.webp +0 -0
- package/catalog/images/simiancraft/simiancraft-light-transparency.ts +6 -0
- package/catalog/images/simiancraft/simiancraft-light-transparency.web.ts +9 -0
- package/catalog/images/simiancraft/simiancraft-light-transparency.webp +0 -0
- package/catalog/images/simiancraft/simiancraft-light.thumb.webp +0 -0
- package/catalog/images/simiancraft/simiancraft-light.ts +6 -0
- package/catalog/images/simiancraft/simiancraft-light.web.ts +7 -0
- package/catalog/images/spaceship/observation-deck.thumb.webp +0 -0
- package/catalog/images/spaceship/observation-deck.ts +6 -0
- package/catalog/images/spaceship/observation-deck.web.ts +7 -0
- package/catalog/images/spaceship/observation-deck.webp +0 -0
- package/catalog/images/underwater/oceanscape-dark.thumb.webp +0 -0
- package/catalog/images/underwater/oceanscape-dark.ts +6 -0
- package/catalog/images/underwater/oceanscape-dark.web.ts +7 -0
- package/catalog/images/underwater/oceanscape-dark.webp +0 -0
- package/catalog/images/wizard-tower/wizard-tower-1.thumb.webp +0 -0
- package/catalog/images/wizard-tower/wizard-tower-1.ts +6 -0
- package/catalog/images/wizard-tower/wizard-tower-1.web.ts +7 -0
- package/catalog/images/wizard-tower/wizard-tower-1.webp +0 -0
- package/catalog/images/wizard-tower/wizard-tower-2.thumb.webp +0 -0
- package/catalog/images/wizard-tower/wizard-tower-2.ts +6 -0
- package/catalog/images/wizard-tower/wizard-tower-2.web.ts +7 -0
- package/catalog/images/wizard-tower/wizard-tower-2.webp +0 -0
- package/catalog/images/wizard-tower/wizard-tower-night.thumb.webp +0 -0
- package/catalog/images/wizard-tower/wizard-tower-night.ts +6 -0
- package/catalog/images/wizard-tower/wizard-tower-night.web.ts +7 -0
- package/catalog/images/wizard-tower/wizard-tower-night.webp +0 -0
- package/catalog/shaders/README.md +114 -0
- package/catalog/shaders/_shared/composite-blit.frag +26 -0
- package/catalog/shaders/_shared/composite-camera.frag +17 -0
- package/catalog/shaders/_shared/composite-image.frag +23 -0
- package/catalog/shaders/_shared/composite-masked.frag +26 -0
- package/catalog/shaders/_shared/composite-subject.frag +27 -0
- package/catalog/shaders/_shared/passthrough.vert +27 -0
- package/catalog/shaders/_shared/transform.frag +27 -0
- package/catalog/shaders/_shared/types.ts +63 -0
- package/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.form.tsx +37 -0
- package/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.frag +123 -0
- package/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.ts +106 -0
- package/catalog/shaders/blur/blur.form.tsx +29 -0
- package/catalog/shaders/blur/blur.ts +32 -0
- package/catalog/shaders/blur/composite-blur.frag +42 -0
- package/catalog/shaders/clouds/clouds.form.tsx +39 -0
- package/catalog/shaders/clouds/clouds.frag +128 -0
- package/catalog/shaders/clouds/clouds.presets.md +37 -0
- package/catalog/shaders/clouds/clouds.ts +124 -0
- package/catalog/shaders/corporate-blobs/corporate-blobs.form.tsx +44 -0
- package/catalog/shaders/corporate-blobs/corporate-blobs.frag +224 -0
- package/catalog/shaders/corporate-blobs/corporate-blobs.ts +136 -0
- package/catalog/shaders/fireflies/fireflies.form.tsx +33 -0
- package/catalog/shaders/fireflies/fireflies.frag +68 -0
- package/catalog/shaders/fireflies/fireflies.ts +61 -0
- package/catalog/shaders/godrays/godrays.form.tsx +37 -0
- package/catalog/shaders/godrays/godrays.frag +85 -0
- package/catalog/shaders/godrays/godrays.ts +105 -0
- package/catalog/shaders/index.ts +78 -0
- package/catalog/shaders/light-beams-and-motes/light-beams-and-motes.form.tsx +55 -0
- package/catalog/shaders/light-beams-and-motes/light-beams-and-motes.frag +262 -0
- package/catalog/shaders/light-beams-and-motes/light-beams-and-motes.ts +137 -0
- package/catalog/shaders/nebula/nebula.form.tsx +34 -0
- package/catalog/shaders/nebula/nebula.frag +151 -0
- package/catalog/shaders/nebula/nebula.ts +74 -0
- package/catalog/shaders/plasma/plasma.form.tsx +32 -0
- package/catalog/shaders/plasma/plasma.frag +55 -0
- package/catalog/shaders/plasma/plasma.ts +44 -0
- package/catalog/shaders/simianlights/simianlights.form.tsx +34 -0
- package/catalog/shaders/simianlights/simianlights.frag +151 -0
- package/catalog/shaders/simianlights/simianlights.ts +73 -0
- package/dist/catalog/composites/clouds/clouds.controls.d.ts +3 -0
- package/dist/catalog/composites/clouds/clouds.controls.d.ts.map +1 -0
- package/dist/catalog/composites/clouds/clouds.controls.js +11 -0
- package/dist/catalog/composites/clouds/clouds.controls.js.map +1 -0
- package/dist/catalog/composites/clouds/clouds.d.ts +26 -0
- package/dist/catalog/composites/clouds/clouds.d.ts.map +1 -0
- package/dist/catalog/composites/clouds/clouds.js +33 -0
- package/dist/catalog/composites/clouds/clouds.js.map +1 -0
- package/dist/catalog/composites/corporate-blobs/corporate-blobs.controls.d.ts +3 -0
- package/dist/catalog/composites/corporate-blobs/corporate-blobs.controls.d.ts.map +1 -0
- package/dist/catalog/composites/corporate-blobs/corporate-blobs.controls.js +13 -0
- package/dist/catalog/composites/corporate-blobs/corporate-blobs.controls.js.map +1 -0
- package/dist/catalog/composites/corporate-blobs/corporate-blobs.d.ts +37 -0
- package/dist/catalog/composites/corporate-blobs/corporate-blobs.d.ts.map +1 -0
- package/dist/catalog/composites/corporate-blobs/corporate-blobs.js +52 -0
- package/dist/catalog/composites/corporate-blobs/corporate-blobs.js.map +1 -0
- package/dist/catalog/composites/corporate-blobs/corporate-blobs.thumb.webp +0 -0
- package/dist/catalog/composites/corporate-blobs/corporate-blobs.web.d.ts +37 -0
- package/dist/catalog/composites/corporate-blobs/corporate-blobs.web.d.ts.map +1 -0
- package/dist/catalog/composites/corporate-blobs/corporate-blobs.web.js +46 -0
- package/dist/catalog/composites/corporate-blobs/corporate-blobs.web.js.map +1 -0
- package/dist/catalog/composites/fairy-cave/fairy-cave.controls.d.ts +3 -0
- package/dist/catalog/composites/fairy-cave/fairy-cave.controls.d.ts.map +1 -0
- package/dist/catalog/composites/fairy-cave/fairy-cave.controls.js +13 -0
- package/dist/catalog/composites/fairy-cave/fairy-cave.controls.js.map +1 -0
- package/dist/catalog/composites/fairy-cave/fairy-cave.d.ts +42 -0
- package/dist/catalog/composites/fairy-cave/fairy-cave.d.ts.map +1 -0
- package/dist/catalog/composites/fairy-cave/fairy-cave.js +54 -0
- package/dist/catalog/composites/fairy-cave/fairy-cave.js.map +1 -0
- package/dist/catalog/composites/fairy-cave/fairy-cave.thumb.webp +0 -0
- package/dist/catalog/composites/fairy-cave/fairy-cave.web.d.ts +42 -0
- package/dist/catalog/composites/fairy-cave/fairy-cave.web.d.ts.map +1 -0
- package/dist/catalog/composites/fairy-cave/fairy-cave.web.js +51 -0
- package/dist/catalog/composites/fairy-cave/fairy-cave.web.js.map +1 -0
- package/dist/catalog/composites/fairy-grotto/fairy-grotto.controls.d.ts +3 -0
- package/dist/catalog/composites/fairy-grotto/fairy-grotto.controls.d.ts.map +1 -0
- package/dist/catalog/composites/fairy-grotto/fairy-grotto.controls.js +14 -0
- package/dist/catalog/composites/fairy-grotto/fairy-grotto.controls.js.map +1 -0
- package/dist/catalog/composites/fairy-grotto/fairy-grotto.d.ts +42 -0
- package/dist/catalog/composites/fairy-grotto/fairy-grotto.d.ts.map +1 -0
- package/dist/catalog/composites/fairy-grotto/fairy-grotto.js +55 -0
- package/dist/catalog/composites/fairy-grotto/fairy-grotto.js.map +1 -0
- package/dist/catalog/composites/fairy-grotto/fairy-grotto.thumb.webp +0 -0
- package/dist/catalog/composites/fairy-grotto/fairy-grotto.web.d.ts +42 -0
- package/dist/catalog/composites/fairy-grotto/fairy-grotto.web.d.ts.map +1 -0
- package/dist/catalog/composites/fairy-grotto/fairy-grotto.web.js +51 -0
- package/dist/catalog/composites/fairy-grotto/fairy-grotto.web.js.map +1 -0
- package/dist/catalog/composites/fairy-hollow/fairy-hollow.controls.d.ts +3 -0
- package/dist/catalog/composites/fairy-hollow/fairy-hollow.controls.d.ts.map +1 -0
- package/dist/catalog/composites/fairy-hollow/fairy-hollow.controls.js +14 -0
- package/dist/catalog/composites/fairy-hollow/fairy-hollow.controls.js.map +1 -0
- package/dist/catalog/composites/fairy-hollow/fairy-hollow.d.ts +42 -0
- package/dist/catalog/composites/fairy-hollow/fairy-hollow.d.ts.map +1 -0
- package/dist/catalog/composites/fairy-hollow/fairy-hollow.js +56 -0
- package/dist/catalog/composites/fairy-hollow/fairy-hollow.js.map +1 -0
- package/dist/catalog/composites/fairy-hollow/fairy-hollow.thumb.webp +0 -0
- package/dist/catalog/composites/fairy-hollow/fairy-hollow.web.d.ts +42 -0
- package/dist/catalog/composites/fairy-hollow/fairy-hollow.web.d.ts.map +1 -0
- package/dist/catalog/composites/fairy-hollow/fairy-hollow.web.js +51 -0
- package/dist/catalog/composites/fairy-hollow/fairy-hollow.web.js.map +1 -0
- package/dist/catalog/composites/nebula/nebula.controls.d.ts +3 -0
- package/dist/catalog/composites/nebula/nebula.controls.d.ts.map +1 -0
- package/dist/catalog/composites/nebula/nebula.controls.js +11 -0
- package/dist/catalog/composites/nebula/nebula.controls.js.map +1 -0
- package/dist/catalog/composites/nebula/nebula.d.ts +22 -0
- package/dist/catalog/composites/nebula/nebula.d.ts.map +1 -0
- package/dist/catalog/composites/nebula/nebula.js +38 -0
- package/dist/catalog/composites/nebula/nebula.js.map +1 -0
- package/dist/catalog/composites/nebula/nebula.thumb.webp +0 -0
- package/dist/catalog/composites/nebula/nebula.web.d.ts +22 -0
- package/dist/catalog/composites/nebula/nebula.web.d.ts.map +1 -0
- package/dist/catalog/composites/nebula/nebula.web.js +34 -0
- package/dist/catalog/composites/nebula/nebula.web.js.map +1 -0
- package/dist/catalog/composites/observation-deck/observation-deck.controls.d.ts +3 -0
- package/dist/catalog/composites/observation-deck/observation-deck.controls.d.ts.map +1 -0
- package/dist/catalog/composites/observation-deck/observation-deck.controls.js +13 -0
- package/dist/catalog/composites/observation-deck/observation-deck.controls.js.map +1 -0
- package/dist/catalog/composites/observation-deck/observation-deck.d.ts +41 -0
- package/dist/catalog/composites/observation-deck/observation-deck.d.ts.map +1 -0
- package/dist/catalog/composites/observation-deck/observation-deck.js +60 -0
- package/dist/catalog/composites/observation-deck/observation-deck.js.map +1 -0
- package/dist/catalog/composites/observation-deck/observation-deck.thumb.webp +0 -0
- package/dist/catalog/composites/observation-deck/observation-deck.web.d.ts +41 -0
- package/dist/catalog/composites/observation-deck/observation-deck.web.d.ts.map +1 -0
- package/dist/catalog/composites/observation-deck/observation-deck.web.js +54 -0
- package/dist/catalog/composites/observation-deck/observation-deck.web.js.map +1 -0
- package/dist/catalog/composites/simianlights/simianlights.controls.d.ts +3 -0
- package/dist/catalog/composites/simianlights/simianlights.controls.d.ts.map +1 -0
- package/dist/catalog/composites/simianlights/simianlights.controls.js +11 -0
- package/dist/catalog/composites/simianlights/simianlights.controls.js.map +1 -0
- package/dist/catalog/composites/simianlights/simianlights.d.ts +22 -0
- package/dist/catalog/composites/simianlights/simianlights.d.ts.map +1 -0
- package/dist/catalog/composites/simianlights/simianlights.js +30 -0
- package/dist/catalog/composites/simianlights/simianlights.js.map +1 -0
- package/dist/catalog/composites/simianlights/simianlights.thumb.webp +0 -0
- package/dist/catalog/composites/simianlights/simianlights.web.d.ts +22 -0
- package/dist/catalog/composites/simianlights/simianlights.web.d.ts.map +1 -0
- package/dist/catalog/composites/simianlights/simianlights.web.js +33 -0
- package/dist/catalog/composites/simianlights/simianlights.web.js.map +1 -0
- package/dist/catalog/composites/underwater/underwater.controls.d.ts +3 -0
- package/dist/catalog/composites/underwater/underwater.controls.d.ts.map +1 -0
- package/dist/catalog/composites/underwater/underwater.controls.js +11 -0
- package/dist/catalog/composites/underwater/underwater.controls.js.map +1 -0
- package/dist/catalog/composites/underwater/underwater.d.ts +30 -0
- package/dist/catalog/composites/underwater/underwater.d.ts.map +1 -0
- package/dist/catalog/composites/underwater/underwater.js +43 -0
- package/dist/catalog/composites/underwater/underwater.js.map +1 -0
- package/dist/catalog/composites/underwater/underwater.thumb.webp +0 -0
- package/dist/catalog/composites/underwater/underwater.web.d.ts +30 -0
- package/dist/catalog/composites/underwater/underwater.web.d.ts.map +1 -0
- package/dist/catalog/composites/underwater/underwater.web.js +40 -0
- package/dist/catalog/composites/underwater/underwater.web.js.map +1 -0
- package/dist/catalog/composites/wizard-tower/wizard-tower.controls.d.ts +3 -0
- package/dist/catalog/composites/wizard-tower/wizard-tower.controls.d.ts.map +1 -0
- package/dist/catalog/composites/wizard-tower/wizard-tower.controls.js +15 -0
- package/dist/catalog/composites/wizard-tower/wizard-tower.controls.js.map +1 -0
- package/dist/catalog/composites/wizard-tower/wizard-tower.d.ts +31 -0
- package/dist/catalog/composites/wizard-tower/wizard-tower.d.ts.map +1 -0
- package/dist/catalog/composites/wizard-tower/wizard-tower.js +45 -0
- package/dist/catalog/composites/wizard-tower/wizard-tower.js.map +1 -0
- package/dist/catalog/composites/wizard-tower/wizard-tower.thumb.webp +0 -0
- package/dist/catalog/composites/wizard-tower/wizard-tower.web.d.ts +31 -0
- package/dist/catalog/composites/wizard-tower/wizard-tower.web.d.ts.map +1 -0
- package/dist/catalog/composites/wizard-tower/wizard-tower.web.js +39 -0
- package/dist/catalog/composites/wizard-tower/wizard-tower.web.js.map +1 -0
- package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.controls.d.ts +3 -0
- package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.controls.d.ts.map +1 -0
- package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.controls.js +14 -0
- package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.controls.js.map +1 -0
- package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.d.ts +31 -0
- package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.d.ts.map +1 -0
- package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.js +44 -0
- package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.js.map +1 -0
- package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.thumb.webp +0 -0
- package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.web.d.ts +31 -0
- package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.web.d.ts.map +1 -0
- package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.web.js +39 -0
- package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.web.js.map +1 -0
- package/dist/catalog/images/corporate/corporate-logo.d.ts +3 -0
- package/dist/catalog/images/corporate/corporate-logo.d.ts.map +1 -0
- package/dist/catalog/images/corporate/corporate-logo.js +8 -0
- package/dist/catalog/images/corporate/corporate-logo.js.map +1 -0
- package/dist/catalog/images/corporate/corporate-logo.thumb.webp +0 -0
- package/dist/catalog/images/corporate/corporate-logo.web.d.ts +3 -0
- package/dist/catalog/images/corporate/corporate-logo.web.d.ts.map +1 -0
- package/dist/catalog/images/corporate/corporate-logo.web.js +12 -0
- package/dist/catalog/images/corporate/corporate-logo.web.js.map +1 -0
- package/dist/catalog/images/corporate/corporate-logo.webp +0 -0
- package/dist/catalog/images/debug/debug-resolutions.d.ts +3 -0
- package/dist/catalog/images/debug/debug-resolutions.d.ts.map +1 -0
- package/dist/catalog/images/debug/debug-resolutions.js +8 -0
- package/dist/catalog/images/debug/debug-resolutions.js.map +1 -0
- package/dist/catalog/images/debug/debug-resolutions.thumb.webp +0 -0
- package/dist/catalog/images/debug/debug-resolutions.web.d.ts +3 -0
- package/dist/catalog/images/debug/debug-resolutions.web.d.ts.map +1 -0
- package/dist/catalog/images/debug/debug-resolutions.web.js +12 -0
- package/dist/catalog/images/debug/debug-resolutions.web.js.map +1 -0
- package/dist/catalog/images/fairy-caves/grotto.d.ts +3 -0
- package/dist/catalog/images/fairy-caves/grotto.d.ts.map +1 -0
- package/dist/catalog/images/fairy-caves/grotto.js +8 -0
- package/dist/catalog/images/fairy-caves/grotto.js.map +1 -0
- package/dist/catalog/images/fairy-caves/grotto.thumb.webp +0 -0
- package/dist/catalog/images/fairy-caves/grotto.web.d.ts +3 -0
- package/dist/catalog/images/fairy-caves/grotto.web.d.ts.map +1 -0
- package/dist/catalog/images/fairy-caves/grotto.web.js +12 -0
- package/dist/catalog/images/fairy-caves/grotto.web.js.map +1 -0
- package/dist/catalog/images/fairy-caves/grotto.webp +0 -0
- package/dist/catalog/images/fairy-caves/hollow.d.ts +3 -0
- package/dist/catalog/images/fairy-caves/hollow.d.ts.map +1 -0
- package/dist/catalog/images/fairy-caves/hollow.js +8 -0
- package/dist/catalog/images/fairy-caves/hollow.js.map +1 -0
- package/dist/catalog/images/fairy-caves/hollow.thumb.webp +0 -0
- package/dist/catalog/images/fairy-caves/hollow.web.d.ts +3 -0
- package/dist/catalog/images/fairy-caves/hollow.web.d.ts.map +1 -0
- package/dist/catalog/images/fairy-caves/hollow.web.js +12 -0
- package/dist/catalog/images/fairy-caves/hollow.web.js.map +1 -0
- package/dist/catalog/images/fairy-caves/hollow.webp +0 -0
- package/dist/catalog/images/fairy-caves/treehouse-2.d.ts +3 -0
- package/dist/catalog/images/fairy-caves/treehouse-2.d.ts.map +1 -0
- package/dist/catalog/images/fairy-caves/treehouse-2.js +8 -0
- package/dist/catalog/images/fairy-caves/treehouse-2.js.map +1 -0
- package/dist/catalog/images/fairy-caves/treehouse-2.thumb.webp +0 -0
- package/dist/catalog/images/fairy-caves/treehouse-2.web.d.ts +3 -0
- package/dist/catalog/images/fairy-caves/treehouse-2.web.d.ts.map +1 -0
- package/dist/catalog/images/fairy-caves/treehouse-2.web.js +12 -0
- package/dist/catalog/images/fairy-caves/treehouse-2.web.js.map +1 -0
- package/dist/catalog/images/fairy-caves/treehouse-2.webp +0 -0
- package/dist/catalog/images/fairy-caves/treehouse-3.d.ts +3 -0
- package/dist/catalog/images/fairy-caves/treehouse-3.d.ts.map +1 -0
- package/dist/catalog/images/fairy-caves/treehouse-3.js +8 -0
- package/dist/catalog/images/fairy-caves/treehouse-3.js.map +1 -0
- package/dist/catalog/images/fairy-caves/treehouse-3.thumb.webp +0 -0
- package/dist/catalog/images/fairy-caves/treehouse-3.web.d.ts +3 -0
- package/dist/catalog/images/fairy-caves/treehouse-3.web.d.ts.map +1 -0
- package/dist/catalog/images/fairy-caves/treehouse-3.web.js +12 -0
- package/dist/catalog/images/fairy-caves/treehouse-3.web.js.map +1 -0
- package/dist/catalog/images/fairy-caves/treehouse-3.webp +0 -0
- package/dist/catalog/images/fairy-caves/treehouse.d.ts +3 -0
- package/dist/catalog/images/fairy-caves/treehouse.d.ts.map +1 -0
- package/dist/catalog/images/fairy-caves/treehouse.js +8 -0
- package/dist/catalog/images/fairy-caves/treehouse.js.map +1 -0
- package/dist/catalog/images/fairy-caves/treehouse.thumb.webp +0 -0
- package/dist/catalog/images/fairy-caves/treehouse.web.d.ts +3 -0
- package/dist/catalog/images/fairy-caves/treehouse.web.d.ts.map +1 -0
- package/dist/catalog/images/fairy-caves/treehouse.web.js +12 -0
- package/dist/catalog/images/fairy-caves/treehouse.web.js.map +1 -0
- package/dist/catalog/images/fairy-caves/treehouse.webp +0 -0
- package/dist/catalog/images/home/home-dark.d.ts +3 -0
- package/dist/catalog/images/home/home-dark.d.ts.map +1 -0
- package/dist/catalog/images/home/home-dark.js +8 -0
- package/dist/catalog/images/home/home-dark.js.map +1 -0
- package/dist/catalog/images/home/home-dark.thumb.webp +0 -0
- package/dist/catalog/images/home/home-dark.web.d.ts +3 -0
- package/dist/catalog/images/home/home-dark.web.d.ts.map +1 -0
- package/dist/catalog/images/home/home-dark.web.js +12 -0
- package/dist/catalog/images/home/home-dark.web.js.map +1 -0
- package/dist/catalog/images/home/home-light.d.ts +3 -0
- package/dist/catalog/images/home/home-light.d.ts.map +1 -0
- package/dist/catalog/images/home/home-light.js +8 -0
- package/dist/catalog/images/home/home-light.js.map +1 -0
- package/dist/catalog/images/home/home-light.thumb.webp +0 -0
- package/dist/catalog/images/home/home-light.web.d.ts +3 -0
- package/dist/catalog/images/home/home-light.web.d.ts.map +1 -0
- package/dist/catalog/images/home/home-light.web.js +12 -0
- package/dist/catalog/images/home/home-light.web.js.map +1 -0
- package/dist/catalog/images/image-ids.d.ts +3 -0
- package/dist/catalog/images/image-ids.d.ts.map +1 -0
- package/dist/catalog/images/image-ids.js +43 -0
- package/dist/catalog/images/image-ids.js.map +1 -0
- package/dist/catalog/images/image.types.d.ts +2 -0
- package/dist/catalog/images/image.types.d.ts.map +1 -0
- package/dist/catalog/images/image.types.js +3 -0
- package/dist/catalog/images/image.types.js.map +1 -0
- package/dist/catalog/images/index.d.ts +3 -0
- package/dist/catalog/images/index.d.ts.map +1 -0
- package/dist/catalog/images/index.js +10 -0
- package/dist/catalog/images/index.js.map +1 -0
- package/dist/catalog/images/nature/landscape-dark.d.ts +3 -0
- package/dist/catalog/images/nature/landscape-dark.d.ts.map +1 -0
- package/dist/catalog/images/nature/landscape-dark.js +8 -0
- package/dist/catalog/images/nature/landscape-dark.js.map +1 -0
- package/dist/catalog/images/nature/landscape-dark.thumb.webp +0 -0
- package/dist/catalog/images/nature/landscape-dark.web.d.ts +3 -0
- package/dist/catalog/images/nature/landscape-dark.web.d.ts.map +1 -0
- package/dist/catalog/images/nature/landscape-dark.web.js +12 -0
- package/dist/catalog/images/nature/landscape-dark.web.js.map +1 -0
- package/dist/catalog/images/nature/landscape-light.d.ts +3 -0
- package/dist/catalog/images/nature/landscape-light.d.ts.map +1 -0
- package/dist/catalog/images/nature/landscape-light.js +8 -0
- package/dist/catalog/images/nature/landscape-light.js.map +1 -0
- package/dist/catalog/images/nature/landscape-light.thumb.webp +0 -0
- package/dist/catalog/images/nature/landscape-light.web.d.ts +3 -0
- package/dist/catalog/images/nature/landscape-light.web.d.ts.map +1 -0
- package/dist/catalog/images/nature/landscape-light.web.js +12 -0
- package/dist/catalog/images/nature/landscape-light.web.js.map +1 -0
- package/dist/catalog/images/office/office-dark.d.ts +3 -0
- package/dist/catalog/images/office/office-dark.d.ts.map +1 -0
- package/dist/catalog/images/office/office-dark.js +8 -0
- package/dist/catalog/images/office/office-dark.js.map +1 -0
- package/dist/catalog/images/office/office-dark.thumb.webp +0 -0
- package/dist/catalog/images/office/office-dark.web.d.ts +3 -0
- package/dist/catalog/images/office/office-dark.web.d.ts.map +1 -0
- package/dist/catalog/images/office/office-dark.web.js +12 -0
- package/dist/catalog/images/office/office-dark.web.js.map +1 -0
- package/dist/catalog/images/office/office-light.d.ts +3 -0
- package/dist/catalog/images/office/office-light.d.ts.map +1 -0
- package/dist/catalog/images/office/office-light.js +8 -0
- package/dist/catalog/images/office/office-light.js.map +1 -0
- package/dist/catalog/images/office/office-light.thumb.webp +0 -0
- package/dist/catalog/images/office/office-light.web.d.ts +3 -0
- package/dist/catalog/images/office/office-light.web.d.ts.map +1 -0
- package/dist/catalog/images/office/office-light.web.js +12 -0
- package/dist/catalog/images/office/office-light.web.js.map +1 -0
- package/dist/catalog/images/sci-fi/sci-fi-light.d.ts +3 -0
- package/dist/catalog/images/sci-fi/sci-fi-light.d.ts.map +1 -0
- package/dist/catalog/images/sci-fi/sci-fi-light.js +8 -0
- package/dist/catalog/images/sci-fi/sci-fi-light.js.map +1 -0
- package/dist/catalog/images/sci-fi/sci-fi-light.thumb.webp +0 -0
- package/dist/catalog/images/sci-fi/sci-fi-light.web.d.ts +3 -0
- package/dist/catalog/images/sci-fi/sci-fi-light.web.d.ts.map +1 -0
- package/dist/catalog/images/sci-fi/sci-fi-light.web.js +12 -0
- package/dist/catalog/images/sci-fi/sci-fi-light.web.js.map +1 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.d.ts +3 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.d.ts.map +1 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.js +8 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.js.map +1 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.thumb.webp +0 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.web.d.ts +3 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.web.d.ts.map +1 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.web.js +12 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.web.js.map +1 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.webp +0 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark.d.ts +3 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark.d.ts.map +1 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark.js +8 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark.js.map +1 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark.thumb.webp +0 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark.web.d.ts +3 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark.web.d.ts.map +1 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark.web.js +12 -0
- package/dist/catalog/images/simiancraft/simiancraft-dark.web.js.map +1 -0
- package/dist/catalog/images/simiancraft/simiancraft-light-transparency.d.ts +3 -0
- package/dist/catalog/images/simiancraft/simiancraft-light-transparency.d.ts.map +1 -0
- package/dist/catalog/images/simiancraft/simiancraft-light-transparency.js +8 -0
- package/dist/catalog/images/simiancraft/simiancraft-light-transparency.js.map +1 -0
- package/dist/catalog/images/simiancraft/simiancraft-light-transparency.thumb.webp +0 -0
- package/dist/catalog/images/simiancraft/simiancraft-light-transparency.web.d.ts +3 -0
- package/dist/catalog/images/simiancraft/simiancraft-light-transparency.web.d.ts.map +1 -0
- package/dist/catalog/images/simiancraft/simiancraft-light-transparency.web.js +12 -0
- package/dist/catalog/images/simiancraft/simiancraft-light-transparency.web.js.map +1 -0
- package/dist/catalog/images/simiancraft/simiancraft-light-transparency.webp +0 -0
- package/dist/catalog/images/simiancraft/simiancraft-light.d.ts +3 -0
- package/dist/catalog/images/simiancraft/simiancraft-light.d.ts.map +1 -0
- package/dist/catalog/images/simiancraft/simiancraft-light.js +8 -0
- package/dist/catalog/images/simiancraft/simiancraft-light.js.map +1 -0
- package/dist/catalog/images/simiancraft/simiancraft-light.thumb.webp +0 -0
- package/dist/catalog/images/simiancraft/simiancraft-light.web.d.ts +3 -0
- package/dist/catalog/images/simiancraft/simiancraft-light.web.d.ts.map +1 -0
- package/dist/catalog/images/simiancraft/simiancraft-light.web.js +12 -0
- package/dist/catalog/images/simiancraft/simiancraft-light.web.js.map +1 -0
- package/dist/catalog/images/spaceship/observation-deck.d.ts +3 -0
- package/dist/catalog/images/spaceship/observation-deck.d.ts.map +1 -0
- package/dist/catalog/images/spaceship/observation-deck.js +8 -0
- package/dist/catalog/images/spaceship/observation-deck.js.map +1 -0
- package/dist/catalog/images/spaceship/observation-deck.thumb.webp +0 -0
- package/dist/catalog/images/spaceship/observation-deck.web.d.ts +3 -0
- package/dist/catalog/images/spaceship/observation-deck.web.d.ts.map +1 -0
- package/dist/catalog/images/spaceship/observation-deck.web.js +12 -0
- package/dist/catalog/images/spaceship/observation-deck.web.js.map +1 -0
- package/dist/catalog/images/spaceship/observation-deck.webp +0 -0
- package/dist/catalog/images/underwater/oceanscape-dark.d.ts +3 -0
- package/dist/catalog/images/underwater/oceanscape-dark.d.ts.map +1 -0
- package/dist/catalog/images/underwater/oceanscape-dark.js +8 -0
- package/dist/catalog/images/underwater/oceanscape-dark.js.map +1 -0
- package/dist/catalog/images/underwater/oceanscape-dark.thumb.webp +0 -0
- package/dist/catalog/images/underwater/oceanscape-dark.web.d.ts +3 -0
- package/dist/catalog/images/underwater/oceanscape-dark.web.d.ts.map +1 -0
- package/dist/catalog/images/underwater/oceanscape-dark.web.js +12 -0
- package/dist/catalog/images/underwater/oceanscape-dark.web.js.map +1 -0
- package/dist/catalog/images/underwater/oceanscape-dark.webp +0 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-1.d.ts +3 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-1.d.ts.map +1 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-1.js +8 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-1.js.map +1 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-1.thumb.webp +0 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-1.web.d.ts +3 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-1.web.d.ts.map +1 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-1.web.js +12 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-1.web.js.map +1 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-1.webp +0 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-2.d.ts +3 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-2.d.ts.map +1 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-2.js +8 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-2.js.map +1 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-2.thumb.webp +0 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-2.web.d.ts +3 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-2.web.d.ts.map +1 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-2.web.js +12 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-2.web.js.map +1 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-2.webp +0 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-night.d.ts +3 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-night.d.ts.map +1 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-night.js +8 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-night.js.map +1 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-night.thumb.webp +0 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-night.web.d.ts +3 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-night.web.d.ts.map +1 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-night.web.js +12 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-night.web.js.map +1 -0
- package/dist/catalog/images/wizard-tower/wizard-tower-night.webp +0 -0
- package/dist/catalog/shaders/_shared/types.d.ts +38 -0
- package/dist/catalog/shaders/_shared/types.d.ts.map +1 -0
- package/dist/catalog/shaders/_shared/types.js +15 -0
- package/dist/catalog/shaders/_shared/types.js.map +1 -0
- package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.d.ts +26 -0
- package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.d.ts.map +1 -0
- package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.form.d.ts +3 -0
- package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.form.d.ts.map +1 -0
- package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.form.js +15 -0
- package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.form.js.map +1 -0
- package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.js +84 -0
- package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.js.map +1 -0
- package/dist/catalog/shaders/blur/blur.d.ts +15 -0
- package/dist/catalog/shaders/blur/blur.d.ts.map +1 -0
- package/dist/catalog/shaders/blur/blur.form.d.ts +3 -0
- package/dist/catalog/shaders/blur/blur.form.d.ts.map +1 -0
- package/dist/catalog/shaders/blur/blur.form.js +15 -0
- package/dist/catalog/shaders/blur/blur.form.js.map +1 -0
- package/dist/catalog/shaders/blur/blur.js +27 -0
- package/dist/catalog/shaders/blur/blur.js.map +1 -0
- package/dist/catalog/shaders/clouds/clouds.d.ts +34 -0
- package/dist/catalog/shaders/clouds/clouds.d.ts.map +1 -0
- package/dist/catalog/shaders/clouds/clouds.form.d.ts +3 -0
- package/dist/catalog/shaders/clouds/clouds.form.d.ts.map +1 -0
- package/dist/catalog/shaders/clouds/clouds.form.js +15 -0
- package/dist/catalog/shaders/clouds/clouds.form.js.map +1 -0
- package/dist/catalog/shaders/clouds/clouds.js +98 -0
- package/dist/catalog/shaders/clouds/clouds.js.map +1 -0
- package/dist/catalog/shaders/corporate-blobs/corporate-blobs.d.ts +40 -0
- package/dist/catalog/shaders/corporate-blobs/corporate-blobs.d.ts.map +1 -0
- package/dist/catalog/shaders/corporate-blobs/corporate-blobs.form.d.ts +3 -0
- package/dist/catalog/shaders/corporate-blobs/corporate-blobs.form.d.ts.map +1 -0
- package/dist/catalog/shaders/corporate-blobs/corporate-blobs.form.js +15 -0
- package/dist/catalog/shaders/corporate-blobs/corporate-blobs.form.js.map +1 -0
- package/dist/catalog/shaders/corporate-blobs/corporate-blobs.js +100 -0
- package/dist/catalog/shaders/corporate-blobs/corporate-blobs.js.map +1 -0
- package/dist/catalog/shaders/fireflies/fireflies.d.ts +18 -0
- package/dist/catalog/shaders/fireflies/fireflies.d.ts.map +1 -0
- package/dist/catalog/shaders/fireflies/fireflies.form.d.ts +3 -0
- package/dist/catalog/shaders/fireflies/fireflies.form.d.ts.map +1 -0
- package/dist/catalog/shaders/fireflies/fireflies.form.js +15 -0
- package/dist/catalog/shaders/fireflies/fireflies.form.js.map +1 -0
- package/dist/catalog/shaders/fireflies/fireflies.js +47 -0
- package/dist/catalog/shaders/fireflies/fireflies.js.map +1 -0
- package/dist/catalog/shaders/godrays/godrays.d.ts +26 -0
- package/dist/catalog/shaders/godrays/godrays.d.ts.map +1 -0
- package/dist/catalog/shaders/godrays/godrays.form.d.ts +3 -0
- package/dist/catalog/shaders/godrays/godrays.form.d.ts.map +1 -0
- package/dist/catalog/shaders/godrays/godrays.form.js +15 -0
- package/dist/catalog/shaders/godrays/godrays.form.js.map +1 -0
- package/dist/catalog/shaders/godrays/godrays.js +83 -0
- package/dist/catalog/shaders/godrays/godrays.js.map +1 -0
- package/dist/catalog/shaders/index.d.ts +73 -0
- package/dist/catalog/shaders/index.d.ts.map +1 -0
- package/dist/catalog/shaders/index.js +30 -0
- package/dist/catalog/shaders/index.js.map +1 -0
- package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.d.ts +44 -0
- package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.d.ts.map +1 -0
- package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.form.d.ts +3 -0
- package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.form.d.ts.map +1 -0
- package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.form.js +16 -0
- package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.form.js.map +1 -0
- package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.js +91 -0
- package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.js.map +1 -0
- package/dist/catalog/shaders/nebula/nebula.d.ts +20 -0
- package/dist/catalog/shaders/nebula/nebula.d.ts.map +1 -0
- package/dist/catalog/shaders/nebula/nebula.form.d.ts +3 -0
- package/dist/catalog/shaders/nebula/nebula.form.d.ts.map +1 -0
- package/dist/catalog/shaders/nebula/nebula.form.js +15 -0
- package/dist/catalog/shaders/nebula/nebula.form.js.map +1 -0
- package/dist/catalog/shaders/nebula/nebula.js +58 -0
- package/dist/catalog/shaders/nebula/nebula.js.map +1 -0
- package/dist/catalog/shaders/plasma/plasma.d.ts +16 -0
- package/dist/catalog/shaders/plasma/plasma.d.ts.map +1 -0
- package/dist/catalog/shaders/plasma/plasma.form.d.ts +3 -0
- package/dist/catalog/shaders/plasma/plasma.form.d.ts.map +1 -0
- package/dist/catalog/shaders/plasma/plasma.form.js +15 -0
- package/dist/catalog/shaders/plasma/plasma.form.js.map +1 -0
- package/dist/catalog/shaders/plasma/plasma.js +32 -0
- package/dist/catalog/shaders/plasma/plasma.js.map +1 -0
- package/dist/catalog/shaders/simianlights/simianlights.d.ts +20 -0
- package/dist/catalog/shaders/simianlights/simianlights.d.ts.map +1 -0
- package/dist/catalog/shaders/simianlights/simianlights.form.d.ts +3 -0
- package/dist/catalog/shaders/simianlights/simianlights.form.d.ts.map +1 -0
- package/dist/catalog/shaders/simianlights/simianlights.form.js +15 -0
- package/dist/catalog/shaders/simianlights/simianlights.form.js.map +1 -0
- package/dist/catalog/shaders/simianlights/simianlights.js +57 -0
- package/dist/catalog/shaders/simianlights/simianlights.js.map +1 -0
- package/dist/src/components/form/control-form.d.ts +37 -0
- package/dist/src/components/form/control-form.d.ts.map +1 -0
- package/dist/src/components/form/control-form.js +55 -0
- package/dist/src/components/form/control-form.js.map +1 -0
- package/dist/src/components/form/make-controls.d.ts +22 -0
- package/dist/src/components/form/make-controls.d.ts.map +1 -0
- package/dist/src/components/form/make-controls.js +19 -0
- package/dist/src/components/form/make-controls.js.map +1 -0
- package/dist/src/components/form/scope.d.ts +2 -0
- package/dist/src/components/form/scope.d.ts.map +1 -0
- package/dist/src/components/form/scope.js +11 -0
- package/dist/src/components/form/scope.js.map +1 -0
- package/dist/src/components/form/use-field.d.ts +10 -0
- package/dist/src/components/form/use-field.d.ts.map +1 -0
- package/dist/src/components/form/use-field.js +27 -0
- package/dist/src/components/form/use-field.js.map +1 -0
- package/dist/src/components/preset-book-menu/index.d.ts +52 -0
- package/dist/src/components/preset-book-menu/index.d.ts.map +1 -0
- package/dist/src/components/preset-book-menu/index.js +152 -0
- package/dist/src/components/preset-book-menu/index.js.map +1 -0
- package/dist/src/components/preset-book-menu/layout.d.ts +25 -0
- package/dist/src/components/preset-book-menu/layout.d.ts.map +1 -0
- package/dist/src/components/preset-book-menu/layout.js +19 -0
- package/dist/src/components/preset-book-menu/layout.js.map +1 -0
- package/dist/src/components/preset-book-menu/preset-book-menu.types.d.ts +88 -0
- package/dist/src/components/preset-book-menu/preset-book-menu.types.d.ts.map +1 -0
- package/dist/src/components/preset-book-menu/preset-book-menu.types.js +14 -0
- package/dist/src/components/preset-book-menu/preset-book-menu.types.js.map +1 -0
- package/dist/src/components/preset-book-menu/preset-grid.d.ts +16 -0
- package/dist/src/components/preset-book-menu/preset-grid.d.ts.map +1 -0
- package/dist/src/components/preset-book-menu/preset-grid.js +49 -0
- package/dist/src/components/preset-book-menu/preset-grid.js.map +1 -0
- package/dist/src/components/preset-book-menu/resolve-image-uri.d.ts +3 -0
- package/dist/src/components/preset-book-menu/resolve-image-uri.d.ts.map +1 -0
- package/dist/src/components/preset-book-menu/resolve-image-uri.js +28 -0
- package/dist/src/components/preset-book-menu/resolve-image-uri.js.map +1 -0
- package/dist/src/components/preset-book-menu/resolve-image-uri.types.d.ts +13 -0
- package/dist/src/components/preset-book-menu/resolve-image-uri.types.d.ts.map +1 -0
- package/dist/src/components/preset-book-menu/resolve-image-uri.types.js +5 -0
- package/dist/src/components/preset-book-menu/resolve-image-uri.types.js.map +1 -0
- package/dist/src/components/preset-book-menu/resolve-image-uri.web.d.ts +3 -0
- package/dist/src/components/preset-book-menu/resolve-image-uri.web.d.ts.map +1 -0
- package/dist/src/components/preset-book-menu/resolve-image-uri.web.js +17 -0
- package/dist/src/components/preset-book-menu/resolve-image-uri.web.js.map +1 -0
- package/dist/src/components/preset-control-panel/composite-layer-control-panel.d.ts +14 -0
- package/dist/src/components/preset-control-panel/composite-layer-control-panel.d.ts.map +1 -0
- package/dist/src/components/preset-control-panel/composite-layer-control-panel.js +36 -0
- package/dist/src/components/preset-control-panel/composite-layer-control-panel.js.map +1 -0
- package/dist/src/components/preset-control-panel/control-section.d.ts +9 -0
- package/dist/src/components/preset-control-panel/control-section.d.ts.map +1 -0
- package/dist/src/components/preset-control-panel/control-section.js +47 -0
- package/dist/src/components/preset-control-panel/control-section.js.map +1 -0
- package/dist/src/components/preset-control-panel/control.d.ts +10 -0
- package/dist/src/components/preset-control-panel/control.d.ts.map +1 -0
- package/dist/src/components/preset-control-panel/control.js +35 -0
- package/dist/src/components/preset-control-panel/control.js.map +1 -0
- package/dist/src/components/preset-control-panel/index.d.ts +14 -0
- package/dist/src/components/preset-control-panel/index.d.ts.map +1 -0
- package/dist/src/components/preset-control-panel/index.js +49 -0
- package/dist/src/components/preset-control-panel/index.js.map +1 -0
- package/dist/src/components/preset-control-panel/mask-control-panel.d.ts +11 -0
- package/dist/src/components/preset-control-panel/mask-control-panel.d.ts.map +1 -0
- package/dist/src/components/preset-control-panel/mask-control-panel.js +34 -0
- package/dist/src/components/preset-control-panel/mask-control-panel.js.map +1 -0
- package/dist/src/components/preset-control-panel/preset-control-panel.d.ts +12 -0
- package/dist/src/components/preset-control-panel/preset-control-panel.d.ts.map +1 -0
- package/dist/src/components/preset-control-panel/preset-control-panel.js +23 -0
- package/dist/src/components/preset-control-panel/preset-control-panel.js.map +1 -0
- package/dist/src/components/preset-control-panel/transform-control-panel.d.ts +14 -0
- package/dist/src/components/preset-control-panel/transform-control-panel.d.ts.map +1 -0
- package/dist/src/components/preset-control-panel/transform-control-panel.js +58 -0
- package/dist/src/components/preset-control-panel/transform-control-panel.js.map +1 -0
- package/dist/src/components/preset-tile/index.d.ts +24 -0
- package/dist/src/components/preset-tile/index.d.ts.map +1 -0
- package/dist/src/components/preset-tile/index.js +98 -0
- package/dist/src/components/preset-tile/index.js.map +1 -0
- package/dist/src/components/theme/provider.d.ts +18 -0
- package/dist/src/components/theme/provider.d.ts.map +1 -0
- package/dist/src/components/theme/provider.js +29 -0
- package/dist/src/components/theme/provider.js.map +1 -0
- package/dist/src/components/theme/slots.d.ts +17 -0
- package/dist/src/components/theme/slots.d.ts.map +1 -0
- package/dist/src/components/theme/slots.js +9 -0
- package/dist/src/components/theme/slots.js.map +1 -0
- package/dist/src/components/ui/button.d.ts +14 -0
- package/dist/src/components/ui/button.d.ts.map +1 -0
- package/dist/src/components/ui/button.js +29 -0
- package/dist/src/components/ui/button.js.map +1 -0
- package/dist/src/components/ui/color-picker.d.ts +12 -0
- package/dist/src/components/ui/color-picker.d.ts.map +1 -0
- package/dist/src/components/ui/color-picker.js +43 -0
- package/dist/src/components/ui/color-picker.js.map +1 -0
- package/dist/src/components/ui/index.d.ts +6 -0
- package/dist/src/components/ui/index.d.ts.map +1 -0
- package/dist/src/components/ui/index.js +18 -0
- package/dist/src/components/ui/index.js.map +1 -0
- package/dist/src/components/ui/label.d.ts +10 -0
- package/dist/src/components/ui/label.d.ts.map +1 -0
- package/dist/src/components/ui/label.js +14 -0
- package/dist/src/components/ui/label.js.map +1 -0
- package/dist/src/components/ui/point.d.ts +19 -0
- package/dist/src/components/ui/point.d.ts.map +1 -0
- package/dist/src/components/ui/point.js +52 -0
- package/dist/src/components/ui/point.js.map +1 -0
- package/dist/src/components/ui/polygon-field.d.ts +10 -0
- package/dist/src/components/ui/polygon-field.d.ts.map +1 -0
- package/dist/src/components/ui/polygon-field.js +50 -0
- package/dist/src/components/ui/polygon-field.js.map +1 -0
- package/dist/src/components/ui/readout.d.ts +10 -0
- package/dist/src/components/ui/readout.d.ts.map +1 -0
- package/dist/src/components/ui/readout.js +14 -0
- package/dist/src/components/ui/readout.js.map +1 -0
- package/dist/src/components/ui/slider-value.d.ts +8 -0
- package/dist/src/components/ui/slider-value.d.ts.map +1 -0
- package/dist/src/components/ui/slider-value.js +17 -0
- package/dist/src/components/ui/slider-value.js.map +1 -0
- package/dist/src/components/ui/slider.d.ts +15 -0
- package/dist/src/components/ui/slider.d.ts.map +1 -0
- package/dist/src/components/ui/slider.js +58 -0
- package/dist/src/components/ui/slider.js.map +1 -0
- package/dist/src/components/ui/switch.d.ts +8 -0
- package/dist/src/components/ui/switch.d.ts.map +1 -0
- package/dist/src/components/ui/switch.js +24 -0
- package/dist/src/components/ui/switch.js.map +1 -0
- package/dist/src/index.d.ts +18 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +187 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/index.web.d.ts +32 -0
- package/dist/src/index.web.d.ts.map +1 -0
- package/dist/src/index.web.js +119 -0
- package/dist/src/index.web.js.map +1 -0
- package/dist/src/kaleidoscope/controls.d.ts +24 -0
- package/dist/src/kaleidoscope/controls.d.ts.map +1 -0
- package/dist/src/kaleidoscope/controls.js +92 -0
- package/dist/src/kaleidoscope/controls.js.map +1 -0
- package/dist/src/kaleidoscope/effect.d.ts +4 -0
- package/dist/src/kaleidoscope/effect.d.ts.map +1 -0
- package/dist/src/kaleidoscope/effect.js +7 -0
- package/dist/src/kaleidoscope/effect.js.map +1 -0
- package/dist/src/kaleidoscope/effect.types.d.ts +47 -0
- package/dist/src/kaleidoscope/effect.types.d.ts.map +1 -0
- package/dist/src/kaleidoscope/effect.types.js +9 -0
- package/dist/src/kaleidoscope/effect.types.js.map +1 -0
- package/dist/src/kaleidoscope/shader-to-spec.d.ts +4 -0
- package/dist/src/kaleidoscope/shader-to-spec.d.ts.map +1 -0
- package/dist/src/kaleidoscope/shader-to-spec.js +17 -0
- package/dist/src/kaleidoscope/shader-to-spec.js.map +1 -0
- package/dist/src/kaleidoscope/types.d.ts +79 -0
- package/dist/src/kaleidoscope/types.d.ts.map +1 -0
- package/dist/src/kaleidoscope/types.js +18 -0
- package/dist/src/kaleidoscope/types.js.map +1 -0
- package/dist/src/kaleidoscope.preset-book.types.d.ts +86 -0
- package/dist/src/kaleidoscope.preset-book.types.d.ts.map +1 -0
- package/dist/src/kaleidoscope.preset-book.types.js +16 -0
- package/dist/src/kaleidoscope.preset-book.types.js.map +1 -0
- package/dist/src/lib/primitives.types.d.ts +3 -0
- package/dist/src/lib/primitives.types.d.ts.map +1 -0
- package/dist/src/lib/primitives.types.js +5 -0
- package/dist/src/lib/primitives.types.js.map +1 -0
- package/dist/src/lib/test-id.d.ts +30 -0
- package/dist/src/lib/test-id.d.ts.map +1 -0
- package/dist/src/lib/test-id.js +81 -0
- package/dist/src/lib/test-id.js.map +1 -0
- package/dist/src/livekit.d.ts +24 -0
- package/dist/src/livekit.d.ts.map +1 -0
- package/dist/src/livekit.js +63 -0
- package/dist/src/livekit.js.map +1 -0
- package/dist/src/nativewind.d.ts +7 -0
- package/dist/src/nativewind.d.ts.map +1 -0
- package/dist/src/nativewind.js +43 -0
- package/dist/src/nativewind.js.map +1 -0
- package/dist/web-driver/effects/composite.d.ts +14 -0
- package/dist/web-driver/effects/composite.d.ts.map +1 -0
- package/dist/web-driver/effects/composite.js +576 -0
- package/dist/web-driver/effects/composite.js.map +1 -0
- package/dist/web-driver/effects/layer-shaders.d.ts +2 -0
- package/dist/web-driver/effects/layer-shaders.d.ts.map +1 -0
- package/dist/web-driver/effects/layer-shaders.js +11 -0
- package/dist/web-driver/effects/layer-shaders.js.map +1 -0
- package/dist/web-driver/effects/transform.d.ts +4 -0
- package/dist/web-driver/effects/transform.d.ts.map +1 -0
- package/dist/web-driver/effects/transform.js +66 -0
- package/dist/web-driver/effects/transform.js.map +1 -0
- package/dist/web-driver/index.d.ts +6 -0
- package/dist/web-driver/index.d.ts.map +1 -0
- package/dist/web-driver/index.js +21 -0
- package/dist/web-driver/index.js.map +1 -0
- package/dist/web-driver/insertable-streams.d.ts.map +1 -0
- package/dist/web-driver/insertable-streams.js +68 -0
- package/dist/web-driver/insertable-streams.js.map +1 -0
- package/dist/web-driver/segmenter.d.ts.map +1 -0
- package/dist/web-driver/segmenter.js +89 -0
- package/dist/web-driver/segmenter.js.map +1 -0
- package/dist/web-driver/shaders.d.ts +2 -0
- package/dist/web-driver/shaders.d.ts.map +1 -0
- package/dist/web-driver/shaders.generated.d.ts +17 -0
- package/dist/web-driver/shaders.generated.d.ts.map +1 -0
- package/dist/web-driver/shaders.generated.js +1180 -0
- package/dist/web-driver/shaders.generated.js.map +1 -0
- package/dist/web-driver/shaders.js +28 -0
- package/dist/web-driver/shaders.js.map +1 -0
- package/dist/web-driver/tuning.d.ts.map +1 -0
- package/dist/web-driver/tuning.js +61 -0
- package/dist/web-driver/tuning.js.map +1 -0
- package/ios/Kaleidoscope.podspec +22 -15
- package/ios/KaleidoscopeModule/BundledImage.swift +39 -0
- package/ios/KaleidoscopeModule/CompositeLayers.swift +142 -0
- package/ios/KaleidoscopeModule/EffectTuning.swift +86 -86
- package/ios/KaleidoscopeModule/KaleidoscopeModule.swift +55 -27
- package/ios/KaleidoscopeModule/Registration.swift +36 -57
- package/ios/KaleidoscopeModule/effects/CompositeProcessor.swift +906 -0
- package/ios/KaleidoscopeModule/effects/FrameBridge.swift +25 -25
- package/ios/KaleidoscopeModule/effects/TransformProcessor.swift +127 -126
- package/ios/KaleidoscopeModule/gpu/CompositeRendering.swift +352 -0
- package/ios/KaleidoscopeModule/gpu/Ingest.swift +104 -102
- package/ios/KaleidoscopeModule/gpu/MetalRenderer.swift +473 -544
- package/ios/KaleidoscopeModule/gpu/Orientation.swift +41 -41
- package/ios/KaleidoscopeModule/gpu/ShaderLibrary.swift +100 -54
- package/ios/KaleidoscopeModule/gpu/TextureBridge.swift +245 -244
- package/ios/KaleidoscopeModule/segmentation/MaskTuning.swift +11 -11
- package/ios/KaleidoscopeModule/segmentation/Segmenter.swift +360 -359
- package/ios/KaleidoscopeModule/shaders/GENERATIVE.txt +9 -0
- package/ios/KaleidoscopeModule/shaders/SHADERS.txt +13 -2
- package/ios/KaleidoscopeModule/shaders/anamorphic-lensflare.metalsrc +47 -0
- package/ios/KaleidoscopeModule/shaders/clouds.metalsrc +185 -0
- package/ios/KaleidoscopeModule/shaders/composite-blit.metalsrc +22 -0
- package/ios/KaleidoscopeModule/shaders/composite-blur.metalsrc +93 -0
- package/ios/KaleidoscopeModule/shaders/composite-camera.metalsrc +22 -0
- package/ios/KaleidoscopeModule/shaders/composite-image.metalsrc +24 -0
- package/ios/KaleidoscopeModule/shaders/composite-masked.metalsrc +22 -0
- package/ios/KaleidoscopeModule/shaders/composite-subject.metalsrc +23 -0
- package/ios/KaleidoscopeModule/shaders/corporate-blobs.metalsrc +221 -0
- package/ios/KaleidoscopeModule/shaders/fireflies.metalsrc +44 -0
- package/ios/KaleidoscopeModule/shaders/godrays.metalsrc +46 -0
- package/ios/KaleidoscopeModule/shaders/light-beams-and-motes.metalsrc +316 -0
- package/ios/KaleidoscopeModule/shaders/nebula.metalsrc +45 -45
- package/ios/KaleidoscopeModule/shaders/plasma.metalsrc +26 -0
- package/ios/KaleidoscopeModule/shaders/simianlights.metalsrc +45 -45
- package/package.json +485 -115
- package/plugin/build/android/assets.js +45 -0
- package/plugin/build/android/index.js +34 -0
- package/plugin/build/index.js +39 -0
- package/plugin/build/ios/assets.js +110 -0
- package/plugin/build/ios/deployment-target.js +105 -0
- package/plugin/build/ios/index.js +63 -0
- package/plugin/build/ios/pods.js +73 -0
- package/plugin/build/lib/constants.js +15 -0
- package/plugin/build/lib/file-manipulation.js +57 -0
- package/plugin/build/lib/mods.js +36 -0
- package/plugin/build/lib/preset-book.js +215 -0
- package/plugin/build/lib/types.js +16 -0
- package/src/components/form/control-form.tsx +112 -0
- package/src/components/form/make-controls.ts +33 -0
- package/src/components/form/scope.ts +9 -0
- package/src/components/form/use-field.ts +35 -0
- package/src/components/preset-book-menu/index.tsx +286 -0
- package/src/components/preset-book-menu/layout.tsx +63 -0
- package/src/components/preset-book-menu/preset-book-menu.types.ts +112 -0
- package/src/components/preset-book-menu/preset-grid.tsx +80 -0
- package/src/components/preset-book-menu/resolve-image-uri.ts +31 -0
- package/src/components/preset-book-menu/resolve-image-uri.types.ts +18 -0
- package/src/components/preset-book-menu/resolve-image-uri.web.ts +15 -0
- package/src/components/preset-control-panel/composite-layer-control-panel.tsx +56 -0
- package/src/components/preset-control-panel/control-section.tsx +84 -0
- package/src/components/preset-control-panel/control.tsx +50 -0
- package/src/components/preset-control-panel/index.ts +31 -0
- package/src/components/preset-control-panel/mask-control-panel.tsx +93 -0
- package/src/components/preset-control-panel/preset-control-panel.tsx +48 -0
- package/src/components/preset-control-panel/transform-control-panel.tsx +146 -0
- package/src/components/preset-tile/index.tsx +160 -0
- package/src/components/theme/provider.tsx +50 -0
- package/src/components/theme/slots.ts +37 -0
- package/src/components/ui/button.tsx +54 -0
- package/src/components/ui/color-picker.tsx +74 -0
- package/src/components/ui/index.ts +10 -0
- package/src/components/ui/label.tsx +24 -0
- package/src/components/ui/point.tsx +116 -0
- package/src/components/ui/polygon-field.tsx +84 -0
- package/src/components/ui/readout.tsx +25 -0
- package/src/components/ui/slider-value.ts +15 -0
- package/src/components/ui/slider.tsx +98 -0
- package/src/components/ui/switch.tsx +40 -0
- package/src/index.ts +176 -95
- package/src/index.web.ts +126 -74
- package/src/kaleidoscope/controls.ts +127 -0
- package/src/kaleidoscope/effect.ts +5 -0
- package/src/kaleidoscope/effect.types.ts +63 -0
- package/src/kaleidoscope/shader-to-spec.ts +16 -0
- package/src/kaleidoscope/types.ts +101 -0
- package/src/kaleidoscope.preset-book.types.ts +105 -0
- package/src/lib/primitives.types.ts +5 -0
- package/src/lib/test-id.ts +81 -0
- package/src/livekit.ts +6 -4
- package/src/nativewind.ts +41 -0
- package/android/src/main/assets/backgrounds/stylized-dark.webp +0 -0
- package/android/src/main/java/com/simiancraft/kaleidoscope/effects/BackgroundImageFactory.kt +0 -365
- package/android/src/main/java/com/simiancraft/kaleidoscope/effects/BlurFactory.kt +0 -400
- package/dist/backgrounds/dark-office.d.ts +0 -3
- package/dist/backgrounds/dark-office.d.ts.map +0 -1
- package/dist/backgrounds/dark-office.js +0 -5
- package/dist/backgrounds/dark-office.js.map +0 -1
- package/dist/backgrounds/dark-office.web.d.ts +0 -3
- package/dist/backgrounds/dark-office.web.d.ts.map +0 -1
- package/dist/backgrounds/dark-office.web.js +0 -8
- package/dist/backgrounds/dark-office.web.js.map +0 -1
- package/dist/backgrounds/debug-resolutions.d.ts +0 -3
- package/dist/backgrounds/debug-resolutions.d.ts.map +0 -1
- package/dist/backgrounds/debug-resolutions.js +0 -6
- package/dist/backgrounds/debug-resolutions.js.map +0 -1
- package/dist/backgrounds/debug-resolutions.web.d.ts +0 -3
- package/dist/backgrounds/debug-resolutions.web.d.ts.map +0 -1
- package/dist/backgrounds/debug-resolutions.web.js +0 -8
- package/dist/backgrounds/debug-resolutions.web.js.map +0 -1
- package/dist/backgrounds/home-dark.d.ts +0 -3
- package/dist/backgrounds/home-dark.d.ts.map +0 -1
- package/dist/backgrounds/home-dark.js +0 -5
- package/dist/backgrounds/home-dark.js.map +0 -1
- package/dist/backgrounds/home-dark.web.d.ts +0 -3
- package/dist/backgrounds/home-dark.web.d.ts.map +0 -1
- package/dist/backgrounds/home-dark.web.js +0 -6
- package/dist/backgrounds/home-dark.web.js.map +0 -1
- package/dist/backgrounds/home-light.d.ts +0 -3
- package/dist/backgrounds/home-light.d.ts.map +0 -1
- package/dist/backgrounds/home-light.js +0 -5
- package/dist/backgrounds/home-light.js.map +0 -1
- package/dist/backgrounds/home-light.web.d.ts +0 -3
- package/dist/backgrounds/home-light.web.d.ts.map +0 -1
- package/dist/backgrounds/home-light.web.js +0 -6
- package/dist/backgrounds/home-light.web.js.map +0 -1
- package/dist/backgrounds/index.d.ts +0 -3
- package/dist/backgrounds/index.d.ts.map +0 -1
- package/dist/backgrounds/index.js +0 -6
- package/dist/backgrounds/index.js.map +0 -1
- package/dist/backgrounds/light-office.d.ts +0 -3
- package/dist/backgrounds/light-office.d.ts.map +0 -1
- package/dist/backgrounds/light-office.js +0 -5
- package/dist/backgrounds/light-office.js.map +0 -1
- package/dist/backgrounds/light-office.web.d.ts +0 -3
- package/dist/backgrounds/light-office.web.d.ts.map +0 -1
- package/dist/backgrounds/light-office.web.js +0 -8
- package/dist/backgrounds/light-office.web.js.map +0 -1
- package/dist/backgrounds/nature-dark.d.ts +0 -3
- package/dist/backgrounds/nature-dark.d.ts.map +0 -1
- package/dist/backgrounds/nature-dark.js +0 -5
- package/dist/backgrounds/nature-dark.js.map +0 -1
- package/dist/backgrounds/nature-dark.web.d.ts +0 -3
- package/dist/backgrounds/nature-dark.web.d.ts.map +0 -1
- package/dist/backgrounds/nature-dark.web.js +0 -6
- package/dist/backgrounds/nature-dark.web.js.map +0 -1
- package/dist/backgrounds/nature-light.d.ts +0 -3
- package/dist/backgrounds/nature-light.d.ts.map +0 -1
- package/dist/backgrounds/nature-light.js +0 -5
- package/dist/backgrounds/nature-light.js.map +0 -1
- package/dist/backgrounds/nature-light.web.d.ts +0 -3
- package/dist/backgrounds/nature-light.web.d.ts.map +0 -1
- package/dist/backgrounds/nature-light.web.js +0 -6
- package/dist/backgrounds/nature-light.web.js.map +0 -1
- package/dist/backgrounds/preset-source.types.d.ts +0 -2
- package/dist/backgrounds/preset-source.types.d.ts.map +0 -1
- package/dist/backgrounds/preset-source.types.js +0 -2
- package/dist/backgrounds/preset-source.types.js.map +0 -1
- package/dist/backgrounds/presets.d.ts +0 -3
- package/dist/backgrounds/presets.d.ts.map +0 -1
- package/dist/backgrounds/presets.js +0 -34
- package/dist/backgrounds/presets.js.map +0 -1
- package/dist/backgrounds/simiancraft-dark.d.ts +0 -3
- package/dist/backgrounds/simiancraft-dark.d.ts.map +0 -1
- package/dist/backgrounds/simiancraft-dark.js +0 -5
- package/dist/backgrounds/simiancraft-dark.js.map +0 -1
- package/dist/backgrounds/simiancraft-dark.web.d.ts +0 -3
- package/dist/backgrounds/simiancraft-dark.web.d.ts.map +0 -1
- package/dist/backgrounds/simiancraft-dark.web.js +0 -6
- package/dist/backgrounds/simiancraft-dark.web.js.map +0 -1
- package/dist/backgrounds/simiancraft-light.d.ts +0 -3
- package/dist/backgrounds/simiancraft-light.d.ts.map +0 -1
- package/dist/backgrounds/simiancraft-light.js +0 -5
- package/dist/backgrounds/simiancraft-light.js.map +0 -1
- package/dist/backgrounds/simiancraft-light.web.d.ts +0 -3
- package/dist/backgrounds/simiancraft-light.web.d.ts.map +0 -1
- package/dist/backgrounds/simiancraft-light.web.js +0 -6
- package/dist/backgrounds/simiancraft-light.web.js.map +0 -1
- package/dist/backgrounds/stylized-dark.d.ts +0 -3
- package/dist/backgrounds/stylized-dark.d.ts.map +0 -1
- package/dist/backgrounds/stylized-dark.js +0 -5
- package/dist/backgrounds/stylized-dark.js.map +0 -1
- package/dist/backgrounds/stylized-dark.web.d.ts +0 -3
- package/dist/backgrounds/stylized-dark.web.d.ts.map +0 -1
- package/dist/backgrounds/stylized-dark.web.js +0 -6
- package/dist/backgrounds/stylized-dark.web.js.map +0 -1
- package/dist/backgrounds/stylized-dark.webp +0 -0
- package/dist/backgrounds/stylized-light.d.ts +0 -3
- package/dist/backgrounds/stylized-light.d.ts.map +0 -1
- package/dist/backgrounds/stylized-light.js +0 -5
- package/dist/backgrounds/stylized-light.js.map +0 -1
- package/dist/backgrounds/stylized-light.web.d.ts +0 -3
- package/dist/backgrounds/stylized-light.web.d.ts.map +0 -1
- package/dist/backgrounds/stylized-light.web.js +0 -6
- package/dist/backgrounds/stylized-light.web.js.map +0 -1
- package/dist/index.d.ts +0 -42
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -155
- package/dist/index.js.map +0 -1
- package/dist/index.web.d.ts +0 -49
- package/dist/index.web.d.ts.map +0 -1
- package/dist/index.web.js +0 -113
- package/dist/index.web.js.map +0 -1
- package/dist/livekit.d.ts +0 -24
- package/dist/livekit.d.ts.map +0 -1
- package/dist/livekit.js +0 -57
- package/dist/livekit.js.map +0 -1
- package/dist/types.d.ts +0 -74
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -10
- package/dist/types.js.map +0 -1
- package/dist/web/blur-kernel.d.ts +0 -6
- package/dist/web/blur-kernel.d.ts.map +0 -1
- package/dist/web/blur-kernel.js +0 -41
- package/dist/web/blur-kernel.js.map +0 -1
- package/dist/web/effects/background-image.d.ts +0 -3
- package/dist/web/effects/background-image.d.ts.map +0 -1
- package/dist/web/effects/background-image.js +0 -284
- package/dist/web/effects/background-image.js.map +0 -1
- package/dist/web/effects/blur.d.ts +0 -3
- package/dist/web/effects/blur.d.ts.map +0 -1
- package/dist/web/effects/blur.js +0 -339
- package/dist/web/effects/blur.js.map +0 -1
- package/dist/web/effects/transform.d.ts +0 -4
- package/dist/web/effects/transform.d.ts.map +0 -1
- package/dist/web/effects/transform.js +0 -62
- package/dist/web/effects/transform.js.map +0 -1
- package/dist/web/insertable-streams.d.ts.map +0 -1
- package/dist/web/insertable-streams.js +0 -64
- package/dist/web/insertable-streams.js.map +0 -1
- package/dist/web/segmenter.d.ts.map +0 -1
- package/dist/web/segmenter.js +0 -83
- package/dist/web/segmenter.js.map +0 -1
- package/dist/web/shaders.d.ts +0 -2
- package/dist/web/shaders.d.ts.map +0 -1
- package/dist/web/shaders.generated.d.ts +0 -4
- package/dist/web/shaders.generated.d.ts.map +0 -1
- package/dist/web/shaders.generated.js +0 -54
- package/dist/web/shaders.generated.js.map +0 -1
- package/dist/web/shaders.js +0 -32
- package/dist/web/shaders.js.map +0 -1
- package/dist/web/tuning.d.ts.map +0 -1
- package/dist/web/tuning.js +0 -55
- package/dist/web/tuning.js.map +0 -1
- package/ios/KaleidoscopeModule/effects/BackgroundImageProcessor.swift +0 -293
- package/ios/KaleidoscopeModule/effects/BlurProcessor.swift +0 -238
- package/ios/KaleidoscopeModule/resources/backgrounds/dark-office.webp +0 -0
- package/ios/KaleidoscopeModule/resources/backgrounds/debug-resolutions.webp +0 -0
- package/ios/KaleidoscopeModule/resources/backgrounds/home-dark.webp +0 -0
- package/ios/KaleidoscopeModule/resources/backgrounds/home-light.webp +0 -0
- package/ios/KaleidoscopeModule/resources/backgrounds/light-office.webp +0 -0
- package/ios/KaleidoscopeModule/resources/backgrounds/nature-dark.webp +0 -0
- package/ios/KaleidoscopeModule/resources/backgrounds/nature-light.webp +0 -0
- package/ios/KaleidoscopeModule/resources/backgrounds/simiancraft-dark.webp +0 -0
- package/ios/KaleidoscopeModule/resources/backgrounds/simiancraft-light.webp +0 -0
- package/ios/KaleidoscopeModule/resources/backgrounds/stylized-dark.webp +0 -0
- package/ios/KaleidoscopeModule/resources/backgrounds/stylized-light.webp +0 -0
- package/ios/KaleidoscopeModule/shaders/blur.metalsrc +0 -72
- package/ios/KaleidoscopeModule/shaders/composite.metalsrc +0 -22
- package/src/backgrounds/README.md +0 -83
- package/src/backgrounds/dark-office.ts +0 -6
- package/src/backgrounds/dark-office.web.ts +0 -9
- package/src/backgrounds/dark-office.webp +0 -0
- package/src/backgrounds/debug-resolutions.ts +0 -7
- package/src/backgrounds/debug-resolutions.web.ts +0 -9
- package/src/backgrounds/debug-resolutions.webp +0 -0
- package/src/backgrounds/home-dark.ts +0 -6
- package/src/backgrounds/home-dark.web.ts +0 -7
- package/src/backgrounds/home-dark.webp +0 -0
- package/src/backgrounds/home-light.ts +0 -6
- package/src/backgrounds/home-light.web.ts +0 -7
- package/src/backgrounds/home-light.webp +0 -0
- package/src/backgrounds/index.ts +0 -7
- package/src/backgrounds/light-office.ts +0 -6
- package/src/backgrounds/light-office.web.ts +0 -9
- package/src/backgrounds/light-office.webp +0 -0
- package/src/backgrounds/nature-dark.ts +0 -6
- package/src/backgrounds/nature-dark.web.ts +0 -7
- package/src/backgrounds/nature-dark.webp +0 -0
- package/src/backgrounds/nature-light.ts +0 -6
- package/src/backgrounds/nature-light.web.ts +0 -7
- package/src/backgrounds/nature-light.webp +0 -0
- package/src/backgrounds/preset-source.types.ts +0 -5
- package/src/backgrounds/presets.ts +0 -36
- package/src/backgrounds/simiancraft-dark.ts +0 -6
- package/src/backgrounds/simiancraft-dark.web.ts +0 -7
- package/src/backgrounds/simiancraft-dark.webp +0 -0
- package/src/backgrounds/simiancraft-light.ts +0 -6
- package/src/backgrounds/simiancraft-light.web.ts +0 -7
- package/src/backgrounds/simiancraft-light.webp +0 -0
- package/src/backgrounds/stylized-dark.ts +0 -6
- package/src/backgrounds/stylized-dark.web.ts +0 -7
- package/src/backgrounds/stylized-dark.webp +0 -0
- package/src/backgrounds/stylized-light.ts +0 -6
- package/src/backgrounds/stylized-light.web.ts +0 -7
- package/src/backgrounds/stylized-light.webp +0 -0
- package/src/types.ts +0 -89
- package/src/web/blur-kernel.ts +0 -44
- package/src/web/effects/background-image.ts +0 -364
- package/src/web/effects/blur.ts +0 -430
- package/src/web/effects/transform.ts +0 -69
- package/src/web/insertable-streams.ts +0 -112
- package/src/web/segmenter.ts +0 -107
- package/src/web/shaders.generated.ts +0 -56
- package/src/web/shaders.ts +0 -31
- package/src/web/tuning.ts +0 -67
- /package/{src/backgrounds → catalog/images}/assets.d.ts +0 -0
- /package/{android/src/main/assets/backgrounds → catalog/images/debug}/debug-resolutions.webp +0 -0
- /package/{android/src/main/assets/backgrounds → catalog/images/home}/home-dark.webp +0 -0
- /package/{android/src/main/assets/backgrounds → catalog/images/home}/home-light.webp +0 -0
- /package/{android/src/main/assets/backgrounds/nature-dark.webp → catalog/images/nature/landscape-dark.webp} +0 -0
- /package/{android/src/main/assets/backgrounds/nature-light.webp → catalog/images/nature/landscape-light.webp} +0 -0
- /package/{android/src/main/assets/backgrounds/dark-office.webp → catalog/images/office/office-dark.webp} +0 -0
- /package/{android/src/main/assets/backgrounds/light-office.webp → catalog/images/office/office-light.webp} +0 -0
- /package/{android/src/main/assets/backgrounds/stylized-light.webp → catalog/images/sci-fi/sci-fi-light.webp} +0 -0
- /package/{android/src/main/assets/backgrounds → catalog/images/simiancraft}/simiancraft-dark.webp +0 -0
- /package/{android/src/main/assets/backgrounds → catalog/images/simiancraft}/simiancraft-light.webp +0 -0
- /package/dist/{backgrounds → catalog/images/debug}/debug-resolutions.webp +0 -0
- /package/dist/{backgrounds → catalog/images/home}/home-dark.webp +0 -0
- /package/dist/{backgrounds → catalog/images/home}/home-light.webp +0 -0
- /package/dist/{backgrounds/nature-dark.webp → catalog/images/nature/landscape-dark.webp} +0 -0
- /package/dist/{backgrounds/nature-light.webp → catalog/images/nature/landscape-light.webp} +0 -0
- /package/dist/{backgrounds/dark-office.webp → catalog/images/office/office-dark.webp} +0 -0
- /package/dist/{backgrounds/light-office.webp → catalog/images/office/office-light.webp} +0 -0
- /package/dist/{backgrounds/stylized-light.webp → catalog/images/sci-fi/sci-fi-light.webp} +0 -0
- /package/dist/{backgrounds → catalog/images/simiancraft}/simiancraft-dark.webp +0 -0
- /package/dist/{backgrounds → catalog/images/simiancraft}/simiancraft-light.webp +0 -0
- /package/dist/{web → web-driver}/insertable-streams.d.ts +0 -0
- /package/dist/{web → web-driver}/segmenter.d.ts +0 -0
- /package/dist/{web → web-driver}/tuning.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-image-uri.web.js","sourceRoot":"","sources":["../../../../src/components/preset-book-menu/resolve-image-uri.web.ts"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,sCAAsC;AACtC,EAAE;AACF,6EAA6E;AAC7E,0EAA0E;AAC1E,iFAAiF;AACjF,wEAAwE;AACxE,yEAAyE;AACzE,iFAAiF;AACjF,iFAAiF;AACjF,iFAAiF;;;AAI1E,MAAM,eAAe,GAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC;AAA3D,QAAA,eAAe,GAAf,eAAe,CAA4C","sourcesContent":["// Web variant: the preset source is already a bundled image URL, so the\n// thumbnail URI is the source itself.\n//\n// How this file gets picked over the native sibling: Metro resolves the bare\n// `../resolve-image-uri` import to `.web.ts` via platform extensions; for\n// non-Metro dist consumers it is selected by the top-level `browser` FIELD remap\n// in package.json (dist/.../resolve-image-uri.js -> .web.js). That is a\n// different mechanism than the `backgrounds/*` subpath `exports` browser\n// CONDITIONS, because this file is reached by an internal relative import, not a\n// subpath export. Adding another platform-split file under src/ui consumed via a\n// bare import means extending that `browser` field, not adding an exports entry.\n\nimport type { ResolveImageUri } from './resolve-image-uri.types';\n\nexport const resolveImageUri: ResolveImageUri = (_id, source) => source;\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { UniformControl } from '../../../catalog/shaders';
|
|
2
|
+
/** Per-uniform range/label override, keyed by uniform name. */
|
|
3
|
+
export type ControlOverride = {
|
|
4
|
+
readonly min?: number;
|
|
5
|
+
readonly max?: number;
|
|
6
|
+
readonly step?: number;
|
|
7
|
+
readonly label?: string;
|
|
8
|
+
};
|
|
9
|
+
export type CompositeLayerControlPanelProps = {
|
|
10
|
+
readonly controls: readonly UniformControl[];
|
|
11
|
+
readonly overrides?: Readonly<Record<string, ControlOverride>>;
|
|
12
|
+
};
|
|
13
|
+
export declare function CompositeLayerControlPanel({ controls, overrides, }: CompositeLayerControlPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=composite-layer-control-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composite-layer-control-panel.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-control-panel/composite-layer-control-panel.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,+DAA+D;AAC/D,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;CAChE,CAAC;AAkBF,wBAAgB,0BAA0B,CAAC,EACzC,QAAQ,EACR,SAAS,GACV,EAAE,+BAA+B,2CAQjC","sourcesContent":["// CompositeLayerControlPanel: render a shader's `*_CONTROLS` descriptor list as\n// fields, in order, data-driven. This is the AUTO-FORM (the default when a shader\n// ships no custom layout form): `<CompositeLayerControlPanel controls={CLOUDS_CONTROLS} />`.\n// It maps every descriptor through the shared `dispatchControl`, so it handles\n// every kind (color, float, switch, polygon) the same way `<Control>` does.\n//\n// KaleidoscopePreset-level customization is props: pass a filtered `controls`\n// array to hide knobs, or `overrides` to narrow a control's range/label for this\n// composite. For real layout (grouping, split, per-beam lists), a shader exports\n// a custom form of `<Control uniform>`s instead of using this panel.\n\nimport { Fragment } from 'react';\nimport type { UniformControl } from '../../../catalog/shaders';\nimport { dispatchControl } from './control';\n\n/** Per-uniform range/label override, keyed by uniform name. */\nexport type ControlOverride = {\n readonly min?: number;\n readonly max?: number;\n readonly step?: number;\n readonly label?: string;\n};\n\nexport type CompositeLayerControlPanelProps = {\n readonly controls: readonly UniformControl[];\n readonly overrides?: Readonly<Record<string, ControlOverride>>;\n};\n\n// Merge a preset override onto a descriptor. min/max/step only apply to float;\n// label applies to any kind.\nfunction withOverride(c: UniformControl, o?: ControlOverride): UniformControl {\n if (!o) return c;\n if (c.kind === 'float') {\n return {\n ...c,\n min: o.min ?? c.min,\n max: o.max ?? c.max,\n step: o.step ?? c.step,\n label: o.label ?? c.label,\n };\n }\n return o.label ? { ...c, label: o.label } : c;\n}\n\nexport function CompositeLayerControlPanel({\n controls,\n overrides,\n}: CompositeLayerControlPanelProps) {\n return (\n <>\n {controls.map((c) => (\n <Fragment key={c.name}>{dispatchControl(withOverride(c, overrides?.[c.name]))}</Fragment>\n ))}\n </>\n );\n}\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CompositeLayerControlPanel = CompositeLayerControlPanel;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
// CompositeLayerControlPanel: render a shader's `*_CONTROLS` descriptor list as
|
|
6
|
+
// fields, in order, data-driven. This is the AUTO-FORM (the default when a shader
|
|
7
|
+
// ships no custom layout form): `<CompositeLayerControlPanel controls={CLOUDS_CONTROLS} />`.
|
|
8
|
+
// It maps every descriptor through the shared `dispatchControl`, so it handles
|
|
9
|
+
// every kind (color, float, switch, polygon) the same way `<Control>` does.
|
|
10
|
+
//
|
|
11
|
+
// KaleidoscopePreset-level customization is props: pass a filtered `controls`
|
|
12
|
+
// array to hide knobs, or `overrides` to narrow a control's range/label for this
|
|
13
|
+
// composite. For real layout (grouping, split, per-beam lists), a shader exports
|
|
14
|
+
// a custom form of `<Control uniform>`s instead of using this panel.
|
|
15
|
+
const react_1 = require("react");
|
|
16
|
+
const control_1 = require("./control");
|
|
17
|
+
// Merge a preset override onto a descriptor. min/max/step only apply to float;
|
|
18
|
+
// label applies to any kind.
|
|
19
|
+
function withOverride(c, o) {
|
|
20
|
+
if (!o)
|
|
21
|
+
return c;
|
|
22
|
+
if (c.kind === 'float') {
|
|
23
|
+
return {
|
|
24
|
+
...c,
|
|
25
|
+
min: o.min ?? c.min,
|
|
26
|
+
max: o.max ?? c.max,
|
|
27
|
+
step: o.step ?? c.step,
|
|
28
|
+
label: o.label ?? c.label,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return o.label ? { ...c, label: o.label } : c;
|
|
32
|
+
}
|
|
33
|
+
function CompositeLayerControlPanel({ controls, overrides, }) {
|
|
34
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: controls.map((c) => ((0, jsx_runtime_1.jsx)(react_1.Fragment, { children: (0, control_1.dispatchControl)(withOverride(c, overrides?.[c.name])) }, c.name))) }));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=composite-layer-control-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composite-layer-control-panel.js","sourceRoot":"","sources":["../../../../src/components/preset-control-panel/composite-layer-control-panel.tsx"],"names":[],"mappings":";;;;AAAA,gFAAgF;AAChF,kFAAkF;AAClF,6FAA6F;AAC7F,+EAA+E;AAC/E,4EAA4E;AAC5E,EAAE;AACF,8EAA8E;AAC9E,iFAAiF;AACjF,iFAAiF;AACjF,qEAAqE;AAErE,iCAAiC;AAEjC,uCAA4C;AAe5C,+EAA+E;AAC/E,6BAA6B;AAC7B,SAAS,YAAY,CAAC,CAAiB,EAAE,CAAmB;IAC1D,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO;YACL,GAAG,CAAC;YACJ,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG;YACnB,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG;YACnB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI;YACtB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK;SAC1B,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,oCAA2C,EACzC,QAAQ,EACR,SAAS,GACuB;IAChC,OAAO,CACL,2DACG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnB,uBAAC,gBAAQ,cAAe,IAAA,yBAAe,EAAC,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAA9D,CAAC,CAAC,IAAI,CAAoE,CAC1F,CAAC,GACD,CACJ,CAAC;AACJ,CAAC","sourcesContent":["// CompositeLayerControlPanel: render a shader's `*_CONTROLS` descriptor list as\n// fields, in order, data-driven. This is the AUTO-FORM (the default when a shader\n// ships no custom layout form): `<CompositeLayerControlPanel controls={CLOUDS_CONTROLS} />`.\n// It maps every descriptor through the shared `dispatchControl`, so it handles\n// every kind (color, float, switch, polygon) the same way `<Control>` does.\n//\n// KaleidoscopePreset-level customization is props: pass a filtered `controls`\n// array to hide knobs, or `overrides` to narrow a control's range/label for this\n// composite. For real layout (grouping, split, per-beam lists), a shader exports\n// a custom form of `<Control uniform>`s instead of using this panel.\n\nimport { Fragment } from 'react';\nimport type { UniformControl } from '../../../catalog/shaders';\nimport { dispatchControl } from './control';\n\n/** Per-uniform range/label override, keyed by uniform name. */\nexport type ControlOverride = {\n readonly min?: number;\n readonly max?: number;\n readonly step?: number;\n readonly label?: string;\n};\n\nexport type CompositeLayerControlPanelProps = {\n readonly controls: readonly UniformControl[];\n readonly overrides?: Readonly<Record<string, ControlOverride>>;\n};\n\n// Merge a preset override onto a descriptor. min/max/step only apply to float;\n// label applies to any kind.\nfunction withOverride(c: UniformControl, o?: ControlOverride): UniformControl {\n if (!o) return c;\n if (c.kind === 'float') {\n return {\n ...c,\n min: o.min ?? c.min,\n max: o.max ?? c.max,\n step: o.step ?? c.step,\n label: o.label ?? c.label,\n };\n }\n return o.label ? { ...c, label: o.label } : c;\n}\n\nexport function CompositeLayerControlPanel({\n controls,\n overrides,\n}: CompositeLayerControlPanelProps) {\n return (\n <>\n {controls.map((c) => (\n <Fragment key={c.name}>{dispatchControl(withOverride(c, overrides?.[c.name]))}</Fragment>\n ))}\n </>\n );\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { StyleProp, ViewStyle } from 'react-native';
|
|
3
|
+
export type ControlSectionProps = {
|
|
4
|
+
readonly title: string;
|
|
5
|
+
readonly children: ReactNode;
|
|
6
|
+
readonly style?: StyleProp<ViewStyle>;
|
|
7
|
+
};
|
|
8
|
+
export declare function ControlSection({ title, children, style }: ControlSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=control-section.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-section.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-control-panel/control-section.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA+BzD,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACvC,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,mBAAmB,2CAwB7E","sourcesContent":["// ControlSection: the shared chrome every control group wears (a title + a\n// controls slot + a web-only copy button). Rendered INSIDE a ControlForm so the\n// copy button can read that form's live view model and serialize it.\n//\n// Copy is a desktop tweak-then-paste-into-a-preset workflow: the button renders\n// only on web (Platform.OS), writes via navigator.clipboard, and depends on no\n// clipboard module. Native intentionally has no copy button.\n\nimport type { ReactNode } from 'react';\nimport { useContext } from 'react';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport { Platform, StyleSheet, Text, View } from 'react-native';\nimport { ControlFormContext, type FieldValue } from '../form/control-form';\nimport { useThemeSlot } from '../theme/provider';\nimport { Button } from '../ui/button';\n\ntype Values = Readonly<Record<string, FieldValue>>;\n\n// Round off float noise (drag jitter, the slider epsilon) and snap near-zero to\n// a true 0 so the pasted JSON reads as intended.\nconst round = (n: number): number => {\n const r = Math.round(n * 1e4) / 1e4;\n return Math.abs(r) < 1e-4 ? 0 : r;\n};\n\nconst roundForCopy = (values: Values): Record<string, FieldValue> => {\n const out: Record<string, FieldValue> = {};\n for (const [k, v] of Object.entries(values)) {\n out[k] = Array.isArray(v) ? v.map(round) : round(v as number);\n }\n return out;\n};\n\n// Web-only clipboard write, typed off globalThis so it needs no DOM lib and is a\n// no-op anywhere `navigator.clipboard` is absent.\nconst writeClipboard = (text: string): void => {\n const nav = (globalThis as { navigator?: { clipboard?: { writeText?: (t: string) => unknown } } })\n .navigator;\n nav?.clipboard?.writeText?.(text);\n};\n\nexport type ControlSectionProps = {\n readonly title: string;\n readonly children: ReactNode;\n readonly style?: StyleProp<ViewStyle>;\n};\n\nexport function ControlSection({ title, children, style }: ControlSectionProps) {\n const form = useContext(ControlFormContext);\n const { style: themeStyle } = useThemeSlot('section');\n const canCopy = Platform.OS === 'web' && form !== null;\n return (\n <View style={[styles.section, themeStyle as StyleProp<ViewStyle>, style]}>\n <View style={styles.header}>\n <Text accessibilityRole=\"header\" style={styles.title}>\n {title}\n </Text>\n {canCopy && form ? (\n <Button\n testID={`${form.path}.copy`}\n onPress={() =>\n writeClipboard(`${title}: ${JSON.stringify(roundForCopy(form.values), null, 2)}`)\n }\n >\n copy\n </Button>\n ) : null}\n </View>\n <View>{children}</View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n section: { gap: 6 },\n header: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' },\n title: {\n color: '#aaa',\n fontSize: 12,\n fontWeight: '600',\n textTransform: 'uppercase',\n letterSpacing: 1,\n },\n});\n"]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ControlSection = ControlSection;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const react_native_1 = require("react-native");
|
|
7
|
+
const control_form_1 = require("../form/control-form");
|
|
8
|
+
const provider_1 = require("../theme/provider");
|
|
9
|
+
const button_1 = require("../ui/button");
|
|
10
|
+
// Round off float noise (drag jitter, the slider epsilon) and snap near-zero to
|
|
11
|
+
// a true 0 so the pasted JSON reads as intended.
|
|
12
|
+
const round = (n) => {
|
|
13
|
+
const r = Math.round(n * 1e4) / 1e4;
|
|
14
|
+
return Math.abs(r) < 1e-4 ? 0 : r;
|
|
15
|
+
};
|
|
16
|
+
const roundForCopy = (values) => {
|
|
17
|
+
const out = {};
|
|
18
|
+
for (const [k, v] of Object.entries(values)) {
|
|
19
|
+
out[k] = Array.isArray(v) ? v.map(round) : round(v);
|
|
20
|
+
}
|
|
21
|
+
return out;
|
|
22
|
+
};
|
|
23
|
+
// Web-only clipboard write, typed off globalThis so it needs no DOM lib and is a
|
|
24
|
+
// no-op anywhere `navigator.clipboard` is absent.
|
|
25
|
+
const writeClipboard = (text) => {
|
|
26
|
+
const nav = globalThis
|
|
27
|
+
.navigator;
|
|
28
|
+
nav?.clipboard?.writeText?.(text);
|
|
29
|
+
};
|
|
30
|
+
function ControlSection({ title, children, style }) {
|
|
31
|
+
const form = (0, react_1.useContext)(control_form_1.ControlFormContext);
|
|
32
|
+
const { style: themeStyle } = (0, provider_1.useThemeSlot)('section');
|
|
33
|
+
const canCopy = react_native_1.Platform.OS === 'web' && form !== null;
|
|
34
|
+
return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: [styles.section, themeStyle, style], children: [(0, jsx_runtime_1.jsxs)(react_native_1.View, { style: styles.header, children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { accessibilityRole: "header", style: styles.title, children: title }), canCopy && form ? ((0, jsx_runtime_1.jsx)(button_1.Button, { testID: `${form.path}.copy`, onPress: () => writeClipboard(`${title}: ${JSON.stringify(roundForCopy(form.values), null, 2)}`), children: "copy" })) : null] }), (0, jsx_runtime_1.jsx)(react_native_1.View, { children: children })] }));
|
|
35
|
+
}
|
|
36
|
+
const styles = react_native_1.StyleSheet.create({
|
|
37
|
+
section: { gap: 6 },
|
|
38
|
+
header: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' },
|
|
39
|
+
title: {
|
|
40
|
+
color: '#aaa',
|
|
41
|
+
fontSize: 12,
|
|
42
|
+
fontWeight: '600',
|
|
43
|
+
textTransform: 'uppercase',
|
|
44
|
+
letterSpacing: 1,
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=control-section.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-section.js","sourceRoot":"","sources":["../../../../src/components/preset-control-panel/control-section.tsx"],"names":[],"mappings":";;;;AASA,iCAAmC;AAEnC,+CAAgE;AAChE,uDAA2E;AAC3E,gDAAiD;AACjD,yCAAsC;AAItC,gFAAgF;AAChF,iDAAiD;AACjD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAU,EAAE;IAClC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACpC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,MAAc,EAA8B,EAAE;IAClE,MAAM,GAAG,GAA+B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAW,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,iFAAiF;AACjF,kDAAkD;AAClD,MAAM,cAAc,GAAG,CAAC,IAAY,EAAQ,EAAE;IAC5C,MAAM,GAAG,GAAI,UAAqF;SAC/F,SAAS,CAAC;IACb,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC,CAAC;AAQF,wBAA+B,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAuB;IAC5E,MAAM,IAAI,GAAG,IAAA,kBAAU,EAAC,iCAAkB,CAAC,CAAC;IAC5C,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAA,uBAAY,EAAC,SAAS,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,uBAAQ,CAAC,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,CAAC;IACvD,OAAO,CACL,wBAAC,mBAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,UAAkC,EAAE,KAAK,CAAC,aACtE,wBAAC,mBAAI,IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,aACxB,uBAAC,mBAAI,IAAC,iBAAiB,EAAC,QAAQ,EAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YACjD,KAAK,GACD,EACN,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CACjB,uBAAC,eAAM,IACL,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,OAAO,EAC3B,OAAO,EAAE,GAAG,EAAE,CACZ,cAAc,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,qBAI5E,CACV,CAAC,CAAC,CAAC,IAAI,IACH,EACP,uBAAC,mBAAI,cAAE,QAAQ,GAAQ,IAClB,CACR,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,yBAAU,CAAC,MAAM,CAAC;IAC/B,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;IACnB,MAAM,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE;IACvF,KAAK,EAAE;QACL,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,KAAK;QACjB,aAAa,EAAE,WAAW;QAC1B,aAAa,EAAE,CAAC;KACjB;CACF,CAAC,CAAC","sourcesContent":["// ControlSection: the shared chrome every control group wears (a title + a\n// controls slot + a web-only copy button). Rendered INSIDE a ControlForm so the\n// copy button can read that form's live view model and serialize it.\n//\n// Copy is a desktop tweak-then-paste-into-a-preset workflow: the button renders\n// only on web (Platform.OS), writes via navigator.clipboard, and depends on no\n// clipboard module. Native intentionally has no copy button.\n\nimport type { ReactNode } from 'react';\nimport { useContext } from 'react';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport { Platform, StyleSheet, Text, View } from 'react-native';\nimport { ControlFormContext, type FieldValue } from '../form/control-form';\nimport { useThemeSlot } from '../theme/provider';\nimport { Button } from '../ui/button';\n\ntype Values = Readonly<Record<string, FieldValue>>;\n\n// Round off float noise (drag jitter, the slider epsilon) and snap near-zero to\n// a true 0 so the pasted JSON reads as intended.\nconst round = (n: number): number => {\n const r = Math.round(n * 1e4) / 1e4;\n return Math.abs(r) < 1e-4 ? 0 : r;\n};\n\nconst roundForCopy = (values: Values): Record<string, FieldValue> => {\n const out: Record<string, FieldValue> = {};\n for (const [k, v] of Object.entries(values)) {\n out[k] = Array.isArray(v) ? v.map(round) : round(v as number);\n }\n return out;\n};\n\n// Web-only clipboard write, typed off globalThis so it needs no DOM lib and is a\n// no-op anywhere `navigator.clipboard` is absent.\nconst writeClipboard = (text: string): void => {\n const nav = (globalThis as { navigator?: { clipboard?: { writeText?: (t: string) => unknown } } })\n .navigator;\n nav?.clipboard?.writeText?.(text);\n};\n\nexport type ControlSectionProps = {\n readonly title: string;\n readonly children: ReactNode;\n readonly style?: StyleProp<ViewStyle>;\n};\n\nexport function ControlSection({ title, children, style }: ControlSectionProps) {\n const form = useContext(ControlFormContext);\n const { style: themeStyle } = useThemeSlot('section');\n const canCopy = Platform.OS === 'web' && form !== null;\n return (\n <View style={[styles.section, themeStyle as StyleProp<ViewStyle>, style]}>\n <View style={styles.header}>\n <Text accessibilityRole=\"header\" style={styles.title}>\n {title}\n </Text>\n {canCopy && form ? (\n <Button\n testID={`${form.path}.copy`}\n onPress={() =>\n writeClipboard(`${title}: ${JSON.stringify(roundForCopy(form.values), null, 2)}`)\n }\n >\n copy\n </Button>\n ) : null}\n </View>\n <View>{children}</View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n section: { gap: 6 },\n header: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' },\n title: {\n color: '#aaa',\n fontSize: 12,\n fontWeight: '600',\n textTransform: 'uppercase',\n letterSpacing: 1,\n },\n});\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { UniformControl } from '../../../catalog/shaders';
|
|
3
|
+
/** Render one control descriptor as its kind's self-wiring primitive. */
|
|
4
|
+
export declare function dispatchControl(c: UniformControl): ReactNode;
|
|
5
|
+
export type ControlProps = {
|
|
6
|
+
/** The uniform id to place; its descriptor is resolved from the ControlForm. */
|
|
7
|
+
readonly uniform: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function Control({ uniform }: ControlProps): ReactNode;
|
|
10
|
+
//# sourceMappingURL=control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-control-panel/control.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAO/D,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,CAAC,EAAE,cAAc,GAAG,SAAS,CAY5D;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,wBAAgB,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,YAAY,aAUhD","sourcesContent":["// Control: place one control by uniform id inside a per-shader form. It takes\n// ONLY the uniform name, resolves that uniform's descriptor from the enclosing\n// ControlForm, and renders the kind's self-wiring primitive with the descriptor's\n// props. Taking only the name is the invariant: a layout form can ARRANGE controls\n// (wrap them in Views, group them) but cannot redefine a control's behavior.\n//\n// `dispatchControl` is the shared kind -> primitive map, reused by the auto-form\n// (CompositeLayerControlPanel renders every descriptor) and by <Control> (renders\n// one looked-up descriptor).\n\nimport type { ReactNode } from 'react';\nimport { useContext } from 'react';\nimport type { UniformControl } from '../../../catalog/shaders';\nimport { ControlFormContext } from '../form/control-form';\nimport { ColorPicker } from '../ui/color-picker';\nimport { PolygonField } from '../ui/polygon-field';\nimport { Slider } from '../ui/slider';\nimport { Switch } from '../ui/switch';\n\n/** Render one control descriptor as its kind's self-wiring primitive. */\nexport function dispatchControl(c: UniformControl): ReactNode {\n const label = c.label ?? c.name;\n switch (c.kind) {\n case 'color':\n return <ColorPicker uniform={c.name} label={label} />;\n case 'float':\n return <Slider uniform={c.name} min={c.min} max={c.max} step={c.step} label={label} />;\n case 'switch':\n return <Switch uniform={c.name} label={label} />;\n case 'polygon':\n return <PolygonField uniform={c.name} points={c.points} label={label} />;\n }\n}\n\nexport type ControlProps = {\n /** The uniform id to place; its descriptor is resolved from the ControlForm. */\n readonly uniform: string;\n};\n\nexport function Control({ uniform }: ControlProps) {\n const ctx = useContext(ControlFormContext);\n const descriptor = ctx?.controls?.find((c) => c.name === uniform);\n if (!descriptor) {\n throw new Error(\n `<Control uniform=\"${uniform}\"/>: no descriptor found. Pass controls={X_CONTROLS} ` +\n 'to the enclosing <ControlForm>.',\n );\n }\n return dispatchControl(descriptor);\n}\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.dispatchControl = dispatchControl;
|
|
4
|
+
exports.Control = Control;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const control_form_1 = require("../form/control-form");
|
|
8
|
+
const color_picker_1 = require("../ui/color-picker");
|
|
9
|
+
const polygon_field_1 = require("../ui/polygon-field");
|
|
10
|
+
const slider_1 = require("../ui/slider");
|
|
11
|
+
const switch_1 = require("../ui/switch");
|
|
12
|
+
/** Render one control descriptor as its kind's self-wiring primitive. */
|
|
13
|
+
function dispatchControl(c) {
|
|
14
|
+
const label = c.label ?? c.name;
|
|
15
|
+
switch (c.kind) {
|
|
16
|
+
case 'color':
|
|
17
|
+
return (0, jsx_runtime_1.jsx)(color_picker_1.ColorPicker, { uniform: c.name, label: label });
|
|
18
|
+
case 'float':
|
|
19
|
+
return (0, jsx_runtime_1.jsx)(slider_1.Slider, { uniform: c.name, min: c.min, max: c.max, step: c.step, label: label });
|
|
20
|
+
case 'switch':
|
|
21
|
+
return (0, jsx_runtime_1.jsx)(switch_1.Switch, { uniform: c.name, label: label });
|
|
22
|
+
case 'polygon':
|
|
23
|
+
return (0, jsx_runtime_1.jsx)(polygon_field_1.PolygonField, { uniform: c.name, points: c.points, label: label });
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function Control({ uniform }) {
|
|
27
|
+
const ctx = (0, react_1.useContext)(control_form_1.ControlFormContext);
|
|
28
|
+
const descriptor = ctx?.controls?.find((c) => c.name === uniform);
|
|
29
|
+
if (!descriptor) {
|
|
30
|
+
throw new Error(`<Control uniform="${uniform}"/>: no descriptor found. Pass controls={X_CONTROLS} ` +
|
|
31
|
+
'to the enclosing <ControlForm>.');
|
|
32
|
+
}
|
|
33
|
+
return dispatchControl(descriptor);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../../../src/components/preset-control-panel/control.tsx"],"names":[],"mappings":";;;;;AAWA,iCAAmC;AAEnC,uDAA0D;AAC1D,qDAAiD;AACjD,uDAAmD;AACnD,yCAAsC;AACtC,yCAAsC;AAEtC,yEAAyE;AACzE,yBAAgC,CAAiB;IAC/C,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC;IAChC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO,uBAAC,0BAAW,IAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;QACxD,KAAK,OAAO;YACV,OAAO,uBAAC,eAAM,IAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;QACzF,KAAK,QAAQ;YACX,OAAO,uBAAC,eAAM,IAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;QACnD,KAAK,SAAS;YACZ,OAAO,uBAAC,4BAAY,IAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;IAC7E,CAAC;AACH,CAAC;AAOD,iBAAwB,EAAE,OAAO,EAAgB;IAC/C,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,iCAAkB,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IAClE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,qBAAqB,OAAO,uDAAuD;YACjF,iCAAiC,CACpC,CAAC;IACJ,CAAC;IACD,OAAO,eAAe,CAAC,UAAU,CAAC,CAAC;AACrC,CAAC","sourcesContent":["// Control: place one control by uniform id inside a per-shader form. It takes\n// ONLY the uniform name, resolves that uniform's descriptor from the enclosing\n// ControlForm, and renders the kind's self-wiring primitive with the descriptor's\n// props. Taking only the name is the invariant: a layout form can ARRANGE controls\n// (wrap them in Views, group them) but cannot redefine a control's behavior.\n//\n// `dispatchControl` is the shared kind -> primitive map, reused by the auto-form\n// (CompositeLayerControlPanel renders every descriptor) and by <Control> (renders\n// one looked-up descriptor).\n\nimport type { ReactNode } from 'react';\nimport { useContext } from 'react';\nimport type { UniformControl } from '../../../catalog/shaders';\nimport { ControlFormContext } from '../form/control-form';\nimport { ColorPicker } from '../ui/color-picker';\nimport { PolygonField } from '../ui/polygon-field';\nimport { Slider } from '../ui/slider';\nimport { Switch } from '../ui/switch';\n\n/** Render one control descriptor as its kind's self-wiring primitive. */\nexport function dispatchControl(c: UniformControl): ReactNode {\n const label = c.label ?? c.name;\n switch (c.kind) {\n case 'color':\n return <ColorPicker uniform={c.name} label={label} />;\n case 'float':\n return <Slider uniform={c.name} min={c.min} max={c.max} step={c.step} label={label} />;\n case 'switch':\n return <Switch uniform={c.name} label={label} />;\n case 'polygon':\n return <PolygonField uniform={c.name} points={c.points} label={label} />;\n }\n}\n\nexport type ControlProps = {\n /** The uniform id to place; its descriptor is resolved from the ControlForm. */\n readonly uniform: string;\n};\n\nexport function Control({ uniform }: ControlProps) {\n const ctx = useContext(ControlFormContext);\n const descriptor = ctx?.controls?.find((c) => c.name === uniform);\n if (!descriptor) {\n throw new Error(\n `<Control uniform=\"${uniform}\"/>: no descriptor found. Pass controls={X_CONTROLS} ` +\n 'to the enclosing <ControlForm>.',\n );\n }\n return dispatchControl(descriptor);\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type { KaleidoscopeControls } from '../../kaleidoscope.preset-book.types';
|
|
2
|
+
export { ControlForm, type ControlFormProps, type FieldValue } from '../form/control-form';
|
|
3
|
+
export { makeControls } from '../form/make-controls';
|
|
4
|
+
export { type Field, useField } from '../form/use-field';
|
|
5
|
+
export { KaleidoscopeThemeProvider, useKaleidoscopeTheme, useThemeSlot } from '../theme/provider';
|
|
6
|
+
export type { KaleidoscopeThemeSlots, SlotStyle, ThemeSlot } from '../theme/slots';
|
|
7
|
+
export * from '../ui';
|
|
8
|
+
export { CompositeLayerControlPanel, type CompositeLayerControlPanelProps, type ControlOverride, } from './composite-layer-control-panel';
|
|
9
|
+
export { Control, type ControlProps, dispatchControl } from './control';
|
|
10
|
+
export { ControlSection, type ControlSectionProps } from './control-section';
|
|
11
|
+
export { MaskControlPanel, type MaskControlPanelProps, } from './mask-control-panel';
|
|
12
|
+
export { PresetControlPanel, type PresetControlPanelProps } from './preset-control-panel';
|
|
13
|
+
export { TransformControlPanel, type TransformControlPanelProps, } from './transform-control-panel';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-control-panel/index.ts"],"names":[],"mappings":"AAQA,YAAY,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,KAAK,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAClG,YAAY,EAAE,sBAAsB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACnF,cAAc,OAAO,CAAC;AACtB,OAAO,EACL,0BAA0B,EAC1B,KAAK,+BAA+B,EACpC,KAAK,eAAe,GACrB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,GAChC,MAAM,2BAA2B,CAAC","sourcesContent":["// Public entry for the opt-in controls composition kit (subpath `./controls`).\n//\n// A per-form `ControlForm` micro-provider with `useField`/`makeControls`, the\n// self-theming field primitives, the `ControlSection` chrome, and the\n// `PresetControlPanel`, all themed via `KaleidoscopeThemeProvider`. This barrel\n// grows commit by commit; the theme surface lands first so later primitives can\n// register against a real exported entry.\n\nexport type { KaleidoscopeControls } from '../../kaleidoscope.preset-book.types';\nexport { ControlForm, type ControlFormProps, type FieldValue } from '../form/control-form';\nexport { makeControls } from '../form/make-controls';\nexport { type Field, useField } from '../form/use-field';\nexport { KaleidoscopeThemeProvider, useKaleidoscopeTheme, useThemeSlot } from '../theme/provider';\nexport type { KaleidoscopeThemeSlots, SlotStyle, ThemeSlot } from '../theme/slots';\nexport * from '../ui';\nexport {\n CompositeLayerControlPanel,\n type CompositeLayerControlPanelProps,\n type ControlOverride,\n} from './composite-layer-control-panel';\nexport { Control, type ControlProps, dispatchControl } from './control';\nexport { ControlSection, type ControlSectionProps } from './control-section';\nexport {\n MaskControlPanel,\n type MaskControlPanelProps,\n} from './mask-control-panel';\nexport { PresetControlPanel, type PresetControlPanelProps } from './preset-control-panel';\nexport {\n TransformControlPanel,\n type TransformControlPanelProps,\n} from './transform-control-panel';\n"]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Public entry for the opt-in controls composition kit (subpath `./controls`).
|
|
3
|
+
//
|
|
4
|
+
// A per-form `ControlForm` micro-provider with `useField`/`makeControls`, the
|
|
5
|
+
// self-theming field primitives, the `ControlSection` chrome, and the
|
|
6
|
+
// `PresetControlPanel`, all themed via `KaleidoscopeThemeProvider`. This barrel
|
|
7
|
+
// grows commit by commit; the theme surface lands first so later primitives can
|
|
8
|
+
// register against a real exported entry.
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
21
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
22
|
+
};
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.TransformControlPanel = exports.PresetControlPanel = exports.MaskControlPanel = exports.ControlSection = exports.dispatchControl = exports.Control = exports.CompositeLayerControlPanel = exports.useThemeSlot = exports.useKaleidoscopeTheme = exports.KaleidoscopeThemeProvider = exports.useField = exports.makeControls = exports.ControlForm = void 0;
|
|
25
|
+
var control_form_1 = require("../form/control-form");
|
|
26
|
+
Object.defineProperty(exports, "ControlForm", { enumerable: true, get: function () { return control_form_1.ControlForm; } });
|
|
27
|
+
var make_controls_1 = require("../form/make-controls");
|
|
28
|
+
Object.defineProperty(exports, "makeControls", { enumerable: true, get: function () { return make_controls_1.makeControls; } });
|
|
29
|
+
var use_field_1 = require("../form/use-field");
|
|
30
|
+
Object.defineProperty(exports, "useField", { enumerable: true, get: function () { return use_field_1.useField; } });
|
|
31
|
+
var provider_1 = require("../theme/provider");
|
|
32
|
+
Object.defineProperty(exports, "KaleidoscopeThemeProvider", { enumerable: true, get: function () { return provider_1.KaleidoscopeThemeProvider; } });
|
|
33
|
+
Object.defineProperty(exports, "useKaleidoscopeTheme", { enumerable: true, get: function () { return provider_1.useKaleidoscopeTheme; } });
|
|
34
|
+
Object.defineProperty(exports, "useThemeSlot", { enumerable: true, get: function () { return provider_1.useThemeSlot; } });
|
|
35
|
+
__exportStar(require("../ui"), exports);
|
|
36
|
+
var composite_layer_control_panel_1 = require("./composite-layer-control-panel");
|
|
37
|
+
Object.defineProperty(exports, "CompositeLayerControlPanel", { enumerable: true, get: function () { return composite_layer_control_panel_1.CompositeLayerControlPanel; } });
|
|
38
|
+
var control_1 = require("./control");
|
|
39
|
+
Object.defineProperty(exports, "Control", { enumerable: true, get: function () { return control_1.Control; } });
|
|
40
|
+
Object.defineProperty(exports, "dispatchControl", { enumerable: true, get: function () { return control_1.dispatchControl; } });
|
|
41
|
+
var control_section_1 = require("./control-section");
|
|
42
|
+
Object.defineProperty(exports, "ControlSection", { enumerable: true, get: function () { return control_section_1.ControlSection; } });
|
|
43
|
+
var mask_control_panel_1 = require("./mask-control-panel");
|
|
44
|
+
Object.defineProperty(exports, "MaskControlPanel", { enumerable: true, get: function () { return mask_control_panel_1.MaskControlPanel; } });
|
|
45
|
+
var preset_control_panel_1 = require("./preset-control-panel");
|
|
46
|
+
Object.defineProperty(exports, "PresetControlPanel", { enumerable: true, get: function () { return preset_control_panel_1.PresetControlPanel; } });
|
|
47
|
+
var transform_control_panel_1 = require("./transform-control-panel");
|
|
48
|
+
Object.defineProperty(exports, "TransformControlPanel", { enumerable: true, get: function () { return transform_control_panel_1.TransformControlPanel; } });
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/preset-control-panel/index.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,EAAE;AACF,8EAA8E;AAC9E,sEAAsE;AACtE,gFAAgF;AAChF,gFAAgF;AAChF,0CAA0C;;;;;;;;;;;;;;;;;AAG1C,qDAA2F;AAAlF,2GAAA,WAAW,OAAA;AACpB,uDAAqD;AAA5C,6GAAA,YAAY,OAAA;AACrB,+CAAyD;AAApC,qGAAA,QAAQ,OAAA;AAC7B,8CAAkG;AAAzF,qHAAA,yBAAyB,OAAA;AAAE,gHAAA,oBAAoB,OAAA;AAAE,wGAAA,YAAY,OAAA;AAEtE,wCAAsB;AACtB,iFAIyC;AAHvC,2IAAA,0BAA0B,OAAA;AAI5B,qCAAwE;AAA/D,kGAAA,OAAO,OAAA;AAAqB,0GAAA,eAAe,OAAA;AACpD,qDAA6E;AAApE,iHAAA,cAAc,OAAA;AACvB,2DAG8B;AAF5B,sHAAA,gBAAgB,OAAA;AAGlB,+DAA0F;AAAjF,0HAAA,kBAAkB,OAAA;AAC3B,qEAGmC;AAFjC,gIAAA,qBAAqB,OAAA","sourcesContent":["// Public entry for the opt-in controls composition kit (subpath `./controls`).\n//\n// A per-form `ControlForm` micro-provider with `useField`/`makeControls`, the\n// self-theming field primitives, the `ControlSection` chrome, and the\n// `PresetControlPanel`, all themed via `KaleidoscopeThemeProvider`. This barrel\n// grows commit by commit; the theme surface lands first so later primitives can\n// register against a real exported entry.\n\nexport type { KaleidoscopeControls } from '../../kaleidoscope.preset-book.types';\nexport { ControlForm, type ControlFormProps, type FieldValue } from '../form/control-form';\nexport { makeControls } from '../form/make-controls';\nexport { type Field, useField } from '../form/use-field';\nexport { KaleidoscopeThemeProvider, useKaleidoscopeTheme, useThemeSlot } from '../theme/provider';\nexport type { KaleidoscopeThemeSlots, SlotStyle, ThemeSlot } from '../theme/slots';\nexport * from '../ui';\nexport {\n CompositeLayerControlPanel,\n type CompositeLayerControlPanelProps,\n type ControlOverride,\n} from './composite-layer-control-panel';\nexport { Control, type ControlProps, dispatchControl } from './control';\nexport { ControlSection, type ControlSectionProps } from './control-section';\nexport {\n MaskControlPanel,\n type MaskControlPanelProps,\n} from './mask-control-panel';\nexport { PresetControlPanel, type PresetControlPanelProps } from './preset-control-panel';\nexport {\n TransformControlPanel,\n type TransformControlPanelProps,\n} from './transform-control-panel';\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { MaskInput } from '../../kaleidoscope/types';
|
|
2
|
+
export type MaskControlPanelProps = {
|
|
3
|
+
readonly hardness: number;
|
|
4
|
+
readonly threshold: number;
|
|
5
|
+
readonly onChange: (mask: MaskInput) => void;
|
|
6
|
+
readonly disabled?: boolean;
|
|
7
|
+
/** Root for this instance's test ids; override when a screen mounts two. */
|
|
8
|
+
readonly testIDPrefix?: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function MaskControlPanel({ hardness, threshold, onChange, disabled, testIDPrefix, }: MaskControlPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=mask-control-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mask-control-panel.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-control-panel/mask-control-panel.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAO1D,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAwCF,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAgB,EAChB,YAAiC,GAClC,EAAE,qBAAqB,2CAmBvB","sourcesContent":["// MaskControlPanel: the segmentation-edge panel, themed and controlled.\n// Either slider emits the full MaskInput (the mask verb is absolute). Not a\n// layer form, so it has no ControlForm (and thus no copy button) and uses the\n// raw slider directly with the themed Label/Readout primitives.\n\nimport RNSlider from '@react-native-community/slider';\nimport { StyleSheet, View } from 'react-native';\nimport type { MaskInput } from '../../kaleidoscope/types';\nimport { MASK_TESTID_PREFIX } from '../../lib/test-id';\nimport { Label } from '../ui/label';\nimport { Readout } from '../ui/readout';\nimport { SLIDER_TINTS } from '../ui/slider-value';\nimport { ControlSection } from './control-section';\n\nexport type MaskControlPanelProps = {\n readonly hardness: number;\n readonly threshold: number;\n readonly onChange: (mask: MaskInput) => void;\n readonly disabled?: boolean;\n /** Root for this instance's test ids; override when a screen mounts two. */\n readonly testIDPrefix?: string;\n};\n\nfunction MaskRow({\n label,\n value,\n disabled,\n onChange,\n testID,\n}: {\n readonly label: string;\n readonly value: number;\n readonly disabled: boolean;\n readonly onChange: (v: number) => void;\n readonly testID: string;\n}) {\n return (\n <View style={styles.row}>\n <View style={styles.line}>\n <Label>{label}</Label>\n <Readout>{value.toFixed(2)}</Readout>\n </View>\n <RNSlider\n style={styles.slider}\n testID={testID}\n accessibilityLabel={label}\n // Floor at 0.01: at exactly 0 the mask smoothstep range collapses\n // (lo === hi) and the edge breaks. 0.01 keeps it well-defined. This is a\n // shader-math floor, distinct from the field slider's web-crash epsilon.\n minimumValue={0.01}\n maximumValue={1}\n step={0.01}\n value={value}\n disabled={disabled}\n onValueChange={onChange}\n {...SLIDER_TINTS}\n />\n </View>\n );\n}\n\nexport function MaskControlPanel({\n hardness,\n threshold,\n onChange,\n disabled = false,\n testIDPrefix = MASK_TESTID_PREFIX,\n}: MaskControlPanelProps) {\n return (\n <ControlSection title=\"mask\">\n <MaskRow\n label=\"hardness\"\n value={hardness}\n disabled={disabled}\n onChange={(v) => onChange({ hardness: v, threshold })}\n testID={`${testIDPrefix}.hardness`}\n />\n <MaskRow\n label=\"threshold\"\n value={threshold}\n disabled={disabled}\n onChange={(v) => onChange({ hardness, threshold: v })}\n testID={`${testIDPrefix}.threshold`}\n />\n </ControlSection>\n );\n}\n\nconst styles = StyleSheet.create({\n row: { gap: 2 },\n line: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' },\n slider: { width: '100%', height: 32 },\n});\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MaskControlPanel = MaskControlPanel;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
// MaskControlPanel: the segmentation-edge panel, themed and controlled.
|
|
9
|
+
// Either slider emits the full MaskInput (the mask verb is absolute). Not a
|
|
10
|
+
// layer form, so it has no ControlForm (and thus no copy button) and uses the
|
|
11
|
+
// raw slider directly with the themed Label/Readout primitives.
|
|
12
|
+
const slider_1 = __importDefault(require("@react-native-community/slider"));
|
|
13
|
+
const react_native_1 = require("react-native");
|
|
14
|
+
const test_id_1 = require("../../lib/test-id");
|
|
15
|
+
const label_1 = require("../ui/label");
|
|
16
|
+
const readout_1 = require("../ui/readout");
|
|
17
|
+
const slider_value_1 = require("../ui/slider-value");
|
|
18
|
+
const control_section_1 = require("./control-section");
|
|
19
|
+
function MaskRow({ label, value, disabled, onChange, testID, }) {
|
|
20
|
+
return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: styles.row, children: [(0, jsx_runtime_1.jsxs)(react_native_1.View, { style: styles.line, children: [(0, jsx_runtime_1.jsx)(label_1.Label, { children: label }), (0, jsx_runtime_1.jsx)(readout_1.Readout, { children: value.toFixed(2) })] }), (0, jsx_runtime_1.jsx)(slider_1.default, { style: styles.slider, testID: testID, accessibilityLabel: label,
|
|
21
|
+
// Floor at 0.01: at exactly 0 the mask smoothstep range collapses
|
|
22
|
+
// (lo === hi) and the edge breaks. 0.01 keeps it well-defined. This is a
|
|
23
|
+
// shader-math floor, distinct from the field slider's web-crash epsilon.
|
|
24
|
+
minimumValue: 0.01, maximumValue: 1, step: 0.01, value: value, disabled: disabled, onValueChange: onChange, ...slider_value_1.SLIDER_TINTS })] }));
|
|
25
|
+
}
|
|
26
|
+
function MaskControlPanel({ hardness, threshold, onChange, disabled = false, testIDPrefix = test_id_1.MASK_TESTID_PREFIX, }) {
|
|
27
|
+
return ((0, jsx_runtime_1.jsxs)(control_section_1.ControlSection, { title: "mask", children: [(0, jsx_runtime_1.jsx)(MaskRow, { label: "hardness", value: hardness, disabled: disabled, onChange: (v) => onChange({ hardness: v, threshold }), testID: `${testIDPrefix}.hardness` }), (0, jsx_runtime_1.jsx)(MaskRow, { label: "threshold", value: threshold, disabled: disabled, onChange: (v) => onChange({ hardness, threshold: v }), testID: `${testIDPrefix}.threshold` })] }));
|
|
28
|
+
}
|
|
29
|
+
const styles = react_native_1.StyleSheet.create({
|
|
30
|
+
row: { gap: 2 },
|
|
31
|
+
line: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' },
|
|
32
|
+
slider: { width: '100%', height: 32 },
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=mask-control-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mask-control-panel.js","sourceRoot":"","sources":["../../../../src/components/preset-control-panel/mask-control-panel.tsx"],"names":[],"mappings":";;;;;;;AAAA,wEAAwE;AACxE,4EAA4E;AAC5E,8EAA8E;AAC9E,gEAAgE;AAEhE,4EAAsD;AACtD,+CAAgD;AAEhD,+CAAuD;AACvD,uCAAoC;AACpC,2CAAwC;AACxC,qDAAkD;AAClD,uDAAmD;AAWnD,SAAS,OAAO,CAAC,EACf,KAAK,EACL,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,MAAM,GAOP;IACC,OAAO,CACL,wBAAC,mBAAI,IAAC,KAAK,EAAE,MAAM,CAAC,GAAG,aACrB,wBAAC,mBAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,aACtB,uBAAC,aAAK,cAAE,KAAK,GAAS,EACtB,uBAAC,iBAAO,cAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAW,IAChC,EACP,uBAAC,gBAAQ,IACP,KAAK,EAAE,MAAM,CAAC,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,KAAK;gBACzB,kEAAkE;gBAClE,yEAAyE;gBACzE,yEAAyE;gBACzE,YAAY,EAAE,IAAI,EAClB,YAAY,EAAE,CAAC,EACf,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,QAAQ,KACnB,2BAAY,GAChB,IACG,CACR,CAAC;AACJ,CAAC;AAED,0BAAiC,EAC/B,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,YAAY,GAAG,4BAAkB,GACX;IACtB,OAAO,CACL,wBAAC,gCAAc,IAAC,KAAK,EAAC,MAAM,aAC1B,uBAAC,OAAO,IACN,KAAK,EAAC,UAAU,EAChB,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EACrD,MAAM,EAAE,GAAG,YAAY,WAAW,GAClC,EACF,uBAAC,OAAO,IACN,KAAK,EAAC,WAAW,EACjB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EACrD,MAAM,EAAE,GAAG,YAAY,YAAY,GACnC,IACa,CAClB,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,yBAAU,CAAC,MAAM,CAAC;IAC/B,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;IACf,IAAI,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE;IACrF,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;CACtC,CAAC,CAAC","sourcesContent":["// MaskControlPanel: the segmentation-edge panel, themed and controlled.\n// Either slider emits the full MaskInput (the mask verb is absolute). Not a\n// layer form, so it has no ControlForm (and thus no copy button) and uses the\n// raw slider directly with the themed Label/Readout primitives.\n\nimport RNSlider from '@react-native-community/slider';\nimport { StyleSheet, View } from 'react-native';\nimport type { MaskInput } from '../../kaleidoscope/types';\nimport { MASK_TESTID_PREFIX } from '../../lib/test-id';\nimport { Label } from '../ui/label';\nimport { Readout } from '../ui/readout';\nimport { SLIDER_TINTS } from '../ui/slider-value';\nimport { ControlSection } from './control-section';\n\nexport type MaskControlPanelProps = {\n readonly hardness: number;\n readonly threshold: number;\n readonly onChange: (mask: MaskInput) => void;\n readonly disabled?: boolean;\n /** Root for this instance's test ids; override when a screen mounts two. */\n readonly testIDPrefix?: string;\n};\n\nfunction MaskRow({\n label,\n value,\n disabled,\n onChange,\n testID,\n}: {\n readonly label: string;\n readonly value: number;\n readonly disabled: boolean;\n readonly onChange: (v: number) => void;\n readonly testID: string;\n}) {\n return (\n <View style={styles.row}>\n <View style={styles.line}>\n <Label>{label}</Label>\n <Readout>{value.toFixed(2)}</Readout>\n </View>\n <RNSlider\n style={styles.slider}\n testID={testID}\n accessibilityLabel={label}\n // Floor at 0.01: at exactly 0 the mask smoothstep range collapses\n // (lo === hi) and the edge breaks. 0.01 keeps it well-defined. This is a\n // shader-math floor, distinct from the field slider's web-crash epsilon.\n minimumValue={0.01}\n maximumValue={1}\n step={0.01}\n value={value}\n disabled={disabled}\n onValueChange={onChange}\n {...SLIDER_TINTS}\n />\n </View>\n );\n}\n\nexport function MaskControlPanel({\n hardness,\n threshold,\n onChange,\n disabled = false,\n testIDPrefix = MASK_TESTID_PREFIX,\n}: MaskControlPanelProps) {\n return (\n <ControlSection title=\"mask\">\n <MaskRow\n label=\"hardness\"\n value={hardness}\n disabled={disabled}\n onChange={(v) => onChange({ hardness: v, threshold })}\n testID={`${testIDPrefix}.hardness`}\n />\n <MaskRow\n label=\"threshold\"\n value={threshold}\n disabled={disabled}\n onChange={(v) => onChange({ hardness, threshold: v })}\n testID={`${testIDPrefix}.threshold`}\n />\n </ControlSection>\n );\n}\n\nconst styles = StyleSheet.create({\n row: { gap: 2 },\n line: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' },\n slider: { width: '100%', height: 32 },\n});\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ReactElement } from 'react';
|
|
2
|
+
import type { KaleidoscopeControls, KaleidoscopePresetBook } from '../../kaleidoscope.preset-book.types';
|
|
3
|
+
export type PresetControlPanelProps<P extends KaleidoscopePresetBook> = {
|
|
4
|
+
readonly presets: P;
|
|
5
|
+
/** The active preset id, or null when nothing is selected. */
|
|
6
|
+
readonly value: (keyof P & string) | null;
|
|
7
|
+
/** Routed to the host, which applies it via `kaleidoscope(value, [patch])`. */
|
|
8
|
+
readonly onPatch: KaleidoscopeControls['onPatch'];
|
|
9
|
+
readonly disabled?: boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare function PresetControlPanel<P extends KaleidoscopePresetBook>({ presets, value, onPatch, disabled, }: PresetControlPanelProps<P>): ReactElement | null;
|
|
12
|
+
//# sourceMappingURL=preset-control-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset-control-panel.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-control-panel/preset-control-panel.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,sCAAsC,CAAC;AAG9C,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,sBAAsB,IAAI;IACtE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC;IAC1C,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,sBAAsB,EAAE,EACnE,OAAO,EACP,KAAK,EACL,OAAO,EACP,QAAgB,GACjB,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,IAAI,CAoBlD","sourcesContent":["// PresetControlPanel: the thin, controlled editor. For the active preset it\n// renders that preset's `controls` component (keyed by preset id, so a switch\n// remounts and the ControlForms re-seed), handing it the per-layer baked\n// uniforms and a single shared onPatch. It never calls `kaleidoscope` itself;\n// the host routes onPatch into `kaleidoscope(activeId, [patch])`.\n\nimport type { ReactElement } from 'react';\nimport type {\n KaleidoscopeControls,\n KaleidoscopePresetBook,\n} from '../../kaleidoscope.preset-book.types';\nimport { ControlScopeContext } from '../form/scope';\n\nexport type PresetControlPanelProps<P extends KaleidoscopePresetBook> = {\n readonly presets: P;\n /** The active preset id, or null when nothing is selected. */\n readonly value: (keyof P & string) | null;\n /** Routed to the host, which applies it via `kaleidoscope(value, [patch])`. */\n readonly onPatch: KaleidoscopeControls['onPatch'];\n readonly disabled?: boolean;\n};\n\nexport function PresetControlPanel<P extends KaleidoscopePresetBook>({\n presets,\n value,\n onPatch,\n disabled = false,\n}: PresetControlPanelProps<P>): ReactElement | null {\n if (value === null) return null;\n const preset = presets[value];\n const Controls = preset?.controls;\n if (!Controls) return null;\n\n // Per-layer baked uniforms keyed by id, for the controls component to seed each\n // layer's ControlForm. Only tunable layers carry uniforms.\n const uniforms: Record<string, Record<string, number | readonly number[]>> = {};\n for (const layer of preset.layers) {\n if ('uniforms' in layer) {\n uniforms[layer.id] = { ...layer.uniforms } as Record<string, number | readonly number[]>;\n }\n }\n\n return (\n <ControlScopeContext.Provider value={value}>\n <Controls key={value} uniforms={uniforms} onPatch={onPatch} disabled={disabled} />\n </ControlScopeContext.Provider>\n );\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PresetControlPanel = PresetControlPanel;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const scope_1 = require("../form/scope");
|
|
6
|
+
function PresetControlPanel({ presets, value, onPatch, disabled = false, }) {
|
|
7
|
+
if (value === null)
|
|
8
|
+
return null;
|
|
9
|
+
const preset = presets[value];
|
|
10
|
+
const Controls = preset?.controls;
|
|
11
|
+
if (!Controls)
|
|
12
|
+
return null;
|
|
13
|
+
// Per-layer baked uniforms keyed by id, for the controls component to seed each
|
|
14
|
+
// layer's ControlForm. Only tunable layers carry uniforms.
|
|
15
|
+
const uniforms = {};
|
|
16
|
+
for (const layer of preset.layers) {
|
|
17
|
+
if ('uniforms' in layer) {
|
|
18
|
+
uniforms[layer.id] = { ...layer.uniforms };
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return ((0, jsx_runtime_1.jsx)(scope_1.ControlScopeContext.Provider, { value: value, children: (0, jsx_runtime_1.jsx)(Controls, { uniforms: uniforms, onPatch: onPatch, disabled: disabled }, value) }));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=preset-control-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset-control-panel.js","sourceRoot":"","sources":["../../../../src/components/preset-control-panel/preset-control-panel.tsx"],"names":[],"mappings":";;;;AAWA,yCAAoD;AAWpD,4BAAqE,EACnE,OAAO,EACP,KAAK,EACL,OAAO,EACP,QAAQ,GAAG,KAAK,GACW;IAC3B,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,CAAC;IAClC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,gFAAgF;IAChF,2DAA2D;IAC3D,MAAM,QAAQ,GAA+D,EAAE,CAAC;IAChF,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAgD,CAAC;QAC3F,CAAC;IACH,CAAC;IAED,OAAO,CACL,uBAAC,2BAAmB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YACxC,uBAAC,QAAQ,IAAa,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,IAA/D,KAAK,CAA8D,GACrD,CAChC,CAAC;AACJ,CAAC","sourcesContent":["// PresetControlPanel: the thin, controlled editor. For the active preset it\n// renders that preset's `controls` component (keyed by preset id, so a switch\n// remounts and the ControlForms re-seed), handing it the per-layer baked\n// uniforms and a single shared onPatch. It never calls `kaleidoscope` itself;\n// the host routes onPatch into `kaleidoscope(activeId, [patch])`.\n\nimport type { ReactElement } from 'react';\nimport type {\n KaleidoscopeControls,\n KaleidoscopePresetBook,\n} from '../../kaleidoscope.preset-book.types';\nimport { ControlScopeContext } from '../form/scope';\n\nexport type PresetControlPanelProps<P extends KaleidoscopePresetBook> = {\n readonly presets: P;\n /** The active preset id, or null when nothing is selected. */\n readonly value: (keyof P & string) | null;\n /** Routed to the host, which applies it via `kaleidoscope(value, [patch])`. */\n readonly onPatch: KaleidoscopeControls['onPatch'];\n readonly disabled?: boolean;\n};\n\nexport function PresetControlPanel<P extends KaleidoscopePresetBook>({\n presets,\n value,\n onPatch,\n disabled = false,\n}: PresetControlPanelProps<P>): ReactElement | null {\n if (value === null) return null;\n const preset = presets[value];\n const Controls = preset?.controls;\n if (!Controls) return null;\n\n // Per-layer baked uniforms keyed by id, for the controls component to seed each\n // layer's ControlForm. Only tunable layers carry uniforms.\n const uniforms: Record<string, Record<string, number | readonly number[]>> = {};\n for (const layer of preset.layers) {\n if ('uniforms' in layer) {\n uniforms[layer.id] = { ...layer.uniforms } as Record<string, number | readonly number[]>;\n }\n }\n\n return (\n <ControlScopeContext.Provider value={value}>\n <Controls key={value} uniforms={uniforms} onPatch={onPatch} disabled={disabled} />\n </ControlScopeContext.Provider>\n );\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { TransformInput } from '../../kaleidoscope/types';
|
|
2
|
+
export type TransformControlPanelProps = {
|
|
3
|
+
readonly flip?: {
|
|
4
|
+
readonly x?: boolean;
|
|
5
|
+
readonly y?: boolean;
|
|
6
|
+
};
|
|
7
|
+
readonly rotate?: number;
|
|
8
|
+
readonly onChange: (transform: TransformInput) => void;
|
|
9
|
+
readonly disabled?: boolean;
|
|
10
|
+
/** Root for this instance's test ids; override when a screen mounts two. */
|
|
11
|
+
readonly testIDPrefix?: string;
|
|
12
|
+
};
|
|
13
|
+
export declare function TransformControlPanel({ flip, rotate, onChange, disabled, testIDPrefix, }: TransformControlPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=transform-control-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-control-panel.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-control-panel/transform-control-panel.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAO/D,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,IAAI,CAAC;IACvD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAyCF,wBAAgB,qBAAqB,CAAC,EACpC,IAAI,EACJ,MAAU,EACV,QAAQ,EACR,QAAgB,EAChB,YAAsC,GACvC,EAAE,0BAA0B,2CAoD5B","sourcesContent":["// TransformControlPanel: absolute flip + 90-degree rotation, themed and\n// controlled. Every change emits the full TransformInput (the transform verb is\n// absolute). Toggles read the `active` theme slot for their on state.\n\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport { Pressable, StyleSheet, Text, View } from 'react-native';\nimport type { TransformInput } from '../../kaleidoscope/types';\nimport { flipTestId, rotateTestId, TRANSFORM_TESTID_PREFIX } from '../../lib/test-id';\nimport { useThemeSlot } from '../theme/provider';\nimport { ControlSection } from './control-section';\n\nconst ROTATIONS = [0, 90, 180, 270] as const;\n\nexport type TransformControlPanelProps = {\n readonly flip?: { readonly x?: boolean; readonly y?: boolean };\n readonly rotate?: number;\n readonly onChange: (transform: TransformInput) => void;\n readonly disabled?: boolean;\n /** Root for this instance's test ids; override when a screen mounts two. */\n readonly testIDPrefix?: string;\n};\n\nfunction FlipToggle({\n label,\n icon,\n on,\n disabled,\n onPress,\n testID,\n accessibilityLabel,\n}: {\n readonly label: string;\n readonly icon: string;\n readonly on: boolean;\n readonly disabled: boolean;\n readonly onPress: () => void;\n readonly testID: string;\n readonly accessibilityLabel: string;\n}) {\n const { style: activeStyle } = useThemeSlot('active');\n return (\n <Pressable\n accessibilityRole=\"switch\"\n accessibilityLabel={accessibilityLabel}\n accessibilityState={{ checked: on, disabled }}\n testID={testID}\n disabled={disabled}\n onPress={onPress}\n style={[\n styles.flip,\n on && styles.on,\n on && (activeStyle as StyleProp<ViewStyle>),\n disabled && styles.disabled,\n ]}\n >\n <Text style={styles.flipIcon}>{icon}</Text>\n <Text style={styles.flipLabel}>{label}</Text>\n </Pressable>\n );\n}\n\nexport function TransformControlPanel({\n flip,\n rotate = 0,\n onChange,\n disabled = false,\n testIDPrefix = TRANSFORM_TESTID_PREFIX,\n}: TransformControlPanelProps) {\n const x = flip?.x ?? false;\n const y = flip?.y ?? false;\n const { style: activeStyle } = useThemeSlot('active');\n return (\n <ControlSection title=\"transform\">\n <View style={styles.flipRow}>\n <FlipToggle\n label=\"X\"\n icon=\"↔\"\n on={x}\n disabled={disabled}\n onPress={() => onChange({ flip: { x: !x, y }, rotate })}\n testID={flipTestId(testIDPrefix, 'x')}\n accessibilityLabel=\"Flip horizontal\"\n />\n <FlipToggle\n label=\"Y\"\n icon=\"↕\"\n on={y}\n disabled={disabled}\n onPress={() => onChange({ flip: { x, y: !y }, rotate })}\n testID={flipTestId(testIDPrefix, 'y')}\n accessibilityLabel=\"Flip vertical\"\n />\n </View>\n <View style={styles.rotRow}>\n {ROTATIONS.map((deg) => {\n const on = rotate === deg;\n return (\n <Pressable\n key={deg}\n accessibilityRole=\"radio\"\n accessibilityLabel={deg === 0 ? 'No rotation' : `Rotate ${deg} degrees`}\n accessibilityState={{ selected: on, disabled }}\n testID={rotateTestId(testIDPrefix, deg)}\n disabled={disabled}\n onPress={() => onChange({ flip: { x, y }, rotate: deg })}\n style={[\n styles.rot,\n on && styles.on,\n on && (activeStyle as StyleProp<ViewStyle>),\n disabled && styles.disabled,\n ]}\n >\n <Text style={styles.rotText}>{deg}°</Text>\n </Pressable>\n );\n })}\n </View>\n </ControlSection>\n );\n}\n\nconst styles = StyleSheet.create({\n flipRow: { flexDirection: 'row', gap: 8 },\n rotRow: { flexDirection: 'row', flexWrap: 'wrap', gap: 8 },\n flip: {\n flex: 1,\n paddingVertical: 12,\n backgroundColor: '#2a2a2a',\n borderRadius: 6,\n alignItems: 'center',\n gap: 2,\n },\n rot: {\n flexGrow: 1,\n minWidth: 56,\n paddingVertical: 10,\n backgroundColor: '#2a2a2a',\n borderRadius: 6,\n alignItems: 'center',\n },\n on: { backgroundColor: '#4a8f3f' },\n disabled: { opacity: 0.5 },\n flipIcon: { color: '#fff', fontSize: 22, lineHeight: 26 },\n flipLabel: { color: '#fff', fontWeight: '500', fontSize: 13 },\n rotText: { color: '#fff', fontWeight: '600', fontSize: 13 },\n});\n"]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TransformControlPanel = TransformControlPanel;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_native_1 = require("react-native");
|
|
6
|
+
const test_id_1 = require("../../lib/test-id");
|
|
7
|
+
const provider_1 = require("../theme/provider");
|
|
8
|
+
const control_section_1 = require("./control-section");
|
|
9
|
+
const ROTATIONS = [0, 90, 180, 270];
|
|
10
|
+
function FlipToggle({ label, icon, on, disabled, onPress, testID, accessibilityLabel, }) {
|
|
11
|
+
const { style: activeStyle } = (0, provider_1.useThemeSlot)('active');
|
|
12
|
+
return ((0, jsx_runtime_1.jsxs)(react_native_1.Pressable, { accessibilityRole: "switch", accessibilityLabel: accessibilityLabel, accessibilityState: { checked: on, disabled }, testID: testID, disabled: disabled, onPress: onPress, style: [
|
|
13
|
+
styles.flip,
|
|
14
|
+
on && styles.on,
|
|
15
|
+
on && activeStyle,
|
|
16
|
+
disabled && styles.disabled,
|
|
17
|
+
], children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.flipIcon, children: icon }), (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.flipLabel, children: label })] }));
|
|
18
|
+
}
|
|
19
|
+
function TransformControlPanel({ flip, rotate = 0, onChange, disabled = false, testIDPrefix = test_id_1.TRANSFORM_TESTID_PREFIX, }) {
|
|
20
|
+
const x = flip?.x ?? false;
|
|
21
|
+
const y = flip?.y ?? false;
|
|
22
|
+
const { style: activeStyle } = (0, provider_1.useThemeSlot)('active');
|
|
23
|
+
return ((0, jsx_runtime_1.jsxs)(control_section_1.ControlSection, { title: "transform", children: [(0, jsx_runtime_1.jsxs)(react_native_1.View, { style: styles.flipRow, children: [(0, jsx_runtime_1.jsx)(FlipToggle, { label: "X", icon: "\u2194", on: x, disabled: disabled, onPress: () => onChange({ flip: { x: !x, y }, rotate }), testID: (0, test_id_1.flipTestId)(testIDPrefix, 'x'), accessibilityLabel: "Flip horizontal" }), (0, jsx_runtime_1.jsx)(FlipToggle, { label: "Y", icon: "\u2195", on: y, disabled: disabled, onPress: () => onChange({ flip: { x, y: !y }, rotate }), testID: (0, test_id_1.flipTestId)(testIDPrefix, 'y'), accessibilityLabel: "Flip vertical" })] }), (0, jsx_runtime_1.jsx)(react_native_1.View, { style: styles.rotRow, children: ROTATIONS.map((deg) => {
|
|
24
|
+
const on = rotate === deg;
|
|
25
|
+
return ((0, jsx_runtime_1.jsx)(react_native_1.Pressable, { accessibilityRole: "radio", accessibilityLabel: deg === 0 ? 'No rotation' : `Rotate ${deg} degrees`, accessibilityState: { selected: on, disabled }, testID: (0, test_id_1.rotateTestId)(testIDPrefix, deg), disabled: disabled, onPress: () => onChange({ flip: { x, y }, rotate: deg }), style: [
|
|
26
|
+
styles.rot,
|
|
27
|
+
on && styles.on,
|
|
28
|
+
on && activeStyle,
|
|
29
|
+
disabled && styles.disabled,
|
|
30
|
+
], children: (0, jsx_runtime_1.jsxs)(react_native_1.Text, { style: styles.rotText, children: [deg, "\u00B0"] }) }, deg));
|
|
31
|
+
}) })] }));
|
|
32
|
+
}
|
|
33
|
+
const styles = react_native_1.StyleSheet.create({
|
|
34
|
+
flipRow: { flexDirection: 'row', gap: 8 },
|
|
35
|
+
rotRow: { flexDirection: 'row', flexWrap: 'wrap', gap: 8 },
|
|
36
|
+
flip: {
|
|
37
|
+
flex: 1,
|
|
38
|
+
paddingVertical: 12,
|
|
39
|
+
backgroundColor: '#2a2a2a',
|
|
40
|
+
borderRadius: 6,
|
|
41
|
+
alignItems: 'center',
|
|
42
|
+
gap: 2,
|
|
43
|
+
},
|
|
44
|
+
rot: {
|
|
45
|
+
flexGrow: 1,
|
|
46
|
+
minWidth: 56,
|
|
47
|
+
paddingVertical: 10,
|
|
48
|
+
backgroundColor: '#2a2a2a',
|
|
49
|
+
borderRadius: 6,
|
|
50
|
+
alignItems: 'center',
|
|
51
|
+
},
|
|
52
|
+
on: { backgroundColor: '#4a8f3f' },
|
|
53
|
+
disabled: { opacity: 0.5 },
|
|
54
|
+
flipIcon: { color: '#fff', fontSize: 22, lineHeight: 26 },
|
|
55
|
+
flipLabel: { color: '#fff', fontWeight: '500', fontSize: 13 },
|
|
56
|
+
rotText: { color: '#fff', fontWeight: '600', fontSize: 13 },
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=transform-control-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-control-panel.js","sourceRoot":"","sources":["../../../../src/components/preset-control-panel/transform-control-panel.tsx"],"names":[],"mappings":";;;;AAKA,+CAAiE;AAEjE,+CAAsF;AACtF,gDAAiD;AACjD,uDAAmD;AAEnD,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAW7C,SAAS,UAAU,CAAC,EAClB,KAAK,EACL,IAAI,EACJ,EAAE,EACF,QAAQ,EACR,OAAO,EACP,MAAM,EACN,kBAAkB,GASnB;IACC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAA,uBAAY,EAAC,QAAQ,CAAC,CAAC;IACtD,OAAO,CACL,wBAAC,wBAAS,IACR,iBAAiB,EAAC,QAAQ,EAC1B,kBAAkB,EAAE,kBAAkB,EACtC,kBAAkB,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAC7C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE;YACL,MAAM,CAAC,IAAI;YACX,EAAE,IAAI,MAAM,CAAC,EAAE;YACf,EAAE,IAAK,WAAoC;YAC3C,QAAQ,IAAI,MAAM,CAAC,QAAQ;SAC5B,aAED,uBAAC,mBAAI,IAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,YAAG,IAAI,GAAQ,EAC3C,uBAAC,mBAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,YAAG,KAAK,GAAQ,IACnC,CACb,CAAC;AACJ,CAAC;AAED,+BAAsC,EACpC,IAAI,EACJ,MAAM,GAAG,CAAC,EACV,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,YAAY,GAAG,iCAAuB,GACX;IAC3B,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;IAC3B,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;IAC3B,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAA,uBAAY,EAAC,QAAQ,CAAC,CAAC;IACtD,OAAO,CACL,wBAAC,gCAAc,IAAC,KAAK,EAAC,WAAW,aAC/B,wBAAC,mBAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,aACzB,uBAAC,UAAU,IACT,KAAK,EAAC,GAAG,EACT,IAAI,EAAC,QAAG,EACR,EAAE,EAAE,CAAC,EACL,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EACvD,MAAM,EAAE,IAAA,oBAAU,EAAC,YAAY,EAAE,GAAG,CAAC,EACrC,kBAAkB,EAAC,iBAAiB,GACpC,EACF,uBAAC,UAAU,IACT,KAAK,EAAC,GAAG,EACT,IAAI,EAAC,QAAG,EACR,EAAE,EAAE,CAAC,EACL,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EACvD,MAAM,EAAE,IAAA,oBAAU,EAAC,YAAY,EAAE,GAAG,CAAC,EACrC,kBAAkB,EAAC,eAAe,GAClC,IACG,EACP,uBAAC,mBAAI,IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,YACvB,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBACrB,MAAM,EAAE,GAAG,MAAM,KAAK,GAAG,CAAC;oBAC1B,OAAO,CACL,uBAAC,wBAAS,IAER,iBAAiB,EAAC,OAAO,EACzB,kBAAkB,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,GAAG,UAAU,EACvE,kBAAkB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAC9C,MAAM,EAAE,IAAA,sBAAY,EAAC,YAAY,EAAE,GAAG,CAAC,EACvC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EACxD,KAAK,EAAE;4BACL,MAAM,CAAC,GAAG;4BACV,EAAE,IAAI,MAAM,CAAC,EAAE;4BACf,EAAE,IAAK,WAAoC;4BAC3C,QAAQ,IAAI,MAAM,CAAC,QAAQ;yBAC5B,YAED,wBAAC,mBAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,aAAG,GAAG,cAAS,IAdrC,GAAG,CAeE,CACb,CAAC;gBACJ,CAAC,CAAC,GACG,IACQ,CAClB,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,yBAAU,CAAC,MAAM,CAAC;IAC/B,OAAO,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE;IACzC,MAAM,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE;IAC1D,IAAI,EAAE;QACJ,IAAI,EAAE,CAAC;QACP,eAAe,EAAE,EAAE;QACnB,eAAe,EAAE,SAAS;QAC1B,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,QAAQ;QACpB,GAAG,EAAE,CAAC;KACP;IACD,GAAG,EAAE;QACH,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,EAAE;QACZ,eAAe,EAAE,EAAE;QACnB,eAAe,EAAE,SAAS;QAC1B,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,QAAQ;KACrB;IACD,EAAE,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE;IAClC,QAAQ,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;IAC1B,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;IACzD,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC7D,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;CAC5D,CAAC,CAAC","sourcesContent":["// TransformControlPanel: absolute flip + 90-degree rotation, themed and\n// controlled. Every change emits the full TransformInput (the transform verb is\n// absolute). Toggles read the `active` theme slot for their on state.\n\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport { Pressable, StyleSheet, Text, View } from 'react-native';\nimport type { TransformInput } from '../../kaleidoscope/types';\nimport { flipTestId, rotateTestId, TRANSFORM_TESTID_PREFIX } from '../../lib/test-id';\nimport { useThemeSlot } from '../theme/provider';\nimport { ControlSection } from './control-section';\n\nconst ROTATIONS = [0, 90, 180, 270] as const;\n\nexport type TransformControlPanelProps = {\n readonly flip?: { readonly x?: boolean; readonly y?: boolean };\n readonly rotate?: number;\n readonly onChange: (transform: TransformInput) => void;\n readonly disabled?: boolean;\n /** Root for this instance's test ids; override when a screen mounts two. */\n readonly testIDPrefix?: string;\n};\n\nfunction FlipToggle({\n label,\n icon,\n on,\n disabled,\n onPress,\n testID,\n accessibilityLabel,\n}: {\n readonly label: string;\n readonly icon: string;\n readonly on: boolean;\n readonly disabled: boolean;\n readonly onPress: () => void;\n readonly testID: string;\n readonly accessibilityLabel: string;\n}) {\n const { style: activeStyle } = useThemeSlot('active');\n return (\n <Pressable\n accessibilityRole=\"switch\"\n accessibilityLabel={accessibilityLabel}\n accessibilityState={{ checked: on, disabled }}\n testID={testID}\n disabled={disabled}\n onPress={onPress}\n style={[\n styles.flip,\n on && styles.on,\n on && (activeStyle as StyleProp<ViewStyle>),\n disabled && styles.disabled,\n ]}\n >\n <Text style={styles.flipIcon}>{icon}</Text>\n <Text style={styles.flipLabel}>{label}</Text>\n </Pressable>\n );\n}\n\nexport function TransformControlPanel({\n flip,\n rotate = 0,\n onChange,\n disabled = false,\n testIDPrefix = TRANSFORM_TESTID_PREFIX,\n}: TransformControlPanelProps) {\n const x = flip?.x ?? false;\n const y = flip?.y ?? false;\n const { style: activeStyle } = useThemeSlot('active');\n return (\n <ControlSection title=\"transform\">\n <View style={styles.flipRow}>\n <FlipToggle\n label=\"X\"\n icon=\"↔\"\n on={x}\n disabled={disabled}\n onPress={() => onChange({ flip: { x: !x, y }, rotate })}\n testID={flipTestId(testIDPrefix, 'x')}\n accessibilityLabel=\"Flip horizontal\"\n />\n <FlipToggle\n label=\"Y\"\n icon=\"↕\"\n on={y}\n disabled={disabled}\n onPress={() => onChange({ flip: { x, y: !y }, rotate })}\n testID={flipTestId(testIDPrefix, 'y')}\n accessibilityLabel=\"Flip vertical\"\n />\n </View>\n <View style={styles.rotRow}>\n {ROTATIONS.map((deg) => {\n const on = rotate === deg;\n return (\n <Pressable\n key={deg}\n accessibilityRole=\"radio\"\n accessibilityLabel={deg === 0 ? 'No rotation' : `Rotate ${deg} degrees`}\n accessibilityState={{ selected: on, disabled }}\n testID={rotateTestId(testIDPrefix, deg)}\n disabled={disabled}\n onPress={() => onChange({ flip: { x, y }, rotate: deg })}\n style={[\n styles.rot,\n on && styles.on,\n on && (activeStyle as StyleProp<ViewStyle>),\n disabled && styles.disabled,\n ]}\n >\n <Text style={styles.rotText}>{deg}°</Text>\n </Pressable>\n );\n })}\n </View>\n </ControlSection>\n );\n}\n\nconst styles = StyleSheet.create({\n flipRow: { flexDirection: 'row', gap: 8 },\n rotRow: { flexDirection: 'row', flexWrap: 'wrap', gap: 8 },\n flip: {\n flex: 1,\n paddingVertical: 12,\n backgroundColor: '#2a2a2a',\n borderRadius: 6,\n alignItems: 'center',\n gap: 2,\n },\n rot: {\n flexGrow: 1,\n minWidth: 56,\n paddingVertical: 10,\n backgroundColor: '#2a2a2a',\n borderRadius: 6,\n alignItems: 'center',\n },\n on: { backgroundColor: '#4a8f3f' },\n disabled: { opacity: 0.5 },\n flipIcon: { color: '#fff', fontSize: 22, lineHeight: 26 },\n flipLabel: { color: '#fff', fontWeight: '500', fontSize: 13 },\n rotText: { color: '#fff', fontWeight: '600', fontSize: 13 },\n});\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type StyleProp, type ViewStyle } from 'react-native';
|
|
2
|
+
interface PresetTileProps {
|
|
3
|
+
readonly label: string;
|
|
4
|
+
/**
|
|
5
|
+
* Resolved thumbnail source. A `string` is a URL (web) or file:// URI (native
|
|
6
|
+
* preset-name lookup); a `number` is a Metro asset module id consumed directly
|
|
7
|
+
* by `<Image source={number}>`. Undefined renders the recessed button.
|
|
8
|
+
*/
|
|
9
|
+
readonly uri: string | number | undefined;
|
|
10
|
+
readonly selected: boolean;
|
|
11
|
+
readonly disabled?: boolean | undefined;
|
|
12
|
+
readonly onPress: () => void;
|
|
13
|
+
/** Optional corner badge, e.g. "demo-owned". */
|
|
14
|
+
readonly badge?: string | undefined;
|
|
15
|
+
/** NativeWind class; resolved via the `./nativewind` interop registration. */
|
|
16
|
+
readonly className?: string | undefined;
|
|
17
|
+
/** RN style override; applied after the defaults. */
|
|
18
|
+
readonly style?: StyleProp<ViewStyle> | undefined;
|
|
19
|
+
/** Deterministic `accessibilityIdentifier` (`kld.preset.<id>`). */
|
|
20
|
+
readonly testID?: string | undefined;
|
|
21
|
+
}
|
|
22
|
+
export declare function PresetTile(props: PresetTileProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|