animot-presenter 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,319 @@
1
+ export type ElementType = 'code' | 'text' | 'arrow' | 'image' | 'shape' | 'counter' | 'chart' | 'icon';
2
+ export type ShapeType = 'rectangle' | 'circle' | 'triangle' | 'ellipse' | 'star' | 'hexagon';
3
+ export interface Position {
4
+ x: number;
5
+ y: number;
6
+ }
7
+ export interface Size {
8
+ width: number;
9
+ height: number;
10
+ }
11
+ export type TiltOrigin = string;
12
+ export type AnimatableProperty = 'position' | 'rotation' | 'tilt' | 'skew' | 'size' | 'opacity' | 'borderRadius' | 'color';
13
+ export interface PropertySequence {
14
+ property: AnimatableProperty;
15
+ order: number;
16
+ delay: number;
17
+ duration: number;
18
+ }
19
+ export interface ElementAnimationConfig {
20
+ order: number;
21
+ delay: number;
22
+ duration: number;
23
+ easing: 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'spring';
24
+ propertySequences?: PropertySequence[];
25
+ }
26
+ export type FloatingDirection = 'vertical' | 'horizontal' | 'both';
27
+ export interface FloatingAnimationConfig {
28
+ enabled: boolean;
29
+ direction: FloatingDirection;
30
+ amplitude: number;
31
+ speed: number;
32
+ amplitudeRandomness: number;
33
+ speedRandomness: number;
34
+ }
35
+ export interface BaseElement {
36
+ id: string;
37
+ type: ElementType;
38
+ name?: string;
39
+ locked?: boolean;
40
+ groupId?: string;
41
+ position: Position;
42
+ size: Size;
43
+ rotation: number;
44
+ skewX: number;
45
+ skewY: number;
46
+ tiltX: number;
47
+ tiltY: number;
48
+ tiltOrigin: TiltOrigin;
49
+ zIndex: number;
50
+ visible: boolean;
51
+ animationConfig?: ElementAnimationConfig;
52
+ floatingAnimation?: FloatingAnimationConfig;
53
+ }
54
+ export type CodeAnimationMode = 'instant' | 'typewriter' | 'highlight-changes';
55
+ export interface CodeAnimationConfig {
56
+ mode: CodeAnimationMode;
57
+ highlightColor: string;
58
+ typewriterSpeed: number;
59
+ highlightDuration: number;
60
+ }
61
+ export interface CodeElement extends BaseElement {
62
+ type: 'code';
63
+ code: string;
64
+ language: string;
65
+ theme: string;
66
+ filename: string;
67
+ showLineNumbers: boolean;
68
+ highlightedLines: number[];
69
+ blurredLines: number[];
70
+ fontSize: number;
71
+ fontWeight: number;
72
+ padding: number;
73
+ borderRadius: number;
74
+ showHeader: boolean;
75
+ headerStyle: 'macos' | 'windows' | 'none';
76
+ animation: CodeAnimationConfig;
77
+ transparentBackground?: boolean;
78
+ }
79
+ export type TextAnimationMode = 'instant' | 'typewriter' | 'fade-words';
80
+ export interface TextAnimationConfig {
81
+ mode: TextAnimationMode;
82
+ typewriterSpeed: number;
83
+ }
84
+ export interface TextElement extends BaseElement {
85
+ type: 'text';
86
+ content: string;
87
+ fontSize: number;
88
+ fontWeight: number;
89
+ fontFamily: string;
90
+ fontStyle?: 'normal' | 'italic';
91
+ textDecoration?: 'none' | 'underline' | 'line-through';
92
+ color: string;
93
+ backgroundColor: string;
94
+ padding: number;
95
+ borderRadius: number;
96
+ textAlign: 'left' | 'center' | 'right';
97
+ opacity: number;
98
+ animation?: TextAnimationConfig;
99
+ textStroke?: {
100
+ enabled: boolean;
101
+ width: number;
102
+ color: string;
103
+ };
104
+ textShadow?: {
105
+ enabled: boolean;
106
+ offsetX: number;
107
+ offsetY: number;
108
+ blur: number;
109
+ color: string;
110
+ };
111
+ hollow?: boolean;
112
+ backgroundImage?: string;
113
+ backgroundPositionX?: number;
114
+ backgroundPositionY?: number;
115
+ backgroundScale?: number;
116
+ }
117
+ export type ArrowAnimationMode = 'none' | 'grow' | 'draw';
118
+ export interface ArrowAnimationConfig {
119
+ mode: ArrowAnimationMode;
120
+ duration: number;
121
+ }
122
+ export interface ArrowElement extends BaseElement {
123
+ type: 'arrow';
124
+ startPoint: Position;
125
+ endPoint: Position;
126
+ controlPoints: Position[];
127
+ color: string;
128
+ strokeWidth: number;
129
+ headSize: number;
130
+ style: 'solid' | 'dashed' | 'dotted';
131
+ showHead: boolean;
132
+ opacity: number;
133
+ animation?: ArrowAnimationConfig;
134
+ }
135
+ export interface ImageElement extends BaseElement {
136
+ type: 'image';
137
+ src: string;
138
+ objectFit: 'cover' | 'contain' | 'fill';
139
+ borderRadius: number;
140
+ opacity: number;
141
+ blur: number;
142
+ clipMask?: {
143
+ enabled: boolean;
144
+ shapeType: ShapeType;
145
+ borderRadius?: number;
146
+ };
147
+ }
148
+ export interface ShapeElement extends BaseElement {
149
+ type: 'shape';
150
+ shapeType: ShapeType;
151
+ fillColor: string;
152
+ strokeColor: string;
153
+ strokeWidth: number;
154
+ opacity: number;
155
+ borderRadius: number;
156
+ boxShadow?: {
157
+ enabled: boolean;
158
+ offsetX: number;
159
+ offsetY: number;
160
+ blur: number;
161
+ spread: number;
162
+ color: string;
163
+ };
164
+ }
165
+ export type CounterType = 'number' | 'letter' | 'percentage' | 'currency';
166
+ export interface CounterElement extends BaseElement {
167
+ type: 'counter';
168
+ counterType: CounterType;
169
+ startValue: number;
170
+ endValue: number;
171
+ prefix: string;
172
+ suffix: string;
173
+ decimals: number;
174
+ duration: number;
175
+ fontSize: number;
176
+ fontWeight: number;
177
+ fontFamily: string;
178
+ color: string;
179
+ backgroundColor: string;
180
+ padding: number;
181
+ borderRadius: number;
182
+ textAlign: 'left' | 'center' | 'right';
183
+ opacity: number;
184
+ }
185
+ export type ChartType = 'bar' | 'line' | 'pie' | 'donut' | 'area';
186
+ export interface ChartDataPoint {
187
+ label: string;
188
+ value: number;
189
+ color?: string;
190
+ }
191
+ export interface ChartElement extends BaseElement {
192
+ type: 'chart';
193
+ chartType: ChartType;
194
+ data: ChartDataPoint[];
195
+ title: string;
196
+ showLabels: boolean;
197
+ showValues: boolean;
198
+ showGrid: boolean;
199
+ showLegend: boolean;
200
+ animationDuration: number;
201
+ colors: string[];
202
+ backgroundColor: string;
203
+ textColor: string;
204
+ fontSize: number;
205
+ padding: number;
206
+ borderRadius: number;
207
+ }
208
+ export interface IconElement extends BaseElement {
209
+ type: 'icon';
210
+ iconName: string;
211
+ iconLibrary: 'lucide' | 'tabler';
212
+ svgContent: string;
213
+ color: string;
214
+ strokeWidth: number;
215
+ fillMode: 'stroke' | 'fill' | 'both';
216
+ }
217
+ export type CanvasElement = CodeElement | TextElement | ArrowElement | ImageElement | ShapeElement | CounterElement | ChartElement | IconElement;
218
+ export type ParticleShape = 'circle' | 'square' | 'star' | 'triangle';
219
+ export interface ParticlesConfig {
220
+ enabled: boolean;
221
+ count: number;
222
+ color: string;
223
+ opacity: number;
224
+ minSize: number;
225
+ maxSize: number;
226
+ speed: number;
227
+ shape: ParticleShape;
228
+ connectDistance: number;
229
+ direction: 'up' | 'down' | 'left' | 'right' | 'random';
230
+ }
231
+ export type ConfettiMode = 'burst' | 'continuous' | 'fireworks' | 'snow';
232
+ export interface ConfettiConfig {
233
+ enabled: boolean;
234
+ mode: ConfettiMode;
235
+ particleCount: number;
236
+ spread: number;
237
+ colors: string[];
238
+ gravity: number;
239
+ drift: number;
240
+ startVelocity: number;
241
+ scalar: number;
242
+ }
243
+ export interface CanvasBackground {
244
+ type: 'solid' | 'gradient' | 'image' | 'transparent';
245
+ color?: string;
246
+ gradient?: {
247
+ type: 'linear' | 'radial';
248
+ angle?: number;
249
+ colors: string[];
250
+ };
251
+ image?: string;
252
+ particles?: ParticlesConfig;
253
+ confetti?: ConfettiConfig;
254
+ }
255
+ export type TransitionType = 'none' | 'fade' | 'slide-left' | 'slide-right' | 'slide-up' | 'slide-down' | 'zoom-in' | 'zoom-out' | 'flip';
256
+ export interface TransitionConfig {
257
+ type: TransitionType;
258
+ duration: number;
259
+ easing: 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out';
260
+ }
261
+ export interface SlideCanvas {
262
+ width: number;
263
+ height: number;
264
+ background: CanvasBackground;
265
+ elements: CanvasElement[];
266
+ }
267
+ export interface Slide {
268
+ id: string;
269
+ name: string;
270
+ canvas: SlideCanvas;
271
+ transition: TransitionConfig;
272
+ duration: number;
273
+ }
274
+ export interface ProjectSettings {
275
+ defaultCanvasWidth: number;
276
+ defaultCanvasHeight: number;
277
+ defaultTransition: TransitionConfig;
278
+ defaultSlideDuration: number;
279
+ }
280
+ /** Animot project JSON format */
281
+ export interface AnimotProject {
282
+ /** Schema version for forward compatibility. Default: 1 */
283
+ schemaVersion?: number;
284
+ id: string;
285
+ name: string;
286
+ slides: Slide[];
287
+ createdAt: number;
288
+ updatedAt: number;
289
+ settings: ProjectSettings;
290
+ }
291
+ /** Props for the AnimotPresenter component */
292
+ export interface AnimotPresenterProps {
293
+ /** URL to JSON file (fetched automatically) */
294
+ src?: string;
295
+ /** Inline JSON object */
296
+ data?: AnimotProject;
297
+ /** Start playing automatically (default: false) */
298
+ autoplay?: boolean;
299
+ /** Loop back to start when reaching end (default: false) */
300
+ loop?: boolean;
301
+ /** Show bottom playback bar (default: true) */
302
+ controls?: boolean;
303
+ /** Show left/right carousel arrows (default: false) */
304
+ arrows?: boolean;
305
+ /** Show progress bar (default: true) */
306
+ progress?: boolean;
307
+ /** Enable keyboard navigation (default: true) */
308
+ keyboard?: boolean;
309
+ /** Override all slide durations (ms) */
310
+ duration?: number;
311
+ /** Initial slide index (default: 0) */
312
+ startSlide?: number;
313
+ /** CSS class for outer container */
314
+ class?: string;
315
+ /** Fired when slide changes */
316
+ onslidechange?: (index: number, total: number) => void;
317
+ /** Fired when last slide is reached (non-loop mode) */
318
+ oncomplete?: () => void;
319
+ }
package/dist/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};
package/package.json ADDED
@@ -0,0 +1,83 @@
1
+ {
2
+ "name": "animot-presenter",
3
+ "version": "0.1.0",
4
+ "description": "Embed animated presentations anywhere. Works with vanilla JS, React, Vue, Angular, Svelte, and any frontend framework. Morphing animations, code highlighting, charts, particles, and more.",
5
+ "type": "module",
6
+ "svelte": "./dist/index.js",
7
+ "main": "./dist/cdn/animot-presenter.min.js",
8
+ "module": "./dist/cdn/animot-presenter.esm.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "svelte": "./dist/index.js",
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/cdn/animot-presenter.esm.js",
15
+ "require": "./dist/cdn/animot-presenter.min.js"
16
+ },
17
+ "./element": {
18
+ "import": "./dist/cdn/animot-presenter.esm.js",
19
+ "require": "./dist/cdn/animot-presenter.min.js"
20
+ },
21
+ "./styles": "./dist/styles/presenter.css"
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "!dist/**/*.test.*",
26
+ "!dist/**/*.spec.*"
27
+ ],
28
+ "scripts": {
29
+ "dev": "vite dev",
30
+ "build": "npm run build:svelte && npm run build:element",
31
+ "build:svelte": "svelte-kit sync && svelte-package -o dist",
32
+ "build:element": "vite build --config vite.element.config.ts",
33
+ "package": "npm run build",
34
+ "preview": "vite preview",
35
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
36
+ "prepublishOnly": "npm run build"
37
+ },
38
+ "peerDependencies": {
39
+ "svelte": "^5.0.0"
40
+ },
41
+ "peerDependenciesMeta": {
42
+ "svelte": {
43
+ "optional": true
44
+ }
45
+ },
46
+ "devDependencies": {
47
+ "@sveltejs/adapter-auto": "^3.0.0",
48
+ "@sveltejs/kit": "^2.0.0",
49
+ "@sveltejs/package": "^2.0.0",
50
+ "@sveltejs/vite-plugin-svelte": "^4.0.0",
51
+ "@types/canvas-confetti": "^1.9.0",
52
+ "svelte": "^5.0.0",
53
+ "svelte-check": "^4.0.0",
54
+ "typescript": "^5.0.0",
55
+ "vite": "^5.0.0"
56
+ },
57
+ "dependencies": {
58
+ "@animotion/motion": "^2.0.1",
59
+ "canvas-confetti": "^1.9.4",
60
+ "shiki": "^1.0.0"
61
+ },
62
+ "keywords": [
63
+ "svelte",
64
+ "react",
65
+ "vue",
66
+ "angular",
67
+ "web-component",
68
+ "animation",
69
+ "presentation",
70
+ "slides",
71
+ "morphing",
72
+ "animot",
73
+ "code-animation",
74
+ "typewriter",
75
+ "charts",
76
+ "particles"
77
+ ],
78
+ "license": "BUSL-1.1",
79
+ "repository": {
80
+ "type": "git",
81
+ "url": "https://github.com/animot/animot-presenter"
82
+ }
83
+ }