motion-start 0.0.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/LICENSE.md +21 -0
- package/README.md +39 -0
- package/package.json +64 -0
- package/src/animation/UseAnimatedState.svelte +86 -0
- package/src/animation/UseAnimation.svelte +61 -0
- package/src/animation/animate.ts +78 -0
- package/src/animation/animation-controls.ts +101 -0
- package/src/animation/types.ts +83 -0
- package/src/animation/use-animated-state.ts +1 -0
- package/src/animation/use-animation.ts +74 -0
- package/src/animation/utils/default-transitions.ts +70 -0
- package/src/animation/utils/easing.ts +55 -0
- package/src/animation/utils/is-animatable.ts +42 -0
- package/src/animation/utils/is-animation-controls.ts +17 -0
- package/src/animation/utils/is-keyframes-target.ts +17 -0
- package/src/animation/utils/transitions.ts +218 -0
- package/src/animation/utils/variant-resolvers.ts +15 -0
- package/src/components/AnimatePresence/AnimatePresence.svelte +180 -0
- package/src/components/AnimatePresence/PresenceChild/PresenceChild.svelte +78 -0
- package/src/components/AnimatePresence/PresenceChild/index.ts +7 -0
- package/src/components/AnimatePresence/PresenceChild/types.ts +10 -0
- package/src/components/AnimatePresence/index.ts +46 -0
- package/src/components/AnimatePresence/types.ts +79 -0
- package/src/components/AnimatePresence/use-presence.ts +90 -0
- package/src/components/AnimateSharedLayout/AnimateSharedLayout.svelte +239 -0
- package/src/components/AnimateSharedLayout/index.ts +11 -0
- package/src/components/AnimateSharedLayout/types.ts +111 -0
- package/src/components/AnimateSharedLayout/utils/batcher.ts +96 -0
- package/src/components/AnimateSharedLayout/utils/crossfader.ts +260 -0
- package/src/components/AnimateSharedLayout/utils/rotate.ts +48 -0
- package/src/components/AnimateSharedLayout/utils/stack.ts +160 -0
- package/src/components/LazyMotion/LazyMotion.svelte +82 -0
- package/src/components/LazyMotion/index.ts +42 -0
- package/src/components/LazyMotion/types.ts +58 -0
- package/src/components/MotionConfig/MotionConfig.svelte +56 -0
- package/src/components/MotionConfig/MotionConfigScaleCorrection.ts +47 -0
- package/src/components/MotionConfig/index.ts +20 -0
- package/src/components/MotionDiv.svelte +8 -0
- package/src/context/DOMcontext.ts +21 -0
- package/src/context/LayoutGroupContext.ts +13 -0
- package/src/context/LazyContext.ts +18 -0
- package/src/context/MotionConfigContext.ts +48 -0
- package/src/context/MotionContext/MotionContext.svelte +27 -0
- package/src/context/MotionContext/MotionContextProvider.svelte +22 -0
- package/src/context/MotionContext/UseCreateMotionContext.svelte +34 -0
- package/src/context/MotionContext/create.ts +1 -0
- package/src/context/MotionContext/index.ts +14 -0
- package/src/context/MotionContext/utils.ts +29 -0
- package/src/context/PresenceContext.ts +26 -0
- package/src/context/ScaleCorrectionProvider.svelte +27 -0
- package/src/context/SharedLayoutContext.ts +29 -0
- package/src/events/UseDomEvent.svelte +67 -0
- package/src/events/UsePointerEvent.svelte +76 -0
- package/src/events/event-info.ts +69 -0
- package/src/events/types.ts +15 -0
- package/src/events/use-dom-event.ts +48 -0
- package/src/events/use-pointer-event.ts +29 -0
- package/src/events/utils.ts +25 -0
- package/src/gestures/PanSession.ts +298 -0
- package/src/gestures/UseFocusGesture.svelte +31 -0
- package/src/gestures/UseGestures.svelte +17 -0
- package/src/gestures/UseHoverGesture.svelte +40 -0
- package/src/gestures/UsePanGesture.svelte +58 -0
- package/src/gestures/UseTapGesture.svelte +77 -0
- package/src/gestures/drag/UseDrag.svelte +55 -0
- package/src/gestures/drag/UseDragControls.svelte +145 -0
- package/src/gestures/drag/VisualElementDragControls.ts +632 -0
- package/src/gestures/drag/types.ts +307 -0
- package/src/gestures/drag/use-drag-controls.ts +148 -0
- package/src/gestures/drag/use-drag.ts +15 -0
- package/src/gestures/drag/utils/constraints.ts +157 -0
- package/src/gestures/drag/utils/lock.ts +69 -0
- package/src/gestures/types.ts +257 -0
- package/src/gestures/use-focus-gesture.ts +16 -0
- package/src/gestures/use-gestures.ts +2 -0
- package/src/gestures/use-hover-gesture.ts +10 -0
- package/src/gestures/use-pan-gesture.ts +22 -0
- package/src/gestures/use-tap-gesture.ts +14 -0
- package/src/gestures/utils/event-type.ts +24 -0
- package/src/gestures/utils/is-node-or-child.ts +31 -0
- package/src/index.ts +104 -0
- package/src/motion/Motion.svelte +246 -0
- package/src/motion/MotionSSR.svelte +244 -0
- package/src/motion/features/AnimationState.svelte +29 -0
- package/src/motion/features/Exit.svelte +32 -0
- package/src/motion/features/UseFeatures.svelte +39 -0
- package/src/motion/features/animations.ts +22 -0
- package/src/motion/features/definitions.ts +49 -0
- package/src/motion/features/drag.ts +24 -0
- package/src/motion/features/gestures.ts +24 -0
- package/src/motion/features/layout/Animate.svelte +314 -0
- package/src/motion/features/layout/Animate.ts +9 -0
- package/src/motion/features/layout/AnimateLayoutContextProvider.svelte +14 -0
- package/src/motion/features/layout/Measure.svelte +98 -0
- package/src/motion/features/layout/Measure.ts +9 -0
- package/src/motion/features/layout/MeasureContextProvider.svelte +32 -0
- package/src/motion/features/layout/index.ts +20 -0
- package/src/motion/features/layout/types.ts +71 -0
- package/src/motion/features/layout/utils.ts +40 -0
- package/src/motion/features/types.ts +53 -0
- package/src/motion/features/use-features.ts +16 -0
- package/src/motion/index.ts +64 -0
- package/src/motion/types.ts +278 -0
- package/src/motion/utils/UseLayoutId.svelte +18 -0
- package/src/motion/utils/UseVisualElement.svelte +104 -0
- package/src/motion/utils/UseVisualState.svelte +137 -0
- package/src/motion/utils/is-forced-motion-value.ts +23 -0
- package/src/motion/utils/make-renderless-component.ts +17 -0
- package/src/motion/utils/should-inhert-variant.ts +6 -0
- package/src/motion/utils/use-motion-ref.ts +41 -0
- package/src/motion/utils/use-visual-element.ts +13 -0
- package/src/motion/utils/use-visual-state.ts +24 -0
- package/src/motion/utils/valid-prop.ts +80 -0
- package/src/render/dom/M.svelte +16 -0
- package/src/render/dom/UseRender.svelte +37 -0
- package/src/render/dom/create-motion-class.ts +12 -0
- package/src/render/dom/create-visual-element.ts +22 -0
- package/src/render/dom/featureBundle.ts +22 -0
- package/src/render/dom/motion-minimal.ts +22 -0
- package/src/render/dom/motion-proxy.ts +107 -0
- package/src/render/dom/motion.ts +62 -0
- package/src/render/dom/projection/convert-to-relative.ts +40 -0
- package/src/render/dom/projection/default-scale-correctors.ts +138 -0
- package/src/render/dom/projection/measure.ts +28 -0
- package/src/render/dom/projection/relative-set.ts +27 -0
- package/src/render/dom/projection/scale-correction.ts +22 -0
- package/src/render/dom/projection/types.ts +13 -0
- package/src/render/dom/projection/utils.ts +69 -0
- package/src/render/dom/svg-visual-element.ts +114 -0
- package/src/render/dom/types.ts +32 -0
- package/src/render/dom/use-render.ts +11 -0
- package/src/render/dom/utils/UseInitialMotionProps.svelte +26 -0
- package/src/render/dom/utils/batch-layout.ts +77 -0
- package/src/render/dom/utils/camel-to-dash.ts +20 -0
- package/src/render/dom/utils/create-config.ts +33 -0
- package/src/render/dom/utils/css-variables-conversion.ts +121 -0
- package/src/render/dom/utils/filter-props.ts +55 -0
- package/src/render/dom/utils/is-css-variable.ts +18 -0
- package/src/render/dom/utils/is-svg-component.ts +41 -0
- package/src/render/dom/utils/parse-dom-variant.ts +26 -0
- package/src/render/dom/utils/unit-conversion.ts +258 -0
- package/src/render/dom/utils/use-html-props.ts +2 -0
- package/src/render/dom/utils/use-svg-props.ts +1 -0
- package/src/render/dom/value-types/animatable-none.ts +24 -0
- package/src/render/dom/value-types/defaults.ts +30 -0
- package/src/render/dom/value-types/dimensions.ts +27 -0
- package/src/render/dom/value-types/find.ts +31 -0
- package/src/render/dom/value-types/get-as-type.ts +21 -0
- package/src/render/dom/value-types/number.ts +83 -0
- package/src/render/dom/value-types/test.ts +17 -0
- package/src/render/dom/value-types/type-auto.ts +21 -0
- package/src/render/dom/value-types/type-int.ts +23 -0
- package/src/render/dom/value-types/types.ts +8 -0
- package/src/render/html/UseHTMLProps.svelte +33 -0
- package/src/render/html/UseInitialMotionValues.svelte +27 -0
- package/src/render/html/UseStyle.svelte +47 -0
- package/src/render/html/config-motion.ts +23 -0
- package/src/render/html/supported-elements.ts +10 -0
- package/src/render/html/types.ts +64 -0
- package/src/render/html/use-props.ts +14 -0
- package/src/render/html/utils/build-projection-transform.ts +53 -0
- package/src/render/html/utils/build-styles.ts +121 -0
- package/src/render/html/utils/build-transform.ts +79 -0
- package/src/render/html/utils/create-render-state.ts +18 -0
- package/src/render/html/utils/render.ts +22 -0
- package/src/render/html/utils/scrape-motion-values.ts +26 -0
- package/src/render/html/utils/transform.ts +51 -0
- package/src/render/html/visual-element.ts +129 -0
- package/src/render/index.ts +703 -0
- package/src/render/svg/UseSVGProps.svelte +34 -0
- package/src/render/svg/config-motion.ts +51 -0
- package/src/render/svg/lowercase-elements.ts +35 -0
- package/src/render/svg/supported-elements.ts +10 -0
- package/src/render/svg/types.ts +51 -0
- package/src/render/svg/use-props.ts +14 -0
- package/src/render/svg/utils/build-attrs.ts +58 -0
- package/src/render/svg/utils/camel-case-attrs.ts +27 -0
- package/src/render/svg/utils/create-render-state.ts +17 -0
- package/src/render/svg/utils/path.ts +49 -0
- package/src/render/svg/utils/render.ts +22 -0
- package/src/render/svg/utils/scrape-motion-values.ts +26 -0
- package/src/render/svg/utils/transform-origin.ts +30 -0
- package/src/render/svg/visual-element.ts +44 -0
- package/src/render/types.ts +148 -0
- package/src/render/utils/animation-state.ts +375 -0
- package/src/render/utils/animation.ts +167 -0
- package/src/render/utils/compare-by-depth.ts +18 -0
- package/src/render/utils/flat-tree.ts +35 -0
- package/src/render/utils/is-draggable.ts +17 -0
- package/src/render/utils/lifecycles.ts +172 -0
- package/src/render/utils/motion-values.ts +59 -0
- package/src/render/utils/projection.ts +38 -0
- package/src/render/utils/setters.ts +910 -0
- package/src/render/utils/state.ts +113 -0
- package/src/render/utils/types.ts +12 -0
- package/src/render/utils/variants.ts +76 -0
- package/src/types/geometry.ts +91 -0
- package/src/types.ts +1088 -0
- package/src/utils/UseUnmountEffect.svelte +11 -0
- package/src/utils/array.ts +18 -0
- package/src/utils/each-axis.ts +15 -0
- package/src/utils/errors.ts +22 -0
- package/src/utils/fix-process-env.ts +22 -0
- package/src/utils/geometry/delta-apply.ts +162 -0
- package/src/utils/geometry/delta-calc.ts +89 -0
- package/src/utils/geometry/index.ts +83 -0
- package/src/utils/is-browser.ts +12 -0
- package/src/utils/is-numerical-string.ts +15 -0
- package/src/utils/is-ref-object.ts +16 -0
- package/src/utils/noop.ts +15 -0
- package/src/utils/resolve-value.ts +23 -0
- package/src/utils/shallow-compare.ts +23 -0
- package/src/utils/subscription-manager.ts +49 -0
- package/src/utils/time-conversion.ts +18 -0
- package/src/utils/transform.ts +120 -0
- package/src/utils/use-constant.ts +23 -0
- package/src/utils/use-cycle.ts +78 -0
- package/src/utils/use-force-update.ts +7 -0
- package/src/utils/use-isomorphic-effect.ts +8 -0
- package/src/utils/use-reduced-motion.ts +70 -0
- package/src/utils/use-unmount-effect.ts +8 -0
- package/src/value/index.ts +409 -0
- package/src/value/scroll/use-element-scroll.ts +73 -0
- package/src/value/scroll/use-viewport-scroll.ts +81 -0
- package/src/value/scroll/utils.ts +76 -0
- package/src/value/use-combine-values.ts +53 -0
- package/src/value/use-motion-template.ts +57 -0
- package/src/value/use-motion-value.ts +27 -0
- package/src/value/use-spring.ts +84 -0
- package/src/value/use-transform.ts +216 -0
- package/src/value/use-velocity.ts +44 -0
- package/src/value/utils/is-motion-value.ts +15 -0
- package/src/value/utils/resolve-motion-value.ts +29 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<!-- based on framer-motion@4.0.3,
|
|
2
|
+
Copyright (c) 2018 Framer B.V. -->
|
|
3
|
+
|
|
4
|
+
<script lang="ts">
|
|
5
|
+
import { buildHTMLStyles } from "./utils/build-styles.js";
|
|
6
|
+
|
|
7
|
+
import { createHtmlRenderState } from "./utils/create-render-state.js";
|
|
8
|
+
export let visualState, isStatic, props;
|
|
9
|
+
const memo = () => {
|
|
10
|
+
let state = createHtmlRenderState();
|
|
11
|
+
|
|
12
|
+
buildHTMLStyles(
|
|
13
|
+
state,
|
|
14
|
+
visualState,
|
|
15
|
+
undefined,
|
|
16
|
+
undefined,
|
|
17
|
+
{ enableHardwareAcceleration: !isStatic },
|
|
18
|
+
props.transformTemplate
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
const { vars, style } = state;
|
|
22
|
+
return { ...vars, ...style };
|
|
23
|
+
};
|
|
24
|
+
$: styles = memo(visualState);
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<slot {styles} />
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<!-- based on framer-motion@4.0.3,
|
|
2
|
+
Copyright (c) 2018 Framer B.V. -->
|
|
3
|
+
|
|
4
|
+
<script lang="ts" module>
|
|
5
|
+
export function copyRawValuesOnly(
|
|
6
|
+
target: ResolvedValues,
|
|
7
|
+
source: {
|
|
8
|
+
[key: string]: string | number | MotionValue;
|
|
9
|
+
},
|
|
10
|
+
props: MotionProps
|
|
11
|
+
) {
|
|
12
|
+
for (const key in source) {
|
|
13
|
+
if (!isMotionValue(source[key]) && !isForcedMotionValue(key, props)) {
|
|
14
|
+
target[key] = source[key];
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<script lang="ts">
|
|
21
|
+
import type { MotionProps, MotionValue } from "../../index.js";
|
|
22
|
+
import { isForcedMotionValue } from "../../motion/utils/is-forced-motion-value.js";
|
|
23
|
+
import { isMotionValue } from "../../value/utils/is-motion-value.js";
|
|
24
|
+
import type { ResolvedValues } from "../types.js";
|
|
25
|
+
import UseInitialMotionValues from "./UseInitialMotionValues.svelte";
|
|
26
|
+
export let visualState, props, isStatic;
|
|
27
|
+
$: styleProp = props.style || {};
|
|
28
|
+
let style = {};
|
|
29
|
+
/**
|
|
30
|
+
* Copy non-Motion Values straight into style
|
|
31
|
+
*/
|
|
32
|
+
const cRVO = copyRawValuesOnly;
|
|
33
|
+
$: cRVO(style, styleProp, props);
|
|
34
|
+
|
|
35
|
+
const toStyle = (s1) => {
|
|
36
|
+
Object.assign(style, s1);
|
|
37
|
+
if (props.transformValues) {
|
|
38
|
+
style = props.transformValues(style);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return style;
|
|
42
|
+
};
|
|
43
|
+
</script>
|
|
44
|
+
|
|
45
|
+
<UseInitialMotionValues {props} {visualState} {isStatic} let:styles={s1}>
|
|
46
|
+
<slot styles={toStyle({ s1, props, style })} />
|
|
47
|
+
</UseInitialMotionValues>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
based on framer-motion@4.1.17,
|
|
3
|
+
Copyright (c) 2018 Framer B.V.
|
|
4
|
+
*/
|
|
5
|
+
import type { MotionComponentConfig } from "../../motion";
|
|
6
|
+
import type { HTMLRenderState } from "./types";
|
|
7
|
+
// export declare const htmlMotionConfig: ;
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
based on framer-motion@4.0.3,
|
|
12
|
+
Copyright (c) 2018 Framer B.V.
|
|
13
|
+
*/
|
|
14
|
+
import { createHtmlRenderState } from './utils/create-render-state.js';
|
|
15
|
+
import { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.js';
|
|
16
|
+
|
|
17
|
+
var htmlMotionConfig = {
|
|
18
|
+
scrapeMotionValuesFromProps: scrapeMotionValuesFromProps,
|
|
19
|
+
createRenderState: createHtmlRenderState,
|
|
20
|
+
} satisfies Partial<MotionComponentConfig<HTMLElement, HTMLRenderState>>;
|
|
21
|
+
|
|
22
|
+
export { htmlMotionConfig };
|
|
23
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
based on framer-motion@4.1.17,
|
|
3
|
+
Copyright (c) 2018 Framer B.V.
|
|
4
|
+
*/
|
|
5
|
+
type UnionStringArray<T extends Readonly<string[]>> = T[number];
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export const htmlElements = ["a", "abbr", "address", "area", "article", "aside", "audio", "b", "base", "bdi", "bdo", "big", "blockquote", "body", "br", "button", "canvas", "caption", "cite", "code", "col", "colgroup", "data", "datalist", "dd", "del", "details", "dfn", "dialog", "div", "dl", "dt", "em", "embed", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "iframe", "img", "input", "ins", "kbd", "keygen", "label", "legend", "li", "link", "main", "map", "mark", "menu", "menuitem", "meta", "meter", "nav", "noscript", "object", "ol", "optgroup", "option", "output", "p", "param", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "script", "section", "select", "small", "source", "span", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "textarea", "tfoot", "th", "thead", "time", "title", "tr", "track", "u", "ul", "var", "video", "wbr", "webview"] as const;
|
|
10
|
+
export type HTMLElements = UnionStringArray<typeof htmlElements>;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
based on framer-motion@4.1.17,
|
|
3
|
+
Copyright (c) 2018 Framer B.V.
|
|
4
|
+
*/
|
|
5
|
+
import type { DetailedHTMLFactory, ForwardRefExoticComponent, HTMLAttributes, PropsWithoutRef, ReactHTML, RefAttributes } from "react";
|
|
6
|
+
import type { MotionProps } from "../../motion/types";
|
|
7
|
+
import type { ResolvedValues } from "../types";
|
|
8
|
+
import type { HTMLElements } from "./supported-elements";
|
|
9
|
+
export interface TransformOrigin {
|
|
10
|
+
originX?: number | string;
|
|
11
|
+
originY?: number | string;
|
|
12
|
+
originZ?: number | string;
|
|
13
|
+
}
|
|
14
|
+
export interface HTMLRenderState {
|
|
15
|
+
/**
|
|
16
|
+
* A mutable record of transforms we want to apply directly to the rendered Element
|
|
17
|
+
* every frame. We use a mutable data structure to reduce GC during animations.
|
|
18
|
+
*/
|
|
19
|
+
transform: ResolvedValues;
|
|
20
|
+
/**
|
|
21
|
+
* A mutable record of transform keys we want to apply to the rendered Element. We order
|
|
22
|
+
* this to order transforms in the desired order. We use a mutable data structure to reduce GC during animations.
|
|
23
|
+
*/
|
|
24
|
+
transformKeys: string[];
|
|
25
|
+
/**
|
|
26
|
+
* A mutable record of transform origins we want to apply directly to the rendered Element
|
|
27
|
+
* every frame. We use a mutable data structure to reduce GC during animations.
|
|
28
|
+
*/
|
|
29
|
+
transformOrigin: TransformOrigin;
|
|
30
|
+
/**
|
|
31
|
+
* A mutable record of styles we want to apply directly to the rendered Element
|
|
32
|
+
* every frame. We use a mutable data structure to reduce GC during animations.
|
|
33
|
+
*/
|
|
34
|
+
style: ResolvedValues;
|
|
35
|
+
/**
|
|
36
|
+
* A mutable record of CSS variables we want to apply directly to the rendered Element
|
|
37
|
+
* every frame. We use a mutable data structure to reduce GC during animations.
|
|
38
|
+
*/
|
|
39
|
+
vars: ResolvedValues;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @public
|
|
43
|
+
*/
|
|
44
|
+
export type ForwardRefComponent<T, P> = ForwardRefExoticComponent<PropsWithoutRef<P> & RefAttributes<T>>;
|
|
45
|
+
/**
|
|
46
|
+
* Support for React component props
|
|
47
|
+
*/
|
|
48
|
+
type UnwrapFactoryAttributes<F> = F extends DetailedHTMLFactory<infer P, any> ? P : never;
|
|
49
|
+
type UnwrapFactoryElement<F> = F extends DetailedHTMLFactory<any, infer P> ? P : never;
|
|
50
|
+
type HTMLAttributesWithoutMotionProps<Attributes extends HTMLAttributes<Element>, Element extends HTMLElement> = {
|
|
51
|
+
[K in Exclude<keyof Attributes, keyof MotionProps>]?: Attributes[K];
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* @public
|
|
55
|
+
*/
|
|
56
|
+
export type HTMLMotionProps<TagName extends keyof ReactHTML> = HTMLAttributesWithoutMotionProps<UnwrapFactoryAttributes<ReactHTML[TagName]>, UnwrapFactoryElement<ReactHTML[TagName]>> & MotionProps;
|
|
57
|
+
/**
|
|
58
|
+
* Motion-optimised versions of React's HTML components.
|
|
59
|
+
*
|
|
60
|
+
* @public
|
|
61
|
+
*/
|
|
62
|
+
export type HTMLMotionComponents = {
|
|
63
|
+
[K in HTMLElements]: ForwardRefComponent<UnwrapFactoryElement<ReactHTML[K]>, HTMLMotionProps<K>>;
|
|
64
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
based on framer-motion@4.1.17,
|
|
3
|
+
Copyright (c) 2018 Framer B.V.
|
|
4
|
+
*/
|
|
5
|
+
import type { MotionProps } from "../../motion/types";
|
|
6
|
+
import type { ResolvedValues } from "../types";
|
|
7
|
+
|
|
8
|
+
export type useStyle = (props: MotionProps, visualState: ResolvedValues, isStatic: boolean) => ResolvedValues;
|
|
9
|
+
export type useHTMLProps = (props: MotionProps, visualState: ResolvedValues, isStatic: boolean) => any;
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
export { default as UseHTMLProps } from './UseHTMLProps.svelte';
|
|
13
|
+
export { default as UseStyle, copyRawValuesOnly } from './UseStyle.svelte';
|
|
14
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
based on framer-motion@4.1.17,
|
|
3
|
+
Copyright (c) 2018 Framer B.V.
|
|
4
|
+
*/
|
|
5
|
+
import type { BoxDelta, Point2D } from "../../../types/geometry";
|
|
6
|
+
import type { ResolvedValues } from "../../types";
|
|
7
|
+
import type { LayoutState } from "../../utils/state";
|
|
8
|
+
export type BuildProjectionTransform = (box: BoxDelta, treeScale: Point2D, transform?: ResolvedValues) => string;
|
|
9
|
+
export type BuildProjectionTransformOrigin = (layout: LayoutState) => string;
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
based on framer-motion@4.0.3,
|
|
14
|
+
Copyright (c) 2018 Framer B.V.
|
|
15
|
+
*/
|
|
16
|
+
import { zeroLayout } from '../../utils/state.js';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Build a transform style that takes a calculated delta between the element's current
|
|
20
|
+
* space on screen and projects it into the desired space.
|
|
21
|
+
*/
|
|
22
|
+
function buildLayoutProjectionTransform({ x, y }: BoxDelta, treeScale: Point2D, latestTransform?: ResolvedValues): string {
|
|
23
|
+
/**
|
|
24
|
+
* The translations we use to calculate are always relative to the viewport coordinate space.
|
|
25
|
+
* But when we apply scales, we also scale the coordinate space of an element and its children.
|
|
26
|
+
* For instance if we have a treeScale (the culmination of all parent scales) of 0.5 and we need
|
|
27
|
+
* to move an element 100 pixels, we actually need to move it 200 in within that scaled space.
|
|
28
|
+
*/
|
|
29
|
+
var xTranslate = x.translate / treeScale.x;
|
|
30
|
+
var yTranslate = y.translate / treeScale.y;
|
|
31
|
+
var transform = "translate3d(" + xTranslate + "px, " + yTranslate + "px, 0) ";
|
|
32
|
+
if (latestTransform) {
|
|
33
|
+
var rotate = latestTransform.rotate, rotateX = latestTransform.rotateX, rotateY = latestTransform.rotateY;
|
|
34
|
+
if (rotate)
|
|
35
|
+
transform += "rotate(" + rotate + ") ";
|
|
36
|
+
if (rotateX)
|
|
37
|
+
transform += "rotateX(" + rotateX + ") ";
|
|
38
|
+
if (rotateY)
|
|
39
|
+
transform += "rotateY(" + rotateY + ") ";
|
|
40
|
+
}
|
|
41
|
+
transform += "scale(" + x.scale + ", " + y.scale + ")";
|
|
42
|
+
return !latestTransform && transform === identityProjection ? "" : transform;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Take the calculated delta origin and apply it as a transform string.
|
|
46
|
+
*/
|
|
47
|
+
function buildLayoutProjectionTransformOrigin({ deltaFinal, }: LayoutState) {
|
|
48
|
+
return deltaFinal.x.origin * 100 + "% " + deltaFinal.y.origin * 100 + "% 0";
|
|
49
|
+
}
|
|
50
|
+
var identityProjection = buildLayoutProjectionTransform(zeroLayout.delta, zeroLayout.treeScale, { x: 1, y: 1 });
|
|
51
|
+
|
|
52
|
+
export { buildLayoutProjectionTransform, buildLayoutProjectionTransformOrigin, identityProjection };
|
|
53
|
+
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
based on framer-motion@4.1.17,
|
|
3
|
+
Copyright (c) 2018 Framer B.V.
|
|
4
|
+
*/
|
|
5
|
+
import type { MotionProps } from "../../../motion/types";
|
|
6
|
+
import type { HTMLRenderState } from "../types";
|
|
7
|
+
import type { ResolvedValues } from "../../types";
|
|
8
|
+
import type { LayoutState, TargetProjection } from "../../utils/state";
|
|
9
|
+
import type { DOMVisualElementOptions } from "../../dom/types";
|
|
10
|
+
import type { BuildProjectionTransform, BuildProjectionTransformOrigin } from "./build-projection-transform";
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
based on framer-motion@4.0.3,
|
|
15
|
+
Copyright (c) 2018 Framer B.V.
|
|
16
|
+
*/
|
|
17
|
+
import { valueScaleCorrection } from '../../dom/projection/scale-correction.js';
|
|
18
|
+
import { buildTransform, buildTransformOrigin } from './build-transform.js';
|
|
19
|
+
import { isCSSVariable } from '../../dom/utils/is-css-variable.js';
|
|
20
|
+
import { isTransformProp, isTransformOriginProp } from './transform.js';
|
|
21
|
+
import { getValueAsType } from '../../dom/value-types/get-as-type.js';
|
|
22
|
+
import { numberValueTypes } from '../../dom/value-types/number.js';
|
|
23
|
+
|
|
24
|
+
function buildHTMLStyles(state: HTMLRenderState, latestValues: ResolvedValues, projection: TargetProjection | undefined, layoutState: LayoutState | undefined, options: DOMVisualElementOptions, transformTemplate?: MotionProps["transformTemplate"], buildProjectionTransform?: BuildProjectionTransform, buildProjectionTransformOrigin?: BuildProjectionTransformOrigin) {
|
|
25
|
+
var _a;
|
|
26
|
+
var style = state.style, vars = state.vars, transform = state.transform, transformKeys = state.transformKeys, transformOrigin = state.transformOrigin;
|
|
27
|
+
// Empty the transformKeys array. As we're throwing out refs to its items
|
|
28
|
+
// this might not be as cheap as suspected. Maybe using the array as a buffer
|
|
29
|
+
// with a manual incrementation would be better.
|
|
30
|
+
transformKeys.length = 0;
|
|
31
|
+
// Track whether we encounter any transform or transformOrigin values.
|
|
32
|
+
var hasTransform = false;
|
|
33
|
+
var hasTransformOrigin = false;
|
|
34
|
+
// Does the calculated transform essentially equal "none"?
|
|
35
|
+
var transformIsNone = true;
|
|
36
|
+
/**
|
|
37
|
+
* Loop over all our latest animated values and decide whether to handle them
|
|
38
|
+
* as a style or CSS variable.
|
|
39
|
+
*
|
|
40
|
+
* Transforms and transform origins are kept seperately for further processing.
|
|
41
|
+
*/
|
|
42
|
+
for (var key in latestValues) {
|
|
43
|
+
var value = latestValues[key];
|
|
44
|
+
/**
|
|
45
|
+
* If this is a CSS variable we don't do any further processing.
|
|
46
|
+
*/
|
|
47
|
+
if (isCSSVariable(key)) {
|
|
48
|
+
vars[key] = value;
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
// Convert the value to its default value type, ie 0 -> "0px"
|
|
52
|
+
var valueType = numberValueTypes[key];
|
|
53
|
+
var valueAsType = getValueAsType(value, valueType);
|
|
54
|
+
if (isTransformProp(key)) {
|
|
55
|
+
// If this is a transform, flag to enable further transform processing
|
|
56
|
+
hasTransform = true;
|
|
57
|
+
transform[key] = valueAsType;
|
|
58
|
+
transformKeys.push(key);
|
|
59
|
+
// If we already know we have a non-default transform, early return
|
|
60
|
+
if (!transformIsNone)
|
|
61
|
+
continue;
|
|
62
|
+
// Otherwise check to see if this is a default transform
|
|
63
|
+
if (value !== ((_a = valueType.default) !== null && _a !== void 0 ? _a : 0))
|
|
64
|
+
transformIsNone = false;
|
|
65
|
+
}
|
|
66
|
+
else if (isTransformOriginProp(key)) {
|
|
67
|
+
transformOrigin[key] = valueAsType;
|
|
68
|
+
// If this is a transform origin, flag and enable further transform-origin processing
|
|
69
|
+
hasTransformOrigin = true;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
/**
|
|
73
|
+
* If layout projection is on, and we need to perform scale correction for this
|
|
74
|
+
* value type, perform it.
|
|
75
|
+
*/
|
|
76
|
+
if (layoutState &&
|
|
77
|
+
projection &&
|
|
78
|
+
layoutState.isHydrated &&
|
|
79
|
+
valueScaleCorrection[key]) {
|
|
80
|
+
var correctedValue = valueScaleCorrection[key].process(value, layoutState, projection);
|
|
81
|
+
/**
|
|
82
|
+
* Scale-correctable values can define a number of other values to break
|
|
83
|
+
* down into. For instance borderRadius needs applying to borderBottomLeftRadius etc
|
|
84
|
+
*/
|
|
85
|
+
var applyTo = valueScaleCorrection[key].applyTo;
|
|
86
|
+
if (applyTo) {
|
|
87
|
+
var num = applyTo.length;
|
|
88
|
+
for (var i = 0; i < num; i++) {
|
|
89
|
+
style[applyTo[i]] = correctedValue;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
style[key] = correctedValue;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
style[key] = valueAsType;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (layoutState &&
|
|
102
|
+
projection &&
|
|
103
|
+
buildProjectionTransform &&
|
|
104
|
+
buildProjectionTransformOrigin) {
|
|
105
|
+
style.transform = buildProjectionTransform(layoutState.deltaFinal, layoutState.treeScale, hasTransform ? transform : undefined);
|
|
106
|
+
if (transformTemplate) {
|
|
107
|
+
style.transform = transformTemplate(transform, style.transform);
|
|
108
|
+
}
|
|
109
|
+
style.transformOrigin = buildProjectionTransformOrigin(layoutState);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
if (hasTransform) {
|
|
113
|
+
style.transform = buildTransform(state, options, transformIsNone, transformTemplate);
|
|
114
|
+
}
|
|
115
|
+
if (hasTransformOrigin) {
|
|
116
|
+
style.transformOrigin = buildTransformOrigin(transformOrigin);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export { buildHTMLStyles };
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
based on framer-motion@4.1.17,
|
|
3
|
+
Copyright (c) 2018 Framer B.V.
|
|
4
|
+
*/
|
|
5
|
+
import type { DOMVisualElementOptions } from "../../dom/types";
|
|
6
|
+
import type { MotionProps } from "../../../motion/types";
|
|
7
|
+
import type { HTMLRenderState, TransformOrigin } from "../types";
|
|
8
|
+
/**
|
|
9
|
+
* Build a CSS transform style from individual x/y/scale etc properties.
|
|
10
|
+
*
|
|
11
|
+
* This outputs with a default order of transforms/scales/rotations, this can be customised by
|
|
12
|
+
* providing a transformTemplate function.
|
|
13
|
+
*/
|
|
14
|
+
// export declare function buildTransform(): string;
|
|
15
|
+
/**
|
|
16
|
+
* Build a transformOrigin style. Uses the same defaults as the browser for
|
|
17
|
+
* undefined origins.
|
|
18
|
+
*/
|
|
19
|
+
// export declare function buildTransformOrigin(): string;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
based on framer-motion@4.0.3,
|
|
23
|
+
Copyright (c) 2018 Framer B.V.
|
|
24
|
+
*/
|
|
25
|
+
import { sortTransformProps } from './transform.js';
|
|
26
|
+
|
|
27
|
+
var translateAlias = {
|
|
28
|
+
x: "translateX",
|
|
29
|
+
y: "translateY",
|
|
30
|
+
z: "translateZ",
|
|
31
|
+
transformPerspective: "perspective",
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Build a CSS transform style from individual x/y/scale etc properties.
|
|
35
|
+
*
|
|
36
|
+
* This outputs with a default order of transforms/scales/rotations, this can be customised by
|
|
37
|
+
* providing a transformTemplate function.
|
|
38
|
+
*/
|
|
39
|
+
function buildTransform({ transform, transformKeys }: HTMLRenderState, { enableHardwareAcceleration, allowTransformNone, }: DOMVisualElementOptions, transformIsDefault: boolean, transformTemplate?: MotionProps["transformTemplate"]) {
|
|
40
|
+
// The transform string we're going to build into.
|
|
41
|
+
var transformString = "";
|
|
42
|
+
// Transform keys into their default order - this will determine the output order.
|
|
43
|
+
transformKeys.sort(sortTransformProps);
|
|
44
|
+
// Track whether the defined transform has a defined z so we don't add a
|
|
45
|
+
// second to enable hardware acceleration
|
|
46
|
+
var transformHasZ = false;
|
|
47
|
+
// Loop over each transform and build them into transformString
|
|
48
|
+
var numTransformKeys = transformKeys.length;
|
|
49
|
+
for (var i = 0; i < numTransformKeys; i++) {
|
|
50
|
+
var key = transformKeys[i];
|
|
51
|
+
transformString += (translateAlias[key] || key) + "(" + transform[key] + ") ";
|
|
52
|
+
if (key === "z")
|
|
53
|
+
transformHasZ = true;
|
|
54
|
+
}
|
|
55
|
+
if (!transformHasZ && enableHardwareAcceleration) {
|
|
56
|
+
transformString += "translateZ(0)";
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
transformString = transformString.trim();
|
|
60
|
+
}
|
|
61
|
+
// If we have a custom `transform` template, pass our transform values and
|
|
62
|
+
// generated transformString to that before returning
|
|
63
|
+
if (transformTemplate) {
|
|
64
|
+
transformString = transformTemplate(transform, transformIsDefault ? "" : transformString);
|
|
65
|
+
}
|
|
66
|
+
else if (allowTransformNone && transformIsDefault) {
|
|
67
|
+
transformString = "none";
|
|
68
|
+
}
|
|
69
|
+
return transformString;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Build a transformOrigin style. Uses the same defaults as the browser for
|
|
73
|
+
* undefined origins.
|
|
74
|
+
*/
|
|
75
|
+
function buildTransformOrigin({ originX = "50%", originY = "50%", originZ = 0, }: TransformOrigin) {
|
|
76
|
+
return originX + " " + originY + " " + originZ;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export { buildTransform, buildTransformOrigin };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
based on framer-motion@4.1.17,
|
|
3
|
+
Copyright (c) 2018 Framer B.V.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
based on framer-motion@4.0.3,
|
|
8
|
+
Copyright (c) 2018 Framer B.V.
|
|
9
|
+
*/
|
|
10
|
+
var createHtmlRenderState = function () { return ({
|
|
11
|
+
style: {},
|
|
12
|
+
transform: {},
|
|
13
|
+
transformKeys: [],
|
|
14
|
+
transformOrigin: {},
|
|
15
|
+
vars: {},
|
|
16
|
+
}); };
|
|
17
|
+
|
|
18
|
+
export { createHtmlRenderState };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
based on framer-motion@4.1.17,
|
|
3
|
+
Copyright (c) 2018 Framer B.V.
|
|
4
|
+
*/
|
|
5
|
+
import type { HTMLRenderState } from "../types";
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
based on framer-motion@4.0.3,
|
|
10
|
+
Copyright (c) 2018 Framer B.V.
|
|
11
|
+
*/
|
|
12
|
+
function renderHTML (element: HTMLElement, { style, vars }: HTMLRenderState) {
|
|
13
|
+
// Directly assign style into the Element's style prop. In tests Object.assign is the
|
|
14
|
+
// fastest way to assign styles.
|
|
15
|
+
Object.assign(element.style, style);
|
|
16
|
+
// Loop over any CSS variables and assign those.
|
|
17
|
+
for (var key in vars) {
|
|
18
|
+
element.style.setProperty(key, vars[key]);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export { renderHTML };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
based on framer-motion@4.1.17,
|
|
3
|
+
Copyright (c) 2018 Framer B.V.
|
|
4
|
+
*/
|
|
5
|
+
import type { MotionProps } from "../../../motion/types";
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
based on framer-motion@4.0.3,
|
|
10
|
+
Copyright (c) 2018 Framer B.V.
|
|
11
|
+
*/
|
|
12
|
+
import { isForcedMotionValue } from '../../../motion/utils/is-forced-motion-value.js';
|
|
13
|
+
import { isMotionValue } from '../../../value/utils/is-motion-value.js';
|
|
14
|
+
|
|
15
|
+
function scrapeMotionValuesFromProps(props: MotionProps) {
|
|
16
|
+
var style = props.style;
|
|
17
|
+
var newValues = {};
|
|
18
|
+
for (var key in style) {
|
|
19
|
+
if (isMotionValue(style[key]) || isForcedMotionValue(key, props)) {
|
|
20
|
+
newValues[key] = style[key];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return newValues;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { scrapeMotionValuesFromProps };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
based on framer-motion@4.1.17,
|
|
3
|
+
Copyright (c) 2018 Framer B.V.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
based on framer-motion@4.0.3,
|
|
8
|
+
Copyright (c) 2018 Framer B.V.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* A list of all transformable axes. We'll use this list to generated a version
|
|
13
|
+
* of each axes for each transform.
|
|
14
|
+
*/
|
|
15
|
+
var transformAxes = ["", "X", "Y", "Z"];
|
|
16
|
+
/**
|
|
17
|
+
* An ordered array of each transformable value. By default, transform values
|
|
18
|
+
* will be sorted to this order.
|
|
19
|
+
*/
|
|
20
|
+
var order = ["translate", "scale", "rotate", "skew"];
|
|
21
|
+
/**
|
|
22
|
+
* Generate a list of every possible transform key.
|
|
23
|
+
*/
|
|
24
|
+
var transformProps = ["transformPerspective", "x", "y", "z"];
|
|
25
|
+
order.forEach(function (operationKey) {
|
|
26
|
+
return transformAxes.forEach(function (axesKey) {
|
|
27
|
+
return transformProps.push(operationKey + axesKey);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
/**
|
|
31
|
+
* A function to use with Array.sort to sort transform keys by their default order.
|
|
32
|
+
*/
|
|
33
|
+
function sortTransformProps(a: string, b: string) {
|
|
34
|
+
return transformProps.indexOf(a) - transformProps.indexOf(b);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* A quick lookup for transform props.
|
|
38
|
+
*/
|
|
39
|
+
var transformPropSet = new Set(transformProps);
|
|
40
|
+
function isTransformProp(key: string) {
|
|
41
|
+
return transformPropSet.has(key);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* A quick lookup for transform origin props
|
|
45
|
+
*/
|
|
46
|
+
var transformOriginProps = new Set(["originX", "originY", "originZ"]);
|
|
47
|
+
function isTransformOriginProp(key: string) {
|
|
48
|
+
return transformOriginProps.has(key);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export { isTransformOriginProp, isTransformProp, sortTransformProps, transformAxes, transformProps };
|