@wardic/solid 0.0.0-stage → 1.0.0-rc.2
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/LICENSE +21 -0
- package/README.md +26 -2
- package/THIRD_PARTY_NOTICES.md +145 -0
- package/dist/browser/animation-controls.js +150 -0
- package/dist/browser/animation-controls.js.map +1 -0
- package/dist/browser/animation-frame.js +29 -0
- package/dist/browser/animation-frame.js.map +1 -0
- package/dist/browser/appear.js +727 -0
- package/dist/browser/appear.js.map +1 -0
- package/dist/browser/arc.js +21 -0
- package/dist/browser/arc.js.map +1 -0
- package/dist/browser/bridge.js +69 -0
- package/dist/browser/bridge.js.map +1 -0
- package/dist/browser/complete.js +30 -0
- package/dist/browser/complete.js.map +1 -0
- package/dist/browser/config.js +2 -0
- package/dist/browser/config.js.map +1 -0
- package/dist/browser/create-animate.js +41 -0
- package/dist/browser/create-animate.js.map +1 -0
- package/dist/browser/create-ward.js +1001 -0
- package/dist/browser/create-ward.js.map +1 -0
- package/dist/browser/cycle-index.js +17 -0
- package/dist/browser/cycle-index.js.map +1 -0
- package/dist/browser/cycle.js +31 -0
- package/dist/browser/cycle.js.map +1 -0
- package/dist/browser/directive.js +80 -0
- package/dist/browser/directive.js.map +1 -0
- package/dist/browser/drag-constraints.js +76 -0
- package/dist/browser/drag-constraints.js.map +1 -0
- package/dist/browser/drag-controls.js +51 -0
- package/dist/browser/drag-controls.js.map +1 -0
- package/dist/browser/drag-samples.js +40 -0
- package/dist/browser/drag-samples.js.map +1 -0
- package/dist/browser/drag-sensor.js +35 -0
- package/dist/browser/drag-sensor.js.map +1 -0
- package/dist/browser/drag-track.js +817 -0
- package/dist/browser/drag-track.js.map +1 -0
- package/dist/browser/drag-transition.js +56 -0
- package/dist/browser/drag-transition.js.map +1 -0
- package/dist/browser/drag.js +44 -0
- package/dist/browser/drag.js.map +1 -0
- package/dist/browser/element-style.js +67 -0
- package/dist/browser/element-style.js.map +1 -0
- package/dist/browser/element.js +353 -0
- package/dist/browser/element.js.map +1 -0
- package/dist/browser/feature-section.js +17 -0
- package/dist/browser/feature-section.js.map +1 -0
- package/dist/browser/feature.js +261 -0
- package/dist/browser/feature.js.map +1 -0
- package/dist/browser/features/all.js +10 -0
- package/dist/browser/features/all.js.map +1 -0
- package/dist/browser/features/colors.js +33 -0
- package/dist/browser/features/colors.js.map +1 -0
- package/dist/browser/features/dom-animation.js +7 -0
- package/dist/browser/features/dom-animation.js.map +1 -0
- package/dist/browser/features/dom-max.js +4 -0
- package/dist/browser/features/dom-max.js.map +1 -0
- package/dist/browser/features/drag.js +28 -0
- package/dist/browser/features/drag.js.map +1 -0
- package/dist/browser/features/focus.js +18 -0
- package/dist/browser/features/focus.js.map +1 -0
- package/dist/browser/features/hover.js +18 -0
- package/dist/browser/features/hover.js.map +1 -0
- package/dist/browser/features/in-view.js +18 -0
- package/dist/browser/features/in-view.js.map +1 -0
- package/dist/browser/features/input.js +30 -0
- package/dist/browser/features/input.js.map +1 -0
- package/dist/browser/features/keys.js +19 -0
- package/dist/browser/features/keys.js.map +1 -0
- package/dist/browser/features/layout.js +33 -0
- package/dist/browser/features/layout.js.map +1 -0
- package/dist/browser/features/pan.js +18 -0
- package/dist/browser/features/pan.js.map +1 -0
- package/dist/browser/features/press.js +12 -0
- package/dist/browser/features/press.js.map +1 -0
- package/dist/browser/focus-sensor.js +23 -0
- package/dist/browser/focus-sensor.js.map +1 -0
- package/dist/browser/frame-time.js +40 -0
- package/dist/browser/frame-time.js.map +1 -0
- package/dist/browser/gesture-callbacks.js +172 -0
- package/dist/browser/gesture-callbacks.js.map +1 -0
- package/dist/browser/gesture-features.js +29 -0
- package/dist/browser/gesture-features.js.map +1 -0
- package/dist/browser/gesture-info.js +43 -0
- package/dist/browser/gesture-info.js.map +1 -0
- package/dist/browser/hover-sensor.js +29 -0
- package/dist/browser/hover-sensor.js.map +1 -0
- package/dist/browser/imperative.js +614 -0
- package/dist/browser/imperative.js.map +1 -0
- package/dist/browser/index.js +165 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/instant.js +51 -0
- package/dist/browser/instant.js.map +1 -0
- package/dist/browser/layout-group.js +27 -0
- package/dist/browser/layout-group.js.map +1 -0
- package/dist/browser/layout-member.js +362 -0
- package/dist/browser/layout-member.js.map +1 -0
- package/dist/browser/layout-projection.js +19 -0
- package/dist/browser/layout-projection.js.map +1 -0
- package/dist/browser/layout.js +91 -0
- package/dist/browser/layout.js.map +1 -0
- package/dist/browser/live-style.js +313 -0
- package/dist/browser/live-style.js.map +1 -0
- package/dist/browser/live-value.js +252 -0
- package/dist/browser/live-value.js.map +1 -0
- package/dist/browser/motion-props.js +172 -0
- package/dist/browser/motion-props.js.map +1 -0
- package/dist/browser/owner-scope.js +29 -0
- package/dist/browser/owner-scope.js.map +1 -0
- package/dist/browser/page-point.js +92 -0
- package/dist/browser/page-point.js.map +1 -0
- package/dist/browser/presence-controller.js +1324 -0
- package/dist/browser/presence-controller.js.map +1 -0
- package/dist/browser/presence-record.js +27 -0
- package/dist/browser/presence-record.js.map +1 -0
- package/dist/browser/presence.js +207 -0
- package/dist/browser/presence.js.map +1 -0
- package/dist/browser/press-sensor.js +30 -0
- package/dist/browser/press-sensor.js.map +1 -0
- package/dist/browser/press.js +24 -0
- package/dist/browser/press.js.map +1 -0
- package/dist/browser/provider.js +445 -0
- package/dist/browser/provider.js.map +1 -0
- package/dist/browser/reactivity.js +9 -0
- package/dist/browser/reactivity.js.map +1 -0
- package/dist/browser/reorder-input.js +46 -0
- package/dist/browser/reorder-input.js.map +1 -0
- package/dist/browser/reorder.js +543 -0
- package/dist/browser/reorder.js.map +1 -0
- package/dist/browser/retarget-legs.js +1019 -0
- package/dist/browser/retarget-legs.js.map +1 -0
- package/dist/browser/runtime.js +249 -0
- package/dist/browser/runtime.js.map +1 -0
- package/dist/browser/sensors.js +172 -0
- package/dist/browser/sensors.js.map +1 -0
- package/dist/browser/server-interpolators.js +20 -0
- package/dist/browser/server-interpolators.js.map +1 -0
- package/dist/browser/server.js +20 -0
- package/dist/browser/server.js.map +1 -0
- package/dist/browser/solid-reactivity.js +26 -0
- package/dist/browser/solid-reactivity.js.map +1 -0
- package/dist/browser/spine.js +2939 -0
- package/dist/browser/spine.js.map +1 -0
- package/dist/browser/stagger.js +13 -0
- package/dist/browser/stagger.js.map +1 -0
- package/dist/browser/unstable/v2/bridge.js +76 -0
- package/dist/browser/unstable/v2/bridge.js.map +1 -0
- package/dist/browser/unstable/v2/complete.js +29 -0
- package/dist/browser/unstable/v2/complete.js.map +1 -0
- package/dist/browser/unstable/v2/config-view.js +111 -0
- package/dist/browser/unstable/v2/config-view.js.map +1 -0
- package/dist/browser/unstable/v2/create-animate.js +102 -0
- package/dist/browser/unstable/v2/create-animate.js.map +1 -0
- package/dist/browser/unstable/v2/cycle.js +30 -0
- package/dist/browser/unstable/v2/cycle.js.map +1 -0
- package/dist/browser/unstable/v2/drag-sensor.js +34 -0
- package/dist/browser/unstable/v2/drag-sensor.js.map +1 -0
- package/dist/browser/unstable/v2/element.js +393 -0
- package/dist/browser/unstable/v2/element.js.map +1 -0
- package/dist/browser/unstable/v2/feature-section.js +27 -0
- package/dist/browser/unstable/v2/feature-section.js.map +1 -0
- package/dist/browser/unstable/v2/focus-sensor.js +23 -0
- package/dist/browser/unstable/v2/focus-sensor.js.map +1 -0
- package/dist/browser/unstable/v2/hover-sensor.js +28 -0
- package/dist/browser/unstable/v2/hover-sensor.js.map +1 -0
- package/dist/browser/unstable/v2/index.js +114 -0
- package/dist/browser/unstable/v2/index.js.map +1 -0
- package/dist/browser/unstable/v2/layout-projection.js +18 -0
- package/dist/browser/unstable/v2/layout-projection.js.map +1 -0
- package/dist/browser/unstable/v2/layout.js +71 -0
- package/dist/browser/unstable/v2/layout.js.map +1 -0
- package/dist/browser/unstable/v2/lifecycle.js +455 -0
- package/dist/browser/unstable/v2/lifecycle.js.map +1 -0
- package/dist/browser/unstable/v2/live-value.js +264 -0
- package/dist/browser/unstable/v2/live-value.js.map +1 -0
- package/dist/browser/unstable/v2/presence-handle.js +146 -0
- package/dist/browser/unstable/v2/presence-handle.js.map +1 -0
- package/dist/browser/unstable/v2/presence-hooks.js +142 -0
- package/dist/browser/unstable/v2/presence-hooks.js.map +1 -0
- package/dist/browser/unstable/v2/presence.js +124 -0
- package/dist/browser/unstable/v2/presence.js.map +1 -0
- package/dist/browser/unstable/v2/press-sensor.js +29 -0
- package/dist/browser/unstable/v2/press-sensor.js.map +1 -0
- package/dist/browser/unstable/v2/provider.js +457 -0
- package/dist/browser/unstable/v2/provider.js.map +1 -0
- package/dist/browser/unstable/v2/reorder.js +663 -0
- package/dist/browser/unstable/v2/reorder.js.map +1 -0
- package/dist/browser/unstable/v2/sensors.js +138 -0
- package/dist/browser/unstable/v2/sensors.js.map +1 -0
- package/dist/browser/unstable/v2/solid-reactivity.js +82 -0
- package/dist/browser/unstable/v2/solid-reactivity.js.map +1 -0
- package/dist/browser/unstable/v2/variant-node.js +395 -0
- package/dist/browser/unstable/v2/variant-node.js.map +1 -0
- package/dist/browser/unstable/v2/w.js +23 -0
- package/dist/browser/unstable/v2/w.js.map +1 -0
- package/dist/browser/unstable/v2/waiters.js +185 -0
- package/dist/browser/unstable/v2/waiters.js.map +1 -0
- package/dist/browser/unstable/v2/ward.js +1620 -0
- package/dist/browser/unstable/v2/ward.js.map +1 -0
- package/dist/browser/unstable/v2/wardic-config.js +40 -0
- package/dist/browser/unstable/v2/wardic-config.js.map +1 -0
- package/dist/browser/unstable/v2/wardic.js +16 -0
- package/dist/browser/unstable/v2/wardic.js.map +1 -0
- package/dist/browser/variant-node.js +308 -0
- package/dist/browser/variant-node.js.map +1 -0
- package/dist/browser/variant-target.js +224 -0
- package/dist/browser/variant-target.js.map +1 -0
- package/dist/browser/variant-tree.js +394 -0
- package/dist/browser/variant-tree.js.map +1 -0
- package/dist/browser/variants.js +43 -0
- package/dist/browser/variants.js.map +1 -0
- package/dist/browser/w.js +25 -0
- package/dist/browser/w.js.map +1 -0
- package/dist/browser/ward-keys.js +2 -0
- package/dist/browser/ward-keys.js.map +1 -0
- package/dist/browser/wardic-component.js +74 -0
- package/dist/browser/wardic-component.js.map +1 -0
- package/dist/browser/wardic-config-value.js +91 -0
- package/dist/browser/wardic-config-value.js.map +1 -0
- package/dist/browser/wardic-config.js +42 -0
- package/dist/browser/wardic-config.js.map +1 -0
- package/dist/browser/wardic.js +31 -0
- package/dist/browser/wardic.js.map +1 -0
- package/dist/server/animation-controls.js +150 -0
- package/dist/server/animation-controls.js.map +1 -0
- package/dist/server/animation-frame.js +29 -0
- package/dist/server/animation-frame.js.map +1 -0
- package/dist/server/appear.js +727 -0
- package/dist/server/appear.js.map +1 -0
- package/dist/server/arc.js +21 -0
- package/dist/server/arc.js.map +1 -0
- package/dist/server/bridge.js +69 -0
- package/dist/server/bridge.js.map +1 -0
- package/dist/server/complete.js +30 -0
- package/dist/server/complete.js.map +1 -0
- package/dist/server/config.js +2 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/create-animate.js +41 -0
- package/dist/server/create-animate.js.map +1 -0
- package/dist/server/create-ward.js +1001 -0
- package/dist/server/create-ward.js.map +1 -0
- package/dist/server/cycle-index.js +17 -0
- package/dist/server/cycle-index.js.map +1 -0
- package/dist/server/cycle.js +31 -0
- package/dist/server/cycle.js.map +1 -0
- package/dist/server/directive.js +80 -0
- package/dist/server/directive.js.map +1 -0
- package/dist/server/drag-constraints.js +76 -0
- package/dist/server/drag-constraints.js.map +1 -0
- package/dist/server/drag-controls.js +51 -0
- package/dist/server/drag-controls.js.map +1 -0
- package/dist/server/drag-samples.js +40 -0
- package/dist/server/drag-samples.js.map +1 -0
- package/dist/server/drag-sensor.js +35 -0
- package/dist/server/drag-sensor.js.map +1 -0
- package/dist/server/drag-track.js +817 -0
- package/dist/server/drag-track.js.map +1 -0
- package/dist/server/drag-transition.js +56 -0
- package/dist/server/drag-transition.js.map +1 -0
- package/dist/server/drag.js +44 -0
- package/dist/server/drag.js.map +1 -0
- package/dist/server/element-style.js +67 -0
- package/dist/server/element-style.js.map +1 -0
- package/dist/server/element.js +353 -0
- package/dist/server/element.js.map +1 -0
- package/dist/server/feature-section.js +17 -0
- package/dist/server/feature-section.js.map +1 -0
- package/dist/server/feature.js +261 -0
- package/dist/server/feature.js.map +1 -0
- package/dist/server/features/all.js +10 -0
- package/dist/server/features/all.js.map +1 -0
- package/dist/server/features/colors.js +33 -0
- package/dist/server/features/colors.js.map +1 -0
- package/dist/server/features/dom-animation.js +7 -0
- package/dist/server/features/dom-animation.js.map +1 -0
- package/dist/server/features/dom-max.js +4 -0
- package/dist/server/features/dom-max.js.map +1 -0
- package/dist/server/features/drag.js +28 -0
- package/dist/server/features/drag.js.map +1 -0
- package/dist/server/features/focus.js +18 -0
- package/dist/server/features/focus.js.map +1 -0
- package/dist/server/features/hover.js +18 -0
- package/dist/server/features/hover.js.map +1 -0
- package/dist/server/features/in-view.js +18 -0
- package/dist/server/features/in-view.js.map +1 -0
- package/dist/server/features/input.js +30 -0
- package/dist/server/features/input.js.map +1 -0
- package/dist/server/features/keys.js +19 -0
- package/dist/server/features/keys.js.map +1 -0
- package/dist/server/features/layout.js +33 -0
- package/dist/server/features/layout.js.map +1 -0
- package/dist/server/features/pan.js +18 -0
- package/dist/server/features/pan.js.map +1 -0
- package/dist/server/features/press.js +12 -0
- package/dist/server/features/press.js.map +1 -0
- package/dist/server/focus-sensor.js +23 -0
- package/dist/server/focus-sensor.js.map +1 -0
- package/dist/server/frame-time.js +40 -0
- package/dist/server/frame-time.js.map +1 -0
- package/dist/server/gesture-callbacks.js +172 -0
- package/dist/server/gesture-callbacks.js.map +1 -0
- package/dist/server/gesture-features.js +29 -0
- package/dist/server/gesture-features.js.map +1 -0
- package/dist/server/gesture-info.js +43 -0
- package/dist/server/gesture-info.js.map +1 -0
- package/dist/server/hover-sensor.js +29 -0
- package/dist/server/hover-sensor.js.map +1 -0
- package/dist/server/imperative.js +614 -0
- package/dist/server/imperative.js.map +1 -0
- package/dist/server/index.js +165 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/instant.js +51 -0
- package/dist/server/instant.js.map +1 -0
- package/dist/server/layout-group.js +27 -0
- package/dist/server/layout-group.js.map +1 -0
- package/dist/server/layout-member.js +362 -0
- package/dist/server/layout-member.js.map +1 -0
- package/dist/server/layout-projection.js +19 -0
- package/dist/server/layout-projection.js.map +1 -0
- package/dist/server/layout.js +90 -0
- package/dist/server/layout.js.map +1 -0
- package/dist/server/live-style.js +313 -0
- package/dist/server/live-style.js.map +1 -0
- package/dist/server/live-value.js +252 -0
- package/dist/server/live-value.js.map +1 -0
- package/dist/server/motion-props.js +172 -0
- package/dist/server/motion-props.js.map +1 -0
- package/dist/server/owner-scope.js +29 -0
- package/dist/server/owner-scope.js.map +1 -0
- package/dist/server/page-point.js +92 -0
- package/dist/server/page-point.js.map +1 -0
- package/dist/server/presence-controller.js +1324 -0
- package/dist/server/presence-controller.js.map +1 -0
- package/dist/server/presence-record.js +27 -0
- package/dist/server/presence-record.js.map +1 -0
- package/dist/server/presence.js +207 -0
- package/dist/server/presence.js.map +1 -0
- package/dist/server/press-sensor.js +30 -0
- package/dist/server/press-sensor.js.map +1 -0
- package/dist/server/press.js +24 -0
- package/dist/server/press.js.map +1 -0
- package/dist/server/provider.js +439 -0
- package/dist/server/provider.js.map +1 -0
- package/dist/server/reactivity.js +9 -0
- package/dist/server/reactivity.js.map +1 -0
- package/dist/server/reorder-input.js +46 -0
- package/dist/server/reorder-input.js.map +1 -0
- package/dist/server/reorder.js +543 -0
- package/dist/server/reorder.js.map +1 -0
- package/dist/server/retarget-legs.js +1019 -0
- package/dist/server/retarget-legs.js.map +1 -0
- package/dist/server/runtime.js +249 -0
- package/dist/server/runtime.js.map +1 -0
- package/dist/server/sensors.js +172 -0
- package/dist/server/sensors.js.map +1 -0
- package/dist/server/server-interpolators.js +20 -0
- package/dist/server/server-interpolators.js.map +1 -0
- package/dist/server/server.js +20 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/solid-reactivity.js +26 -0
- package/dist/server/solid-reactivity.js.map +1 -0
- package/dist/server/spine.js +2939 -0
- package/dist/server/spine.js.map +1 -0
- package/dist/server/stagger.js +13 -0
- package/dist/server/stagger.js.map +1 -0
- package/dist/server/unstable/v2/bridge.js +76 -0
- package/dist/server/unstable/v2/bridge.js.map +1 -0
- package/dist/server/unstable/v2/complete.js +29 -0
- package/dist/server/unstable/v2/complete.js.map +1 -0
- package/dist/server/unstable/v2/config-view.js +111 -0
- package/dist/server/unstable/v2/config-view.js.map +1 -0
- package/dist/server/unstable/v2/create-animate.js +102 -0
- package/dist/server/unstable/v2/create-animate.js.map +1 -0
- package/dist/server/unstable/v2/cycle.js +30 -0
- package/dist/server/unstable/v2/cycle.js.map +1 -0
- package/dist/server/unstable/v2/drag-sensor.js +34 -0
- package/dist/server/unstable/v2/drag-sensor.js.map +1 -0
- package/dist/server/unstable/v2/element.js +402 -0
- package/dist/server/unstable/v2/element.js.map +1 -0
- package/dist/server/unstable/v2/feature-section.js +27 -0
- package/dist/server/unstable/v2/feature-section.js.map +1 -0
- package/dist/server/unstable/v2/focus-sensor.js +23 -0
- package/dist/server/unstable/v2/focus-sensor.js.map +1 -0
- package/dist/server/unstable/v2/hover-sensor.js +28 -0
- package/dist/server/unstable/v2/hover-sensor.js.map +1 -0
- package/dist/server/unstable/v2/index.js +114 -0
- package/dist/server/unstable/v2/index.js.map +1 -0
- package/dist/server/unstable/v2/layout-projection.js +18 -0
- package/dist/server/unstable/v2/layout-projection.js.map +1 -0
- package/dist/server/unstable/v2/layout.js +88 -0
- package/dist/server/unstable/v2/layout.js.map +1 -0
- package/dist/server/unstable/v2/lifecycle.js +455 -0
- package/dist/server/unstable/v2/lifecycle.js.map +1 -0
- package/dist/server/unstable/v2/live-value.js +264 -0
- package/dist/server/unstable/v2/live-value.js.map +1 -0
- package/dist/server/unstable/v2/presence-handle.js +146 -0
- package/dist/server/unstable/v2/presence-handle.js.map +1 -0
- package/dist/server/unstable/v2/presence-hooks.js +142 -0
- package/dist/server/unstable/v2/presence-hooks.js.map +1 -0
- package/dist/server/unstable/v2/presence.js +142 -0
- package/dist/server/unstable/v2/presence.js.map +1 -0
- package/dist/server/unstable/v2/press-sensor.js +29 -0
- package/dist/server/unstable/v2/press-sensor.js.map +1 -0
- package/dist/server/unstable/v2/provider.js +475 -0
- package/dist/server/unstable/v2/provider.js.map +1 -0
- package/dist/server/unstable/v2/reorder.js +733 -0
- package/dist/server/unstable/v2/reorder.js.map +1 -0
- package/dist/server/unstable/v2/sensors.js +138 -0
- package/dist/server/unstable/v2/sensors.js.map +1 -0
- package/dist/server/unstable/v2/solid-reactivity.js +82 -0
- package/dist/server/unstable/v2/solid-reactivity.js.map +1 -0
- package/dist/server/unstable/v2/variant-node.js +395 -0
- package/dist/server/unstable/v2/variant-node.js.map +1 -0
- package/dist/server/unstable/v2/w.js +23 -0
- package/dist/server/unstable/v2/w.js.map +1 -0
- package/dist/server/unstable/v2/waiters.js +185 -0
- package/dist/server/unstable/v2/waiters.js.map +1 -0
- package/dist/server/unstable/v2/ward.js +1653 -0
- package/dist/server/unstable/v2/ward.js.map +1 -0
- package/dist/server/unstable/v2/wardic-config.js +49 -0
- package/dist/server/unstable/v2/wardic-config.js.map +1 -0
- package/dist/server/unstable/v2/wardic.js +16 -0
- package/dist/server/unstable/v2/wardic.js.map +1 -0
- package/dist/server/variant-node.js +308 -0
- package/dist/server/variant-node.js.map +1 -0
- package/dist/server/variant-target.js +224 -0
- package/dist/server/variant-target.js.map +1 -0
- package/dist/server/variant-tree.js +394 -0
- package/dist/server/variant-tree.js.map +1 -0
- package/dist/server/variants.js +43 -0
- package/dist/server/variants.js.map +1 -0
- package/dist/server/w.js +25 -0
- package/dist/server/w.js.map +1 -0
- package/dist/server/ward-keys.js +2 -0
- package/dist/server/ward-keys.js.map +1 -0
- package/dist/server/wardic-component.js +74 -0
- package/dist/server/wardic-component.js.map +1 -0
- package/dist/server/wardic-config-value.js +91 -0
- package/dist/server/wardic-config-value.js.map +1 -0
- package/dist/server/wardic-config.js +42 -0
- package/dist/server/wardic-config.js.map +1 -0
- package/dist/server/wardic.js +31 -0
- package/dist/server/wardic.js.map +1 -0
- package/dist/solid/animation-controls.d.ts +104 -0
- package/dist/solid/animation-controls.d.ts.map +1 -0
- package/dist/solid/animation-controls.js +129 -0
- package/dist/solid/animation-controls.js.map +1 -0
- package/dist/solid/animation-frame.d.ts +11 -0
- package/dist/solid/animation-frame.d.ts.map +1 -0
- package/dist/solid/animation-frame.js +31 -0
- package/dist/solid/animation-frame.js.map +1 -0
- package/dist/solid/appear.d.ts +205 -0
- package/dist/solid/appear.d.ts.map +1 -0
- package/dist/solid/appear.js +519 -0
- package/dist/solid/appear.js.map +1 -0
- package/dist/solid/arc.d.ts +25 -0
- package/dist/solid/arc.d.ts.map +1 -0
- package/dist/solid/arc.js +21 -0
- package/dist/solid/arc.js.map +1 -0
- package/dist/solid/bridge.d.ts +53 -0
- package/dist/solid/bridge.d.ts.map +1 -0
- package/dist/solid/bridge.js +66 -0
- package/dist/solid/bridge.js.map +1 -0
- package/dist/solid/complete.d.ts +31 -0
- package/dist/solid/complete.d.ts.map +1 -0
- package/dist/solid/complete.js +27 -0
- package/dist/solid/complete.js.map +1 -0
- package/dist/solid/config.d.ts +693 -0
- package/dist/solid/config.d.ts.map +1 -0
- package/dist/solid/config.js +2 -0
- package/dist/solid/config.js.map +1 -0
- package/dist/solid/create-animate.d.ts +17 -0
- package/dist/solid/create-animate.d.ts.map +1 -0
- package/dist/solid/create-animate.js +42 -0
- package/dist/solid/create-animate.js.map +1 -0
- package/dist/solid/create-ward.d.ts +278 -0
- package/dist/solid/create-ward.d.ts.map +1 -0
- package/dist/solid/create-ward.jsx +874 -0
- package/dist/solid/create-ward.jsx.map +1 -0
- package/dist/solid/cycle-index.d.ts +7 -0
- package/dist/solid/cycle-index.d.ts.map +1 -0
- package/dist/solid/cycle-index.js +17 -0
- package/dist/solid/cycle-index.js.map +1 -0
- package/dist/solid/cycle.d.ts +21 -0
- package/dist/solid/cycle.d.ts.map +1 -0
- package/dist/solid/cycle.js +31 -0
- package/dist/solid/cycle.js.map +1 -0
- package/dist/solid/directive.d.ts +21 -0
- package/dist/solid/directive.d.ts.map +1 -0
- package/dist/solid/directive.js +76 -0
- package/dist/solid/directive.js.map +1 -0
- package/dist/solid/drag-constraints.d.ts +46 -0
- package/dist/solid/drag-constraints.d.ts.map +1 -0
- package/dist/solid/drag-constraints.js +49 -0
- package/dist/solid/drag-constraints.js.map +1 -0
- package/dist/solid/drag-controls.d.ts +50 -0
- package/dist/solid/drag-controls.d.ts.map +1 -0
- package/dist/solid/drag-controls.js +51 -0
- package/dist/solid/drag-controls.js.map +1 -0
- package/dist/solid/drag-samples.d.ts +34 -0
- package/dist/solid/drag-samples.d.ts.map +1 -0
- package/dist/solid/drag-samples.js +28 -0
- package/dist/solid/drag-samples.js.map +1 -0
- package/dist/solid/drag-sensor.d.ts +23 -0
- package/dist/solid/drag-sensor.d.ts.map +1 -0
- package/dist/solid/drag-sensor.js +33 -0
- package/dist/solid/drag-sensor.js.map +1 -0
- package/dist/solid/drag-track.d.ts +227 -0
- package/dist/solid/drag-track.d.ts.map +1 -0
- package/dist/solid/drag-track.js +631 -0
- package/dist/solid/drag-track.js.map +1 -0
- package/dist/solid/drag-transition.d.ts +20 -0
- package/dist/solid/drag-transition.d.ts.map +1 -0
- package/dist/solid/drag-transition.js +31 -0
- package/dist/solid/drag-transition.js.map +1 -0
- package/dist/solid/drag.d.ts +23 -0
- package/dist/solid/drag.d.ts.map +1 -0
- package/dist/solid/drag.js +44 -0
- package/dist/solid/drag.js.map +1 -0
- package/dist/solid/element-style.d.ts +60 -0
- package/dist/solid/element-style.d.ts.map +1 -0
- package/dist/solid/element-style.js +50 -0
- package/dist/solid/element-style.js.map +1 -0
- package/dist/solid/element.d.ts +73 -0
- package/dist/solid/element.d.ts.map +1 -0
- package/dist/solid/element.jsx +326 -0
- package/dist/solid/element.jsx.map +1 -0
- package/dist/solid/feature-section.d.ts +18 -0
- package/dist/solid/feature-section.d.ts.map +1 -0
- package/dist/solid/feature-section.js +13 -0
- package/dist/solid/feature-section.js.map +1 -0
- package/dist/solid/feature.d.ts +114 -0
- package/dist/solid/feature.d.ts.map +1 -0
- package/dist/solid/feature.js +248 -0
- package/dist/solid/feature.js.map +1 -0
- package/dist/solid/features/all.d.ts +10 -0
- package/dist/solid/features/all.d.ts.map +1 -0
- package/dist/solid/features/all.js +10 -0
- package/dist/solid/features/all.js.map +1 -0
- package/dist/solid/features/colors.d.ts +12 -0
- package/dist/solid/features/colors.d.ts.map +1 -0
- package/dist/solid/features/colors.js +34 -0
- package/dist/solid/features/colors.js.map +1 -0
- package/dist/solid/features/dom-animation.d.ts +11 -0
- package/dist/solid/features/dom-animation.d.ts.map +1 -0
- package/dist/solid/features/dom-animation.js +7 -0
- package/dist/solid/features/dom-animation.js.map +1 -0
- package/dist/solid/features/dom-max.d.ts +10 -0
- package/dist/solid/features/dom-max.d.ts.map +1 -0
- package/dist/solid/features/dom-max.js +4 -0
- package/dist/solid/features/dom-max.js.map +1 -0
- package/dist/solid/features/drag.d.ts +5 -0
- package/dist/solid/features/drag.d.ts.map +1 -0
- package/dist/solid/features/drag.js +28 -0
- package/dist/solid/features/drag.js.map +1 -0
- package/dist/solid/features/focus.d.ts +5 -0
- package/dist/solid/features/focus.d.ts.map +1 -0
- package/dist/solid/features/focus.js +16 -0
- package/dist/solid/features/focus.js.map +1 -0
- package/dist/solid/features/hover.d.ts +5 -0
- package/dist/solid/features/hover.d.ts.map +1 -0
- package/dist/solid/features/hover.js +16 -0
- package/dist/solid/features/hover.js.map +1 -0
- package/dist/solid/features/in-view.d.ts +5 -0
- package/dist/solid/features/in-view.d.ts.map +1 -0
- package/dist/solid/features/in-view.js +16 -0
- package/dist/solid/features/in-view.js.map +1 -0
- package/dist/solid/features/input.d.ts +26 -0
- package/dist/solid/features/input.d.ts.map +1 -0
- package/dist/solid/features/input.js +31 -0
- package/dist/solid/features/input.js.map +1 -0
- package/dist/solid/features/keys.d.ts +70 -0
- package/dist/solid/features/keys.d.ts.map +1 -0
- package/dist/solid/features/keys.js +26 -0
- package/dist/solid/features/keys.js.map +1 -0
- package/dist/solid/features/layout.d.ts +32 -0
- package/dist/solid/features/layout.d.ts.map +1 -0
- package/dist/solid/features/layout.js +34 -0
- package/dist/solid/features/layout.js.map +1 -0
- package/dist/solid/features/pan.d.ts +5 -0
- package/dist/solid/features/pan.d.ts.map +1 -0
- package/dist/solid/features/pan.js +16 -0
- package/dist/solid/features/pan.js.map +1 -0
- package/dist/solid/features/press.d.ts +11 -0
- package/dist/solid/features/press.d.ts.map +1 -0
- package/dist/solid/features/press.js +10 -0
- package/dist/solid/features/press.js.map +1 -0
- package/dist/solid/focus-sensor.d.ts +19 -0
- package/dist/solid/focus-sensor.d.ts.map +1 -0
- package/dist/solid/focus-sensor.js +23 -0
- package/dist/solid/focus-sensor.js.map +1 -0
- package/dist/solid/frame-time.d.ts +21 -0
- package/dist/solid/frame-time.d.ts.map +1 -0
- package/dist/solid/frame-time.js +41 -0
- package/dist/solid/frame-time.js.map +1 -0
- package/dist/solid/gesture-callbacks.d.ts +53 -0
- package/dist/solid/gesture-callbacks.d.ts.map +1 -0
- package/dist/solid/gesture-callbacks.js +184 -0
- package/dist/solid/gesture-callbacks.js.map +1 -0
- package/dist/solid/gesture-features.d.ts +28 -0
- package/dist/solid/gesture-features.d.ts.map +1 -0
- package/dist/solid/gesture-features.js +29 -0
- package/dist/solid/gesture-features.js.map +1 -0
- package/dist/solid/gesture-info.d.ts +59 -0
- package/dist/solid/gesture-info.d.ts.map +1 -0
- package/dist/solid/gesture-info.js +23 -0
- package/dist/solid/gesture-info.js.map +1 -0
- package/dist/solid/hover-sensor.d.ts +19 -0
- package/dist/solid/hover-sensor.d.ts.map +1 -0
- package/dist/solid/hover-sensor.js +23 -0
- package/dist/solid/hover-sensor.js.map +1 -0
- package/dist/solid/imperative.d.ts +195 -0
- package/dist/solid/imperative.d.ts.map +1 -0
- package/dist/solid/imperative.js +536 -0
- package/dist/solid/imperative.js.map +1 -0
- package/dist/solid/index.d.ts +180 -0
- package/dist/solid/index.d.ts.map +1 -0
- package/dist/solid/index.js +165 -0
- package/dist/solid/index.js.map +1 -0
- package/dist/solid/instant.d.ts +44 -0
- package/dist/solid/instant.d.ts.map +1 -0
- package/dist/solid/instant.js +49 -0
- package/dist/solid/instant.js.map +1 -0
- package/dist/solid/layout-group.d.ts +14 -0
- package/dist/solid/layout-group.d.ts.map +1 -0
- package/dist/solid/layout-group.js +27 -0
- package/dist/solid/layout-group.js.map +1 -0
- package/dist/solid/layout-member.d.ts +117 -0
- package/dist/solid/layout-member.d.ts.map +1 -0
- package/dist/solid/layout-member.js +164 -0
- package/dist/solid/layout-member.js.map +1 -0
- package/dist/solid/layout-projection.d.ts +22 -0
- package/dist/solid/layout-projection.d.ts.map +1 -0
- package/dist/solid/layout-projection.js +19 -0
- package/dist/solid/layout-projection.js.map +1 -0
- package/dist/solid/layout.d.ts +76 -0
- package/dist/solid/layout.d.ts.map +1 -0
- package/dist/solid/layout.jsx +80 -0
- package/dist/solid/layout.jsx.map +1 -0
- package/dist/solid/live-style.d.ts +147 -0
- package/dist/solid/live-style.d.ts.map +1 -0
- package/dist/solid/live-style.js +304 -0
- package/dist/solid/live-style.js.map +1 -0
- package/dist/solid/live-value.d.ts +144 -0
- package/dist/solid/live-value.d.ts.map +1 -0
- package/dist/solid/live-value.js +223 -0
- package/dist/solid/live-value.js.map +1 -0
- package/dist/solid/motion-props.d.ts +75 -0
- package/dist/solid/motion-props.d.ts.map +1 -0
- package/dist/solid/motion-props.js +314 -0
- package/dist/solid/motion-props.js.map +1 -0
- package/dist/solid/owner-scope.d.ts +16 -0
- package/dist/solid/owner-scope.d.ts.map +1 -0
- package/dist/solid/owner-scope.js +31 -0
- package/dist/solid/owner-scope.js.map +1 -0
- package/dist/solid/page-point.d.ts +35 -0
- package/dist/solid/page-point.d.ts.map +1 -0
- package/dist/solid/page-point.js +87 -0
- package/dist/solid/page-point.js.map +1 -0
- package/dist/solid/presence-controller.d.ts +122 -0
- package/dist/solid/presence-controller.d.ts.map +1 -0
- package/dist/solid/presence-controller.js +1207 -0
- package/dist/solid/presence-controller.js.map +1 -0
- package/dist/solid/presence-record.d.ts +167 -0
- package/dist/solid/presence-record.d.ts.map +1 -0
- package/dist/solid/presence-record.js +26 -0
- package/dist/solid/presence-record.js.map +1 -0
- package/dist/solid/presence.d.ts +95 -0
- package/dist/solid/presence.d.ts.map +1 -0
- package/dist/solid/presence.jsx +195 -0
- package/dist/solid/presence.jsx.map +1 -0
- package/dist/solid/press-sensor.d.ts +20 -0
- package/dist/solid/press-sensor.d.ts.map +1 -0
- package/dist/solid/press-sensor.js +24 -0
- package/dist/solid/press-sensor.js.map +1 -0
- package/dist/solid/press.d.ts +24 -0
- package/dist/solid/press.d.ts.map +1 -0
- package/dist/solid/press.js +19 -0
- package/dist/solid/press.js.map +1 -0
- package/dist/solid/provider.d.ts +263 -0
- package/dist/solid/provider.d.ts.map +1 -0
- package/dist/solid/provider.jsx +411 -0
- package/dist/solid/provider.jsx.map +1 -0
- package/dist/solid/reactivity.d.ts +27 -0
- package/dist/solid/reactivity.d.ts.map +1 -0
- package/dist/solid/reactivity.js +9 -0
- package/dist/solid/reactivity.js.map +1 -0
- package/dist/solid/reorder-input.d.ts +22 -0
- package/dist/solid/reorder-input.d.ts.map +1 -0
- package/dist/solid/reorder-input.js +45 -0
- package/dist/solid/reorder-input.js.map +1 -0
- package/dist/solid/reorder.d.ts +241 -0
- package/dist/solid/reorder.d.ts.map +1 -0
- package/dist/solid/reorder.jsx +427 -0
- package/dist/solid/reorder.jsx.map +1 -0
- package/dist/solid/retarget-legs.d.ts +189 -0
- package/dist/solid/retarget-legs.d.ts.map +1 -0
- package/dist/solid/retarget-legs.js +825 -0
- package/dist/solid/retarget-legs.js.map +1 -0
- package/dist/solid/runtime.d.ts +179 -0
- package/dist/solid/runtime.d.ts.map +1 -0
- package/dist/solid/runtime.js +237 -0
- package/dist/solid/runtime.js.map +1 -0
- package/dist/solid/sensors.d.ts +95 -0
- package/dist/solid/sensors.d.ts.map +1 -0
- package/dist/solid/sensors.js +154 -0
- package/dist/solid/sensors.js.map +1 -0
- package/dist/solid/server-interpolators.d.ts +13 -0
- package/dist/solid/server-interpolators.d.ts.map +1 -0
- package/dist/solid/server-interpolators.js +20 -0
- package/dist/solid/server-interpolators.js.map +1 -0
- package/dist/solid/server.d.ts +9 -0
- package/dist/solid/server.d.ts.map +1 -0
- package/dist/solid/server.js +20 -0
- package/dist/solid/server.js.map +1 -0
- package/dist/solid/solid-reactivity.d.ts +3 -0
- package/dist/solid/solid-reactivity.d.ts.map +1 -0
- package/dist/solid/solid-reactivity.js +19 -0
- package/dist/solid/solid-reactivity.js.map +1 -0
- package/dist/solid/spine.d.ts +597 -0
- package/dist/solid/spine.d.ts.map +1 -0
- package/dist/solid/spine.js +2761 -0
- package/dist/solid/spine.js.map +1 -0
- package/dist/solid/stagger.d.ts +29 -0
- package/dist/solid/stagger.d.ts.map +1 -0
- package/dist/solid/stagger.js +13 -0
- package/dist/solid/stagger.js.map +1 -0
- package/dist/solid/unstable/v2/bridge.d.ts +33 -0
- package/dist/solid/unstable/v2/bridge.d.ts.map +1 -0
- package/dist/solid/unstable/v2/bridge.js +76 -0
- package/dist/solid/unstable/v2/bridge.js.map +1 -0
- package/dist/solid/unstable/v2/complete.d.ts +21 -0
- package/dist/solid/unstable/v2/complete.d.ts.map +1 -0
- package/dist/solid/unstable/v2/complete.js +27 -0
- package/dist/solid/unstable/v2/complete.js.map +1 -0
- package/dist/solid/unstable/v2/config-view.d.ts +49 -0
- package/dist/solid/unstable/v2/config-view.d.ts.map +1 -0
- package/dist/solid/unstable/v2/config-view.js +114 -0
- package/dist/solid/unstable/v2/config-view.js.map +1 -0
- package/dist/solid/unstable/v2/create-animate.d.ts +31 -0
- package/dist/solid/unstable/v2/create-animate.d.ts.map +1 -0
- package/dist/solid/unstable/v2/create-animate.js +102 -0
- package/dist/solid/unstable/v2/create-animate.js.map +1 -0
- package/dist/solid/unstable/v2/cycle.d.ts +20 -0
- package/dist/solid/unstable/v2/cycle.d.ts.map +1 -0
- package/dist/solid/unstable/v2/cycle.js +30 -0
- package/dist/solid/unstable/v2/cycle.js.map +1 -0
- package/dist/solid/unstable/v2/drag-sensor.d.ts +23 -0
- package/dist/solid/unstable/v2/drag-sensor.d.ts.map +1 -0
- package/dist/solid/unstable/v2/drag-sensor.js +32 -0
- package/dist/solid/unstable/v2/drag-sensor.js.map +1 -0
- package/dist/solid/unstable/v2/element.d.ts +178 -0
- package/dist/solid/unstable/v2/element.d.ts.map +1 -0
- package/dist/solid/unstable/v2/element.jsx +325 -0
- package/dist/solid/unstable/v2/element.jsx.map +1 -0
- package/dist/solid/unstable/v2/feature-section.d.ts +12 -0
- package/dist/solid/unstable/v2/feature-section.d.ts.map +1 -0
- package/dist/solid/unstable/v2/feature-section.js +23 -0
- package/dist/solid/unstable/v2/feature-section.js.map +1 -0
- package/dist/solid/unstable/v2/focus-sensor.d.ts +13 -0
- package/dist/solid/unstable/v2/focus-sensor.d.ts.map +1 -0
- package/dist/solid/unstable/v2/focus-sensor.js +23 -0
- package/dist/solid/unstable/v2/focus-sensor.js.map +1 -0
- package/dist/solid/unstable/v2/hover-sensor.d.ts +12 -0
- package/dist/solid/unstable/v2/hover-sensor.d.ts.map +1 -0
- package/dist/solid/unstable/v2/hover-sensor.js +22 -0
- package/dist/solid/unstable/v2/hover-sensor.js.map +1 -0
- package/dist/solid/unstable/v2/index.d.ts +131 -0
- package/dist/solid/unstable/v2/index.d.ts.map +1 -0
- package/dist/solid/unstable/v2/index.js +114 -0
- package/dist/solid/unstable/v2/index.js.map +1 -0
- package/dist/solid/unstable/v2/layout-projection.d.ts +21 -0
- package/dist/solid/unstable/v2/layout-projection.d.ts.map +1 -0
- package/dist/solid/unstable/v2/layout-projection.js +18 -0
- package/dist/solid/unstable/v2/layout-projection.js.map +1 -0
- package/dist/solid/unstable/v2/layout.d.ts +47 -0
- package/dist/solid/unstable/v2/layout.d.ts.map +1 -0
- package/dist/solid/unstable/v2/layout.jsx +62 -0
- package/dist/solid/unstable/v2/layout.jsx.map +1 -0
- package/dist/solid/unstable/v2/lifecycle.d.ts +267 -0
- package/dist/solid/unstable/v2/lifecycle.d.ts.map +1 -0
- package/dist/solid/unstable/v2/lifecycle.js +457 -0
- package/dist/solid/unstable/v2/lifecycle.js.map +1 -0
- package/dist/solid/unstable/v2/live-value.d.ts +146 -0
- package/dist/solid/unstable/v2/live-value.d.ts.map +1 -0
- package/dist/solid/unstable/v2/live-value.js +235 -0
- package/dist/solid/unstable/v2/live-value.js.map +1 -0
- package/dist/solid/unstable/v2/presence-handle.d.ts +55 -0
- package/dist/solid/unstable/v2/presence-handle.d.ts.map +1 -0
- package/dist/solid/unstable/v2/presence-handle.js +119 -0
- package/dist/solid/unstable/v2/presence-handle.js.map +1 -0
- package/dist/solid/unstable/v2/presence-hooks.d.ts +51 -0
- package/dist/solid/unstable/v2/presence-hooks.d.ts.map +1 -0
- package/dist/solid/unstable/v2/presence-hooks.js +115 -0
- package/dist/solid/unstable/v2/presence-hooks.js.map +1 -0
- package/dist/solid/unstable/v2/presence.d.ts +89 -0
- package/dist/solid/unstable/v2/presence.d.ts.map +1 -0
- package/dist/solid/unstable/v2/presence.jsx +107 -0
- package/dist/solid/unstable/v2/presence.jsx.map +1 -0
- package/dist/solid/unstable/v2/press-sensor.d.ts +13 -0
- package/dist/solid/unstable/v2/press-sensor.d.ts.map +1 -0
- package/dist/solid/unstable/v2/press-sensor.js +23 -0
- package/dist/solid/unstable/v2/press-sensor.js.map +1 -0
- package/dist/solid/unstable/v2/provider.d.ts +239 -0
- package/dist/solid/unstable/v2/provider.d.ts.map +1 -0
- package/dist/solid/unstable/v2/provider.jsx +423 -0
- package/dist/solid/unstable/v2/provider.jsx.map +1 -0
- package/dist/solid/unstable/v2/reorder.d.ts +292 -0
- package/dist/solid/unstable/v2/reorder.d.ts.map +1 -0
- package/dist/solid/unstable/v2/reorder.jsx +525 -0
- package/dist/solid/unstable/v2/reorder.jsx.map +1 -0
- package/dist/solid/unstable/v2/sensors.d.ts +91 -0
- package/dist/solid/unstable/v2/sensors.d.ts.map +1 -0
- package/dist/solid/unstable/v2/sensors.js +124 -0
- package/dist/solid/unstable/v2/sensors.js.map +1 -0
- package/dist/solid/unstable/v2/solid-reactivity.d.ts +61 -0
- package/dist/solid/unstable/v2/solid-reactivity.d.ts.map +1 -0
- package/dist/solid/unstable/v2/solid-reactivity.js +62 -0
- package/dist/solid/unstable/v2/solid-reactivity.js.map +1 -0
- package/dist/solid/unstable/v2/variant-node.d.ts +51 -0
- package/dist/solid/unstable/v2/variant-node.d.ts.map +1 -0
- package/dist/solid/unstable/v2/variant-node.js +336 -0
- package/dist/solid/unstable/v2/variant-node.js.map +1 -0
- package/dist/solid/unstable/v2/w.d.ts +42 -0
- package/dist/solid/unstable/v2/w.d.ts.map +1 -0
- package/dist/solid/unstable/v2/w.jsx +22 -0
- package/dist/solid/unstable/v2/w.jsx.map +1 -0
- package/dist/solid/unstable/v2/waiters.d.ts +72 -0
- package/dist/solid/unstable/v2/waiters.d.ts.map +1 -0
- package/dist/solid/unstable/v2/waiters.js +175 -0
- package/dist/solid/unstable/v2/waiters.js.map +1 -0
- package/dist/solid/unstable/v2/ward.d.ts +393 -0
- package/dist/solid/unstable/v2/ward.d.ts.map +1 -0
- package/dist/solid/unstable/v2/ward.jsx +1475 -0
- package/dist/solid/unstable/v2/ward.jsx.map +1 -0
- package/dist/solid/unstable/v2/wardic-config.d.ts +68 -0
- package/dist/solid/unstable/v2/wardic-config.d.ts.map +1 -0
- package/dist/solid/unstable/v2/wardic-config.jsx +28 -0
- package/dist/solid/unstable/v2/wardic-config.jsx.map +1 -0
- package/dist/solid/unstable/v2/wardic.d.ts +28 -0
- package/dist/solid/unstable/v2/wardic.d.ts.map +1 -0
- package/dist/solid/unstable/v2/wardic.jsx +16 -0
- package/dist/solid/unstable/v2/wardic.jsx.map +1 -0
- package/dist/solid/variant-node.d.ts +32 -0
- package/dist/solid/variant-node.d.ts.map +1 -0
- package/dist/solid/variant-node.js +257 -0
- package/dist/solid/variant-node.js.map +1 -0
- package/dist/solid/variant-target.d.ts +102 -0
- package/dist/solid/variant-target.d.ts.map +1 -0
- package/dist/solid/variant-target.js +180 -0
- package/dist/solid/variant-target.js.map +1 -0
- package/dist/solid/variant-tree.d.ts +349 -0
- package/dist/solid/variant-tree.d.ts.map +1 -0
- package/dist/solid/variant-tree.js +358 -0
- package/dist/solid/variant-tree.js.map +1 -0
- package/dist/solid/variants.d.ts +21 -0
- package/dist/solid/variants.d.ts.map +1 -0
- package/dist/solid/variants.js +43 -0
- package/dist/solid/variants.js.map +1 -0
- package/dist/solid/w.d.ts +42 -0
- package/dist/solid/w.d.ts.map +1 -0
- package/dist/solid/w.jsx +23 -0
- package/dist/solid/w.jsx.map +1 -0
- package/dist/solid/ward-keys.d.ts +236 -0
- package/dist/solid/ward-keys.d.ts.map +1 -0
- package/dist/solid/ward-keys.js +2 -0
- package/dist/solid/ward-keys.js.map +1 -0
- package/dist/solid/wardic-component.d.ts +50 -0
- package/dist/solid/wardic-component.d.ts.map +1 -0
- package/dist/solid/wardic-component.js +74 -0
- package/dist/solid/wardic-component.js.map +1 -0
- package/dist/solid/wardic-config-value.d.ts +87 -0
- package/dist/solid/wardic-config-value.d.ts.map +1 -0
- package/dist/solid/wardic-config-value.js +106 -0
- package/dist/solid/wardic-config-value.js.map +1 -0
- package/dist/solid/wardic-config.d.ts +69 -0
- package/dist/solid/wardic-config.d.ts.map +1 -0
- package/dist/solid/wardic-config.jsx +30 -0
- package/dist/solid/wardic-config.jsx.map +1 -0
- package/dist/solid/wardic.d.ts +45 -0
- package/dist/solid/wardic.d.ts.map +1 -0
- package/dist/solid/wardic.jsx +31 -0
- package/dist/solid/wardic.jsx.map +1 -0
- package/package.json +98 -4
- package/src/animation-controls.ts +204 -0
- package/src/animation-frame.ts +32 -0
- package/src/appear.ts +804 -0
- package/src/arc.ts +34 -0
- package/src/bridge.ts +98 -0
- package/src/complete.ts +45 -0
- package/src/config.ts +805 -0
- package/src/create-animate.ts +41 -0
- package/src/create-ward.tsx +1271 -0
- package/src/cycle-index.ts +18 -0
- package/src/cycle.ts +34 -0
- package/src/directive.ts +87 -0
- package/src/drag-constraints.ts +103 -0
- package/src/drag-controls.ts +94 -0
- package/src/drag-samples.ts +54 -0
- package/src/drag-sensor.ts +46 -0
- package/src/drag-track.ts +937 -0
- package/src/drag-transition.ts +43 -0
- package/src/drag.ts +58 -0
- package/src/element-style.ts +112 -0
- package/src/element.tsx +400 -0
- package/src/feature-section.ts +33 -0
- package/src/feature.ts +342 -0
- package/src/features/all.ts +18 -0
- package/src/features/colors.ts +36 -0
- package/src/features/dom-animation.ts +15 -0
- package/src/features/dom-max.ts +11 -0
- package/src/features/drag.ts +30 -0
- package/src/features/focus.ts +17 -0
- package/src/features/hover.ts +17 -0
- package/src/features/in-view.ts +17 -0
- package/src/features/input.ts +42 -0
- package/src/features/keys.ts +89 -0
- package/src/features/layout.ts +54 -0
- package/src/features/pan.ts +17 -0
- package/src/features/press.ts +17 -0
- package/src/focus-sensor.ts +32 -0
- package/src/frame-time.ts +45 -0
- package/src/gesture-callbacks.ts +212 -0
- package/src/gesture-features.ts +35 -0
- package/src/gesture-info.ts +81 -0
- package/src/hover-sensor.ts +32 -0
- package/src/imperative.ts +782 -0
- package/src/index.ts +334 -0
- package/src/instant.ts +90 -0
- package/src/layout-group.ts +32 -0
- package/src/layout-member.ts +300 -0
- package/src/layout-projection.ts +28 -0
- package/src/layout.tsx +127 -0
- package/src/live-style.ts +449 -0
- package/src/live-value.ts +378 -0
- package/src/motion-props.ts +325 -0
- package/src/owner-scope.ts +31 -0
- package/src/page-point.ts +98 -0
- package/src/presence-controller.ts +1483 -0
- package/src/presence-record.ts +189 -0
- package/src/presence.tsx +269 -0
- package/src/press-sensor.ts +33 -0
- package/src/press.ts +40 -0
- package/src/provider.tsx +526 -0
- package/src/reactivity.ts +29 -0
- package/src/reorder-input.ts +53 -0
- package/src/reorder.tsx +703 -0
- package/src/retarget-legs.ts +1048 -0
- package/src/runtime.ts +388 -0
- package/src/sensors.ts +189 -0
- package/src/server-interpolators.ts +33 -0
- package/src/server.ts +21 -0
- package/src/solid-reactivity.ts +21 -0
- package/src/spine.ts +3385 -0
- package/src/stagger.ts +31 -0
- package/src/unstable/v2/bridge.ts +79 -0
- package/src/unstable/v2/complete.ts +47 -0
- package/src/unstable/v2/config-view.ts +156 -0
- package/src/unstable/v2/create-animate.ts +123 -0
- package/src/unstable/v2/cycle.ts +33 -0
- package/src/unstable/v2/drag-sensor.ts +44 -0
- package/src/unstable/v2/element.tsx +478 -0
- package/src/unstable/v2/feature-section.ts +32 -0
- package/src/unstable/v2/focus-sensor.ts +31 -0
- package/src/unstable/v2/hover-sensor.ts +30 -0
- package/src/unstable/v2/index.ts +270 -0
- package/src/unstable/v2/layout-projection.ts +27 -0
- package/src/unstable/v2/layout.tsx +89 -0
- package/src/unstable/v2/lifecycle.ts +612 -0
- package/src/unstable/v2/live-value.ts +414 -0
- package/src/unstable/v2/presence-handle.ts +159 -0
- package/src/unstable/v2/presence-hooks.ts +157 -0
- package/src/unstable/v2/presence.tsx +174 -0
- package/src/unstable/v2/press-sensor.ts +31 -0
- package/src/unstable/v2/provider.tsx +524 -0
- package/src/unstable/v2/reorder.tsx +880 -0
- package/src/unstable/v2/sensors.ts +169 -0
- package/src/unstable/v2/solid-reactivity.ts +69 -0
- package/src/unstable/v2/variant-node.ts +446 -0
- package/src/unstable/v2/w.tsx +49 -0
- package/src/unstable/v2/waiters.ts +212 -0
- package/src/unstable/v2/ward.tsx +2068 -0
- package/src/unstable/v2/wardic-config.tsx +84 -0
- package/src/unstable/v2/wardic.tsx +41 -0
- package/src/variant-node.ts +368 -0
- package/src/variant-target.ts +234 -0
- package/src/variant-tree.ts +638 -0
- package/src/variants.ts +47 -0
- package/src/w.tsx +59 -0
- package/src/ward-keys.ts +343 -0
- package/src/wardic-component.ts +96 -0
- package/src/wardic-config-value.ts +150 -0
- package/src/wardic-config.tsx +78 -0
- package/src/wardic.tsx +59 -0
|
@@ -0,0 +1,782 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **Imperative animation** (#433, CONTEXT.md; Motion's `useAnimate`), Solid-free: an **Animation
|
|
3
|
+
* scope**'s `animate`, the elements it animates, and the **Playback controls** it returns. Both
|
|
4
|
+
* bindings' `createAnimate()` build on it.
|
|
5
|
+
*
|
|
6
|
+
* - **A Wardic element** animates through its own spine, registered here while it's mounted: the
|
|
7
|
+
* call takes the keys it animates, which stay where it leaves them until the element's own target
|
|
8
|
+
* for them changes (the spine's `animate`, Motion's latest-wins).
|
|
9
|
+
* - **A plain element** animates through a spine of its own (#433's Q4), with no config, presence or
|
|
10
|
+
* layout node: it starts from the element's Own value (ADR-0022) and keeps its values for the next
|
|
11
|
+
* call, velocity included. It's in the gate only while it animates, so the gate keeps nothing of an
|
|
12
|
+
* element it isn't animating.
|
|
13
|
+
* - **The controls** are Motion's (`AnimationPlaybackControls`): awaitable, with `stop`, `cancel`,
|
|
14
|
+
* `complete`, `pause`, `play`, `speed`, `time` and `duration`, every element's legs run through
|
|
15
|
+
* one `Playback.Playhead`. Its `finished` resolves at a landing or `complete()`, never at a `stop()`
|
|
16
|
+
* or a `cancel()`, as Motion's.
|
|
17
|
+
* - **A sequence** (#433's PR 2, Motion's) is compiled by core's `Sequence` to each subject's
|
|
18
|
+
* Keyframes over the whole sequence, run on the same controls: each element animates as a call
|
|
19
|
+
* does, and a function Segment's value, from 0, is told to its callback each frame.
|
|
20
|
+
*
|
|
21
|
+
* @module
|
|
22
|
+
*/
|
|
23
|
+
import type * as DefaultTransition from "@wardic/core/DefaultTransition"
|
|
24
|
+
import * as Machine from "@wardic/core/Machine"
|
|
25
|
+
import * as Playback from "@wardic/core/Playback"
|
|
26
|
+
import * as ReducedMotion from "@wardic/core/ReducedMotion"
|
|
27
|
+
import type * as Values from "@wardic/core/Values"
|
|
28
|
+
import * as Sequence from "@wardic/core/Sequence"
|
|
29
|
+
import type * as FlushGate from "@wardic/dom/FlushGate"
|
|
30
|
+
import * as Report from "@wardic/dom/Report"
|
|
31
|
+
import * as Arr from "effect/Array"
|
|
32
|
+
import * as Bool from "effect/Boolean"
|
|
33
|
+
import * as Cause from "effect/Cause"
|
|
34
|
+
import * as Effect from "effect/Effect"
|
|
35
|
+
import * as Exit from "effect/Exit"
|
|
36
|
+
import type * as Fiber from "effect/Fiber"
|
|
37
|
+
import { constVoid, identity } from "effect/Function"
|
|
38
|
+
import * as Match from "effect/Match"
|
|
39
|
+
import * as Predicate from "effect/Predicate"
|
|
40
|
+
import * as Rec from "effect/Record"
|
|
41
|
+
import * as UndefinedOr from "effect/UndefinedOr"
|
|
42
|
+
import type { WardicKeyframes, WardicTargetValues, WardicTransition, WardicVariant } from "./config.ts"
|
|
43
|
+
import { filledStops, runOf } from "./retarget-legs.ts"
|
|
44
|
+
import type { WardicRuntime } from "./runtime.ts"
|
|
45
|
+
import { type ElementSpine, emptySnapshotOf, type ImperativeTrack, makeElementSpine, makeReuse, type Snapshot, startLinksOf } from "./spine.ts"
|
|
46
|
+
import { NO_VARIANT_STATE, resolveTarget } from "./variant-target.ts"
|
|
47
|
+
|
|
48
|
+
/** What an Imperative animation animates an element through: its spine's `animate`. */
|
|
49
|
+
type Animatable = Pick<ElementSpine, "animate">
|
|
50
|
+
|
|
51
|
+
/** Each mounted Wardic element's spine (Motion's `visualElementStore`). */
|
|
52
|
+
// Module state (#460, Q7): each Wardic element's animatable, held weakly by the element.
|
|
53
|
+
const wardicElements = new WeakMap<Element, Animatable>()
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Register a mounted Wardic element's spine for the Imperative animations of it (#433): until the
|
|
57
|
+
* returned function, which its unmount calls.
|
|
58
|
+
*/
|
|
59
|
+
export const registerAnimatable = (element: Element, spine: Animatable): (() => void) => {
|
|
60
|
+
wardicElements.set(element, spine)
|
|
61
|
+
return () => {
|
|
62
|
+
if (wardicElements.get(element) === spine) wardicElements.delete(element)
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** What a scope animates plain elements with: its provider's. */
|
|
67
|
+
export interface AnimateEnv {
|
|
68
|
+
readonly runtime: WardicRuntime
|
|
69
|
+
readonly gate: FlushGate.Shape
|
|
70
|
+
readonly reducedMotion: () => boolean
|
|
71
|
+
/**
|
|
72
|
+
* Whether its animations are skipped (#468): its scope's nearest `WardicConfig`'s, read as each
|
|
73
|
+
* starts, and handed to each element's animation in its transition, as Motion's `useAnimate` does.
|
|
74
|
+
*/
|
|
75
|
+
readonly skipAnimations: () => boolean
|
|
76
|
+
readonly positionalKeys: ReducedMotion.PositionalKeys["Service"]
|
|
77
|
+
readonly defaultTransition: DefaultTransition.DefaultTransition["Service"]
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** A plain element's spine (#433's Q4), its values, and how many of its animations run, which keep it in the gate. */
|
|
81
|
+
interface Plain {
|
|
82
|
+
readonly spine: ElementSpine
|
|
83
|
+
readonly snapshot: Snapshot
|
|
84
|
+
readonly id: string
|
|
85
|
+
running: number
|
|
86
|
+
unregister: () => void
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** Each gate's plain elements: a provider's own, kept while the element is. */
|
|
90
|
+
// Module state (#460, Q7): each gate's plain elements, held weakly by the gate.
|
|
91
|
+
const plainByGate = new WeakMap<FlushGate.Shape, WeakMap<Element, Plain>>()
|
|
92
|
+
|
|
93
|
+
/** The plain elements' gate ids, counted. */
|
|
94
|
+
// Module state (#460, Q7): an id counter, unique across every gate.
|
|
95
|
+
let plainIds = 0
|
|
96
|
+
|
|
97
|
+
/** No config: a plain element's. */
|
|
98
|
+
const NO_CONFIG = {}
|
|
99
|
+
|
|
100
|
+
/** `element`'s plain spine under `env`'s gate, made at its first animation. */
|
|
101
|
+
const plainOf = (env: AnimateEnv, element: Element): Plain => {
|
|
102
|
+
let byElement = plainByGate.get(env.gate)
|
|
103
|
+
if (Predicate.isUndefined(byElement)) {
|
|
104
|
+
byElement = new WeakMap()
|
|
105
|
+
plainByGate.set(env.gate, byElement)
|
|
106
|
+
}
|
|
107
|
+
const known = byElement.get(element)
|
|
108
|
+
if (Predicate.isNotUndefined(known)) return known
|
|
109
|
+
const el = element as HTMLElement
|
|
110
|
+
const id = `wardic-animate-${plainIds++}`
|
|
111
|
+
const snapshot: Snapshot = emptySnapshotOf({})
|
|
112
|
+
const spine = makeElementSpine({
|
|
113
|
+
runtime: env.runtime,
|
|
114
|
+
gate: env.gate,
|
|
115
|
+
id,
|
|
116
|
+
element: el,
|
|
117
|
+
tag: undefined,
|
|
118
|
+
config: () => NO_CONFIG,
|
|
119
|
+
parent: undefined,
|
|
120
|
+
canStart: undefined,
|
|
121
|
+
extraDelay: undefined,
|
|
122
|
+
onFrame: undefined,
|
|
123
|
+
reducedMotion: env.reducedMotion,
|
|
124
|
+
positionalKeys: env.positionalKeys,
|
|
125
|
+
defaultTransition: env.defaultTransition,
|
|
126
|
+
start: { initialValues: {}, initialLink: {}, startedLink: {}, quiet: false },
|
|
127
|
+
snapshot,
|
|
128
|
+
reuse: makeReuse(),
|
|
129
|
+
links: startLinksOf(el, undefined, undefined),
|
|
130
|
+
styleNow: undefined,
|
|
131
|
+
live: undefined,
|
|
132
|
+
presence: undefined,
|
|
133
|
+
projected: false,
|
|
134
|
+
dragAxis: undefined,
|
|
135
|
+
handoff: undefined,
|
|
136
|
+
})
|
|
137
|
+
const plain: Plain = { spine, snapshot, id, running: 0, unregister: constVoid }
|
|
138
|
+
byElement.set(element, plain)
|
|
139
|
+
return plain
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* `transition` with `skipAnimations` when its scope's animations are skipped (#468, Motion's
|
|
144
|
+
* `useAnimate`, which hands its config's to each animation): a Wardic element's own config can skip it
|
|
145
|
+
* too, and a plain element has none.
|
|
146
|
+
*/
|
|
147
|
+
const skippedIn = (env: AnimateEnv, transition: WardicTransition | undefined): WardicTransition | undefined => {
|
|
148
|
+
if (Bool.not(env.skipAnimations())) return transition
|
|
149
|
+
return { ...transition, skipAnimations: true } as WardicTransition
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* An element's animation of `target`: through its spine when it's a Wardic element's, else through its
|
|
154
|
+
* plain spine, in the gate while any of its animations runs.
|
|
155
|
+
*/
|
|
156
|
+
const trackOf = (env: AnimateEnv, element: Element, target: WardicVariant, given: WardicTransition | undefined, head: Playback.Playhead, settled: () => void): ImperativeTrack => {
|
|
157
|
+
const resolved = resolveTarget(target, undefined, undefined, NO_VARIANT_STATE)
|
|
158
|
+
const own = wardicElements.get(element)
|
|
159
|
+
const hooks = { settled, failed: constVoid }
|
|
160
|
+
const transition = skippedIn(env, given)
|
|
161
|
+
if (Predicate.isNotUndefined(own)) return own.animate(resolved, transition, head, hooks)
|
|
162
|
+
const plain = plainOf(env, element)
|
|
163
|
+
// In the gate while it runs; out once its last animation is done, after the flush of its last frame.
|
|
164
|
+
let live = false
|
|
165
|
+
const enter = (): void => {
|
|
166
|
+
if (live) return
|
|
167
|
+
live = true
|
|
168
|
+
// Back in the gate with every value it holds, so a transform it draws keeps the keys it isn't animating.
|
|
169
|
+
if (plain.running === 0) {
|
|
170
|
+
plain.unregister = env.gate.register(plain.id, { target: element })
|
|
171
|
+
if (Bool.not(Rec.isEmptyRecord(plain.snapshot.values))) env.gate.write(plain.id, plain.snapshot.values)
|
|
172
|
+
}
|
|
173
|
+
plain.running++
|
|
174
|
+
}
|
|
175
|
+
const leave = (): void => {
|
|
176
|
+
if (Bool.not(live)) return
|
|
177
|
+
live = false
|
|
178
|
+
plain.running--
|
|
179
|
+
if (plain.running === 0) env.gate.afterFlush(() => {
|
|
180
|
+
if (plain.running === 0) plain.unregister()
|
|
181
|
+
})
|
|
182
|
+
}
|
|
183
|
+
const track = plain.spine.animate(resolved, transition, head, {
|
|
184
|
+
settled: () => {
|
|
185
|
+
leave()
|
|
186
|
+
settled()
|
|
187
|
+
},
|
|
188
|
+
failed: () => leave(),
|
|
189
|
+
})
|
|
190
|
+
return {
|
|
191
|
+
run: () => {
|
|
192
|
+
enter()
|
|
193
|
+
track.run()
|
|
194
|
+
},
|
|
195
|
+
stop: () => {
|
|
196
|
+
track.stop()
|
|
197
|
+
leave()
|
|
198
|
+
},
|
|
199
|
+
cancel: () => {
|
|
200
|
+
enter()
|
|
201
|
+
track.cancel()
|
|
202
|
+
leave()
|
|
203
|
+
},
|
|
204
|
+
duration: track.duration,
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/** What `animate` animates: an element, a selector looked up inside the scope, or a list of elements. Motion's `ElementOrSelector`. */
|
|
209
|
+
export type WardicAnimationSubject = Element | string | ArrayLike<Element> | Iterable<Element> | null | undefined
|
|
210
|
+
|
|
211
|
+
/** A transition without its `delay`, each arm: `animate`'s and a Segment's take their own. */
|
|
212
|
+
type WithoutDelay = WardicTransition extends infer T ? (T extends unknown ? { readonly [K in keyof T as Exclude<K, "delay">]: T[K] } : never) : never
|
|
213
|
+
|
|
214
|
+
/** A `delay` that may be each element's (Motion's `delay(i, n)`; `stagger()` is #436). */
|
|
215
|
+
interface EachDelay {
|
|
216
|
+
readonly delay?: number | ((index: number, count: number) => number) | undefined
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* `animate`'s options: a transition, its `delay` a number, or a function of each element's index and
|
|
221
|
+
* their count, such as `stagger(0.05)`; and `onComplete`, called as it lands. Motion's.
|
|
222
|
+
*/
|
|
223
|
+
export type WardicAnimateOptions = WithoutDelay & EachDelay & {
|
|
224
|
+
readonly onComplete?: (() => void) | undefined
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/** The elements of `subject`: a selector's inside `scope`, else the page's. */
|
|
228
|
+
const subjectsOf = (subject: WardicAnimationSubject, scope: Element | undefined): ReadonlyArray<Element> => {
|
|
229
|
+
if (Predicate.isNullish(subject)) return []
|
|
230
|
+
if (Predicate.isString(subject)) return Arr.fromIterable(UndefinedOr.match(scope, { onUndefined: () => document, onDefined: (el): ParentNode => el }).querySelectorAll(subject))
|
|
231
|
+
if (Predicate.hasProperty(subject, "nodeType")) return [subject as Element]
|
|
232
|
+
// A list's missing members left out, as Motion's.
|
|
233
|
+
if (Predicate.isIterable(subject)) return Arr.filter(Arr.fromIterable(subject), Predicate.isNotNullish)
|
|
234
|
+
const list = subject as ArrayLike<Element>
|
|
235
|
+
return Arr.filter(Arr.makeBy(list.length, (i) => list[i] as Element), Predicate.isNotNullish)
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/** Each element's transition: its `delay` worked out for it (Motion's `delay(i, n)`). */
|
|
239
|
+
const transitionFor = (options: WardicAnimateOptions | undefined, index: number, count: number): WardicTransition | undefined =>
|
|
240
|
+
UndefinedOr.map(options, (given) => {
|
|
241
|
+
const { delay, onComplete: _onComplete, ...rest } = given as Readonly<Record<string, unknown>>
|
|
242
|
+
if (Predicate.isFunction(delay)) return { ...rest, delay: (delay as (index: number, count: number) => number)(index, count) } as WardicTransition
|
|
243
|
+
if (Predicate.isUndefined(delay)) return rest as WardicTransition
|
|
244
|
+
return { ...rest, delay } as WardicTransition
|
|
245
|
+
})
|
|
246
|
+
|
|
247
|
+
/** Where an animation is: `"idle"`, `"running"`, `"paused"` or `"finished"`. Motion's `AnimationPlayState`. */
|
|
248
|
+
export type WardicPlayState = "idle" | "running" | "paused" | "finished"
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* What `animate` returns: an animation's controls, and a promise of its landing, so it can be awaited.
|
|
252
|
+
* Motion's `AnimationPlaybackControls`.
|
|
253
|
+
*/
|
|
254
|
+
// #433: every element's legs run through one Playhead.
|
|
255
|
+
export interface WardicPlaybackControls extends PromiseLike<void> {
|
|
256
|
+
/** Seconds played, a delay included. Set, it seeks: each key starts again there, holding while paused. */
|
|
257
|
+
time: number
|
|
258
|
+
/** How fast it plays: 1 as given, 2 twice as fast, 0 held, below 0 backwards. */
|
|
259
|
+
speed: number
|
|
260
|
+
/** How long it runs, in seconds: its longest element's longest key, a spring's to rest. */
|
|
261
|
+
readonly duration: number
|
|
262
|
+
readonly state: WardicPlayState
|
|
263
|
+
/** Resolves when it lands, or at `complete()`; never at `stop()` or `cancel()`, as Motion's. */
|
|
264
|
+
readonly finished: Promise<void>
|
|
265
|
+
/** Play it on: from where it's paused, or again from its start once it's finished or cancelled. Not after `stop()`. */
|
|
266
|
+
readonly play: () => void
|
|
267
|
+
/** Hold it where it is. */
|
|
268
|
+
readonly pause: () => void
|
|
269
|
+
/** End it where it is, for good: its keys stay there. */
|
|
270
|
+
readonly stop: () => void
|
|
271
|
+
/** End it, and put its keys back where it started them. */
|
|
272
|
+
readonly cancel: () => void
|
|
273
|
+
/** Go to its end at once, and finish. */
|
|
274
|
+
readonly complete: () => void
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/** What a scope hears of its animations: each one's start and its end, however it ended. */
|
|
278
|
+
export interface AnimationWatch {
|
|
279
|
+
readonly started: (controls: WardicPlaybackControls) => void
|
|
280
|
+
/** It's no longer in flight: `landed` when it finished. */
|
|
281
|
+
readonly ended: (controls: WardicPlaybackControls, landed: boolean) => void
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/** Playback controls over `tracks`, all run through `head`, started now. */
|
|
285
|
+
const controlsOf = (tracks: ReadonlyArray<ImperativeTrack>, head: Playback.Playhead, watch: AnimationWatch, onComplete: (() => void) | undefined): {
|
|
286
|
+
readonly controls: WardicPlaybackControls
|
|
287
|
+
readonly settledOne: () => void
|
|
288
|
+
} => {
|
|
289
|
+
let state: WardicPlayState = "running"
|
|
290
|
+
let stopped = false
|
|
291
|
+
let landed = 0
|
|
292
|
+
let resolve: (() => void) | undefined
|
|
293
|
+
let finished: Promise<void> | undefined
|
|
294
|
+
let isResolved = false
|
|
295
|
+
let duration: number | undefined
|
|
296
|
+
const durationNow = (): number => {
|
|
297
|
+
if (Predicate.isUndefined(duration)) duration = Arr.reduce(tracks, 0, (longest, track) => Math.max(longest, track.duration()))
|
|
298
|
+
return duration
|
|
299
|
+
}
|
|
300
|
+
const runAll = (): void => {
|
|
301
|
+
landed = 0
|
|
302
|
+
Arr.forEach(tracks, (track) => track.run())
|
|
303
|
+
}
|
|
304
|
+
const fresh = (): void => {
|
|
305
|
+
finished = undefined
|
|
306
|
+
resolve = undefined
|
|
307
|
+
isResolved = false
|
|
308
|
+
}
|
|
309
|
+
const end = (how: WardicPlayState, landedNow: boolean): void => {
|
|
310
|
+
const was = state
|
|
311
|
+
state = how
|
|
312
|
+
if (Bool.or(was === "running", was === "paused")) watch.ended(controls, landedNow)
|
|
313
|
+
}
|
|
314
|
+
const restart = (): void => {
|
|
315
|
+
const was = state
|
|
316
|
+
state = "running"
|
|
317
|
+
if (Bool.or(was === "finished", was === "idle")) watch.started(controls)
|
|
318
|
+
}
|
|
319
|
+
const controls: WardicPlaybackControls = {
|
|
320
|
+
get time() {
|
|
321
|
+
return head.time
|
|
322
|
+
},
|
|
323
|
+
set time(at: number) {
|
|
324
|
+
Playback.seek(head, at)
|
|
325
|
+
// A seek of one that isn't running holds where it goes, as Motion's.
|
|
326
|
+
if (state !== "running") {
|
|
327
|
+
Playback.pause(head)
|
|
328
|
+
if (Bool.or(state === "finished", state === "idle")) {
|
|
329
|
+
fresh()
|
|
330
|
+
watch.started(controls)
|
|
331
|
+
}
|
|
332
|
+
state = "paused"
|
|
333
|
+
}
|
|
334
|
+
runAll()
|
|
335
|
+
},
|
|
336
|
+
get speed() {
|
|
337
|
+
return head.speed
|
|
338
|
+
},
|
|
339
|
+
set speed(speed: number) {
|
|
340
|
+
Playback.setSpeed(head, speed)
|
|
341
|
+
},
|
|
342
|
+
get duration() {
|
|
343
|
+
return durationNow()
|
|
344
|
+
},
|
|
345
|
+
get state() {
|
|
346
|
+
return state
|
|
347
|
+
},
|
|
348
|
+
get finished() {
|
|
349
|
+
if (Predicate.isUndefined(finished)) {
|
|
350
|
+
finished = Bool.match(isResolved, {
|
|
351
|
+
onTrue: () => Promise.resolve(),
|
|
352
|
+
onFalse: () =>
|
|
353
|
+
new Promise<void>((done) => {
|
|
354
|
+
resolve = done
|
|
355
|
+
}),
|
|
356
|
+
})
|
|
357
|
+
}
|
|
358
|
+
return finished
|
|
359
|
+
},
|
|
360
|
+
then: (onResolve, onReject) => controls.finished.then(onResolve, onReject),
|
|
361
|
+
play: () => {
|
|
362
|
+
if (stopped) return
|
|
363
|
+
if (state === "paused") {
|
|
364
|
+
Playback.play(head)
|
|
365
|
+
state = "running"
|
|
366
|
+
return
|
|
367
|
+
}
|
|
368
|
+
if (state === "running") return
|
|
369
|
+
// Again from its start: its end when it plays backwards.
|
|
370
|
+
fresh()
|
|
371
|
+
Playback.play(head)
|
|
372
|
+
Playback.seek(head, Bool.match(head.speed < 0, { onTrue: durationNow, onFalse: () => 0 }))
|
|
373
|
+
restart()
|
|
374
|
+
runAll()
|
|
375
|
+
},
|
|
376
|
+
pause: () => {
|
|
377
|
+
if (stopped) return
|
|
378
|
+
Playback.pause(head)
|
|
379
|
+
if (state === "running") state = "paused"
|
|
380
|
+
},
|
|
381
|
+
stop: () => {
|
|
382
|
+
stopped = true
|
|
383
|
+
Arr.forEach(tracks, (track) => track.stop())
|
|
384
|
+
end("idle", false)
|
|
385
|
+
},
|
|
386
|
+
cancel: () => {
|
|
387
|
+
Arr.forEach(tracks, (track) => track.cancel())
|
|
388
|
+
Playback.seek(head, 0)
|
|
389
|
+
end("idle", false)
|
|
390
|
+
},
|
|
391
|
+
complete: () => {
|
|
392
|
+
if (stopped) return
|
|
393
|
+
if (state !== "running") restart()
|
|
394
|
+
Playback.play(head)
|
|
395
|
+
Playback.seek(head, durationNow())
|
|
396
|
+
runAll()
|
|
397
|
+
},
|
|
398
|
+
}
|
|
399
|
+
// Each element's legs landed: the last lands the animation.
|
|
400
|
+
const settledOne = (): void => {
|
|
401
|
+
landed++
|
|
402
|
+
if (landed < tracks.length) return
|
|
403
|
+
isResolved = true
|
|
404
|
+
UndefinedOr.map(resolve, (done) => done())
|
|
405
|
+
UndefinedOr.map(onComplete, (complete) => complete())
|
|
406
|
+
end("finished", true)
|
|
407
|
+
}
|
|
408
|
+
return { controls, settledOne }
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/** An animation of no element: finished at once (a server's, or a subject that matched none). */
|
|
412
|
+
const finishedControls = (): WardicPlaybackControls => {
|
|
413
|
+
const done = Promise.resolve()
|
|
414
|
+
return {
|
|
415
|
+
time: 0,
|
|
416
|
+
speed: 1,
|
|
417
|
+
duration: 0,
|
|
418
|
+
state: "finished",
|
|
419
|
+
finished: done,
|
|
420
|
+
then: (onResolve, onReject) => done.then(onResolve, onReject),
|
|
421
|
+
play: constVoid,
|
|
422
|
+
pause: constVoid,
|
|
423
|
+
stop: constVoid,
|
|
424
|
+
cancel: constVoid,
|
|
425
|
+
complete: constVoid,
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/**
|
|
430
|
+
* Where a Segment starts in a sequence: seconds in, `1.5`; after or before the end of the Segment
|
|
431
|
+
* before, `"+0.5"` or `"-0.5"`; at its start, `"<"`, or around it, `"<+0.5"` or `"<-0.5"`; or a label's
|
|
432
|
+
* name. Motion's `SequenceTime`.
|
|
433
|
+
*/
|
|
434
|
+
export type WardicSequenceTime = number | "<" | `+${number}` | `-${number}` | `<+${number}` | `<-${number}` | (string & {})
|
|
435
|
+
|
|
436
|
+
/** A label in a sequence: a name for where the Segment before ends, or `{ name, at }` for a time of its own. Motion's. */
|
|
437
|
+
export type WardicSequenceLabel = string | { readonly name: string; readonly at: WardicSequenceTime }
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* A Segment's options: a transition, with a value's own entries laid over it; its `delay`, a number or
|
|
441
|
+
* a function of each element's index and count, such as `stagger(0.05)`; and `at`, where it starts. A
|
|
442
|
+
* spring through two stops or fewer plays as an easing over its time to rest. Motion's.
|
|
443
|
+
*/
|
|
444
|
+
export type WardicSegmentOptions = WithoutDelay & EachDelay & {
|
|
445
|
+
readonly at?: WardicSequenceTime | undefined
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/** A Segment's values: each a value or a list of keyframes, as a target's. */
|
|
449
|
+
export type WardicSegmentTarget = Omit<WardicTargetValues, "transition">
|
|
450
|
+
|
|
451
|
+
/** A Segment of elements, `[subject, target, options?]`: an element, a selector inside the scope, or a list. Motion's. */
|
|
452
|
+
export type WardicElementSegment =
|
|
453
|
+
| readonly [subject: WardicAnimationSubject, target: WardicSegmentTarget]
|
|
454
|
+
| readonly [subject: WardicAnimationSubject, target: WardicSegmentTarget, options: WardicSegmentOptions]
|
|
455
|
+
|
|
456
|
+
/**
|
|
457
|
+
* A function Segment, `[callback, value?, options?]`: its callback is given a value each frame, from 0
|
|
458
|
+
* to 1 unless it gives its own stops, for what isn't an element's style. Motion's, in place of its
|
|
459
|
+
* motion value Segments.
|
|
460
|
+
*/
|
|
461
|
+
export type WardicFunctionSegment =
|
|
462
|
+
| readonly [callback: (value: number) => void]
|
|
463
|
+
| readonly [callback: (value: number) => void, options: WardicSegmentOptions]
|
|
464
|
+
| readonly [callback: (value: number) => void, value: number | WardicKeyframes<number>, options: WardicSegmentOptions]
|
|
465
|
+
| readonly [callback: (value: string) => void, value: string | WardicKeyframes<string>, options: WardicSegmentOptions]
|
|
466
|
+
|
|
467
|
+
/** One step of a sequence: a label, a Segment of elements, or a function Segment. */
|
|
468
|
+
export type WardicSegment = WardicSequenceLabel | WardicElementSegment | WardicFunctionSegment
|
|
469
|
+
|
|
470
|
+
/**
|
|
471
|
+
* A sequence: Segments played one after another, unless an `at` says where one starts, and labels to
|
|
472
|
+
* start them at. `animate(sequence, options)` plays it. Motion's `AnimationSequence`.
|
|
473
|
+
*
|
|
474
|
+
* @example
|
|
475
|
+
* animate([
|
|
476
|
+
* ["ul", { opacity: 1 }],
|
|
477
|
+
* ["li", { x: [-20, 0] }, { delay: stagger(0.05), at: "-0.1" }],
|
|
478
|
+
* ])
|
|
479
|
+
* @see https://wardic.dev/reference/solid/animation/sequences
|
|
480
|
+
*/
|
|
481
|
+
// #433's PR 2.
|
|
482
|
+
export type WardicAnimationSequence = ReadonlyArray<WardicSegment>
|
|
483
|
+
|
|
484
|
+
/**
|
|
485
|
+
* A sequence's options: `duration`, the whole sequence scaled to it; `delay`; `repeat`, `repeatType`
|
|
486
|
+
* and `repeatDelay`; `defaultTransition`, each Segment's when it gives none (a 0.3 s `easeOut` tween
|
|
487
|
+
* otherwise); and `onComplete`, called as it lands. Motion's `SequenceOptions`.
|
|
488
|
+
*/
|
|
489
|
+
export interface WardicSequenceOptions {
|
|
490
|
+
readonly duration?: number | undefined
|
|
491
|
+
readonly delay?: number | undefined
|
|
492
|
+
readonly repeat?: number | undefined
|
|
493
|
+
readonly repeatType?: "loop" | "reverse" | "mirror" | undefined
|
|
494
|
+
readonly repeatDelay?: number | undefined
|
|
495
|
+
readonly defaultTransition?: WardicTransition | undefined
|
|
496
|
+
readonly onComplete?: (() => void) | undefined
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
/**
|
|
500
|
+
* A scope's `animate`: `animate(subject, target, options?)` animates the subject's elements to
|
|
501
|
+
* `target`, and `animate(sequence, options?)` plays a sequence. Either returns its playback controls.
|
|
502
|
+
* Motion's `animate`, as `useAnimate` gives it.
|
|
503
|
+
*/
|
|
504
|
+
// #433: through one Playhead.
|
|
505
|
+
export interface WardicAnimate {
|
|
506
|
+
(subject: WardicAnimationSubject, target: WardicVariant, options?: WardicAnimateOptions): WardicPlaybackControls
|
|
507
|
+
(sequence: WardicAnimationSequence, options?: WardicSequenceOptions): WardicPlaybackControls
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* An **Animation scope**'s `animate` (#433): selectors looked up inside `scope()`, each animation
|
|
512
|
+
* told to `watch` as it starts and ends. Every element's legs start in the call, on the loop by
|
|
513
|
+
* the end of its task.
|
|
514
|
+
*/
|
|
515
|
+
export const scopedAnimate = (env: AnimateEnv, scope: () => Element | undefined, watch: AnimationWatch): WardicAnimate =>
|
|
516
|
+
((first: WardicAnimationSubject | WardicAnimationSequence, second?: WardicVariant | WardicSequenceOptions, third?: WardicAnimateOptions): WardicPlaybackControls => {
|
|
517
|
+
if (isSequence(first)) return sequenceOf(env, scope(), watch, first, second as WardicSequenceOptions | undefined)
|
|
518
|
+
const elements = subjectsOf(first as WardicAnimationSubject, scope())
|
|
519
|
+
const target = second as WardicVariant
|
|
520
|
+
return started(watch, elements.length, UndefinedOr.map(third, (given) => given.onComplete), (head, settled) =>
|
|
521
|
+
Arr.map(elements, (element, index) => trackOf(env, element, target, transitionFor(third, index, elements.length), head, settled)))
|
|
522
|
+
}) as WardicAnimate
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* An animation of `count` tracks started (#433): its controls over them, through one Playhead, told
|
|
526
|
+
* to `watch`, each track run. Finished at once with none.
|
|
527
|
+
*/
|
|
528
|
+
const started = (
|
|
529
|
+
watch: AnimationWatch,
|
|
530
|
+
count: number,
|
|
531
|
+
onComplete: (() => void) | undefined,
|
|
532
|
+
tracksOf: (head: Playback.Playhead, settled: () => void) => ReadonlyArray<ImperativeTrack>,
|
|
533
|
+
): WardicPlaybackControls => {
|
|
534
|
+
if (count === 0) return finishedControls()
|
|
535
|
+
const head = Playback.make()
|
|
536
|
+
let settledOne = constVoid
|
|
537
|
+
const tracks = tracksOf(head, () => settledOne())
|
|
538
|
+
const made = controlsOf(tracks, head, watch, onComplete)
|
|
539
|
+
settledOne = made.settledOne
|
|
540
|
+
watch.started(made.controls)
|
|
541
|
+
Arr.forEach(tracks, (track) => track.run())
|
|
542
|
+
return made.controls
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
/** A server's `animate`: nothing to animate. */
|
|
546
|
+
export const serverAnimate: WardicAnimate = () => finishedControls()
|
|
547
|
+
|
|
548
|
+
// --- Sequences (#433's PR 2) ------------------------------------------------------------------
|
|
549
|
+
|
|
550
|
+
/** Whether `animate` was given a sequence (Motion's `isSequence`): a list with a Segment in it. */
|
|
551
|
+
const isSequence = (given: unknown): given is WardicAnimationSequence =>
|
|
552
|
+
Bool.match(Arr.isArray(given), { onTrue: () => Arr.some(given as ReadonlyArray<unknown>, Arr.isArray), onFalse: () => false })
|
|
553
|
+
|
|
554
|
+
/** A function Segment's value (Motion's motion value): its own subject, its callback told each frame. */
|
|
555
|
+
interface Callback {
|
|
556
|
+
readonly call: (value: number | string) => void
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
/** What a sequence animates: elements, and function Segments' values. */
|
|
560
|
+
type Subject = Element | Callback
|
|
561
|
+
|
|
562
|
+
/** Whether a subject is a function Segment's value. */
|
|
563
|
+
const isCallback = (subject: Subject): subject is Callback => Predicate.hasProperty(subject, "call")
|
|
564
|
+
|
|
565
|
+
/** The key a function Segment's value animates under. */
|
|
566
|
+
const VALUE = "value"
|
|
567
|
+
|
|
568
|
+
/** A function Segment's stops with none given (Motion's). */
|
|
569
|
+
const ZERO_TO_ONE: ReadonlyArray<number> = [0, 1]
|
|
570
|
+
|
|
571
|
+
/** No fields. */
|
|
572
|
+
const NO_FIELDS: Readonly<Record<string, unknown>> = {}
|
|
573
|
+
|
|
574
|
+
/**
|
|
575
|
+
* What a Segment's transition doesn't take from the sequence's `defaultTransition` (Motion's): its
|
|
576
|
+
* delay, times and repeat, which are each Segment's own, and a value's own transitions.
|
|
577
|
+
*/
|
|
578
|
+
const PLACING: ReadonlySet<string> = new Set(["delay", "times", "repeat", "repeatType", "repeatDelay", "reverse", "at"])
|
|
579
|
+
|
|
580
|
+
/** A Segment's default transition (Motion's): a 0.3 s `easeOut` tween. */
|
|
581
|
+
const SEGMENT_TWEEN: Sequence.Transition = { type: "tween" }
|
|
582
|
+
|
|
583
|
+
/** The fields of a sequence's options laid over each key's animation: `duration`, `delay` and the repeat. */
|
|
584
|
+
const WHOLE = ["duration", "delay", "repeat", "repeatType", "repeatDelay"] as const
|
|
585
|
+
|
|
586
|
+
/**
|
|
587
|
+
* The fields of a sequence's `defaultTransition` laid over each key's animation, under its own
|
|
588
|
+
* options' (Motion's): its delay and repeat. Its `duration` is a Segment's, never the sequence's.
|
|
589
|
+
*/
|
|
590
|
+
const WHOLE_DEFAULTS = ["delay", "repeat", "repeatType", "repeatDelay"] as const
|
|
591
|
+
|
|
592
|
+
/** `fields`' `keys`, those it has. */
|
|
593
|
+
const picked = (fields: Readonly<Record<string, unknown>>, keys: ReadonlyArray<string>): Readonly<Record<string, unknown>> =>
|
|
594
|
+
Rec.filter(fields, (value, key) => Bool.and(Arr.contains(keys, key), Predicate.isNotUndefined(value)))
|
|
595
|
+
|
|
596
|
+
/**
|
|
597
|
+
* `key`'s transition in a Segment (Motion's `getValueTransition` for sequences): the Segment's,
|
|
598
|
+
* the value's own laid over it, over the sequence's `defaultTransition` less its placing; a spring
|
|
599
|
+
* or a tween as Wardic's transitions are (ADR-0051), Motion's 0.3 s `easeOut` tween when it defines
|
|
600
|
+
* neither; its `delay` kept as given, each element's when it's a function.
|
|
601
|
+
*/
|
|
602
|
+
const segmentTransitionOf = (options: WardicSegmentOptions | undefined, key: string, defaults: WardicTransition | undefined): Sequence.Transition => {
|
|
603
|
+
const own = UndefinedOr.match(options as Readonly<Record<string, unknown>> | undefined, {
|
|
604
|
+
onUndefined: () => NO_FIELDS,
|
|
605
|
+
onDefined: (given) => ({ ...given, ...UndefinedOr.match(given[key], { onUndefined: () => NO_FIELDS, onDefined: (entry) => Bool.match(Predicate.isObject(entry), { onTrue: () => entry as Readonly<Record<string, unknown>>, onFalse: () => NO_FIELDS }) }) }),
|
|
606
|
+
})
|
|
607
|
+
const base = UndefinedOr.match(defaults as Readonly<Record<string, unknown>> | undefined, {
|
|
608
|
+
onUndefined: () => NO_FIELDS,
|
|
609
|
+
onDefined: (given) => Rec.filter(given, (_, field) => Bool.not(PLACING.has(field))),
|
|
610
|
+
})
|
|
611
|
+
const { delay, at: _at, ...fields } = own
|
|
612
|
+
// An inertia (#435) isn't a sequence's: a Segment's time is placed on its timeline, and a glide has none to place.
|
|
613
|
+
const run = UndefinedOr.match(runOf({ ...base, ...fields } as WardicTransition), {
|
|
614
|
+
onUndefined: () => SEGMENT_TWEEN,
|
|
615
|
+
onDefined: (made) => Bool.match(made.type === "inertia", { onTrue: () => SEGMENT_TWEEN, onFalse: () => made as Sequence.Transition }),
|
|
616
|
+
})
|
|
617
|
+
return Bool.match(Predicate.isUndefined(delay), { onTrue: () => run, onFalse: () => ({ ...run, delay }) as Sequence.Transition })
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
/** Whether a Segment's value is one: a number, a string, `null` or Keyframes. */
|
|
621
|
+
const isSegmentValue: Predicate.Predicate<unknown> = Predicate.or(Predicate.or(Predicate.isNumber, Predicate.isString), Predicate.or(Predicate.isNull, Arr.isArray))
|
|
622
|
+
|
|
623
|
+
/** A Segment's values: those that are a value, `null` or Keyframes. */
|
|
624
|
+
const segmentValuesOf = (target: WardicSegmentTarget): Readonly<Record<string, Sequence.Stop | ReadonlyArray<Sequence.Stop>>> =>
|
|
625
|
+
Rec.filter(target as Readonly<Record<string, unknown>>, isSegmentValue) as Readonly<Record<string, Sequence.Stop | ReadonlyArray<Sequence.Stop>>>
|
|
626
|
+
|
|
627
|
+
/** Each of `values`' keys' transition in a Segment. */
|
|
628
|
+
const segmentTransitionsOf = (values: Readonly<Record<string, unknown>>, options: WardicSegmentOptions | undefined, defaults: WardicTransition | undefined): Readonly<Record<string, Sequence.Transition>> =>
|
|
629
|
+
Rec.map(values, (_, key) => segmentTransitionOf(options, key, defaults))
|
|
630
|
+
|
|
631
|
+
/** A Segment's `at`, when it gives one. */
|
|
632
|
+
const atOf = (options: WardicSegmentOptions | undefined): Sequence.Time | undefined => UndefinedOr.map(options, (given) => given.at)
|
|
633
|
+
|
|
634
|
+
/**
|
|
635
|
+
* A sequence's steps for core (#433): labels as they are; an element Segment's elements (a selector
|
|
636
|
+
* looked up once a sequence, inside `scope`), values and each value's transition; a function
|
|
637
|
+
* Segment's own value, from 0 to 1 unless it gives its stops.
|
|
638
|
+
*/
|
|
639
|
+
const stepsOf = (sequence: WardicAnimationSequence, scope: Element | undefined, defaults: WardicTransition | undefined): ReadonlyArray<Sequence.Step<Subject>> => {
|
|
640
|
+
const selected = new Map<string, ReadonlyArray<Element>>()
|
|
641
|
+
const elementsOf = (subject: WardicAnimationSubject): ReadonlyArray<Element> => {
|
|
642
|
+
if (Bool.not(Predicate.isString(subject))) return subjectsOf(subject, scope)
|
|
643
|
+
const selector = subject as string
|
|
644
|
+
const known = selected.get(selector)
|
|
645
|
+
if (Predicate.isNotUndefined(known)) return known
|
|
646
|
+
const found = subjectsOf(selector, scope)
|
|
647
|
+
selected.set(selector, found)
|
|
648
|
+
return found
|
|
649
|
+
}
|
|
650
|
+
return Arr.map(sequence, (segment): Sequence.Step<Subject> => {
|
|
651
|
+
if (Predicate.isString(segment)) return segment
|
|
652
|
+
if (Bool.not(Arr.isArray(segment))) return segment as { readonly name: string; readonly at: Sequence.Time }
|
|
653
|
+
const parts = segment as ReadonlyArray<unknown>
|
|
654
|
+
if (Predicate.isFunction(parts[0])) {
|
|
655
|
+
const call = parts[0] as (value: number | string) => void
|
|
656
|
+
const three = parts.length === 3
|
|
657
|
+
const given = Bool.match(three, { onTrue: () => parts[1] as Sequence.Stop | ReadonlyArray<Sequence.Stop>, onFalse: () => ZERO_TO_ONE })
|
|
658
|
+
const options = Bool.match(three, { onTrue: () => parts[2], onFalse: () => parts[1] }) as WardicSegmentOptions | undefined
|
|
659
|
+
const target = { [VALUE]: given }
|
|
660
|
+
return { subjects: [{ call }], target, transitions: segmentTransitionsOf(target, options, defaults), at: atOf(options) }
|
|
661
|
+
}
|
|
662
|
+
const [subject, values, options] = segment as WardicElementSegment
|
|
663
|
+
const target = segmentValuesOf(values)
|
|
664
|
+
return { subjects: elementsOf(subject), target, transitions: segmentTransitionsOf(target, options, defaults), at: atOf(options) }
|
|
665
|
+
})
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
/**
|
|
669
|
+
* A function Segment's value animated (#433): its stops, a first `null` 0, through the
|
|
670
|
+
* Interpolators on its tween over the sequence, each frame told to its callback. Cancelled, the
|
|
671
|
+
* callback hears its first stop again, as Motion's motion value is set back.
|
|
672
|
+
*/
|
|
673
|
+
const callbackTrackOf = (env: AnimateEnv, callback: Callback, animation: Sequence.Animation, head: Playback.Playhead, settled: () => void): ImperativeTrack => {
|
|
674
|
+
const stops = filledStops(UndefinedOr.getOrThrow(animation.keyframes[VALUE]), 0)
|
|
675
|
+
const options = UndefinedOr.getOrThrow(animation.transition[VALUE])
|
|
676
|
+
// Skipped (#468): its callback told the value it would end on, on the first tick.
|
|
677
|
+
const machine = Bool.match(env.skipAnimations(), {
|
|
678
|
+
onTrue: () => Effect.succeed(ReducedMotion.snap<Values.Values>({ [VALUE]: UndefinedOr.getOrThrow(stops[0]) }, { [VALUE]: ReducedMotion.endOf(UndefinedOr.getOrThrow(stops[0]), UndefinedOr.getOrThrow(stops[stops.length - 1]), options) })),
|
|
679
|
+
onFalse: () => Machine.keyframesValues({ [VALUE]: stops }, options),
|
|
680
|
+
})
|
|
681
|
+
let fiber: Fiber.Fiber<unknown> | undefined
|
|
682
|
+
const end = (): void => {
|
|
683
|
+
if (Predicate.isUndefined(fiber)) return
|
|
684
|
+
const running = fiber
|
|
685
|
+
fiber = undefined
|
|
686
|
+
// Nothing waits on its end: interrupted here, not by a fiber forked for it (#618, L2).
|
|
687
|
+
if (Predicate.isUndefined(running.pollUnsafe())) running.interruptUnsafe()
|
|
688
|
+
}
|
|
689
|
+
const landed = (exit: Exit.Exit<unknown>): Effect.Effect<void> =>
|
|
690
|
+
Exit.match(exit, {
|
|
691
|
+
onSuccess: () => Effect.sync(settled),
|
|
692
|
+
onFailure: (cause) => Bool.match(Cause.hasInterruptsOnly(cause), { onTrue: () => Effect.void, onFalse: () => Report.failure("wardic.animate: a function Segment failed", cause) }),
|
|
693
|
+
})
|
|
694
|
+
const run = (): void => {
|
|
695
|
+
end()
|
|
696
|
+
fiber = env.runtime.runFork(
|
|
697
|
+
machine.pipe(
|
|
698
|
+
Effect.map(Playback.drive(head)),
|
|
699
|
+
Effect.flatMap(Machine.run((frame) => {
|
|
700
|
+
callback.call(UndefinedOr.getOrThrow(frame.value[VALUE]))
|
|
701
|
+
return undefined
|
|
702
|
+
})),
|
|
703
|
+
Effect.onExit(landed),
|
|
704
|
+
),
|
|
705
|
+
)
|
|
706
|
+
}
|
|
707
|
+
return {
|
|
708
|
+
run,
|
|
709
|
+
stop: end,
|
|
710
|
+
cancel: () => {
|
|
711
|
+
end()
|
|
712
|
+
callback.call(UndefinedOr.getOrThrow(stops[0]))
|
|
713
|
+
},
|
|
714
|
+
duration: () => Machine.durationOf(env.runtime.runSync(machine)),
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
/**
|
|
719
|
+
* A sequence started (#433's PR 2, Motion's): compiled by core's `Sequence`, each element animated
|
|
720
|
+
* through its Keyframes on its spine or its plain one, as a call animates it, and each function
|
|
721
|
+
* Segment's value told to its callback; one Playhead for all, so it seeks, pauses and awaits as one.
|
|
722
|
+
*/
|
|
723
|
+
const sequenceOf = (env: AnimateEnv, scope: Element | undefined, watch: AnimationWatch, sequence: WardicAnimationSequence, options: WardicSequenceOptions | undefined): WardicPlaybackControls => {
|
|
724
|
+
const defaults = UndefinedOr.map(options, (given) => given.defaultTransition)
|
|
725
|
+
// The sequence's own options over its `defaultTransition`'s, as Motion's.
|
|
726
|
+
const whole = {
|
|
727
|
+
...picked(UndefinedOr.match(defaults as Readonly<Record<string, unknown>> | undefined, { onUndefined: () => NO_FIELDS, onDefined: identity }), WHOLE_DEFAULTS),
|
|
728
|
+
...picked(UndefinedOr.match(options as Readonly<Record<string, unknown>> | undefined, { onUndefined: () => NO_FIELDS, onDefined: identity }), WHOLE),
|
|
729
|
+
} as Sequence.Options
|
|
730
|
+
const compiled = Arr.fromIterable(Sequence.compile(stepsOf(sequence, scope, defaults), whole))
|
|
731
|
+
return started(watch, compiled.length, UndefinedOr.map(options, (given) => given.onComplete), (head, settled) =>
|
|
732
|
+
Arr.map(compiled, ([subject, animation]) =>
|
|
733
|
+
Match.value(subject).pipe(
|
|
734
|
+
Match.when(isCallback, (callback) => callbackTrackOf(env, callback, animation, head, settled)),
|
|
735
|
+
Match.orElse((element) => trackOf(env, element as Element, animation.keyframes as WardicVariant, animation.transition as WardicTransition, head, settled)),
|
|
736
|
+
)))
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
/**
|
|
740
|
+
* An animation scope: give it as an element's `ref`, and `animate`'s selectors are looked up inside
|
|
741
|
+
* that element. Motion's `AnimationScope`.
|
|
742
|
+
*/
|
|
743
|
+
// #433.
|
|
744
|
+
export interface WardicAnimationScope<T extends Element = HTMLElement> {
|
|
745
|
+
/** Give it as the element's `ref`. */
|
|
746
|
+
(element: T): void
|
|
747
|
+
/** The element, once it's mounted. */
|
|
748
|
+
readonly current: T | undefined
|
|
749
|
+
/** Its animations in flight: started, and neither finished, stopped nor cancelled. */
|
|
750
|
+
readonly animations: ReadonlyArray<WardicPlaybackControls>
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
/**
|
|
754
|
+
* An Animation scope's ref and what it hears of its animations (#433): each in `animations` while in
|
|
755
|
+
* flight, and `also` told too (Solid 2's `settled()`). `stopAll` stops them, at its owner's cleanup.
|
|
756
|
+
*/
|
|
757
|
+
export const scopeOf = <T extends Element>(also?: AnimationWatch): {
|
|
758
|
+
readonly scope: WardicAnimationScope<T>
|
|
759
|
+
readonly watch: AnimationWatch
|
|
760
|
+
readonly stopAll: () => void
|
|
761
|
+
} => {
|
|
762
|
+
let current: T | undefined
|
|
763
|
+
let animations: ReadonlyArray<WardicPlaybackControls> = []
|
|
764
|
+
const ref = (element: T): void => {
|
|
765
|
+
current = element
|
|
766
|
+
}
|
|
767
|
+
const scope = Object.defineProperties(ref, {
|
|
768
|
+
current: { get: () => current },
|
|
769
|
+
animations: { get: () => animations },
|
|
770
|
+
}) as WardicAnimationScope<T>
|
|
771
|
+
const watch: AnimationWatch = {
|
|
772
|
+
started: (controls) => {
|
|
773
|
+
animations = Arr.append(animations, controls)
|
|
774
|
+
UndefinedOr.map(also, (more) => more.started(controls))
|
|
775
|
+
},
|
|
776
|
+
ended: (controls, landed) => {
|
|
777
|
+
animations = Arr.filter(animations, (one) => one !== controls)
|
|
778
|
+
UndefinedOr.map(also, (more) => more.ended(controls, landed))
|
|
779
|
+
},
|
|
780
|
+
}
|
|
781
|
+
return { scope, watch, stopAll: () => Arr.forEach(animations, (controls) => controls.stop()) }
|
|
782
|
+
}
|