@dnyantra/dtly 0.0.0-stage → 0.1.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.
Files changed (68) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +135 -2
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +84 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/core/anim.d.ts +3 -0
  7. package/dist/core/anim.js +61 -0
  8. package/dist/core/anim.js.map +1 -0
  9. package/dist/core/color.d.ts +4 -0
  10. package/dist/core/color.js +28 -0
  11. package/dist/core/color.js.map +1 -0
  12. package/dist/core/ease.d.ts +8 -0
  13. package/dist/core/ease.js +90 -0
  14. package/dist/core/ease.js.map +1 -0
  15. package/dist/core/model.d.ts +229 -0
  16. package/dist/core/model.js +4 -0
  17. package/dist/core/model.js.map +1 -0
  18. package/dist/core/text.d.ts +41 -0
  19. package/dist/core/text.js +222 -0
  20. package/dist/core/text.js.map +1 -0
  21. package/dist/index.d.ts +10 -0
  22. package/dist/index.js +13 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/mcp/index.d.ts +1 -0
  25. package/dist/mcp/index.js +2 -0
  26. package/dist/mcp/index.js.map +1 -0
  27. package/dist/mcp/server.d.ts +3 -0
  28. package/dist/mcp/server.js +170 -0
  29. package/dist/mcp/server.js.map +1 -0
  30. package/dist/node.d.ts +4 -0
  31. package/dist/node.js +6 -0
  32. package/dist/node.js.map +1 -0
  33. package/dist/ops/ops.d.ts +38 -0
  34. package/dist/ops/ops.js +246 -0
  35. package/dist/ops/ops.js.map +1 -0
  36. package/dist/ops/store.d.ts +4 -0
  37. package/dist/ops/store.js +22 -0
  38. package/dist/ops/store.js.map +1 -0
  39. package/dist/presets/index.d.ts +14 -0
  40. package/dist/presets/index.js +235 -0
  41. package/dist/presets/index.js.map +1 -0
  42. package/dist/presets/text.d.ts +5 -0
  43. package/dist/presets/text.js +19 -0
  44. package/dist/presets/text.js.map +1 -0
  45. package/dist/render/export.d.ts +43 -0
  46. package/dist/render/export.js +215 -0
  47. package/dist/render/export.js.map +1 -0
  48. package/dist/render/ffmpeg.d.ts +1 -0
  49. package/dist/render/ffmpeg.js +16 -0
  50. package/dist/render/ffmpeg.js.map +1 -0
  51. package/dist/render/node-host.d.ts +18 -0
  52. package/dist/render/node-host.js +168 -0
  53. package/dist/render/node-host.js.map +1 -0
  54. package/dist/render/renderer.d.ts +36 -0
  55. package/dist/render/renderer.js +372 -0
  56. package/dist/render/renderer.js.map +1 -0
  57. package/dist/starter.d.ts +5 -0
  58. package/dist/starter.js +32 -0
  59. package/dist/starter.js.map +1 -0
  60. package/dist/version.d.ts +2 -0
  61. package/dist/version.js +3 -0
  62. package/dist/version.js.map +1 -0
  63. package/fonts/Baloo2.ttf +0 -0
  64. package/fonts/Mukta-Bold.ttf +0 -0
  65. package/fonts/OFL-Baloo2.txt +93 -0
  66. package/fonts/OFL-Mukta.txt +93 -0
  67. package/package.json +80 -4
  68. package/plugin/skills/dtly/SKILL.md +89 -0
