@appinternalleads/ui 0.4.0 → 0.4.1
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/dist/cjs/agent/AgentComponent.js +1 -1
- package/dist/cjs/agent/AgentComponent.js.map +1 -1
- package/dist/cjs/agent/manifests.js +81 -1
- package/dist/cjs/agent/manifests.js.map +1 -1
- package/dist/cjs/agent/result.js +6 -0
- package/dist/cjs/agent/result.js.map +1 -1
- package/dist/cjs/components/catalog.js +18 -0
- package/dist/cjs/components/catalog.js.map +1 -1
- package/dist/cjs/components/onboarding/animated-status/AnimatedStage.js +21 -0
- package/dist/cjs/components/onboarding/animated-status/AnimatedStage.js.map +1 -0
- package/dist/cjs/components/onboarding/animated-status/AnimatedStage.types.js +6 -0
- package/dist/cjs/components/onboarding/animated-status/AnimatedStage.types.js.map +1 -0
- package/dist/cjs/components/onboarding/animated-status/AnimatedStage.web.js +89 -0
- package/dist/cjs/components/onboarding/animated-status/AnimatedStage.web.js.map +1 -0
- package/dist/cjs/components/onboarding/animated-status/AnimatedStatusView.js +62 -0
- package/dist/cjs/components/onboarding/animated-status/AnimatedStatusView.js.map +1 -0
- package/dist/cjs/components/onboarding/animated-status/AnimatedStill.js +20 -0
- package/dist/cjs/components/onboarding/animated-status/AnimatedStill.js.map +1 -0
- package/dist/cjs/components/onboarding/animated-status/contract.js +87 -0
- package/dist/cjs/components/onboarding/animated-status/contract.js.map +1 -0
- package/dist/cjs/components/onboarding/animated-status/engine.js +40 -0
- package/dist/cjs/components/onboarding/animated-status/engine.js.map +1 -0
- package/dist/cjs/components/onboarding/animated-status/index.js +20 -0
- package/dist/cjs/components/onboarding/animated-status/index.js.map +1 -0
- package/dist/cjs/components/onboarding/animated-status/presets.json +126 -0
- package/dist/cjs/components/onboarding/animated-status/riv.js +7 -0
- package/dist/cjs/components/onboarding/animated-status/riv.js.map +1 -0
- package/dist/cjs/components/onboarding/index.js +4 -0
- package/dist/cjs/components/onboarding/index.js.map +1 -1
- package/dist/cjs/components/onboarding/presets.js +90 -84
- package/dist/cjs/components/onboarding/presets.js.map +1 -1
- package/dist/cjs/components/onboarding/receipt-printer/ReceiptStage.js +43 -6
- package/dist/cjs/components/onboarding/receipt-printer/ReceiptStage.js.map +1 -1
- package/dist/cjs/components/onboarding/send-completion/SendCompletionView.js +111 -0
- package/dist/cjs/components/onboarding/send-completion/SendCompletionView.js.map +1 -0
- package/dist/cjs/components/onboarding/send-completion/SendStage.js +37 -0
- package/dist/cjs/components/onboarding/send-completion/SendStage.js.map +1 -0
- package/dist/cjs/components/onboarding/send-completion/SendStage.types.js +6 -0
- package/dist/cjs/components/onboarding/send-completion/SendStage.types.js.map +1 -0
- package/dist/cjs/components/onboarding/send-completion/SendStage.web.js +107 -0
- package/dist/cjs/components/onboarding/send-completion/SendStage.web.js.map +1 -0
- package/dist/cjs/components/onboarding/send-completion/SendStill.js +17 -0
- package/dist/cjs/components/onboarding/send-completion/SendStill.js.map +1 -0
- package/dist/cjs/components/onboarding/send-completion/contract.js +83 -0
- package/dist/cjs/components/onboarding/send-completion/contract.js.map +1 -0
- package/dist/cjs/components/onboarding/send-completion/engine.js +32 -0
- package/dist/cjs/components/onboarding/send-completion/engine.js.map +1 -0
- package/dist/cjs/components/onboarding/send-completion/index.js +22 -0
- package/dist/cjs/components/onboarding/send-completion/index.js.map +1 -0
- package/dist/cjs/components/onboarding/send-completion/presets.json +132 -0
- package/dist/cjs/components/onboarding/send-completion/riv.js +7 -0
- package/dist/cjs/components/onboarding/send-completion/riv.js.map +1 -0
- package/dist/cjs/components/onboarding/shared/actions-data.js +2 -0
- package/dist/cjs/components/onboarding/shared/actions-data.js.map +1 -1
- package/dist/cjs/components/onboarding/shared/configColor.js +76 -0
- package/dist/cjs/components/onboarding/shared/configColor.js.map +1 -0
- package/dist/cjs/components/onboarding/shared/contract.js +4 -0
- package/dist/cjs/components/onboarding/shared/contract.js.map +1 -1
- package/dist/cjs/components/onboarding/shared/describe.js +1 -1
- package/dist/cjs/components/onboarding/shared/describe.js.map +1 -1
- package/dist/cjs/components/onboarding/shared/mock.js +2 -0
- package/dist/cjs/components/onboarding/shared/mock.js.map +1 -1
- package/dist/cjs/components/onboarding/views.js +8 -0
- package/dist/cjs/components/onboarding/views.js.map +1 -1
- package/dist/cjs/motion/MotionPlayer.js +42 -0
- package/dist/cjs/motion/MotionPlayer.js.map +1 -0
- package/dist/cjs/motion/agent.js +323 -0
- package/dist/cjs/motion/agent.js.map +1 -0
- package/dist/cjs/motion/cat/Cat.js +79 -0
- package/dist/cjs/motion/cat/Cat.js.map +1 -0
- package/dist/cjs/motion/cat/animation.js +204 -0
- package/dist/cjs/motion/cat/animation.js.map +1 -0
- package/dist/cjs/motion/cat/art.generated.js +37 -0
- package/dist/cjs/motion/cat/art.generated.js.map +1 -0
- package/dist/cjs/motion/cat/config.js +136 -0
- package/dist/cjs/motion/cat/config.js.map +1 -0
- package/dist/cjs/motion/cat/index.js +75 -0
- package/dist/cjs/motion/cat/index.js.map +1 -0
- package/dist/cjs/motion/cat/rig.js +99 -0
- package/dist/cjs/motion/cat/rig.js.map +1 -0
- package/dist/cjs/motion/cat/scene.js +148 -0
- package/dist/cjs/motion/cat/scene.js.map +1 -0
- package/dist/cjs/motion/configurable/config.js +477 -0
- package/dist/cjs/motion/configurable/config.js.map +1 -0
- package/dist/cjs/motion/configurable/controls.js +44 -0
- package/dist/cjs/motion/configurable/controls.js.map +1 -0
- package/dist/cjs/motion/easing.js +62 -0
- package/dist/cjs/motion/easing.js.map +1 -0
- package/dist/cjs/motion/fit.js +12 -0
- package/dist/cjs/motion/fit.js.map +1 -0
- package/dist/cjs/motion/index.js +101 -0
- package/dist/cjs/motion/index.js.map +1 -0
- package/dist/cjs/motion/neon/GlowRenderer.js +18 -0
- package/dist/cjs/motion/neon/GlowRenderer.js.map +1 -0
- package/dist/cjs/motion/neon/NeonCanvas.js +97 -0
- package/dist/cjs/motion/neon/NeonCanvas.js.map +1 -0
- package/dist/cjs/motion/neon/NeonText.js +108 -0
- package/dist/cjs/motion/neon/NeonText.js.map +1 -0
- package/dist/cjs/motion/neon/NeonTextFrame.js +36 -0
- package/dist/cjs/motion/neon/NeonTextFrame.js.map +1 -0
- package/dist/cjs/motion/neon/artwork.js +102 -0
- package/dist/cjs/motion/neon/artwork.js.map +1 -0
- package/dist/cjs/motion/neon/audio.js +165 -0
- package/dist/cjs/motion/neon/audio.js.map +1 -0
- package/dist/cjs/motion/neon/config.js +334 -0
- package/dist/cjs/motion/neon/config.js.map +1 -0
- package/dist/cjs/motion/neon/flicker.js +196 -0
- package/dist/cjs/motion/neon/flicker.js.map +1 -0
- package/dist/cjs/motion/neon/fonts.js +52 -0
- package/dist/cjs/motion/neon/fonts.js.map +1 -0
- package/dist/cjs/motion/neon/frame.js +24 -0
- package/dist/cjs/motion/neon/frame.js.map +1 -0
- package/dist/cjs/motion/neon/glitch.js +114 -0
- package/dist/cjs/motion/neon/glitch.js.map +1 -0
- package/dist/cjs/motion/neon/index.js +119 -0
- package/dist/cjs/motion/neon/index.js.map +1 -0
- package/dist/cjs/motion/neon/layers.js +68 -0
- package/dist/cjs/motion/neon/layers.js.map +1 -0
- package/dist/cjs/motion/neon/material.js +56 -0
- package/dist/cjs/motion/neon/material.js.map +1 -0
- package/dist/cjs/motion/neon/random.js +43 -0
- package/dist/cjs/motion/neon/random.js.map +1 -0
- package/dist/cjs/motion/neon/scene.js +549 -0
- package/dist/cjs/motion/neon/scene.js.map +1 -0
- package/dist/cjs/motion/neon/synth.js +213 -0
- package/dist/cjs/motion/neon/synth.js.map +1 -0
- package/dist/cjs/motion/neon/typography.js +81 -0
- package/dist/cjs/motion/neon/typography.js.map +1 -0
- package/dist/cjs/motion/neon/wall.js +113 -0
- package/dist/cjs/motion/neon/wall.js.map +1 -0
- package/dist/cjs/motion/paperfold/PaperFold.js +40 -0
- package/dist/cjs/motion/paperfold/PaperFold.js.map +1 -0
- package/dist/cjs/motion/paperfold/PaperFoldFrame.js +290 -0
- package/dist/cjs/motion/paperfold/PaperFoldFrame.js.map +1 -0
- package/dist/cjs/motion/paperfold/PaperFoldPlayer.js +59 -0
- package/dist/cjs/motion/paperfold/PaperFoldPlayer.js.map +1 -0
- package/dist/cjs/motion/paperfold/art.js +388 -0
- package/dist/cjs/motion/paperfold/art.js.map +1 -0
- package/dist/cjs/motion/paperfold/config.js +103 -0
- package/dist/cjs/motion/paperfold/config.js.map +1 -0
- package/dist/cjs/motion/paperfold/controls.js +493 -0
- package/dist/cjs/motion/paperfold/controls.js.map +1 -0
- package/dist/cjs/motion/paperfold/engine.js +722 -0
- package/dist/cjs/motion/paperfold/engine.js.map +1 -0
- package/dist/cjs/motion/paperfold/fonts.js +25 -0
- package/dist/cjs/motion/paperfold/fonts.js.map +1 -0
- package/dist/cjs/motion/paperfold/index.js +113 -0
- package/dist/cjs/motion/paperfold/index.js.map +1 -0
- package/dist/cjs/motion/paperfold/manipulate.js +170 -0
- package/dist/cjs/motion/paperfold/manipulate.js.map +1 -0
- package/dist/cjs/motion/paperfold/presets.js +119 -0
- package/dist/cjs/motion/paperfold/presets.js.map +1 -0
- package/dist/cjs/motion/paperfold/template.js +40 -0
- package/dist/cjs/motion/paperfold/template.js.map +1 -0
- package/dist/cjs/motion/player.js +203 -0
- package/dist/cjs/motion/player.js.map +1 -0
- package/dist/cjs/motion/promo/PromoFrame.js +293 -0
- package/dist/cjs/motion/promo/PromoFrame.js.map +1 -0
- package/dist/cjs/motion/promo/PromoShowcasePlayer.js +59 -0
- package/dist/cjs/motion/promo/PromoShowcasePlayer.js.map +1 -0
- package/dist/cjs/motion/promo/config.js +565 -0
- package/dist/cjs/motion/promo/config.js.map +1 -0
- package/dist/cjs/motion/promo/controls.js +571 -0
- package/dist/cjs/motion/promo/controls.js.map +1 -0
- package/dist/cjs/motion/promo/easing.js +35 -0
- package/dist/cjs/motion/promo/easing.js.map +1 -0
- package/dist/cjs/motion/promo/engine.js +567 -0
- package/dist/cjs/motion/promo/engine.js.map +1 -0
- package/dist/cjs/motion/promo/fonts.js +20 -0
- package/dist/cjs/motion/promo/fonts.js.map +1 -0
- package/dist/cjs/motion/promo/icons.js +29 -0
- package/dist/cjs/motion/promo/icons.js.map +1 -0
- package/dist/cjs/motion/promo/index.js +73 -0
- package/dist/cjs/motion/promo/index.js.map +1 -0
- package/dist/cjs/motion/promo/presets.js +44 -0
- package/dist/cjs/motion/promo/presets.js.map +1 -0
- package/dist/cjs/motion/promo/template.js +38 -0
- package/dist/cjs/motion/promo/template.js.map +1 -0
- package/dist/cjs/motion/replication2/Replication2Player.js +93 -0
- package/dist/cjs/motion/replication2/Replication2Player.js.map +1 -0
- package/dist/cjs/motion/replication2/config.js +352 -0
- package/dist/cjs/motion/replication2/config.js.map +1 -0
- package/dist/cjs/motion/replication2/controls.js +286 -0
- package/dist/cjs/motion/replication2/controls.js.map +1 -0
- package/dist/cjs/motion/replication2/driver.js +68 -0
- package/dist/cjs/motion/replication2/driver.js.map +1 -0
- package/dist/cjs/motion/replication2/easing.js +97 -0
- package/dist/cjs/motion/replication2/easing.js.map +1 -0
- package/dist/cjs/motion/replication2/engine.js +481 -0
- package/dist/cjs/motion/replication2/engine.js.map +1 -0
- package/dist/cjs/motion/replication2/html.js +88 -0
- package/dist/cjs/motion/replication2/html.js.map +1 -0
- package/dist/cjs/motion/replication2/index.js +61 -0
- package/dist/cjs/motion/replication2/index.js.map +1 -0
- package/dist/cjs/motion/replication2/measure.js +30 -0
- package/dist/cjs/motion/replication2/measure.js.map +1 -0
- package/dist/cjs/motion/replication2/metrics.js +10 -0
- package/dist/cjs/motion/replication2/metrics.js.map +1 -0
- package/dist/cjs/motion/replication2/presets.js +67 -0
- package/dist/cjs/motion/replication2/presets.js.map +1 -0
- package/dist/cjs/motion/replication2/riv.js +7 -0
- package/dist/cjs/motion/replication2/riv.js.map +1 -0
- package/dist/cjs/motion/replication2/rive-contract.js +158 -0
- package/dist/cjs/motion/replication2/rive-contract.js.map +1 -0
- package/dist/cjs/motion/replication2/template.js +35 -0
- package/dist/cjs/motion/replication2/template.js.map +1 -0
- package/dist/cjs/motion/sample.js +149 -0
- package/dist/cjs/motion/sample.js.map +1 -0
- package/dist/cjs/motion/templates/hey-template.js +1552 -0
- package/dist/cjs/motion/templates/hey-template.js.map +1 -0
- package/dist/cjs/motion/templates/index.js +22 -0
- package/dist/cjs/motion/templates/index.js.map +1 -0
- package/dist/cjs/motion/templates/word-motion.js +1165 -0
- package/dist/cjs/motion/templates/word-motion.js.map +1 -0
- package/dist/cjs/motion/types.js +3 -0
- package/dist/cjs/motion/types.js.map +1 -0
- package/dist/cjs/motion/typesurface/TypeSurfaceCanvas.js +62 -0
- package/dist/cjs/motion/typesurface/TypeSurfaceCanvas.js.map +1 -0
- package/dist/cjs/motion/typesurface/art.js +861 -0
- package/dist/cjs/motion/typesurface/art.js.map +1 -0
- package/dist/cjs/motion/typesurface/config.js +269 -0
- package/dist/cjs/motion/typesurface/config.js.map +1 -0
- package/dist/cjs/motion/typesurface/engine.js +607 -0
- package/dist/cjs/motion/typesurface/engine.js.map +1 -0
- package/dist/cjs/motion/typesurface/fonts.js +45 -0
- package/dist/cjs/motion/typesurface/fonts.js.map +1 -0
- package/dist/cjs/motion/typesurface/index.js +72 -0
- package/dist/cjs/motion/typesurface/index.js.map +1 -0
- package/dist/cjs/motion/typesurface/layout.js +130 -0
- package/dist/cjs/motion/typesurface/layout.js.map +1 -0
- package/dist/cjs/motion/typesurface/ops.js +175 -0
- package/dist/cjs/motion/typesurface/ops.js.map +1 -0
- package/dist/cjs/motion/typesurface/presets.js +192 -0
- package/dist/cjs/motion/typesurface/presets.js.map +1 -0
- package/dist/cjs/motion/typesurface/renderer.js +672 -0
- package/dist/cjs/motion/typesurface/renderer.js.map +1 -0
- package/dist/cjs/motion/typesurface/shaders.js +300 -0
- package/dist/cjs/motion/typesurface/shaders.js.map +1 -0
- package/dist/cjs/motion/typesurface/surfaces.js +156 -0
- package/dist/cjs/motion/typesurface/surfaces.js.map +1 -0
- package/dist/cjs/motion/typesurface/text.js +34 -0
- package/dist/cjs/motion/typesurface/text.js.map +1 -0
- package/dist/cjs/motion/typesurface/timeline.js +64 -0
- package/dist/cjs/motion/typesurface/timeline.js.map +1 -0
- package/dist/cjs/motion/validate.js +89 -0
- package/dist/cjs/motion/validate.js.map +1 -0
- package/dist/cjs/native/RiveReceiptStage.js +9 -150
- package/dist/cjs/native/RiveReceiptStage.js.map +1 -1
- package/dist/cjs/native/riveReceiptStageFactory.js +162 -0
- package/dist/cjs/native/riveReceiptStageFactory.js.map +1 -0
- package/dist/cjs/tokens/stage.js +10 -0
- package/dist/cjs/tokens/stage.js.map +1 -0
- package/dist/esm/agent/AgentComponent.js +1 -1
- package/dist/esm/agent/AgentComponent.js.map +1 -1
- package/dist/esm/agent/manifests.d.ts.map +1 -1
- package/dist/esm/agent/manifests.js +81 -1
- package/dist/esm/agent/manifests.js.map +1 -1
- package/dist/esm/agent/result.d.ts.map +1 -1
- package/dist/esm/agent/result.js +6 -0
- package/dist/esm/agent/result.js.map +1 -1
- package/dist/esm/agent/types.d.ts +1 -1
- package/dist/esm/agent/types.d.ts.map +1 -1
- package/dist/esm/components/catalog.d.ts +1 -1
- package/dist/esm/components/catalog.d.ts.map +1 -1
- package/dist/esm/components/catalog.js +18 -0
- package/dist/esm/components/catalog.js.map +1 -1
- package/dist/esm/components/onboarding/animated-status/AnimatedStage.d.ts +9 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStage.d.ts.map +1 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStage.js +18 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStage.js.map +1 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.d.ts +31 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.d.ts.map +1 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.js +3 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.js.map +1 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.d.ts +4 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.d.ts.map +1 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.js +86 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.js.map +1 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.d.ts +32 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.d.ts.map +1 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.js +59 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.js.map +1 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStill.d.ts +8 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStill.d.ts.map +1 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStill.js +17 -0
- package/dist/esm/components/onboarding/animated-status/AnimatedStill.js.map +1 -0
- package/dist/esm/components/onboarding/animated-status/contract.d.ts +61 -0
- package/dist/esm/components/onboarding/animated-status/contract.d.ts.map +1 -0
- package/dist/esm/components/onboarding/animated-status/contract.js +78 -0
- package/dist/esm/components/onboarding/animated-status/contract.js.map +1 -0
- package/dist/esm/components/onboarding/animated-status/engine.d.ts +24 -0
- package/dist/esm/components/onboarding/animated-status/engine.d.ts.map +1 -0
- package/dist/esm/components/onboarding/animated-status/engine.js +32 -0
- package/dist/esm/components/onboarding/animated-status/engine.js.map +1 -0
- package/dist/esm/components/onboarding/animated-status/index.d.ts +5 -0
- package/dist/esm/components/onboarding/animated-status/index.d.ts.map +1 -0
- package/dist/esm/components/onboarding/animated-status/index.js +4 -0
- package/dist/esm/components/onboarding/animated-status/index.js.map +1 -0
- package/dist/esm/components/onboarding/animated-status/presets.json +126 -0
- package/dist/esm/components/onboarding/animated-status/riv.d.ts +3 -0
- package/dist/esm/components/onboarding/animated-status/riv.d.ts.map +1 -0
- package/dist/esm/components/onboarding/animated-status/riv.js +4 -0
- package/dist/esm/components/onboarding/animated-status/riv.js.map +1 -0
- package/dist/esm/components/onboarding/index.d.ts +2 -0
- package/dist/esm/components/onboarding/index.d.ts.map +1 -1
- package/dist/esm/components/onboarding/index.js +4 -0
- package/dist/esm/components/onboarding/index.js.map +1 -1
- package/dist/esm/components/onboarding/presets.d.ts.map +1 -1
- package/dist/esm/components/onboarding/presets.js +6 -0
- package/dist/esm/components/onboarding/presets.js.map +1 -1
- package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.d.ts +4 -6
- package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.d.ts.map +1 -1
- package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.js +42 -6
- package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.js.map +1 -1
- package/dist/esm/components/onboarding/send-completion/SendCompletionView.d.ts +47 -0
- package/dist/esm/components/onboarding/send-completion/SendCompletionView.d.ts.map +1 -0
- package/dist/esm/components/onboarding/send-completion/SendCompletionView.js +108 -0
- package/dist/esm/components/onboarding/send-completion/SendCompletionView.js.map +1 -0
- package/dist/esm/components/onboarding/send-completion/SendStage.d.ts +9 -0
- package/dist/esm/components/onboarding/send-completion/SendStage.d.ts.map +1 -0
- package/dist/esm/components/onboarding/send-completion/SendStage.js +34 -0
- package/dist/esm/components/onboarding/send-completion/SendStage.js.map +1 -0
- package/dist/esm/components/onboarding/send-completion/SendStage.types.d.ts +33 -0
- package/dist/esm/components/onboarding/send-completion/SendStage.types.d.ts.map +1 -0
- package/dist/esm/components/onboarding/send-completion/SendStage.types.js +3 -0
- package/dist/esm/components/onboarding/send-completion/SendStage.types.js.map +1 -0
- package/dist/esm/components/onboarding/send-completion/SendStage.web.d.ts +4 -0
- package/dist/esm/components/onboarding/send-completion/SendStage.web.d.ts.map +1 -0
- package/dist/esm/components/onboarding/send-completion/SendStage.web.js +104 -0
- package/dist/esm/components/onboarding/send-completion/SendStage.web.js.map +1 -0
- package/dist/esm/components/onboarding/send-completion/SendStill.d.ts +11 -0
- package/dist/esm/components/onboarding/send-completion/SendStill.d.ts.map +1 -0
- package/dist/esm/components/onboarding/send-completion/SendStill.js +14 -0
- package/dist/esm/components/onboarding/send-completion/SendStill.js.map +1 -0
- package/dist/esm/components/onboarding/send-completion/contract.d.ts +99 -0
- package/dist/esm/components/onboarding/send-completion/contract.d.ts.map +1 -0
- package/dist/esm/components/onboarding/send-completion/contract.js +76 -0
- package/dist/esm/components/onboarding/send-completion/contract.js.map +1 -0
- package/dist/esm/components/onboarding/send-completion/engine.d.ts +20 -0
- package/dist/esm/components/onboarding/send-completion/engine.d.ts.map +1 -0
- package/dist/esm/components/onboarding/send-completion/engine.js +28 -0
- package/dist/esm/components/onboarding/send-completion/engine.js.map +1 -0
- package/dist/esm/components/onboarding/send-completion/index.d.ts +6 -0
- package/dist/esm/components/onboarding/send-completion/index.d.ts.map +1 -0
- package/dist/esm/components/onboarding/send-completion/index.js +6 -0
- package/dist/esm/components/onboarding/send-completion/index.js.map +1 -0
- package/dist/esm/components/onboarding/send-completion/presets.json +132 -0
- package/dist/esm/components/onboarding/send-completion/riv.d.ts +3 -0
- package/dist/esm/components/onboarding/send-completion/riv.d.ts.map +1 -0
- package/dist/esm/components/onboarding/send-completion/riv.js +4 -0
- package/dist/esm/components/onboarding/send-completion/riv.js.map +1 -0
- package/dist/esm/components/onboarding/shared/actions-data.d.ts.map +1 -1
- package/dist/esm/components/onboarding/shared/actions-data.js +2 -0
- package/dist/esm/components/onboarding/shared/actions-data.js.map +1 -1
- package/dist/esm/components/onboarding/shared/configColor.d.ts +29 -0
- package/dist/esm/components/onboarding/shared/configColor.d.ts.map +1 -0
- package/dist/esm/components/onboarding/shared/configColor.js +69 -0
- package/dist/esm/components/onboarding/shared/configColor.js.map +1 -0
- package/dist/esm/components/onboarding/shared/contract.d.ts +1 -1
- package/dist/esm/components/onboarding/shared/contract.d.ts.map +1 -1
- package/dist/esm/components/onboarding/shared/contract.js +4 -0
- package/dist/esm/components/onboarding/shared/contract.js.map +1 -1
- package/dist/esm/components/onboarding/shared/describe.d.ts.map +1 -1
- package/dist/esm/components/onboarding/shared/describe.js +1 -1
- package/dist/esm/components/onboarding/shared/describe.js.map +1 -1
- package/dist/esm/components/onboarding/shared/mock.d.ts +2 -0
- package/dist/esm/components/onboarding/shared/mock.d.ts.map +1 -1
- package/dist/esm/components/onboarding/shared/mock.js +2 -0
- package/dist/esm/components/onboarding/shared/mock.js.map +1 -1
- package/dist/esm/components/onboarding/views.d.ts.map +1 -1
- package/dist/esm/components/onboarding/views.js +8 -0
- package/dist/esm/components/onboarding/views.js.map +1 -1
- package/dist/esm/motion/MotionPlayer.d.ts +22 -0
- package/dist/esm/motion/MotionPlayer.d.ts.map +1 -0
- package/dist/esm/motion/MotionPlayer.js +39 -0
- package/dist/esm/motion/MotionPlayer.js.map +1 -0
- package/dist/esm/motion/agent.d.ts +146 -0
- package/dist/esm/motion/agent.d.ts.map +1 -0
- package/dist/esm/motion/agent.js +278 -0
- package/dist/esm/motion/agent.js.map +1 -0
- package/dist/esm/motion/cat/Cat.d.ts +43 -0
- package/dist/esm/motion/cat/Cat.d.ts.map +1 -0
- package/dist/esm/motion/cat/Cat.js +74 -0
- package/dist/esm/motion/cat/Cat.js.map +1 -0
- package/dist/esm/motion/cat/animation.d.ts +86 -0
- package/dist/esm/motion/cat/animation.d.ts.map +1 -0
- package/dist/esm/motion/cat/animation.js +193 -0
- package/dist/esm/motion/cat/animation.js.map +1 -0
- package/dist/esm/motion/cat/art.generated.d.ts +53 -0
- package/dist/esm/motion/cat/art.generated.d.ts.map +1 -0
- package/dist/esm/motion/cat/art.generated.js +34 -0
- package/dist/esm/motion/cat/art.generated.js.map +1 -0
- package/dist/esm/motion/cat/config.d.ts +103 -0
- package/dist/esm/motion/cat/config.d.ts.map +1 -0
- package/dist/esm/motion/cat/config.js +129 -0
- package/dist/esm/motion/cat/config.js.map +1 -0
- package/dist/esm/motion/cat/index.d.ts +13 -0
- package/dist/esm/motion/cat/index.d.ts.map +1 -0
- package/dist/esm/motion/cat/index.js +13 -0
- package/dist/esm/motion/cat/index.js.map +1 -0
- package/dist/esm/motion/cat/rig.d.ts +44 -0
- package/dist/esm/motion/cat/rig.d.ts.map +1 -0
- package/dist/esm/motion/cat/rig.js +86 -0
- package/dist/esm/motion/cat/rig.js.map +1 -0
- package/dist/esm/motion/cat/scene.d.ts +66 -0
- package/dist/esm/motion/cat/scene.d.ts.map +1 -0
- package/dist/esm/motion/cat/scene.js +137 -0
- package/dist/esm/motion/cat/scene.js.map +1 -0
- package/dist/esm/motion/configurable/config.d.ts +80 -0
- package/dist/esm/motion/configurable/config.d.ts.map +1 -0
- package/dist/esm/motion/configurable/config.js +468 -0
- package/dist/esm/motion/configurable/config.js.map +1 -0
- package/dist/esm/motion/configurable/controls.d.ts +74 -0
- package/dist/esm/motion/configurable/controls.d.ts.map +1 -0
- package/dist/esm/motion/configurable/controls.js +38 -0
- package/dist/esm/motion/configurable/controls.js.map +1 -0
- package/dist/esm/motion/easing.d.ts +4 -0
- package/dist/esm/motion/easing.d.ts.map +1 -0
- package/dist/esm/motion/easing.js +58 -0
- package/dist/esm/motion/easing.js.map +1 -0
- package/dist/esm/motion/fit.d.ts +8 -0
- package/dist/esm/motion/fit.d.ts.map +1 -0
- package/dist/esm/motion/fit.js +8 -0
- package/dist/esm/motion/fit.js.map +1 -0
- package/dist/esm/motion/index.d.ts +27 -0
- package/dist/esm/motion/index.d.ts.map +1 -0
- package/dist/esm/motion/index.js +21 -0
- package/dist/esm/motion/index.js.map +1 -0
- package/dist/esm/motion/neon/GlowRenderer.d.ts +31 -0
- package/dist/esm/motion/neon/GlowRenderer.d.ts.map +1 -0
- package/dist/esm/motion/neon/GlowRenderer.js +14 -0
- package/dist/esm/motion/neon/GlowRenderer.js.map +1 -0
- package/dist/esm/motion/neon/NeonCanvas.d.ts +42 -0
- package/dist/esm/motion/neon/NeonCanvas.d.ts.map +1 -0
- package/dist/esm/motion/neon/NeonCanvas.js +92 -0
- package/dist/esm/motion/neon/NeonCanvas.js.map +1 -0
- package/dist/esm/motion/neon/NeonText.d.ts +26 -0
- package/dist/esm/motion/neon/NeonText.d.ts.map +1 -0
- package/dist/esm/motion/neon/NeonText.js +103 -0
- package/dist/esm/motion/neon/NeonText.js.map +1 -0
- package/dist/esm/motion/neon/NeonTextFrame.d.ts +29 -0
- package/dist/esm/motion/neon/NeonTextFrame.d.ts.map +1 -0
- package/dist/esm/motion/neon/NeonTextFrame.js +33 -0
- package/dist/esm/motion/neon/NeonTextFrame.js.map +1 -0
- package/dist/esm/motion/neon/artwork.d.ts +29 -0
- package/dist/esm/motion/neon/artwork.d.ts.map +1 -0
- package/dist/esm/motion/neon/artwork.js +98 -0
- package/dist/esm/motion/neon/artwork.js.map +1 -0
- package/dist/esm/motion/neon/audio.d.ts +49 -0
- package/dist/esm/motion/neon/audio.d.ts.map +1 -0
- package/dist/esm/motion/neon/audio.js +161 -0
- package/dist/esm/motion/neon/audio.js.map +1 -0
- package/dist/esm/motion/neon/config.d.ts +319 -0
- package/dist/esm/motion/neon/config.d.ts.map +1 -0
- package/dist/esm/motion/neon/config.js +319 -0
- package/dist/esm/motion/neon/config.js.map +1 -0
- package/dist/esm/motion/neon/flicker.d.ts +82 -0
- package/dist/esm/motion/neon/flicker.d.ts.map +1 -0
- package/dist/esm/motion/neon/flicker.js +187 -0
- package/dist/esm/motion/neon/flicker.js.map +1 -0
- package/dist/esm/motion/neon/fonts.d.ts +29 -0
- package/dist/esm/motion/neon/fonts.d.ts.map +1 -0
- package/dist/esm/motion/neon/fonts.js +47 -0
- package/dist/esm/motion/neon/fonts.js.map +1 -0
- package/dist/esm/motion/neon/frame.d.ts +22 -0
- package/dist/esm/motion/neon/frame.d.ts.map +1 -0
- package/dist/esm/motion/neon/frame.js +20 -0
- package/dist/esm/motion/neon/frame.js.map +1 -0
- package/dist/esm/motion/neon/glitch.d.ts +64 -0
- package/dist/esm/motion/neon/glitch.d.ts.map +1 -0
- package/dist/esm/motion/neon/glitch.js +108 -0
- package/dist/esm/motion/neon/glitch.js.map +1 -0
- package/dist/esm/motion/neon/index.d.ts +29 -0
- package/dist/esm/motion/neon/index.d.ts.map +1 -0
- package/dist/esm/motion/neon/index.js +28 -0
- package/dist/esm/motion/neon/index.js.map +1 -0
- package/dist/esm/motion/neon/layers.d.ts +56 -0
- package/dist/esm/motion/neon/layers.d.ts.map +1 -0
- package/dist/esm/motion/neon/layers.js +64 -0
- package/dist/esm/motion/neon/layers.js.map +1 -0
- package/dist/esm/motion/neon/material.d.ts +68 -0
- package/dist/esm/motion/neon/material.d.ts.map +1 -0
- package/dist/esm/motion/neon/material.js +51 -0
- package/dist/esm/motion/neon/material.js.map +1 -0
- package/dist/esm/motion/neon/random.d.ts +15 -0
- package/dist/esm/motion/neon/random.d.ts.map +1 -0
- package/dist/esm/motion/neon/random.js +37 -0
- package/dist/esm/motion/neon/random.js.map +1 -0
- package/dist/esm/motion/neon/scene.d.ts +255 -0
- package/dist/esm/motion/neon/scene.d.ts.map +1 -0
- package/dist/esm/motion/neon/scene.js +532 -0
- package/dist/esm/motion/neon/scene.js.map +1 -0
- package/dist/esm/motion/neon/synth.d.ts +18 -0
- package/dist/esm/motion/neon/synth.d.ts.map +1 -0
- package/dist/esm/motion/neon/synth.js +208 -0
- package/dist/esm/motion/neon/synth.js.map +1 -0
- package/dist/esm/motion/neon/typography.d.ts +53 -0
- package/dist/esm/motion/neon/typography.d.ts.map +1 -0
- package/dist/esm/motion/neon/typography.js +74 -0
- package/dist/esm/motion/neon/typography.js.map +1 -0
- package/dist/esm/motion/neon/wall.d.ts +62 -0
- package/dist/esm/motion/neon/wall.d.ts.map +1 -0
- package/dist/esm/motion/neon/wall.js +106 -0
- package/dist/esm/motion/neon/wall.js.map +1 -0
- package/dist/esm/motion/paperfold/PaperFold.d.ts +36 -0
- package/dist/esm/motion/paperfold/PaperFold.d.ts.map +1 -0
- package/dist/esm/motion/paperfold/PaperFold.js +37 -0
- package/dist/esm/motion/paperfold/PaperFold.js.map +1 -0
- package/dist/esm/motion/paperfold/PaperFoldFrame.d.ts +39 -0
- package/dist/esm/motion/paperfold/PaperFoldFrame.d.ts.map +1 -0
- package/dist/esm/motion/paperfold/PaperFoldFrame.js +283 -0
- package/dist/esm/motion/paperfold/PaperFoldFrame.js.map +1 -0
- package/dist/esm/motion/paperfold/PaperFoldPlayer.d.ts +27 -0
- package/dist/esm/motion/paperfold/PaperFoldPlayer.d.ts.map +1 -0
- package/dist/esm/motion/paperfold/PaperFoldPlayer.js +56 -0
- package/dist/esm/motion/paperfold/PaperFoldPlayer.js.map +1 -0
- package/dist/esm/motion/paperfold/art.d.ts +148 -0
- package/dist/esm/motion/paperfold/art.d.ts.map +1 -0
- package/dist/esm/motion/paperfold/art.js +374 -0
- package/dist/esm/motion/paperfold/art.js.map +1 -0
- package/dist/esm/motion/paperfold/config.d.ts +47 -0
- package/dist/esm/motion/paperfold/config.d.ts.map +1 -0
- package/dist/esm/motion/paperfold/config.js +96 -0
- package/dist/esm/motion/paperfold/config.js.map +1 -0
- package/dist/esm/motion/paperfold/controls.d.ts +57 -0
- package/dist/esm/motion/paperfold/controls.d.ts.map +1 -0
- package/dist/esm/motion/paperfold/controls.js +506 -0
- package/dist/esm/motion/paperfold/controls.js.map +1 -0
- package/dist/esm/motion/paperfold/engine.d.ts +397 -0
- package/dist/esm/motion/paperfold/engine.d.ts.map +1 -0
- package/dist/esm/motion/paperfold/engine.js +699 -0
- package/dist/esm/motion/paperfold/engine.js.map +1 -0
- package/dist/esm/motion/paperfold/fonts.d.ts +3 -0
- package/dist/esm/motion/paperfold/fonts.d.ts.map +1 -0
- package/dist/esm/motion/paperfold/fonts.js +21 -0
- package/dist/esm/motion/paperfold/fonts.js.map +1 -0
- package/dist/esm/motion/paperfold/index.d.ts +17 -0
- package/dist/esm/motion/paperfold/index.d.ts.map +1 -0
- package/dist/esm/motion/paperfold/index.js +17 -0
- package/dist/esm/motion/paperfold/index.js.map +1 -0
- package/dist/esm/motion/paperfold/manipulate.d.ts +59 -0
- package/dist/esm/motion/paperfold/manipulate.d.ts.map +1 -0
- package/dist/esm/motion/paperfold/manipulate.js +161 -0
- package/dist/esm/motion/paperfold/manipulate.js.map +1 -0
- package/dist/esm/motion/paperfold/presets.d.ts +9 -0
- package/dist/esm/motion/paperfold/presets.d.ts.map +1 -0
- package/dist/esm/motion/paperfold/presets.js +115 -0
- package/dist/esm/motion/paperfold/presets.js.map +1 -0
- package/dist/esm/motion/paperfold/template.d.ts +3 -0
- package/dist/esm/motion/paperfold/template.d.ts.map +1 -0
- package/dist/esm/motion/paperfold/template.js +37 -0
- package/dist/esm/motion/paperfold/template.js.map +1 -0
- package/dist/esm/motion/player.d.ts +35 -0
- package/dist/esm/motion/player.d.ts.map +1 -0
- package/dist/esm/motion/player.js +197 -0
- package/dist/esm/motion/player.js.map +1 -0
- package/dist/esm/motion/promo/PromoFrame.d.ts +31 -0
- package/dist/esm/motion/promo/PromoFrame.d.ts.map +1 -0
- package/dist/esm/motion/promo/PromoFrame.js +288 -0
- package/dist/esm/motion/promo/PromoFrame.js.map +1 -0
- package/dist/esm/motion/promo/PromoShowcasePlayer.d.ts +25 -0
- package/dist/esm/motion/promo/PromoShowcasePlayer.d.ts.map +1 -0
- package/dist/esm/motion/promo/PromoShowcasePlayer.js +56 -0
- package/dist/esm/motion/promo/PromoShowcasePlayer.js.map +1 -0
- package/dist/esm/motion/promo/config.d.ts +91 -0
- package/dist/esm/motion/promo/config.d.ts.map +1 -0
- package/dist/esm/motion/promo/config.js +550 -0
- package/dist/esm/motion/promo/config.js.map +1 -0
- package/dist/esm/motion/promo/controls.d.ts +86 -0
- package/dist/esm/motion/promo/controls.d.ts.map +1 -0
- package/dist/esm/motion/promo/controls.js +567 -0
- package/dist/esm/motion/promo/controls.js.map +1 -0
- package/dist/esm/motion/promo/easing.d.ts +3 -0
- package/dist/esm/motion/promo/easing.d.ts.map +1 -0
- package/dist/esm/motion/promo/easing.js +32 -0
- package/dist/esm/motion/promo/easing.js.map +1 -0
- package/dist/esm/motion/promo/engine.d.ts +205 -0
- package/dist/esm/motion/promo/engine.d.ts.map +1 -0
- package/dist/esm/motion/promo/engine.js +551 -0
- package/dist/esm/motion/promo/engine.js.map +1 -0
- package/dist/esm/motion/promo/fonts.d.ts +7 -0
- package/dist/esm/motion/promo/fonts.d.ts.map +1 -0
- package/dist/esm/motion/promo/fonts.js +16 -0
- package/dist/esm/motion/promo/fonts.js.map +1 -0
- package/dist/esm/motion/promo/icons.d.ts +7 -0
- package/dist/esm/motion/promo/icons.d.ts.map +1 -0
- package/dist/esm/motion/promo/icons.js +26 -0
- package/dist/esm/motion/promo/icons.js.map +1 -0
- package/dist/esm/motion/promo/index.d.ts +15 -0
- package/dist/esm/motion/promo/index.d.ts.map +1 -0
- package/dist/esm/motion/promo/index.js +15 -0
- package/dist/esm/motion/promo/index.js.map +1 -0
- package/dist/esm/motion/promo/presets.d.ts +13 -0
- package/dist/esm/motion/promo/presets.d.ts.map +1 -0
- package/dist/esm/motion/promo/presets.js +40 -0
- package/dist/esm/motion/promo/presets.js.map +1 -0
- package/dist/esm/motion/promo/template.d.ts +8 -0
- package/dist/esm/motion/promo/template.d.ts.map +1 -0
- package/dist/esm/motion/promo/template.js +35 -0
- package/dist/esm/motion/promo/template.js.map +1 -0
- package/dist/esm/motion/replication2/Replication2Player.d.ts +26 -0
- package/dist/esm/motion/replication2/Replication2Player.d.ts.map +1 -0
- package/dist/esm/motion/replication2/Replication2Player.js +90 -0
- package/dist/esm/motion/replication2/Replication2Player.js.map +1 -0
- package/dist/esm/motion/replication2/config.d.ts +78 -0
- package/dist/esm/motion/replication2/config.d.ts.map +1 -0
- package/dist/esm/motion/replication2/config.js +341 -0
- package/dist/esm/motion/replication2/config.js.map +1 -0
- package/dist/esm/motion/replication2/controls.d.ts +70 -0
- package/dist/esm/motion/replication2/controls.d.ts.map +1 -0
- package/dist/esm/motion/replication2/controls.js +283 -0
- package/dist/esm/motion/replication2/controls.js.map +1 -0
- package/dist/esm/motion/replication2/driver.d.ts +23 -0
- package/dist/esm/motion/replication2/driver.d.ts.map +1 -0
- package/dist/esm/motion/replication2/driver.js +65 -0
- package/dist/esm/motion/replication2/driver.js.map +1 -0
- package/dist/esm/motion/replication2/easing.d.ts +19 -0
- package/dist/esm/motion/replication2/easing.d.ts.map +1 -0
- package/dist/esm/motion/replication2/easing.js +92 -0
- package/dist/esm/motion/replication2/easing.js.map +1 -0
- package/dist/esm/motion/replication2/engine.d.ts +236 -0
- package/dist/esm/motion/replication2/engine.d.ts.map +1 -0
- package/dist/esm/motion/replication2/engine.js +470 -0
- package/dist/esm/motion/replication2/engine.js.map +1 -0
- package/dist/esm/motion/replication2/html.d.ts +30 -0
- package/dist/esm/motion/replication2/html.d.ts.map +1 -0
- package/dist/esm/motion/replication2/html.js +83 -0
- package/dist/esm/motion/replication2/html.js.map +1 -0
- package/dist/esm/motion/replication2/index.d.ts +15 -0
- package/dist/esm/motion/replication2/index.d.ts.map +1 -0
- package/dist/esm/motion/replication2/index.js +15 -0
- package/dist/esm/motion/replication2/index.js.map +1 -0
- package/dist/esm/motion/replication2/measure.d.ts +3 -0
- package/dist/esm/motion/replication2/measure.d.ts.map +1 -0
- package/dist/esm/motion/replication2/measure.js +27 -0
- package/dist/esm/motion/replication2/measure.js.map +1 -0
- package/dist/esm/motion/replication2/metrics.d.ts +6 -0
- package/dist/esm/motion/replication2/metrics.d.ts.map +1 -0
- package/dist/esm/motion/replication2/metrics.js +7 -0
- package/dist/esm/motion/replication2/metrics.js.map +1 -0
- package/dist/esm/motion/replication2/presets.d.ts +13 -0
- package/dist/esm/motion/replication2/presets.d.ts.map +1 -0
- package/dist/esm/motion/replication2/presets.js +63 -0
- package/dist/esm/motion/replication2/presets.js.map +1 -0
- package/dist/esm/motion/replication2/riv.d.ts +3 -0
- package/dist/esm/motion/replication2/riv.d.ts.map +1 -0
- package/dist/esm/motion/replication2/riv.js +4 -0
- package/dist/esm/motion/replication2/riv.js.map +1 -0
- package/dist/esm/motion/replication2/rive-contract.d.ts +27 -0
- package/dist/esm/motion/replication2/rive-contract.d.ts.map +1 -0
- package/dist/esm/motion/replication2/rive-contract.js +153 -0
- package/dist/esm/motion/replication2/rive-contract.js.map +1 -0
- package/dist/esm/motion/replication2/template.d.ts +8 -0
- package/dist/esm/motion/replication2/template.d.ts.map +1 -0
- package/dist/esm/motion/replication2/template.js +32 -0
- package/dist/esm/motion/replication2/template.js.map +1 -0
- package/dist/esm/motion/sample.d.ts +61 -0
- package/dist/esm/motion/sample.d.ts.map +1 -0
- package/dist/esm/motion/sample.js +138 -0
- package/dist/esm/motion/sample.js.map +1 -0
- package/dist/esm/motion/templates/hey-template.d.ts +3 -0
- package/dist/esm/motion/templates/hey-template.d.ts.map +1 -0
- package/dist/esm/motion/templates/hey-template.js +1549 -0
- package/dist/esm/motion/templates/hey-template.js.map +1 -0
- package/dist/esm/motion/templates/index.d.ts +22 -0
- package/dist/esm/motion/templates/index.d.ts.map +1 -0
- package/dist/esm/motion/templates/index.js +15 -0
- package/dist/esm/motion/templates/index.js.map +1 -0
- package/dist/esm/motion/templates/word-motion.d.ts +3 -0
- package/dist/esm/motion/templates/word-motion.d.ts.map +1 -0
- package/dist/esm/motion/templates/word-motion.js +1162 -0
- package/dist/esm/motion/templates/word-motion.js.map +1 -0
- package/dist/esm/motion/types.d.ts +192 -0
- package/dist/esm/motion/types.d.ts.map +1 -0
- package/dist/esm/motion/types.js +2 -0
- package/dist/esm/motion/types.js.map +1 -0
- package/dist/esm/motion/typesurface/TypeSurfaceCanvas.d.ts +22 -0
- package/dist/esm/motion/typesurface/TypeSurfaceCanvas.d.ts.map +1 -0
- package/dist/esm/motion/typesurface/TypeSurfaceCanvas.js +58 -0
- package/dist/esm/motion/typesurface/TypeSurfaceCanvas.js.map +1 -0
- package/dist/esm/motion/typesurface/art.d.ts +21 -0
- package/dist/esm/motion/typesurface/art.d.ts.map +1 -0
- package/dist/esm/motion/typesurface/art.js +854 -0
- package/dist/esm/motion/typesurface/art.js.map +1 -0
- package/dist/esm/motion/typesurface/config.d.ts +273 -0
- package/dist/esm/motion/typesurface/config.d.ts.map +1 -0
- package/dist/esm/motion/typesurface/config.js +260 -0
- package/dist/esm/motion/typesurface/config.js.map +1 -0
- package/dist/esm/motion/typesurface/engine.d.ts +94 -0
- package/dist/esm/motion/typesurface/engine.d.ts.map +1 -0
- package/dist/esm/motion/typesurface/engine.js +603 -0
- package/dist/esm/motion/typesurface/engine.js.map +1 -0
- package/dist/esm/motion/typesurface/fonts.d.ts +25 -0
- package/dist/esm/motion/typesurface/fonts.d.ts.map +1 -0
- package/dist/esm/motion/typesurface/fonts.js +40 -0
- package/dist/esm/motion/typesurface/fonts.js.map +1 -0
- package/dist/esm/motion/typesurface/index.d.ts +17 -0
- package/dist/esm/motion/typesurface/index.d.ts.map +1 -0
- package/dist/esm/motion/typesurface/index.js +17 -0
- package/dist/esm/motion/typesurface/index.js.map +1 -0
- package/dist/esm/motion/typesurface/layout.d.ts +57 -0
- package/dist/esm/motion/typesurface/layout.d.ts.map +1 -0
- package/dist/esm/motion/typesurface/layout.js +122 -0
- package/dist/esm/motion/typesurface/layout.js.map +1 -0
- package/dist/esm/motion/typesurface/ops.d.ts +70 -0
- package/dist/esm/motion/typesurface/ops.d.ts.map +1 -0
- package/dist/esm/motion/typesurface/ops.js +164 -0
- package/dist/esm/motion/typesurface/ops.js.map +1 -0
- package/dist/esm/motion/typesurface/presets.d.ts +33 -0
- package/dist/esm/motion/typesurface/presets.d.ts.map +1 -0
- package/dist/esm/motion/typesurface/presets.js +185 -0
- package/dist/esm/motion/typesurface/presets.js.map +1 -0
- package/dist/esm/motion/typesurface/renderer.d.ts +78 -0
- package/dist/esm/motion/typesurface/renderer.d.ts.map +1 -0
- package/dist/esm/motion/typesurface/renderer.js +666 -0
- package/dist/esm/motion/typesurface/renderer.js.map +1 -0
- package/dist/esm/motion/typesurface/shaders.d.ts +17 -0
- package/dist/esm/motion/typesurface/shaders.d.ts.map +1 -0
- package/dist/esm/motion/typesurface/shaders.js +297 -0
- package/dist/esm/motion/typesurface/shaders.js.map +1 -0
- package/dist/esm/motion/typesurface/surfaces.d.ts +81 -0
- package/dist/esm/motion/typesurface/surfaces.d.ts.map +1 -0
- package/dist/esm/motion/typesurface/surfaces.js +149 -0
- package/dist/esm/motion/typesurface/surfaces.js.map +1 -0
- package/dist/esm/motion/typesurface/text.d.ts +17 -0
- package/dist/esm/motion/typesurface/text.d.ts.map +1 -0
- package/dist/esm/motion/typesurface/text.js +28 -0
- package/dist/esm/motion/typesurface/text.js.map +1 -0
- package/dist/esm/motion/typesurface/timeline.d.ts +15 -0
- package/dist/esm/motion/typesurface/timeline.d.ts.map +1 -0
- package/dist/esm/motion/typesurface/timeline.js +57 -0
- package/dist/esm/motion/typesurface/timeline.js.map +1 -0
- package/dist/esm/motion/validate.d.ts +22 -0
- package/dist/esm/motion/validate.d.ts.map +1 -0
- package/dist/esm/motion/validate.js +84 -0
- package/dist/esm/motion/validate.js.map +1 -0
- package/dist/esm/native/RiveReceiptStage.d.ts +25 -2
- package/dist/esm/native/RiveReceiptStage.d.ts.map +1 -1
- package/dist/esm/native/RiveReceiptStage.js +7 -148
- package/dist/esm/native/RiveReceiptStage.js.map +1 -1
- package/dist/esm/native/riveReceiptStageFactory.d.ts +26 -0
- package/dist/esm/native/riveReceiptStageFactory.d.ts.map +1 -0
- package/dist/esm/native/riveReceiptStageFactory.js +159 -0
- package/dist/esm/native/riveReceiptStageFactory.js.map +1 -0
- package/dist/esm/tokens/stage.d.ts +7 -0
- package/dist/esm/tokens/stage.d.ts.map +1 -0
- package/dist/esm/tokens/stage.js +7 -0
- package/dist/esm/tokens/stage.js.map +1 -0
- package/package.json +35 -1
- package/spec/examples/components/onboarding/animated-status/case1.json +42 -0
- package/spec/examples/components/onboarding/animated-status/case2.json +42 -0
- package/spec/examples/components/onboarding/animated-status/case3.json +42 -0
- package/spec/examples/components/onboarding/animated-status/case4.json +42 -0
- package/spec/examples/components/onboarding/animated-status/case5.json +42 -0
- package/spec/examples/components/onboarding/send-completion/case1.json +48 -0
- package/spec/examples/components/onboarding/send-completion/case2.json +48 -0
- package/spec/examples/components/onboarding/send-completion/case3.json +48 -0
- package/spec/examples/components/onboarding/send-completion/case4.json +48 -0
- package/spec/examples/components/onboarding/send-completion/case5.json +48 -0
- package/spec/families/onboarding.schema.json +610 -1
- package/src/agent/AgentComponent.tsx +1 -1
- package/src/agent/manifests.ts +83 -1
- package/src/agent/result.ts +6 -0
- package/src/agent/types.ts +1 -1
- package/src/components/catalog.ts +21 -1
- package/src/components/onboarding/animated-status/AnimatedStage.tsx +18 -0
- package/src/components/onboarding/animated-status/AnimatedStage.types.ts +30 -0
- package/src/components/onboarding/animated-status/AnimatedStage.web.tsx +99 -0
- package/src/components/onboarding/animated-status/AnimatedStatusView.tsx +109 -0
- package/src/components/onboarding/animated-status/AnimatedStill.tsx +23 -0
- package/src/components/onboarding/animated-status/contract.ts +105 -0
- package/src/components/onboarding/animated-status/engine.ts +49 -0
- package/src/components/onboarding/animated-status/index.ts +8 -0
- package/src/components/onboarding/animated-status/presets.json +126 -0
- package/src/components/onboarding/animated-status/riv.ts +4 -0
- package/src/components/onboarding/index.ts +4 -0
- package/src/components/onboarding/presets.ts +6 -0
- package/src/components/onboarding/receipt-printer/ReceiptStage.tsx +46 -7
- package/src/components/onboarding/send-completion/SendCompletionView.tsx +164 -0
- package/src/components/onboarding/send-completion/SendStage.tsx +27 -0
- package/src/components/onboarding/send-completion/SendStage.types.ts +32 -0
- package/src/components/onboarding/send-completion/SendStage.web.tsx +116 -0
- package/src/components/onboarding/send-completion/SendStill.tsx +19 -0
- package/src/components/onboarding/send-completion/contract.ts +127 -0
- package/src/components/onboarding/send-completion/engine.ts +37 -0
- package/src/components/onboarding/send-completion/index.ts +10 -0
- package/src/components/onboarding/send-completion/presets.json +132 -0
- package/src/components/onboarding/send-completion/riv.ts +4 -0
- package/src/components/onboarding/shared/actions-data.ts +2 -0
- package/src/components/onboarding/shared/configColor.ts +72 -0
- package/src/components/onboarding/shared/contract.ts +4 -0
- package/src/components/onboarding/shared/describe.ts +1 -1
- package/src/components/onboarding/shared/mock.ts +2 -0
- package/src/components/onboarding/views.ts +8 -0
- package/src/motion/MotionPlayer.tsx +62 -0
- package/src/motion/agent.ts +288 -0
- package/src/motion/cat/Cat.tsx +118 -0
- package/src/motion/cat/animation.ts +206 -0
- package/src/motion/cat/art.generated.ts +44 -0
- package/src/motion/cat/config.ts +186 -0
- package/src/motion/cat/index.ts +26 -0
- package/src/motion/cat/rig.ts +102 -0
- package/src/motion/cat/scene.ts +181 -0
- package/src/motion/configurable/config.ts +420 -0
- package/src/motion/configurable/controls.ts +93 -0
- package/src/motion/easing.ts +55 -0
- package/src/motion/fit.ts +8 -0
- package/src/motion/index.ts +29 -0
- package/src/motion/neon/GlowRenderer.tsx +83 -0
- package/src/motion/neon/NeonCanvas.tsx +175 -0
- package/src/motion/neon/NeonText.tsx +113 -0
- package/src/motion/neon/NeonTextFrame.tsx +67 -0
- package/src/motion/neon/artwork.ts +95 -0
- package/src/motion/neon/audio.ts +162 -0
- package/src/motion/neon/config.ts +484 -0
- package/src/motion/neon/flicker.ts +225 -0
- package/src/motion/neon/fonts.ts +76 -0
- package/src/motion/neon/frame.ts +34 -0
- package/src/motion/neon/glitch.ts +142 -0
- package/src/motion/neon/index.ts +41 -0
- package/src/motion/neon/layers.tsx +209 -0
- package/src/motion/neon/material.ts +88 -0
- package/src/motion/neon/random.ts +40 -0
- package/src/motion/neon/scene.ts +610 -0
- package/src/motion/neon/synth.ts +188 -0
- package/src/motion/neon/typography.ts +102 -0
- package/src/motion/neon/wall.ts +157 -0
- package/src/motion/paperfold/PaperFold.tsx +45 -0
- package/src/motion/paperfold/PaperFoldFrame.tsx +576 -0
- package/src/motion/paperfold/PaperFoldPlayer.tsx +80 -0
- package/src/motion/paperfold/art.ts +455 -0
- package/src/motion/paperfold/config.ts +98 -0
- package/src/motion/paperfold/controls.ts +557 -0
- package/src/motion/paperfold/engine.ts +852 -0
- package/src/motion/paperfold/fonts.ts +21 -0
- package/src/motion/paperfold/index.ts +30 -0
- package/src/motion/paperfold/manipulate.ts +188 -0
- package/src/motion/paperfold/presets.ts +117 -0
- package/src/motion/paperfold/template.ts +38 -0
- package/src/motion/player.ts +207 -0
- package/src/motion/promo/PromoFrame.tsx +501 -0
- package/src/motion/promo/PromoShowcasePlayer.tsx +78 -0
- package/src/motion/promo/config.ts +479 -0
- package/src/motion/promo/controls.ts +643 -0
- package/src/motion/promo/easing.ts +36 -0
- package/src/motion/promo/engine.ts +587 -0
- package/src/motion/promo/fonts.ts +16 -0
- package/src/motion/promo/icons.tsx +29 -0
- package/src/motion/promo/index.ts +24 -0
- package/src/motion/promo/presets.ts +40 -0
- package/src/motion/promo/template.ts +36 -0
- package/src/motion/replication2/Replication2Player.tsx +115 -0
- package/src/motion/replication2/config.ts +323 -0
- package/src/motion/replication2/controls.ts +336 -0
- package/src/motion/replication2/driver.ts +92 -0
- package/src/motion/replication2/easing.ts +88 -0
- package/src/motion/replication2/engine.ts +539 -0
- package/src/motion/replication2/html.ts +87 -0
- package/src/motion/replication2/index.ts +14 -0
- package/src/motion/replication2/measure.ts +28 -0
- package/src/motion/replication2/metrics.ts +7 -0
- package/src/motion/replication2/presets.ts +63 -0
- package/src/motion/replication2/riv.ts +4 -0
- package/src/motion/replication2/rive-contract.ts +165 -0
- package/src/motion/replication2/template.ts +33 -0
- package/src/motion/sample.ts +173 -0
- package/src/motion/templates/hey-template.ts +1553 -0
- package/src/motion/templates/index.ts +17 -0
- package/src/motion/templates/word-motion.ts +1166 -0
- package/src/motion/types.ts +162 -0
- package/src/motion/typesurface/TypeSurfaceCanvas.tsx +73 -0
- package/src/motion/typesurface/art.ts +639 -0
- package/src/motion/typesurface/config.ts +486 -0
- package/src/motion/typesurface/engine.ts +586 -0
- package/src/motion/typesurface/fonts.ts +63 -0
- package/src/motion/typesurface/index.ts +16 -0
- package/src/motion/typesurface/layout.ts +133 -0
- package/src/motion/typesurface/ops.ts +196 -0
- package/src/motion/typesurface/presets.ts +199 -0
- package/src/motion/typesurface/renderer.ts +579 -0
- package/src/motion/typesurface/shaders.ts +303 -0
- package/src/motion/typesurface/surfaces.ts +223 -0
- package/src/motion/typesurface/text.ts +35 -0
- package/src/motion/typesurface/timeline.ts +58 -0
- package/src/motion/validate.ts +101 -0
- package/src/native/RiveReceiptStage.tsx +8 -155
- package/src/native/riveReceiptStageFactory.tsx +175 -0
- package/src/tokens/stage.ts +6 -0
- package/tools/ask/dist/components.mjs +6887 -46
- package/tools/ask/mcp.mjs +80 -1
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import type { NeonAnimationConfig } from './config';
|
|
2
|
+
import { rand, valueNoise } from './random';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* **The flicker controller: tube brightness as a pure function of time.** Not an opacity loop: the
|
|
6
|
+
* brightness is the product of a constant low shimmer and rare, randomly placed electrical events,
|
|
7
|
+
* and each layer responds to it differently.
|
|
8
|
+
*
|
|
9
|
+
* shimmer always on, 95–103 %: two octaves of smooth noise (gas and supply ripple)
|
|
10
|
+
* sag 0.3–0.9 s, down to 85–100 %: a soft, slightly rippled droop (62 % of events)
|
|
11
|
+
* flicker 0.12–0.32 s, two to four quick 20–40 ms blinks to 70–88 % (16 %)
|
|
12
|
+
* dip 80–260 ms, down to 40–80 %: fast fall, one or two stutters (15 %)
|
|
13
|
+
* failure 0.2–0.65 s, down to 20–50 %: the arc chatters on and off, then
|
|
14
|
+
* re-strikes with a brief 3 % overshoot (7 %)
|
|
15
|
+
*
|
|
16
|
+
* After a dip or failure the tube recovers along an exponential tail whose length is set by
|
|
17
|
+
* `flickerRecovery` (0 → ≈ 300 ms, 1 → instant). `flickerRandomness` 0 plays every event at its
|
|
18
|
+
* typical depth and length on an even grid; 1 varies them fully. `flickerMinBrightness` is a floor.
|
|
19
|
+
*
|
|
20
|
+
* Events start at random moments: time is cut into 100 ms slots and each slot starts an event with
|
|
21
|
+
* probability `flickerFrequency × 0.1`. Every decision is a hash of (seed, slot), so there is no
|
|
22
|
+
* loop to notice and any moment can be computed on its own. Triggers (`NeonTrigger`) add events at
|
|
23
|
+
* chosen times — the playground's buttons, or a scripted timeline — just as deterministically.
|
|
24
|
+
*
|
|
25
|
+
* Depths are the brief's ranges at `flickerIntensity` 0.25, scaled linearly by intensity (0 = steady).
|
|
26
|
+
*
|
|
27
|
+
* Layer response (tube dims → core a little → glow → bloom, which lags):
|
|
28
|
+
* tube = b core = b^0.75 (dims less than the tube)
|
|
29
|
+
* glow = mean(b over 50 ms)^1.3 bloom = mean(b over 120 ms, delayed)^1.8
|
|
30
|
+
*/
|
|
31
|
+
export type FlickerKind = 'sag' | 'flicker' | 'dip' | 'failure';
|
|
32
|
+
export const FLICKER_KINDS: readonly FlickerKind[] = ['sag', 'flicker', 'dip', 'failure'];
|
|
33
|
+
export type FlickerEvent = { kind: FlickerKind; start: number; duration: number; depth: number; slot: number; forced?: boolean };
|
|
34
|
+
export type FlickerLevels = { brightness: number; tube: number; core: number; glow: number; bloom: number; event: FlickerKind | null };
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* An event placed on purpose, at `at` ms of the caller's clock (the same clock as `timeMs`).
|
|
38
|
+
* `normal` holds the sign steady for `NORMAL_HOLD_MS` and cancels anything already playing.
|
|
39
|
+
*/
|
|
40
|
+
export type NeonTriggerKind = FlickerKind | 'glitch' | 'normal';
|
|
41
|
+
export type NeonTrigger = { kind: NeonTriggerKind; at: number };
|
|
42
|
+
export const NORMAL_HOLD_MS = 3000;
|
|
43
|
+
|
|
44
|
+
const SLOT = 100;
|
|
45
|
+
const MAX_DURATION = 650;
|
|
46
|
+
const OVERSHOOT = 160;
|
|
47
|
+
const SALT = { starts: 11, offset: 12, kind: 13, duration: 14, depth: 15, shape: 16 };
|
|
48
|
+
const RANGES: Record<FlickerKind, { duration: [number, number]; depth: [number, number] }> = {
|
|
49
|
+
sag: { duration: [300, 900], depth: [0.03, 0.15] },
|
|
50
|
+
flicker: { duration: [120, 320], depth: [0.12, 0.3] },
|
|
51
|
+
dip: { duration: [80, 260], depth: [0.2, 0.6] },
|
|
52
|
+
failure: { duration: [200, MAX_DURATION], depth: [0.5, 0.8] },
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/** The reference intensity at which the brief's ranges play exactly. */
|
|
56
|
+
export const FLICKER_REFERENCE_INTENSITY = 0.25;
|
|
57
|
+
|
|
58
|
+
/** A value in [lo, hi]: the middle at randomness 0, anywhere at randomness 1. */
|
|
59
|
+
function spread([lo, hi]: [number, number], u: number, randomness: number): number {
|
|
60
|
+
const mid = (lo + hi) / 2;
|
|
61
|
+
return mid + (u - 0.5) * (hi - lo) * Math.max(0, Math.min(1, randomness));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** The recovery tail's time constant, ms. */
|
|
65
|
+
const tailTau = (a: NeonAnimationConfig) => 12 + 290 * (1 - Math.max(0, Math.min(1, a.flickerRecovery ?? 0.7)));
|
|
66
|
+
const hasTail = (k: FlickerKind) => k === 'dip' || k === 'failure';
|
|
67
|
+
/** How long after its end an event still pulls (tail and overshoot). */
|
|
68
|
+
const afterglow = (a: NeonAnimationConfig, e: FlickerEvent) => (hasTail(e.kind) ? Math.max(tailTau(a) * 5, e.kind === 'failure' ? OVERSHOOT : 0) : 0);
|
|
69
|
+
|
|
70
|
+
function makeEvent(a: NeonAnimationConfig, kind: FlickerKind, start: number, slot: number, forced = false): FlickerEvent {
|
|
71
|
+
const r = a.flickerRandomness ?? 0.6;
|
|
72
|
+
const range = RANGES[kind];
|
|
73
|
+
return {
|
|
74
|
+
kind, start, slot, forced,
|
|
75
|
+
duration: spread(range.duration, rand(a.seed, slot, SALT.duration), r),
|
|
76
|
+
depth: spread(range.depth, rand(a.seed, slot, SALT.depth), r),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** The event that starts in `slot`, if any. */
|
|
81
|
+
export function flickerEventInSlot(a: NeonAnimationConfig, slot: number): FlickerEvent | null {
|
|
82
|
+
const p = Math.min(0.9, Math.max(0, a.flickerFrequency) * (SLOT / 1000));
|
|
83
|
+
if (p <= 0 || rand(a.seed, slot, SALT.starts) >= p) return null;
|
|
84
|
+
const jitter = 0.5 + (rand(a.seed, slot, SALT.offset) - 0.5) * Math.max(0, Math.min(1, a.flickerRandomness ?? 0.6));
|
|
85
|
+
const k = rand(a.seed, slot, SALT.kind);
|
|
86
|
+
const kind: FlickerKind = k < 0.62 ? 'sag' : k < 0.78 ? 'flicker' : k < 0.93 ? 'dip' : 'failure';
|
|
87
|
+
return makeEvent(a, kind, slot * SLOT + jitter * SLOT, slot);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** Trigger events for the flicker, in flicker time (`toFlicker` maps the caller's clock). */
|
|
91
|
+
function forcedEvents(a: NeonAnimationConfig, triggers: readonly NeonTrigger[] | undefined, toFlicker: (ms: number) => number): FlickerEvent[] {
|
|
92
|
+
if (!triggers?.length) return [];
|
|
93
|
+
return triggers.flatMap((tr, i) => (tr.kind === 'glitch' || tr.kind === 'normal' ? [] : [makeEvent(a, tr.kind, toFlicker(tr.at), -1_000_003 - i * 7, true)]));
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/** The latest `normal` hold covering flicker time `t`, as [start, end] in flicker time. */
|
|
97
|
+
function normalHold(triggers: readonly NeonTrigger[] | undefined, toFlicker: (ms: number) => number, t: number): [number, number] | null {
|
|
98
|
+
let hold: [number, number] | null = null;
|
|
99
|
+
for (const tr of triggers ?? []) {
|
|
100
|
+
if (tr.kind !== 'normal') continue;
|
|
101
|
+
const s = toFlicker(tr.at);
|
|
102
|
+
const e = toFlicker(tr.at + NORMAL_HOLD_MS);
|
|
103
|
+
if (t >= s && t < e && (!hold || s > hold[0])) hold = [s, e];
|
|
104
|
+
}
|
|
105
|
+
return hold;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** Every event whose effect (including its recovery tail) covers flicker time `t`. */
|
|
109
|
+
export function flickerEventsAt(a: NeonAnimationConfig, t: number, triggers?: readonly NeonTrigger[], toFlicker: (ms: number) => number = (ms) => ms): FlickerEvent[] {
|
|
110
|
+
const hold = normalHold(triggers, toFlicker, t);
|
|
111
|
+
const covers = (e: FlickerEvent) => t >= e.start && t < e.start + e.duration + afterglow(a, e) && (!hold || e.start >= hold[0]);
|
|
112
|
+
const out: FlickerEvent[] = [];
|
|
113
|
+
if (!hold) {
|
|
114
|
+
const back = Math.ceil((MAX_DURATION + Math.max(OVERSHOOT, tailTau(a) * 5)) / SLOT) + 1;
|
|
115
|
+
const now = Math.floor(t / SLOT);
|
|
116
|
+
for (let s = now - back; s <= now; s++) {
|
|
117
|
+
const e = flickerEventInSlot(a, s);
|
|
118
|
+
if (e && covers(e)) out.push(e);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
for (const e of forcedEvents(a, triggers, toFlicker)) if (covers(e)) out.push(e);
|
|
122
|
+
return out;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const smooth = (x: number) => (x <= 0 ? 0 : x >= 1 ? 1 : x * x * (3 - 2 * x));
|
|
126
|
+
|
|
127
|
+
/** How far (0…1 of its depth) event `e` pulls the brightness down at `t`; negative is an overshoot. */
|
|
128
|
+
function eventPull(a: NeonAnimationConfig, e: FlickerEvent, t: number): number {
|
|
129
|
+
const u = (t - e.start) / e.duration;
|
|
130
|
+
if (u >= 1) {
|
|
131
|
+
if (!hasTail(e.kind)) return 0;
|
|
132
|
+
const after = t - e.start - e.duration;
|
|
133
|
+
const tail = (e.kind === 'failure' ? 0.5 : 0.35) * Math.exp(-after / tailTau(a));
|
|
134
|
+
const over = e.kind === 'failure' && after < OVERSHOOT ? (0.03 / e.depth) * Math.sin(Math.PI * (after / OVERSHOOT)) : 0;
|
|
135
|
+
return tail - over;
|
|
136
|
+
}
|
|
137
|
+
if (e.kind === 'sag') {
|
|
138
|
+
const env = Math.pow(Math.sin(Math.PI * Math.min(1, Math.max(0, u))), 1.5);
|
|
139
|
+
return env * (0.85 + 0.15 * Math.sin(u * Math.PI * 6));
|
|
140
|
+
}
|
|
141
|
+
if (e.kind === 'flicker') {
|
|
142
|
+
/* Two to four quick blinks: 20–40 ms chunks alternating off and on. */
|
|
143
|
+
const len = 20 + 20 * rand(a.seed, e.slot, SALT.shape, 998);
|
|
144
|
+
const chunk = Math.floor((t - e.start) / len);
|
|
145
|
+
return chunk % 2 === 0 ? 0.6 + 0.4 * rand(a.seed, e.slot, SALT.shape, chunk) : 0.05;
|
|
146
|
+
}
|
|
147
|
+
if (e.kind === 'dip') {
|
|
148
|
+
if (u < 0.15) return smooth(u / 0.15);
|
|
149
|
+
if (u > 0.7) return 1 - smooth((u - 0.7) / 0.3) * 0.65;
|
|
150
|
+
/* One or two stutters: 25 ms chunks that partly recover. */
|
|
151
|
+
const chunk = Math.floor((t - e.start) / 25);
|
|
152
|
+
return rand(a.seed, e.slot, SALT.shape, chunk) < 0.3 ? 0.55 : 1;
|
|
153
|
+
}
|
|
154
|
+
/* failure */
|
|
155
|
+
if (u < 0.06) return smooth(u / 0.06);
|
|
156
|
+
if (u > 0.88) return 1 - smooth((u - 0.88) / 0.12) * 0.5;
|
|
157
|
+
/* The arc chatters: 16–33 ms chunks, each either out (full depth) or half re-struck. */
|
|
158
|
+
const chunk = Math.floor((t - e.start) / (16 + 17 * rand(a.seed, e.slot, SALT.shape, 999)));
|
|
159
|
+
const r = rand(a.seed, e.slot, SALT.shape, chunk);
|
|
160
|
+
return r < 0.55 ? 1 : r < 0.85 ? 0.45 : 0.15;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/** Tube brightness at flicker time `t`. 1 is nominal; it can reach ~1.03. */
|
|
164
|
+
export function tubeBrightness(a: NeonAnimationConfig, t: number, triggers?: readonly NeonTrigger[], toFlicker?: (ms: number) => number): number {
|
|
165
|
+
const k = Math.max(0, a.flickerIntensity) / FLICKER_REFERENCE_INTENSITY;
|
|
166
|
+
const floor = Math.max(0, Math.min(1, a.flickerMinBrightness ?? 0.05));
|
|
167
|
+
const forced = !!triggers?.some((tr) => tr.kind !== 'glitch');
|
|
168
|
+
if ((!a.flickerEnabled || k === 0) && !forced) return 1;
|
|
169
|
+
/* Triggers always play at least at the reference depth, so a button press is visible even with a gentle sign. */
|
|
170
|
+
const kEvents = Math.max(k, forced ? 1 : 0);
|
|
171
|
+
const amp = a.flickerEnabled ? 0.04 * Math.min(k, 1.5) * (0.5 + 0.833 * Math.max(0, Math.min(1, a.flickerRandomness ?? 0.6))) : 0;
|
|
172
|
+
let b = 1 - amp * 0.25 + amp * (0.6 * valueNoise(a.seed, t / 140, 1) + 0.4 * valueNoise(a.seed, t / 43, 2));
|
|
173
|
+
for (const e of flickerEventsAt(a, t, triggers, toFlicker)) {
|
|
174
|
+
if (!e.forced && (!a.flickerEnabled || k === 0)) continue;
|
|
175
|
+
const depth = Math.min(0.95, e.depth * (e.forced ? kEvents : k));
|
|
176
|
+
b *= 1 - depth * eventPull(a, e, t);
|
|
177
|
+
}
|
|
178
|
+
return Math.max(floor, Math.max(0.02, b));
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/** The flicker's time: animation time × `flickerSpeed`. */
|
|
182
|
+
export const flickerTime = (a: NeonAnimationConfig, t: number) => t * Math.max(0.01, a.flickerSpeed);
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Every layer's brightness at animation time `t` (ms, already × speed). `toFlicker` maps a trigger's
|
|
186
|
+
* clock time to flicker time; `neonFrame` supplies it.
|
|
187
|
+
*/
|
|
188
|
+
export function flickerLevels(a: NeonAnimationConfig, t: number, triggers?: readonly NeonTrigger[], toFlicker?: (ms: number) => number): FlickerLevels {
|
|
189
|
+
const live = a.enabled && (a.flickerEnabled && a.flickerIntensity > 0 || !!triggers?.some((tr) => tr.kind !== 'glitch' && tr.kind !== 'normal'));
|
|
190
|
+
if (!live) return { brightness: 1, tube: 1, core: 1, glow: 1, bloom: 1, event: null };
|
|
191
|
+
const ft = flickerTime(a, t);
|
|
192
|
+
const map = toFlicker ?? ((ms: number) => flickerTime(a, ms));
|
|
193
|
+
const at = (dt: number) => tubeBrightness(a, ft - dt, triggers, map);
|
|
194
|
+
const b = at(0);
|
|
195
|
+
const glow = (b + at(25) + at(50)) / 3;
|
|
196
|
+
const bloom = (at(20) + at(45) + at(70) + at(95) + at(120)) / 5;
|
|
197
|
+
const events = flickerEventsAt(a, ft, triggers, map).filter((e) => ft < e.start + e.duration);
|
|
198
|
+
const rank: Record<FlickerKind, number> = { failure: 4, dip: 3, flicker: 2, sag: 1 };
|
|
199
|
+
const worst = events.sort((x, y) => rank[y.kind] - rank[x.kind] || y.depth - x.depth)[0];
|
|
200
|
+
return { brightness: b, tube: b, core: Math.pow(b, 0.75), glow: Math.pow(glow, 1.3), bloom: Math.pow(bloom, 1.8), event: worst?.kind ?? null };
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* **Event starts and ends between two flicker times**, for sound: each flicker event's start, and
|
|
205
|
+
* each dip's or failure's end (the re-strike). Ordered by time.
|
|
206
|
+
*/
|
|
207
|
+
export type FlickerCue = { kind: FlickerKind | 'restore'; at: number; depth: number };
|
|
208
|
+
export function flickerCuesBetween(a: NeonAnimationConfig, t0: number, t1: number, triggers?: readonly NeonTrigger[], toFlicker: (ms: number) => number = (ms) => ms): FlickerCue[] {
|
|
209
|
+
if (!(t1 > t0)) return [];
|
|
210
|
+
const out: FlickerCue[] = [];
|
|
211
|
+
const push = (e: FlickerEvent) => {
|
|
212
|
+
if (e.start >= t0 && e.start < t1) out.push({ kind: e.kind, at: e.start, depth: e.depth });
|
|
213
|
+
const end = e.start + e.duration;
|
|
214
|
+
if (hasTail(e.kind) && end >= t0 && end < t1) out.push({ kind: 'restore', at: end, depth: e.depth });
|
|
215
|
+
};
|
|
216
|
+
const hold = (t: number) => normalHold(triggers, toFlicker, t);
|
|
217
|
+
if (a.flickerEnabled && a.flickerIntensity > 0 && t1 - t0 < 120_000) {
|
|
218
|
+
for (let s = Math.floor((t0 - MAX_DURATION) / SLOT); s <= Math.floor(t1 / SLOT); s++) {
|
|
219
|
+
const e = flickerEventInSlot(a, s);
|
|
220
|
+
if (e && !hold(e.start)) push(e);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
for (const e of forcedEvents(a, triggers, toFlicker)) push(e);
|
|
224
|
+
return out.sort((x, y) => x.at - y.at);
|
|
225
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { NeonConstruction } from './config';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* **Fonts that suit neon, by name.** Every entry is an open-licence (OFL) Google Font, so an agent
|
|
5
|
+
* can say "Orbitron" and a page can load exactly that. Each carries the construction and weight it
|
|
6
|
+
* reads best in: bold and display faces as `outline` tubes, thin and rounded faces as `monoline`.
|
|
7
|
+
* Nothing here loads a font: the page does, with `neonGoogleFontsUrl`.
|
|
8
|
+
*/
|
|
9
|
+
export type NeonFontCategory =
|
|
10
|
+
| 'neon tube' | 'retro' | 'condensed' | 'geometric' | 'rounded' | 'bold' | 'thin' | 'futuristic'
|
|
11
|
+
| 'handwritten' | 'display' | 'monospace' | 'signage' | 'industrial' | 'arcade' | 'elegant' | 'system';
|
|
12
|
+
|
|
13
|
+
export type NeonFont = {
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
category: NeonFontCategory;
|
|
17
|
+
/** The CSS font-family list (the named face first, then sensible fallbacks). */
|
|
18
|
+
family: string;
|
|
19
|
+
/** The Google Fonts `family=` value that loads it (null: a system face). */
|
|
20
|
+
google: string | null;
|
|
21
|
+
weight: number;
|
|
22
|
+
construction: NeonConstruction;
|
|
23
|
+
/** Tube width as a fraction of the font size, for this face. */
|
|
24
|
+
stroke: number;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const f = (id: string, name: string, category: NeonFontCategory, fallback: string, google: string | null, weight: number, construction: NeonConstruction, stroke: number): NeonFont =>
|
|
28
|
+
({ id, name, category, family: google ? `'${name}', ${fallback}` : fallback, google, weight, construction, stroke });
|
|
29
|
+
|
|
30
|
+
export const NEON_FONTS: NeonFont[] = [
|
|
31
|
+
f('tilt-neon', 'Tilt Neon', 'neon tube', 'Quicksand, sans-serif', 'Tilt+Neon', 400, 'monoline', 0.04),
|
|
32
|
+
f('bebas-neue', 'Bebas Neue', 'condensed', "Oswald, 'Arial Narrow', sans-serif", 'Bebas+Neue', 400, 'outline', 0.033),
|
|
33
|
+
f('anton', 'Anton', 'bold', "'Arial Narrow', Impact, sans-serif", 'Anton', 400, 'outline', 0.03),
|
|
34
|
+
f('oswald', 'Oswald', 'condensed', "'Arial Narrow', 'Helvetica Neue', Arial, sans-serif", 'Oswald:wght@300;400;500;600;700', 500, 'outline', 0.036),
|
|
35
|
+
f('space-grotesk', 'Space Grotesk', 'geometric', "'Helvetica Neue', Arial, sans-serif", 'Space+Grotesk:wght@400;500;700', 500, 'outline', 0.033),
|
|
36
|
+
f('orbitron', 'Orbitron', 'futuristic', "'Eurostile', sans-serif", 'Orbitron:wght@400;600;800', 600, 'outline', 0.03),
|
|
37
|
+
f('audiowide', 'Audiowide', 'futuristic', 'sans-serif', 'Audiowide', 400, 'outline', 0.03),
|
|
38
|
+
f('russo-one', 'Russo One', 'signage', "Impact, 'Arial Black', sans-serif", 'Russo+One', 400, 'outline', 0.03),
|
|
39
|
+
f('rajdhani', 'Rajdhani', 'industrial', "'Arial Narrow', sans-serif", 'Rajdhani:wght@500;600;700', 600, 'outline', 0.033),
|
|
40
|
+
f('exo-2', 'Exo 2', 'futuristic', 'sans-serif', 'Exo+2:wght@300;500;700', 500, 'outline', 0.033),
|
|
41
|
+
f('montserrat', 'Montserrat', 'geometric', "'Helvetica Neue', Arial, sans-serif", 'Montserrat:wght@300;500;700', 500, 'outline', 0.033),
|
|
42
|
+
f('inter', 'Inter', 'geometric', "system-ui, 'Helvetica Neue', Arial, sans-serif", 'Inter:wght@300;500;700', 500, 'outline', 0.033),
|
|
43
|
+
f('archivo', 'Archivo', 'signage', "'Helvetica Neue', Arial, sans-serif", 'Archivo:wght@400;600;800', 600, 'outline', 0.033),
|
|
44
|
+
f('barlow-condensed', 'Barlow Condensed', 'condensed', "'Arial Narrow', sans-serif", 'Barlow+Condensed:wght@400;600', 600, 'outline', 0.034),
|
|
45
|
+
f('sora', 'Sora', 'geometric', 'sans-serif', 'Sora:wght@300;500;700', 500, 'outline', 0.033),
|
|
46
|
+
f('raleway', 'Raleway', 'thin', "'Helvetica Neue', sans-serif", 'Raleway:wght@200;300;500', 300, 'monoline', 0.03),
|
|
47
|
+
f('press-start-2p', 'Press Start 2P', 'arcade', "'Courier New', monospace", 'Press+Start+2P', 400, 'outline', 0.03),
|
|
48
|
+
f('pacifico', 'Pacifico', 'handwritten', "'Brush Script MT', cursive", 'Pacifico', 400, 'outline', 0.026),
|
|
49
|
+
f('dm-sans', 'DM Sans', 'rounded', "'Helvetica Neue', Arial, sans-serif", 'DM+Sans:wght@300;500;700', 500, 'outline', 0.033),
|
|
50
|
+
f('quicksand', 'Quicksand', 'rounded', "'Arial Rounded MT Bold', 'Helvetica Neue', Arial, sans-serif", 'Quicksand:wght@300;400;500;600;700', 500, 'monoline', 0.045),
|
|
51
|
+
f('sacramento', 'Sacramento', 'handwritten', "'Snell Roundhand', 'Brush Script MT', cursive", 'Sacramento', 400, 'monoline', 0.03),
|
|
52
|
+
f('righteous', 'Righteous', 'retro', 'sans-serif', 'Righteous', 400, 'outline', 0.03),
|
|
53
|
+
f('space-mono', 'Space Mono', 'monospace', "'Courier New', monospace", 'Space+Mono:wght@400;700', 400, 'monoline', 0.03),
|
|
54
|
+
f('great-vibes', 'Great Vibes', 'elegant', "'Snell Roundhand', cursive", 'Great+Vibes', 400, 'monoline', 0.022),
|
|
55
|
+
f('black-ops-one', 'Black Ops One', 'industrial', "Impact, sans-serif", 'Black+Ops+One', 400, 'outline', 0.026),
|
|
56
|
+
f('monoton', 'Monoton', 'display', 'sans-serif', 'Monoton', 400, 'monoline', 0.008),
|
|
57
|
+
f('system', 'System', 'system', "system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif", null, 600, 'outline', 0.033),
|
|
58
|
+
];
|
|
59
|
+
|
|
60
|
+
/** The monochrome emoji face: vector outlines, so an emoji can be bent into a tube like a letter. */
|
|
61
|
+
export const NEON_EMOJI_FONT: NeonFont = f('noto-emoji', 'Noto Emoji', 'display', 'sans-serif', 'Noto+Emoji:wght@400;500;700', 500, 'outline', 0.03);
|
|
62
|
+
|
|
63
|
+
/** Find a font by id, name or family, case-insensitively ("Orbitron", "orbitron", "Bebas"). */
|
|
64
|
+
export function findNeonFont(query: string): NeonFont | undefined {
|
|
65
|
+
const q = query.trim().toLowerCase().replace(/[-_]+/g, ' ');
|
|
66
|
+
if (!q) return undefined;
|
|
67
|
+
return NEON_FONTS.find((x) => x.id.replace(/-/g, ' ') === q || x.name.toLowerCase() === q)
|
|
68
|
+
?? NEON_FONTS.find((x) => x.name.toLowerCase().startsWith(q) || x.family.toLowerCase().startsWith(`'${q}`))
|
|
69
|
+
?? NEON_FONTS.find((x) => x.name.toLowerCase().includes(q));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** One Google Fonts stylesheet URL for these fonts (default: all of them, plus Noto Emoji). */
|
|
73
|
+
export function neonGoogleFontsUrl(fonts: NeonFont[] = [...NEON_FONTS, NEON_EMOJI_FONT]): string {
|
|
74
|
+
const families = [...new Set(fonts.map((x) => x.google).filter((g): g is string => !!g))];
|
|
75
|
+
return `https://fonts.googleapis.com/css2?${families.map((g) => `family=${g}`).join('&')}&display=swap`;
|
|
76
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { NeonTextConfig } from './config';
|
|
2
|
+
import { flickerLevels, type FlickerLevels, type NeonTrigger } from './flicker';
|
|
3
|
+
import { glitchAt, type GlitchState } from './glitch';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* **One frame of the sign's state** — what the renderer needs from the animation at `timeMs`:
|
|
7
|
+
* each layer's brightness (flicker) and the glitch, if one is playing. Pure: the same config, time
|
|
8
|
+
* and triggers always give the same frame, so the caller owns the clock (Remotion passes
|
|
9
|
+
* frame / fps × 1000) and a timeline can be scrubbed backwards and forwards.
|
|
10
|
+
*
|
|
11
|
+
* `triggers` are events placed on purpose at clock times (`timeMs` units): a button press, or a
|
|
12
|
+
* scripted moment. They play whatever the frequencies say.
|
|
13
|
+
*/
|
|
14
|
+
export type NeonFrame = { timeMs: number; levels: FlickerLevels; glitch: GlitchState | null };
|
|
15
|
+
|
|
16
|
+
export const STEADY_LEVELS: FlickerLevels = { brightness: 1, tube: 1, core: 1, glow: 1, bloom: 1, event: null };
|
|
17
|
+
|
|
18
|
+
type Timed = Pick<NeonTextConfig, 'animation'>;
|
|
19
|
+
|
|
20
|
+
export function neonFrame(config: Timed, timeMs: number, triggers?: readonly NeonTrigger[]): NeonFrame {
|
|
21
|
+
const a = config.animation;
|
|
22
|
+
if (!a.enabled || !Number.isFinite(timeMs)) return { timeMs, levels: STEADY_LEVELS, glitch: null };
|
|
23
|
+
const speed = Math.max(0, a.speed);
|
|
24
|
+
const fs = Math.max(0.01, a.flickerSpeed);
|
|
25
|
+
const t = timeMs * speed;
|
|
26
|
+
const glitch = glitchAt(a, t, triggers, (ms) => ms * speed);
|
|
27
|
+
const levels = flickerLevels(a, t, triggers, (ms) => ms * speed * fs);
|
|
28
|
+
/* A glitch that loses brightness pulls the tube and its light down with it. */
|
|
29
|
+
if (glitch && glitch.keep < 1) {
|
|
30
|
+
const k = glitch.keep;
|
|
31
|
+
return { timeMs, levels: { ...levels, tube: levels.tube * k, core: levels.core * (0.5 + 0.5 * k), glow: levels.glow * k, bloom: levels.bloom * (0.7 + 0.3 * k) }, glitch };
|
|
32
|
+
}
|
|
33
|
+
return { timeMs, levels, glitch };
|
|
34
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import type { NeonAnimationConfig } from './config';
|
|
2
|
+
import { NORMAL_HOLD_MS, type NeonTrigger } from './flicker';
|
|
3
|
+
import { between, rand } from './random';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* **The glitch controller: independent of the flicker, and silent most of the time.** Time is cut
|
|
7
|
+
* into 250 ms slots; each starts a glitch with probability `glitchFrequency × 0.25`, lasting about
|
|
8
|
+
* `glitchDuration` (×0.6–1.4). Inside a glitch the picture changes in 45 ms steps (a glitch steps; it
|
|
9
|
+
* doesn't ease), and each step draws a few of:
|
|
10
|
+
*
|
|
11
|
+
* - a small horizontal shift of the whole sign (≤ 0.035 em at intensity 1)
|
|
12
|
+
* - one to three horizontal slices shifted sideways (≤ 0.09 em), some dimmed
|
|
13
|
+
* - an RGB split: red and cyan ghosts of the tube, either side (≤ 0.025 em)
|
|
14
|
+
* - the glow and bloom slipping behind the tube (glow separation)
|
|
15
|
+
* - one thin scanline band torn further than the slices
|
|
16
|
+
* - a partial brightness loss
|
|
17
|
+
*
|
|
18
|
+
* About one step in four is quiet, so a glitch stutters. Everything scales with `glitchIntensity`;
|
|
19
|
+
* the caps keep the words readable. `glitchDisplacement`, `glitchRgbSplit`, `glitchSlices` and
|
|
20
|
+
* `glitchGlowSeparation` scale each part (0…2). Offsets are in em (× fontSize at render).
|
|
21
|
+
*
|
|
22
|
+
* A `glitch` trigger plays one glitch at its time, whatever the frequency; a `normal` trigger
|
|
23
|
+
* silences random glitches for `NORMAL_HOLD_MS`.
|
|
24
|
+
*/
|
|
25
|
+
export type GlitchSlice = {
|
|
26
|
+
/** Top and height as fractions of the letters' box. */
|
|
27
|
+
y: number;
|
|
28
|
+
h: number;
|
|
29
|
+
/** Sideways shift, em. */
|
|
30
|
+
dx: number;
|
|
31
|
+
/** Brightness kept, 0…1. */
|
|
32
|
+
keep: number;
|
|
33
|
+
};
|
|
34
|
+
export type GlitchState = {
|
|
35
|
+
/** Whole-sign shift, em. */
|
|
36
|
+
shiftX: number;
|
|
37
|
+
slices: GlitchSlice[];
|
|
38
|
+
/** RGB ghost offset, em (0 → none). */
|
|
39
|
+
rgbSplit: number;
|
|
40
|
+
/** Glow and bloom offset relative to the tube, em. */
|
|
41
|
+
glowShiftX: number;
|
|
42
|
+
/** Brightness kept by the whole sign, 0…1. */
|
|
43
|
+
keep: number;
|
|
44
|
+
/** 0…1 through the glitch. */
|
|
45
|
+
progress: number;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const SLOT = 250;
|
|
49
|
+
const STEP = 45;
|
|
50
|
+
const SALT = { starts: 21, offset: 22, duration: 23, step: 24 };
|
|
51
|
+
|
|
52
|
+
export type GlitchEvent = { start: number; duration: number; slot: number; forced?: boolean };
|
|
53
|
+
|
|
54
|
+
export function glitchEventInSlot(a: NeonAnimationConfig, slot: number): GlitchEvent | null {
|
|
55
|
+
const p = Math.min(0.9, Math.max(0, a.glitchFrequency) * (SLOT / 1000));
|
|
56
|
+
if (p <= 0 || rand(a.seed, slot, SALT.starts) >= p) return null;
|
|
57
|
+
return {
|
|
58
|
+
start: slot * SLOT + rand(a.seed, slot, SALT.offset) * SLOT,
|
|
59
|
+
duration: Math.max(20, a.glitchDuration) * between(0.6, 1.4, a.seed, slot, SALT.duration),
|
|
60
|
+
slot,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The glitch playing at animation time `t`, if any. `toAnim` maps a trigger's clock time to
|
|
66
|
+
* animation time (× speed); `neonFrame` supplies it.
|
|
67
|
+
*/
|
|
68
|
+
export function glitchEventAt(a: NeonAnimationConfig, t: number, triggers?: readonly NeonTrigger[], toAnim: (ms: number) => number = (ms) => ms): GlitchEvent | null {
|
|
69
|
+
let forced: GlitchEvent | null = null;
|
|
70
|
+
let hold = false;
|
|
71
|
+
(triggers ?? []).forEach((tr, i) => {
|
|
72
|
+
const s = toAnim(tr.at);
|
|
73
|
+
if (tr.kind === 'normal' && t >= s && t < toAnim(tr.at + NORMAL_HOLD_MS)) hold = true;
|
|
74
|
+
if (tr.kind !== 'glitch') return;
|
|
75
|
+
const e = { start: s, duration: Math.max(60, a.glitchDuration) * 1.2, slot: -2_000_017 - i * 11, forced: true };
|
|
76
|
+
if (t >= e.start && t < e.start + e.duration && (!forced || e.start > forced.start)) forced = e;
|
|
77
|
+
});
|
|
78
|
+
if (forced) return forced;
|
|
79
|
+
if (hold) return null;
|
|
80
|
+
const now = Math.floor(t / SLOT);
|
|
81
|
+
const back = Math.ceil((Math.max(20, a.glitchDuration) * 1.4) / SLOT) + 1;
|
|
82
|
+
for (let s = now; s >= now - back; s--) {
|
|
83
|
+
const e = glitchEventInSlot(a, s);
|
|
84
|
+
if (e && t >= e.start && t < e.start + e.duration) return e;
|
|
85
|
+
}
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** The glitch at time `t` (ms of animation time), or null — which is almost always. */
|
|
90
|
+
export function glitchAt(a: NeonAnimationConfig, t: number, triggers?: readonly NeonTrigger[], toAnim?: (ms: number) => number): GlitchState | null {
|
|
91
|
+
if (!a.enabled) return null;
|
|
92
|
+
const random = a.glitchEnabled && a.glitchIntensity > 0;
|
|
93
|
+
const hasForced = !!triggers?.some((tr) => tr.kind === 'glitch');
|
|
94
|
+
if (!random && !hasForced) return null;
|
|
95
|
+
const e = glitchEventAt(a, t, triggers, toAnim);
|
|
96
|
+
if (!e || (!e.forced && !random)) return null;
|
|
97
|
+
/* A triggered glitch is always visible, even on a sign set to glitch gently. */
|
|
98
|
+
const I = Math.min(1, Math.max(e.forced ? 0.5 : 0, Math.max(0, a.glitchIntensity)));
|
|
99
|
+
const step = Math.floor((t - e.start) / STEP);
|
|
100
|
+
const r = (salt: number) => rand(a.seed, e.slot, SALT.step + salt, step);
|
|
101
|
+
const progress = (t - e.start) / e.duration;
|
|
102
|
+
if (r(0) < 0.25) return { shiftX: 0, slices: [], rgbSplit: 0, glowShiftX: 0, keep: 1, progress };
|
|
103
|
+
const sign = (salt: number) => (r(salt) < 0.5 ? -1 : 1);
|
|
104
|
+
const k = (v: number | undefined) => Math.max(0, Math.min(2, v ?? 1));
|
|
105
|
+
const [kShift, kRgb, kSlice, kGlow] = [k(a.glitchDisplacement), k(a.glitchRgbSplit), k(a.glitchSlices), k(a.glitchGlowSeparation)];
|
|
106
|
+
const shiftX = sign(1) * r(2) * 0.035 * I * kShift;
|
|
107
|
+
const count = r(3) < 0.35 ? 0 : 1 + Math.floor(r(4) * (1 + 2 * I));
|
|
108
|
+
const slices: GlitchSlice[] = [];
|
|
109
|
+
for (let i = 0; i < count; i++) {
|
|
110
|
+
const h = 0.06 + r(10 + i) * 0.16;
|
|
111
|
+
slices.push({ y: r(20 + i) * (1 - h), h, dx: sign(30 + i) * (0.02 + r(40 + i) * 0.07) * I * kSlice, keep: r(50 + i) < 0.4 ? 0.45 + 0.4 * r(60 + i) : 1 });
|
|
112
|
+
}
|
|
113
|
+
/* A scanline: one thin band, torn further. */
|
|
114
|
+
if (r(5) < 0.45) slices.push({ y: r(6) * 0.97, h: 0.012 + r(7) * 0.02, dx: sign(8) * (0.06 + 0.06 * r(9)) * I * kSlice, keep: 0.8 });
|
|
115
|
+
return {
|
|
116
|
+
shiftX,
|
|
117
|
+
slices,
|
|
118
|
+
rgbSplit: r(70) < 0.6 ? (0.008 + 0.017 * r(71)) * I * kRgb : 0,
|
|
119
|
+
glowShiftX: r(72) < 0.5 ? (-shiftX * 0.8 - sign(73) * 0.01 * I) * kGlow : 0,
|
|
120
|
+
keep: 1 - 0.3 * I * r(74),
|
|
121
|
+
progress,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** Glitch starts between two animation times (random and triggered), for sound. */
|
|
126
|
+
export function glitchCuesBetween(a: NeonAnimationConfig, t0: number, t1: number, triggers?: readonly NeonTrigger[], toAnim: (ms: number) => number = (ms) => ms): { at: number; duration: number }[] {
|
|
127
|
+
if (!(t1 > t0) || !a.enabled) return [];
|
|
128
|
+
const out: { at: number; duration: number }[] = [];
|
|
129
|
+
const held = (t: number) => (triggers ?? []).some((tr) => tr.kind === 'normal' && t >= toAnim(tr.at) && t < toAnim(tr.at + NORMAL_HOLD_MS));
|
|
130
|
+
if (a.glitchEnabled && a.glitchIntensity > 0 && t1 - t0 < 120_000) {
|
|
131
|
+
for (let s = Math.floor(t0 / SLOT); s <= Math.floor(t1 / SLOT); s++) {
|
|
132
|
+
const e = glitchEventInSlot(a, s);
|
|
133
|
+
if (e && e.start >= t0 && e.start < t1 && !held(e.start)) out.push({ at: e.start, duration: e.duration });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
for (const tr of triggers ?? []) {
|
|
137
|
+
if (tr.kind !== 'glitch') continue;
|
|
138
|
+
const s = toAnim(tr.at);
|
|
139
|
+
if (s >= t0 && s < t1) out.push({ at: s, duration: Math.max(60, a.glitchDuration) * 1.2 });
|
|
140
|
+
}
|
|
141
|
+
return out.sort((x, y) => x.at - y.at);
|
|
142
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **Neon text** — a reusable neon-sign typography primitive. Any text, any loaded font, any colour;
|
|
3
|
+
* five light layers with a sharp tube and core; seeded electrical flicker and occasional glitches.
|
|
4
|
+
* Reference: Vecteezy 7356951 (typography only). `docs/NEON-TEXT.md`.
|
|
5
|
+
*
|
|
6
|
+
* text → Typography → NeonMaterial → FlickerController + GlitchController → GlowRenderer
|
|
7
|
+
*/
|
|
8
|
+
export {
|
|
9
|
+
DEFAULT_NEON_CONFIG, NEON_COLOR_PRESETS, NEON_TEXT_PRESETS, NEON_CONTROLS, NEON_CONSTRUCTIONS, NEON_ALIGNS, NEON_SHORTHAND_KEYS, MAX_NEON_TEXT_LENGTH,
|
|
10
|
+
resolveNeonConfig, sanitizeNeonConfig, validateNeonConfig, shorthandToConfig, deriveNeonPalette, neonColors, isHexColor, mixHex, getPath, setPath,
|
|
11
|
+
type NeonTextConfig, type NeonTextConfigInput, type NeonTextShorthand, type NeonTypography, type NeonMaterialConfig, type NeonAnimationConfig,
|
|
12
|
+
type NeonShadow, type NeonConstruction, type NeonAlign, type NeonColorPreset, type NeonColorPresetId, type NeonTextPresetId, type NeonControl,
|
|
13
|
+
type NeonConfigError,
|
|
14
|
+
} from './config';
|
|
15
|
+
export { layoutText, textRows, estimateTextWidth, fontShorthand, type NeonLayout, type NeonRow, type TextMeasurer } from './typography';
|
|
16
|
+
export { resolveMaterial, materialPad, NEON_LAYERS, type NeonMaterial, type NeonLayerId } from './material';
|
|
17
|
+
export { flickerLevels, tubeBrightness, flickerEventsAt, flickerEventInSlot, FLICKER_REFERENCE_INTENSITY, type FlickerLevels, type FlickerEvent, type FlickerKind } from './flicker';
|
|
18
|
+
export { glitchAt, glitchEventAt, glitchEventInSlot, type GlitchState, type GlitchSlice, type GlitchEvent } from './glitch';
|
|
19
|
+
export { neonFrame, STEADY_LEVELS, type NeonFrame } from './frame';
|
|
20
|
+
export { GlowRenderer, type GlowRendererProps } from './GlowRenderer';
|
|
21
|
+
export { NeonTextFrame, type NeonTextFrameProps } from './NeonTextFrame';
|
|
22
|
+
export { NeonText, createCanvasMeasurer, type NeonTextProps } from './NeonText';
|
|
23
|
+
export { NeonLayers, NEON_LAYER_ORDER, type NeonLayersProps, type NeonSource } from './layers';
|
|
24
|
+
export { NeonTextGlyphs } from './GlowRenderer';
|
|
25
|
+
export { flickerCuesBetween, flickerTime, FLICKER_KINDS, NORMAL_HOLD_MS, type NeonTrigger, type NeonTriggerKind, type FlickerCue } from './flicker';
|
|
26
|
+
export { glitchCuesBetween } from './glitch';
|
|
27
|
+
export { NEON_FONTS, NEON_EMOJI_FONT, findNeonFont, neonGoogleFontsUrl, type NeonFont, type NeonFontCategory } from './fonts';
|
|
28
|
+
export { parseSvgArtwork, NEON_ARTWORK_LIBRARY, type ParsedSvg, type SvgNode, type SvgTag } from './artwork';
|
|
29
|
+
export { DEFAULT_NEON_WALL, neonWallSvg, neonWallMaskSvg, wallBricks, svgDataUrl, type NeonWallConfig, type Brick } from './wall';
|
|
30
|
+
export {
|
|
31
|
+
DEFAULT_NEON_SCENE, DEFAULT_NEON_ELEMENTS, DEFAULT_NEON_AUDIO, NEON_SCENE_PRESETS, NEON_NAMED_COLORS, NEON_FLICKER_LEVELS, NEON_GLITCH_LEVELS,
|
|
32
|
+
resolveNeonScene, resolveNeonElement, validateNeonScene, validateNeonElement, sanitizeNeonScene, elementGeometry, elementTriggers, neonSceneCues,
|
|
33
|
+
createNeonScene, addNeonElement, neonElementFromSpec, neonColor, neonSceneFromText, emojiText,
|
|
34
|
+
type NeonScene, type NeonSceneInput, type NeonElement, type NeonElementInput, type NeonElementType, type NeonTextElement, type NeonEmojiElement,
|
|
35
|
+
type NeonArtworkElement, type NeonArtworkSource, type NeonAudioConfig, type NeonTimeline, type SceneTrigger, type NeonElementGeometry, type NeonCue,
|
|
36
|
+
type NeonCueKind, type NeonScenePreset, type NeonElementSpec, type NeonElementCommon,
|
|
37
|
+
} from './scene';
|
|
38
|
+
export { NeonCanvas, neonSceneState, neonWallImages, type NeonCanvasProps, type NeonElementState } from './NeonCanvas';
|
|
39
|
+
export { synthesizeNeonSound, encodeWav, NEON_SOUND_IDS, NEON_SOUND_SECONDS, type NeonSoundId } from './synth';
|
|
40
|
+
export { NeonAudioEngine, type NeonAudioState } from './audio';
|
|
41
|
+
export { type NeonShapeMetrics } from './material';
|