@lattix/motion 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,32 @@
1
+ import { type LattixAnimation, type LattixAnimationPreset, type LattixAnimationTrigger, type LattixDiagnostic } from "@lattix/core";
2
+ export declare const MOTION_PRESETS: readonly ["fade-in", "fade-out", "slide-up", "slide-down", "scale-in", "pulse", "shake"];
3
+ export declare const MOTION_TRIGGERS: readonly ["mount", "press", "hover", "visible", "focus"];
4
+ export interface MotionPresetOptions extends Omit<LattixAnimation, "preset"> {
5
+ }
6
+ export type MotionStyle = Record<string, string | number>;
7
+ export interface WebMotionResolution {
8
+ readonly style: MotionStyle;
9
+ readonly attributes: Readonly<Record<string, string>>;
10
+ readonly initialStyle: MotionStyle;
11
+ readonly targetStyle: MotionStyle;
12
+ }
13
+ export interface NativeMotionResolution {
14
+ readonly metadata: {
15
+ readonly preset?: LattixAnimationPreset;
16
+ readonly trigger?: LattixAnimationTrigger;
17
+ };
18
+ readonly initialStyle: MotionStyle;
19
+ readonly targetStyle: MotionStyle;
20
+ readonly transition: {
21
+ readonly duration: number;
22
+ readonly delay?: number;
23
+ readonly easing?: string;
24
+ readonly repeat?: number | "infinite";
25
+ };
26
+ }
27
+ export declare const motionPreset: (preset: LattixAnimationPreset, options?: MotionPresetOptions) => LattixAnimation;
28
+ export declare const customMotion: (animation: Pick<LattixAnimation, "trigger" | "from" | "to" | "transition">) => LattixAnimation;
29
+ export declare const validateMotion: (animation: LattixAnimation | readonly LattixAnimation[]) => readonly LattixDiagnostic[];
30
+ export declare const resolveMotionToCSS: (animation: LattixAnimation | readonly LattixAnimation[] | undefined) => WebMotionResolution;
31
+ export declare const resolveMotionToNative: (animation: LattixAnimation | readonly LattixAnimation[] | undefined) => NativeMotionResolution;
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EAEpB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,cAAc,0FAQ0B,CAAC;AAEtD,eAAO,MAAM,eAAe,0DAM0B,CAAC;AAEvD,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC;CAAG;AAE/E,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAE1D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,MAAM,CAAC,EAAE,qBAAqB,CAAC;QACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,sBAAsB,CAAC;KAC3C,CAAC;IACF,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE;QACnB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;KACvC,CAAC;CACH;AAkHD,eAAO,MAAM,YAAY,GACvB,QAAQ,qBAAqB,EAC7B,UAAS,mBAAwB,KAChC,eAA2C,CAAC;AAE/C,eAAO,MAAM,YAAY,GACvB,WAAW,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,YAAY,CAAC,KACzE,eAA4B,CAAC;AAiFhC,eAAO,MAAM,cAAc,GACzB,WAAW,eAAe,GAAG,SAAS,eAAe,EAAE,KACtD,SAAS,gBAAgB,EAG3B,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,WAAW,eAAe,GAAG,SAAS,eAAe,EAAE,GAAG,SAAS,KAClE,mBAkCF,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,WAAW,eAAe,GAAG,SAAS,eAAe,EAAE,GAAG,SAAS,KAClE,sBA6BF,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,196 @@
1
+ import { diagnostic, } from "@lattix/core";
2
+ export const MOTION_PRESETS = [
3
+ "fade-in",
4
+ "fade-out",
5
+ "slide-up",
6
+ "slide-down",
7
+ "scale-in",
8
+ "pulse",
9
+ "shake",
10
+ ];
11
+ export const MOTION_TRIGGERS = [
12
+ "mount",
13
+ "press",
14
+ "hover",
15
+ "visible",
16
+ "focus",
17
+ ];
18
+ const DEFAULT_DURATION = 200;
19
+ const DEFAULT_TRIGGER = "mount";
20
+ const isKnownPreset = (value) => MOTION_PRESETS.includes(value);
21
+ const isKnownTrigger = (value) => MOTION_TRIGGERS.includes(value);
22
+ const isNonNegativeNumber = (value) => typeof value === "number" && Number.isFinite(value) && value >= 0;
23
+ const isValidRepeat = (value) => value === undefined ||
24
+ value === "infinite" ||
25
+ (typeof value === "number" && Number.isInteger(value) && value >= 0);
26
+ const firstAnimation = (animation) => Array.isArray(animation)
27
+ ? animation[0]
28
+ : animation;
29
+ const compactFrame = (frame) => {
30
+ if (!frame) {
31
+ return {};
32
+ }
33
+ return Object.fromEntries(Object.entries(frame).filter(([, value]) => value !== undefined));
34
+ };
35
+ const presetFrames = (preset) => {
36
+ switch (preset) {
37
+ case "fade-out":
38
+ return { from: { opacity: 1 }, to: { opacity: 0 } };
39
+ case "slide-up":
40
+ return {
41
+ from: { opacity: 0, transform: "translateY(12px)" },
42
+ to: { opacity: 1, transform: "translateY(0)" },
43
+ };
44
+ case "slide-down":
45
+ return {
46
+ from: { opacity: 0, transform: "translateY(-12px)" },
47
+ to: { opacity: 1, transform: "translateY(0)" },
48
+ };
49
+ case "scale-in":
50
+ return {
51
+ from: { opacity: 0, transform: "scale(0.96)" },
52
+ to: { opacity: 1, transform: "scale(1)" },
53
+ };
54
+ case "pulse":
55
+ return {
56
+ from: { transform: "scale(1)" },
57
+ to: { transform: "scale(1.03)" },
58
+ };
59
+ case "shake":
60
+ return {
61
+ from: { transform: "translateX(-4px)" },
62
+ to: { transform: "translateX(4px)" },
63
+ };
64
+ case "fade-in":
65
+ default:
66
+ return { from: { opacity: 0 }, to: { opacity: 1 } };
67
+ }
68
+ };
69
+ const nativePresetFrames = (preset) => {
70
+ switch (preset) {
71
+ case "fade-out":
72
+ return { from: { opacity: 1 }, to: { opacity: 0 } };
73
+ case "scale-in":
74
+ return { from: { opacity: 0, scale: 0.96 }, to: { opacity: 1, scale: 1 } };
75
+ case "pulse":
76
+ return { from: { scale: 1 }, to: { scale: 1.03 } };
77
+ case "slide-up":
78
+ return { from: { opacity: 0, translateY: 12 }, to: { opacity: 1, translateY: 0 } };
79
+ case "slide-down":
80
+ return { from: { opacity: 0, translateY: -12 }, to: { opacity: 1, translateY: 0 } };
81
+ case "shake":
82
+ return { from: { translateX: -4 }, to: { translateX: 4 } };
83
+ case "fade-in":
84
+ default:
85
+ return { from: { opacity: 0 }, to: { opacity: 1 } };
86
+ }
87
+ };
88
+ const diagnosticFor = (code, summary, field, received, expected, suggestion) => diagnostic({
89
+ code,
90
+ summary,
91
+ message: `Animation field "${field}" is invalid.`,
92
+ field,
93
+ received,
94
+ expected,
95
+ suggestion,
96
+ });
97
+ export const motionPreset = (preset, options = {}) => ({ preset, ...options });
98
+ export const customMotion = (animation) => animation;
99
+ const validateTiming = (field, value) => {
100
+ if (value === undefined || isNonNegativeNumber(value)) {
101
+ return [];
102
+ }
103
+ return [
104
+ diagnosticFor(field.endsWith("delay")
105
+ ? "LATTIX_INVALID_ANIMATION_DELAY"
106
+ : "LATTIX_INVALID_ANIMATION_DURATION", field.endsWith("delay")
107
+ ? "Invalid animation delay"
108
+ : "Invalid animation duration", field, value, "non-negative number of milliseconds", field.endsWith("delay")
109
+ ? "Set delay to a non-negative millisecond value."
110
+ : "Set duration to a non-negative millisecond value."),
111
+ ];
112
+ };
113
+ const validateRepeat = (value) => {
114
+ if (isValidRepeat(value)) {
115
+ return [];
116
+ }
117
+ return [
118
+ diagnosticFor("LATTIX_INVALID_ANIMATION_REPEAT", "Invalid animation repeat", "animation.repeat", value, 'a non-negative integer or "infinite"', 'Set repeat to a count such as 2 or "infinite".'),
119
+ ];
120
+ };
121
+ const validateMotionBlock = (item) => {
122
+ const diagnostics = [];
123
+ if (item.preset !== undefined && !isKnownPreset(item.preset)) {
124
+ diagnostics.push(diagnosticFor("LATTIX_INVALID_ANIMATION_PRESET", "Unsupported animation preset", "animation.preset", item.preset, MOTION_PRESETS.join(", "), 'Use a supported preset such as "fade-in".'));
125
+ }
126
+ if (item.trigger !== undefined && !isKnownTrigger(item.trigger)) {
127
+ diagnostics.push(diagnosticFor("LATTIX_INVALID_ANIMATION_TRIGGER", "Unsupported animation trigger", "animation.trigger", item.trigger, MOTION_TRIGGERS.join(", "), 'Use a supported trigger such as "mount".'));
128
+ }
129
+ diagnostics.push(...validateTiming("animation.duration", item.duration), ...validateTiming("animation.delay", item.delay), ...validateRepeat(item.repeat));
130
+ return diagnostics;
131
+ };
132
+ export const validateMotion = (animation) => {
133
+ const items = Array.isArray(animation) ? animation : [animation];
134
+ return items.flatMap((item) => validateMotionBlock(item));
135
+ };
136
+ export const resolveMotionToCSS = (animation) => {
137
+ if (!animation) {
138
+ return { style: {}, attributes: {}, initialStyle: {}, targetStyle: {} };
139
+ }
140
+ const item = firstAnimation(animation);
141
+ const trigger = item.trigger ?? DEFAULT_TRIGGER;
142
+ const frames = presetFrames(item.preset);
143
+ const style = {
144
+ animationName: item.preset ? `lattix-${item.preset}` : "lattix-custom",
145
+ animationDuration: `${item.transition?.duration ?? item.duration ?? DEFAULT_DURATION}ms`,
146
+ animationFillMode: "both",
147
+ animationTimingFunction: item.transition?.easing ?? item.easing ?? "ease-out",
148
+ };
149
+ const delay = item.transition?.delay ?? item.delay;
150
+ if (delay !== undefined) {
151
+ style.animationDelay = `${delay}ms`;
152
+ }
153
+ const repeat = item.transition?.repeat ?? item.repeat;
154
+ if (repeat !== undefined) {
155
+ style.animationIterationCount = repeat;
156
+ }
157
+ return {
158
+ style,
159
+ initialStyle: compactFrame(item.from ?? frames.from),
160
+ targetStyle: compactFrame(item.to ?? frames.to),
161
+ attributes: {
162
+ ...(item.preset ? { "data-lattix-animation": item.preset } : {}),
163
+ "data-lattix-animation-trigger": trigger,
164
+ },
165
+ };
166
+ };
167
+ export const resolveMotionToNative = (animation) => {
168
+ if (!animation) {
169
+ return {
170
+ metadata: {},
171
+ initialStyle: {},
172
+ targetStyle: {},
173
+ transition: { duration: 0 },
174
+ };
175
+ }
176
+ const item = firstAnimation(animation);
177
+ const frames = nativePresetFrames(item.preset);
178
+ const delay = item.transition?.delay ?? item.delay;
179
+ const easing = item.transition?.easing ?? item.easing;
180
+ const repeat = item.transition?.repeat ?? item.repeat;
181
+ return {
182
+ metadata: {
183
+ ...(item.preset ? { preset: item.preset } : {}),
184
+ trigger: item.trigger ?? DEFAULT_TRIGGER,
185
+ },
186
+ initialStyle: compactFrame(item.from ?? frames.from),
187
+ targetStyle: compactFrame(item.to ?? frames.to),
188
+ transition: {
189
+ duration: item.transition?.duration ?? item.duration ?? DEFAULT_DURATION,
190
+ ...(delay === undefined ? {} : { delay }),
191
+ ...(easing === undefined ? {} : { easing }),
192
+ ...(repeat === undefined ? {} : { repeat }),
193
+ },
194
+ };
195
+ };
196
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@lattix/motion",
3
+ "version": "0.1.0",
4
+ "description": "Shared animation schema, presets, validation, and renderer adapters for Lattix",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": ["dist"],
16
+ "scripts": {
17
+ "build": "tsc -p tsconfig.json",
18
+ "clean": "rm -rf dist *.tsbuildinfo",
19
+ "test": "vitest run",
20
+ "typecheck": "tsc -p tsconfig.json --noEmit"
21
+ },
22
+ "license": "MIT",
23
+ "dependencies": {
24
+ "@lattix/core": "0.1.0"
25
+ },
26
+ "devDependencies": {
27
+ "typescript": "^5.7.3",
28
+ "vitest": "^3.0.5"
29
+ }
30
+ }