@@ -0,0 +1,229 @@
1
+ export type Vec2 = [number, number];
2
+ export type Color = string;
3
+ export type EaseName = 'linear' | 'hold' | 'easeIn' | 'easeOut' | 'easyEase' | 'quadOut' | 'cubicOut' | 'expoIn' | 'expoOut' | 'expoInOut' | 'backOut' | 'backIn' | 'elasticOut' | 'bounceOut';
4
+ export type Ease = EaseName | [number, number, number, number] | {
5
+ spring: {
6
+ stiffness?: number;
7
+ damping?: number;
8
+ mass?: number;
9
+ };
10
+ };
11
+ export interface Keyframe<T> {
12
+ t: number;
13
+ v: T;
14
+ ease?: Ease;
15
+ }
16
+ export interface Wiggle {
17
+ freq: number;
18
+ amp: number;
19
+ seed?: number;
20
+ }
21
+ export interface Animated<T> {
22
+ keyframes: Keyframe<T>[];
23
+ wiggle?: Wiggle;
24
+ }
25
+ export type Prop<T> = T | Animated<T>;
26
+ export interface Transform {
27
+ anchor?: Prop<Vec2>;
28
+ position?: Prop<Vec2>;
29
+ scale?: Prop<Vec2>;
30
+ rotation?: Prop<number>;
31
+ opacity?: Prop<number>;
32
+ skew?: Prop<number>;
33
+ }
34
+ export type Effect = {
35
+ type: 'blur';
36
+ radius: Prop<number>;
37
+ } | {
38
+ type: 'dropShadow';
39
+ color?: Color;
40
+ blur?: Prop<number>;
41
+ distance?: Prop<number>;
42
+ angle?: number;
43
+ opacity?: Prop<number>;
44
+ } | {
45
+ type: 'glow';
46
+ color?: Color;
47
+ radius?: Prop<number>;
48
+ strength?: Prop<number>;
49
+ } | {
50
+ type: 'fill';
51
+ color: Color;
52
+ opacity?: Prop<number>;
53
+ } | {
54
+ type: 'brightness';
55
+ amount: Prop<number>;
56
+ } | {
57
+ type: 'saturate';
58
+ amount: Prop<number>;
59
+ } | {
60
+ type: 'contrast';
61
+ amount: Prop<number>;
62
+ };
63
+ export interface Mask {
64
+ shape: 'rect' | 'ellipse' | 'path';
65
+ rect?: Prop<[number, number, number, number]>;
66
+ points?: Vec2[];
67
+ radius?: number;
68
+ inverted?: boolean;
69
+ }
70
+ export interface Matte {
71
+ layer: string;
72
+ mode: 'alpha' | 'alphaInverted';
73
+ }
74
+ export type BlendMode = 'normal' | 'multiply' | 'screen' | 'overlay' | 'add' | 'darken' | 'lighten' | 'softLight' | 'difference';
75
+ export interface TextAnimator {
76
+ unit: 'grapheme' | 'word' | 'line';
77
+ mode?: 'in' | 'out';
78
+ delay?: number;
79
+ stagger?: number;
80
+ duration?: number;
81
+ order?: 'forward' | 'reverse' | 'center' | 'edges' | 'random';
82
+ ease?: Ease;
83
+ seed?: number;
84
+ clip?: boolean;
85
+ from: {
86
+ opacity?: number;
87
+ x?: number;
88
+ y?: number;
89
+ scale?: number;
90
+ rotation?: number;
91
+ blur?: number;
92
+ tracking?: number;
93
+ color?: Color;
94
+ };
95
+ }
96
+ interface LayerBase {
97
+ id: string;
98
+ name?: string;
99
+ inPoint?: number;
100
+ outPoint?: number;
101
+ parent?: string;
102
+ transform?: Transform;
103
+ blendMode?: BlendMode;
104
+ effects?: Effect[];
105
+ masks?: Mask[];
106
+ matte?: Matte;
107
+ hidden?: boolean;
108
+ motionBlur?: {
109
+ samples?: number;
110
+ shutter?: number;
111
+ };
112
+ }
113
+ export interface SolidLayer extends LayerBase {
114
+ type: 'solid';
115
+ color: Prop<Color>;
116
+ size?: Vec2;
117
+ }
118
+ export interface NullLayer extends LayerBase {
119
+ type: 'null';
120
+ }
121
+ export interface ShapeLayer extends LayerBase {
122
+ type: 'shape';
123
+ shape: 'rect' | 'ellipse' | 'polygon' | 'path' | 'line';
124
+ size?: Prop<Vec2>;
125
+ radius?: Prop<number>;
126
+ sides?: number;
127
+ points?: Vec2[];
128
+ closed?: boolean;
129
+ fill?: Prop<Color> | {
130
+ linear: {
131
+ from: Vec2;
132
+ to: Vec2;
133
+ stops: [number, Color][];
134
+ };
135
+ };
136
+ stroke?: Prop<Color>;
137
+ strokeWidth?: Prop<number>;
138
+ lineCap?: 'butt' | 'round' | 'square';
139
+ trim?: {
140
+ start?: Prop<number>;
141
+ end?: Prop<number>;
142
+ };
143
+ }
144
+ export interface TextLayer extends LayerBase {
145
+ type: 'text';
146
+ text: string;
147
+ font?: string;
148
+ weight?: number;
149
+ size?: Prop<number>;
150
+ color?: Prop<Color>;
151
+ align?: 'left' | 'center' | 'right';
152
+ lineHeight?: number;
153
+ tracking?: Prop<number>;
154
+ maxWidth?: number;
155
+ stroke?: {
156
+ color: Color;
157
+ width: number;
158
+ };
159
+ shadow?: {
160
+ color: Color;
161
+ blur: number;
162
+ x?: number;
163
+ y?: number;
164
+ };
165
+ box?: {
166
+ color: Prop<Color>;
167
+ padding?: [number, number];
168
+ radius?: number;
169
+ reveal?: Prop<number>;
170
+ };
171
+ animators?: TextAnimator[];
172
+ }
173
+ export interface ImageLayer extends LayerBase {
174
+ type: 'image';
175
+ src: string;
176
+ size?: Vec2;
177
+ fit?: 'cover' | 'contain' | 'fill';
178
+ }
179
+ export interface VideoLayer extends LayerBase {
180
+ type: 'video';
181
+ src: string;
182
+ size?: Vec2;
183
+ fit?: 'cover' | 'contain' | 'fill';
184
+ trimIn?: number;
185
+ speed?: number;
186
+ volume?: Prop<number>;
187
+ }
188
+ export interface AudioLayer extends LayerBase {
189
+ type: 'audio';
190
+ src: string;
191
+ trimIn?: number;
192
+ volume?: Prop<number>;
193
+ fadeIn?: number;
194
+ fadeOut?: number;
195
+ }
196
+ export interface PrecompLayer extends LayerBase {
197
+ type: 'precomp';
198
+ comp: string;
199
+ timeOffset?: number;
200
+ speed?: number;
201
+ }
202
+ export type Layer = SolidLayer | NullLayer | ShapeLayer | TextLayer | ImageLayer | VideoLayer | AudioLayer | PrecompLayer;
203
+ export type LayerType = Layer['type'];
204
+ export type NewLayer = Layer extends infer L ? (L extends Layer ? Omit<L, 'id'> & {
205
+ id?: string;
206
+ } : never) : never;
207
+ export interface Composition {
208
+ id: string;
209
+ name?: string;
210
+ width: number;
211
+ height: number;
212
+ fps: number;
213
+ duration: number;
214
+ background?: Color;
215
+ layers: Layer[];
216
+ markers?: {
217
+ t: number;
218
+ label: string;
219
+ }[];
220
+ }
221
+ export interface Project {
222
+ dtly: 1;
223
+ name: string;
224
+ root: string;
225
+ fonts?: Record<string, string[]>;
226
+ comps: Composition[];
227
+ }
228
+ export declare const isAnimated: <T>(p: Prop<T> | undefined) => p is Animated<T>;
229
+ export {};
@@ -0,0 +1,4 @@
1
+ // DT.ly document model — an After Effects-style project as plain JSON.
2
+ // Units follow AE: time in seconds, scale and opacity in percent, rotation in degrees.
3
+ export const isAnimated = (p) => typeof p === 'object' && p !== null && !Array.isArray(p) && 'keyframes' in p;
4
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/core/model.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,uFAAuF;AA4JvF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,CAAsB,EAAoB,EAAE,CACxE,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,WAAW,IAAI,CAAC,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type { TextAnimator, TextLayer } from './model.js';
2
+ type Ctx = CanvasRenderingContext2D;
3
+ export interface Unit {
4
+ text: string;
5
+ x: number;
6
+ y: number;
7
+ w: number;
8
+ line: number;
9
+ word: number;
10
+ grapheme: number;
11
+ }
12
+ export interface TextLayout {
13
+ lines: {
14
+ text: string;
15
+ x: number;
16
+ y: number;
17
+ w: number;
18
+ }[];
19
+ graphemes: Unit[];
20
+ words: Unit[];
21
+ width: number;
22
+ height: number;
23
+ top: number;
24
+ size: number;
25
+ }
26
+ export declare const graphemes: (s: string) => string[];
27
+ export declare const fontString: (layer: TextLayer, size: number, fallbackFamily: string) => string;
28
+ export declare const layoutText: (ctx: Ctx, layer: TextLayer, size: number, tracking: number, font: string) => TextLayout;
29
+ export interface UnitState {
30
+ opacity: number;
31
+ x: number;
32
+ y: number;
33
+ scale: number;
34
+ rotation: number;
35
+ blur: number;
36
+ tracking: number;
37
+ color?: string;
38
+ }
39
+ export declare const unitState: (animators: TextAnimator[], unitIndex: Record<TextAnimator['unit'], number>, counts: Record<TextAnimator['unit'], number>, lt: number, layerDur: number, baseColor: string) => UnitState;
40
+ export declare const drawText: (ctx: Ctx, layer: TextLayer, t: number, inPoint: number, outPoint: number, fallbackFamily: string) => void;
41
+ export {};
@@ -0,0 +1,222 @@
1
+ import { applyEase } from './ease.js';
2
+ import { parseColor, rgbaString } from './color.js';
3
+ import { val } from './anim.js';
4
+ const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
5
+ export const graphemes = (s) => [...segmenter.segment(s)].map((g) => g.segment);
6
+ export const fontString = (layer, size, fallbackFamily) => `${layer.weight ?? 700} ${size}px "${layer.font ?? fallbackFamily}"`;
7
+ const layoutCache = new Map();
8
+ // Lays text out once, measuring each grapheme at its position inside the shaped line,
9
+ // so per-letter animation of Devanagari keeps conjuncts and matras in place.
10
+ export const layoutText = (ctx, layer, size, tracking, font) => {
11
+ const key = [layer.text, font, tracking, layer.maxWidth, layer.align, layer.lineHeight].join('|');
12
+ const hit = layoutCache.get(key);
13
+ if (hit)
14
+ return hit;
15
+ ctx.font = font;
16
+ // skia (and some browsers) drop trailing whitespace from measureText, so measure with a sentinel.
17
+ const sentinel = ctx.measureText('|').width;
18
+ const advance = (s) => (/\s$/.test(s) ? ctx.measureText(`${s}|`).width - sentinel : ctx.measureText(s).width);
19
+ const measure = (s) => advance(s) + tracking * Math.max(0, graphemes(s).length - 1);
20
+ const lineHeight = (layer.lineHeight ?? 1.25) * size;
21
+ const rawLines = [];
22
+ for (const para of layer.text.split('\n')) {
23
+ if (!layer.maxWidth) {
24
+ rawLines.push(para);
25
+ continue;
26
+ }
27
+ let cur = '';
28
+ for (const word of para.split(' ')) {
29
+ const next = cur ? `${cur} ${word}` : word;
30
+ if (cur && measure(next) > layer.maxWidth) {
31
+ rawLines.push(cur);
32
+ cur = word;
33
+ }
34
+ else
35
+ cur = next;
36
+ }
37
+ rawLines.push(cur);
38
+ }
39
+ const align = layer.align ?? 'center';
40
+ const top = -(rawLines.length * lineHeight) / 2;
41
+ const out = { lines: [], graphemes: [], words: [], width: 0, height: rawLines.length * lineHeight, top, size };
42
+ let gi = 0, wi = 0;
43
+ rawLines.forEach((line, li) => {
44
+ const w = measure(line);
45
+ out.width = Math.max(out.width, w);
46
+ const x0 = align === 'left' ? 0 : align === 'right' ? -w : -w / 2;
47
+ // Baseline sits ~78% down the line box, which centres Latin and Devanagari well.
48
+ const y = top + li * lineHeight + lineHeight * 0.5 + size * 0.32;
49
+ out.lines.push({ text: line, x: x0, y, w });
50
+ const gs = graphemes(line);
51
+ let prefix = '';
52
+ let wordStart = null, wordText = '';
53
+ const flushWord = (endX) => {
54
+ if (wordStart !== null)
55
+ out.words.push({ text: wordText, x: wordStart, y, w: endX - wordStart, line: li, word: wi++, grapheme: gi });
56
+ wordStart = null;
57
+ wordText = '';
58
+ };
59
+ gs.forEach((g, i) => {
60
+ const x = x0 + (prefix ? advance(prefix) : 0) + tracking * i;
61
+ const gw = ctx.measureText(g).width;
62
+ if (g === ' ')
63
+ flushWord(x);
64
+ else {
65
+ if (wordStart === null)
66
+ wordStart = x;
67
+ wordText += g;
68
+ out.graphemes.push({ text: g, x, y, w: gw, line: li, word: wi, grapheme: gi++ });
69
+ }
70
+ prefix += g;
71
+ });
72
+ flushWord(x0 + w);
73
+ });
74
+ if (layoutCache.size > 500)
75
+ layoutCache.clear();
76
+ layoutCache.set(key, out);
77
+ return out;
78
+ };
79
+ const rank = (i, n, order, seed = 1) => {
80
+ switch (order) {
81
+ case 'reverse': return n - 1 - i;
82
+ case 'center': return Math.abs(i - (n - 1) / 2);
83
+ case 'edges': return (n - 1) / 2 - Math.abs(i - (n - 1) / 2);
84
+ case 'random': {
85
+ const ids = [...Array(n).keys()].sort((a, b) => Math.sin(a * 91.7 + seed) - Math.sin(b * 91.7 + seed));
86
+ return ids.indexOf(i);
87
+ }
88
+ default: return i;
89
+ }
90
+ };
91
+ // Combined animator state for one unit at local layer time `lt` (seconds since inPoint).
92
+ export const unitState = (animators, unitIndex, counts, lt, layerDur, baseColor) => {
93
+ const s = { opacity: 1, x: 0, y: 0, scale: 1, rotation: 0, blur: 0, tracking: 0 };
94
+ for (const a of animators) {
95
+ const n = counts[a.unit], i = unitIndex[a.unit];
96
+ const stagger = a.stagger ?? 0.05, dur = a.duration ?? 0.5, delay = a.delay ?? 0;
97
+ const r = rank(i, n, a.order, a.seed);
98
+ const maxRank = a.order === 'center' || a.order === 'edges' ? (n - 1) / 2 : n - 1;
99
+ let p;
100
+ if (a.mode === 'out') {
101
+ const start = layerDur - delay - dur - (maxRank - r) * stagger;
102
+ p = 1 - applyEase(a.ease ?? 'easeIn', Math.min(1, Math.max(0, (lt - start) / dur)), dur);
103
+ }
104
+ else {
105
+ const start = delay + r * stagger;
106
+ p = applyEase(a.ease ?? 'cubicOut', Math.min(1, Math.max(0, (lt - start) / dur)), dur);
107
+ }
108
+ const q = 1 - p; // amount of the "from" offset still applied
109
+ const f = a.from;
110
+ if (f.opacity !== undefined)
111
+ s.opacity *= (f.opacity + (100 - f.opacity) * p) / 100;
112
+ if (f.x)
113
+ s.x += f.x * q;
114
+ if (f.y)
115
+ s.y += f.y * q;
116
+ if (f.scale !== undefined)
117
+ s.scale *= (f.scale + (100 - f.scale) * p) / 100;
118
+ if (f.rotation)
119
+ s.rotation += f.rotation * q;
120
+ if (f.blur)
121
+ s.blur += f.blur * q;
122
+ if (f.tracking)
123
+ s.tracking += f.tracking * q;
124
+ if (f.color) {
125
+ const c0 = parseColor(f.color), c1 = parseColor(baseColor);
126
+ if (c0 && c1)
127
+ s.color = rgbaString(c0.map((v, k) => v + (c1[k] - v) * p));
128
+ }
129
+ }
130
+ return s;
131
+ };
132
+ const roundRect = (ctx, x, y, w, h, r) => {
133
+ ctx.beginPath();
134
+ ctx.roundRect(x, y, w, h, r);
135
+ };
136
+ // Draws a text layer in its own layer space (origin = alignment point, vertically centred).
137
+ export const drawText = (ctx, layer, t, inPoint, outPoint, fallbackFamily) => {
138
+ const size = val(layer.size, t, 72);
139
+ const tracking = val(layer.tracking, t, 0);
140
+ const color = val(layer.color, t, '#ffffff');
141
+ const font = fontString(layer, size, fallbackFamily);
142
+ const L = layoutText(ctx, layer, size, tracking, font);
143
+ ctx.font = font;
144
+ ctx.textAlign = 'left';
145
+ ctx.textBaseline = 'alphabetic';
146
+ if (layer.box) {
147
+ const [px, py] = layer.box.padding ?? [24, 12];
148
+ const reveal = val(layer.box.reveal, t, 100) / 100;
149
+ const x0 = Math.min(...L.lines.map((l) => l.x)) - px;
150
+ const bw = L.width + px * 2, bh = L.height + py * 2;
151
+ if (reveal > 0) {
152
+ ctx.save();
153
+ ctx.beginPath();
154
+ ctx.rect(x0, L.top - py, bw * reveal, bh);
155
+ ctx.clip();
156
+ ctx.fillStyle = val(layer.box.color, t, '#000');
157
+ roundRect(ctx, x0, L.top - py, bw, bh, layer.box.radius ?? 12);
158
+ ctx.fill();
159
+ ctx.restore();
160
+ }
161
+ }
162
+ if (layer.shadow) {
163
+ ctx.shadowColor = layer.shadow.color;
164
+ ctx.shadowBlur = layer.shadow.blur;
165
+ ctx.shadowOffsetX = layer.shadow.x ?? 0;
166
+ ctx.shadowOffsetY = layer.shadow.y ?? 0;
167
+ }
168
+ const paint = (s, x, y, fill) => {
169
+ if (layer.stroke) {
170
+ ctx.lineJoin = 'round';
171
+ ctx.lineWidth = layer.stroke.width;
172
+ ctx.strokeStyle = layer.stroke.color;
173
+ ctx.strokeText(s, x, y);
174
+ }
175
+ ctx.fillStyle = fill;
176
+ ctx.fillText(s, x, y);
177
+ };
178
+ const animators = layer.animators ?? [];
179
+ if (animators.length === 0) {
180
+ for (const l of L.lines)
181
+ paint(l.text, l.x, l.y, color);
182
+ return;
183
+ }
184
+ // Draw at the finest unit any animator needs; coarser units keep whole-word shaping.
185
+ const finest = animators.some((a) => a.unit === 'grapheme') ? 'grapheme' : animators.some((a) => a.unit === 'word') ? 'word' : 'line';
186
+ const units = finest === 'grapheme' ? L.graphemes : finest === 'word' ? L.words : L.lines.map((l, i) => ({ ...l, line: i, word: 0, grapheme: 0 }));
187
+ const counts = { grapheme: L.graphemes.length, word: L.words.length, line: L.lines.length };
188
+ const lt = t - inPoint, dur = outPoint - inPoint;
189
+ const clip = animators.some((a) => a.clip);
190
+ const lineHeight = L.height / L.lines.length;
191
+ const lineCounts = new Map();
192
+ for (const u of units)
193
+ lineCounts.set(u.line, (lineCounts.get(u.line) ?? 0) + 1);
194
+ const lineIdx = new Map();
195
+ for (const u of units) {
196
+ const idxInLine = lineIdx.get(u.line) ?? 0;
197
+ lineIdx.set(u.line, idxInLine + 1);
198
+ const st = unitState(animators, { grapheme: u.grapheme, word: u.word, line: u.line }, counts, lt, dur, color);
199
+ if (st.opacity <= 0.001)
200
+ continue;
201
+ ctx.save();
202
+ if (clip) {
203
+ ctx.beginPath();
204
+ ctx.rect(-1e5, L.top + u.line * lineHeight, 2e5, lineHeight);
205
+ ctx.clip();
206
+ }
207
+ const spread = st.tracking * (idxInLine - ((lineCounts.get(u.line) ?? 1) - 1) / 2);
208
+ const cx = u.x + u.w / 2 + st.x + spread;
209
+ const cy = u.y - size * 0.35 + st.y;
210
+ ctx.translate(cx, cy);
211
+ if (st.rotation)
212
+ ctx.rotate((st.rotation * Math.PI) / 180);
213
+ if (st.scale !== 1)
214
+ ctx.scale(st.scale, st.scale);
215
+ ctx.globalAlpha *= st.opacity;
216
+ if (st.blur > 0.1)
217
+ ctx.filter = `blur(${st.blur.toFixed(2)}px)`;
218
+ paint(u.text, -u.w / 2, size * 0.35, st.color ?? color);
219
+ ctx.restore();
220
+ }
221
+ };
222
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/core/text.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export * from './core/model.js';
2
+ export { applyEase, spring, EASE_NAMES } from './core/ease.js';
3
+ export { val, evalKeyframes } from './core/anim.js';
4
+ export { parseColor, withAlpha } from './core/color.js';
5
+ export { layoutText, drawText, graphemes } from './core/text.js';
6
+ export * from './ops/ops.js';
7
+ export { PRESETS, listPresets, type Preset } from './presets/index.js';
8
+ export { TEXT_ANIMATORS } from './presets/text.js';
9
+ export { Renderer, type Host, type CanvasLike, type Drawable } from './render/renderer.js';
10
+ export { VERSION, BRAND } from './version.js';
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ // DT.ly core: the document model, editing operations, presets and the environment-agnostic
2
+ // renderer. Safe to import in a browser; Node rendering lives in "@dnyantra/dtly/node".
3
+ export * from './core/model.js';
4
+ export { applyEase, spring, EASE_NAMES } from './core/ease.js';
5
+ export { val, evalKeyframes } from './core/anim.js';
6
+ export { parseColor, withAlpha } from './core/color.js';
7
+ export { layoutText, drawText, graphemes } from './core/text.js';
8
+ export * from './ops/ops.js';
9
+ export { PRESETS, listPresets } from './presets/index.js';
10
+ export { TEXT_ANIMATORS } from './presets/text.js';
11
+ export { Renderer } from './render/renderer.js';
12
+ export { VERSION, BRAND } from './version.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,wFAAwF;AACxF,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAC,GAAG,EAAE,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAC,UAAU,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAC/D,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAC,OAAO,EAAE,WAAW,EAAc,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAC,cAAc,EAAC,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAC,QAAQ,EAA4C,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAC,OAAO,EAAE,KAAK,EAAC,MAAM,cAAc,CAAC"}
@@ -0,0 +1 @@
1
+ export { createMcpServer, startMcpServer } from './server.js';
@@ -0,0 +1,2 @@
1
+ export { createMcpServer, startMcpServer } from './server.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAE,cAAc,EAAC,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare const createMcpServer: () => McpServer;
3
+ export declare const startMcpServer: () => Promise<void>;