exodeui 6.3.14 → 6.3.19

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.
@@ -17,6 +17,7 @@ export declare class ExodeUIEngine {
17
17
  private maskCtx;
18
18
  private lumaBuffer;
19
19
  private lumaCtx;
20
+ private _noiseTileCanvas;
20
21
  private layout;
21
22
  private onTrigger?;
22
23
  private onInputUpdate?;
@@ -47,6 +48,9 @@ export declare class ExodeUIEngine {
47
48
  private _totalScroll;
48
49
  private draggingBehaviors;
49
50
  private isMouseDown;
51
+ private _layoutAnimCache;
52
+ private _springChainState;
53
+ private _emitterPools;
50
54
  private objectVelocities;
51
55
  private currentTime;
52
56
  private frameCount;
@@ -180,6 +184,17 @@ export declare class ExodeUIEngine {
180
184
  private applyAbsoluteTransform;
181
185
  private applyObjectTransform;
182
186
  private applyArtEffectOverlay;
187
+ /** Helper: shift the hue of a hex/hsl color by degrees, return as hsla */
188
+ private _shiftHue;
189
+ /**
190
+ * Simulate CSS `backdrop-filter: blur()` + glass overlay on Canvas2D.
191
+ * Since real backdrop-filter is not available in canvas, we:
192
+ * 1. Sample the canvas pixels behind this object's bounding box
193
+ * 2. Draw them into an offscreen canvas and apply a blur filter
194
+ * 3. Clip to the object shape and paint the blurred backdrop
195
+ * 4. Apply the overlay color tint, sheen highlight, noise grain, and glass border
196
+ */
197
+ private applyBackgroundBlurGlass;
183
198
  private applyPath;
184
199
  private _tracePath;
185
200
  private renderInputBox;
@@ -188,6 +203,11 @@ export declare class ExodeUIEngine {
188
203
  private renderButton;
189
204
  private renderToggleButton;
190
205
  private renderToggle;
206
+ private renderCheckbox;
207
+ private renderRadioGroup;
208
+ private renderBarChart;
209
+ private renderPieChart;
210
+ private getRadioGroupItemIndexAtPointer;
191
211
  private renderLineGraph;
192
212
  private _catmullRom;
193
213
  private normalizeOpacity;
@@ -200,6 +220,9 @@ export declare class ExodeUIEngine {
200
220
  private drawListViewRect;
201
221
  private solveBehaviors;
202
222
  private applyBehaviorSensor;
223
+ private getObjectProperty;
224
+ private setObjectProperty;
225
+ private applyEasing;
203
226
  private lerp;
204
227
  private deepMerge;
205
228
  private renderFittedImage;
@@ -249,6 +249,7 @@ export type Geometry = {
249
249
  textDecoration?: 'none' | 'underline' | 'line-through';
250
250
  textCase?: 'none' | 'uppercase' | 'lowercase' | 'capitalize';
251
251
  paragraphSpacing?: number;
252
+ paragraphIndent?: number;
252
253
  textInputId?: string;
253
254
  segments?: {
254
255
  text: string;
@@ -277,6 +278,38 @@ export type Geometry = {
277
278
  isEnabled: boolean;
278
279
  };
279
280
  fontStyle?: 'normal' | 'italic';
281
+ isPointText?: boolean;
282
+ autoHeight?: boolean;
283
+ padding?: {
284
+ top?: number;
285
+ right?: number;
286
+ bottom?: number;
287
+ left?: number;
288
+ };
289
+ smallCaps?: boolean;
290
+ baselineShift?: number;
291
+ hyphenation?: boolean;
292
+ composer?: 'single-line' | 'every-line';
293
+ balanceRaggedLines?: boolean;
294
+ kerning?: 'auto' | 'optical' | 'manual' | 'none';
295
+ kerningValue?: number;
296
+ justifyMinWordSpacing?: number;
297
+ justifyMaxWordSpacing?: number;
298
+ justifyMinLetterSpacing?: number;
299
+ justifyMaxLetterSpacing?: number;
300
+ paragraphRule?: {
301
+ top?: {
302
+ width: number;
303
+ color: string;
304
+ offset: number;
305
+ };
306
+ bottom?: {
307
+ width: number;
308
+ color: string;
309
+ offset: number;
310
+ };
311
+ };
312
+ pathFlip?: boolean;
280
313
  } | {
281
314
  type: 'Triangle';
282
315
  width: number;
@@ -415,7 +448,13 @@ export declare enum BehaviorType {
415
448
  Lens = "Lens",
416
449
  Gravity = "Gravity",
417
450
  Velocity = "Velocity",
418
- Shear = "Shear"
451
+ Shear = "Shear",
452
+ LayoutAnimation = "LayoutAnimation",
453
+ SpringChain = "SpringChain",
454
+ ParticleEmitter = "ParticleEmitter",
455
+ StateReactive = "StateReactive",
456
+ Fold = "Fold",
457
+ Crumple = "Crumple"
419
458
  }
420
459
  export declare enum BehaviorSensor {
421
460
  Scale = "Scale",
@@ -514,8 +553,47 @@ export interface Constraint {
514
553
  damping?: number;
515
554
  mass?: number;
516
555
  }
556
+ export interface BoneIKConfig {
557
+ boneCount: number;
558
+ solver: 'analytic-2bone' | 'ccd';
559
+ }
560
+ export interface BoneSplineConfig {
561
+ points: {
562
+ x: number;
563
+ y: number;
564
+ }[];
565
+ tension: number;
566
+ }
567
+ export type BoneMode = 'fk' | 'ik' | 'spline';
568
+ export interface BoneObject {
569
+ type: 'Bone';
570
+ id: string;
571
+ name: string;
572
+ transform: Transform;
573
+ geometry: {
574
+ type: 'Bone';
575
+ length: number;
576
+ isTip?: boolean;
577
+ };
578
+ style: Style;
579
+ mode?: BoneMode;
580
+ ikConfig?: BoneIKConfig;
581
+ splineConfig?: BoneSplineConfig;
582
+ opacity?: number;
583
+ visible?: boolean;
584
+ isVisible?: boolean;
585
+ parentId?: string;
586
+ children?: string[];
587
+ options?: any;
588
+ triggers?: Trigger[];
589
+ interactions?: Interaction[];
590
+ constraints?: Constraint[];
591
+ physics?: Physics;
592
+ behaviors?: Behavior[];
593
+ masks?: any[];
594
+ }
517
595
  export interface ShapeObject {
518
- type: 'Shape' | 'Group' | 'Component' | 'Frame' | 'Button' | 'Bone' | 'Toggle' | 'Slider' | 'Dropdown' | 'ListView';
596
+ type: 'Shape' | 'Group' | 'Component' | 'Frame' | 'Button' | 'Bone' | 'Toggle' | 'Slider' | 'Dropdown' | 'ListView' | 'Checkbox' | 'RadioGroup' | 'BarChart' | 'PieChart';
519
597
  id: string;
520
598
  name: string;
521
599
  transform: Transform;
@@ -553,6 +631,15 @@ export interface ShapeObject {
553
631
  layoutProps?: LayoutProps;
554
632
  altText?: string;
555
633
  repeaterConfig?: RepeaterConfig;
634
+ weights?: {
635
+ [vertexIndex: number]: {
636
+ boneId: string;
637
+ amount: number;
638
+ }[];
639
+ };
640
+ bindMatrices?: {
641
+ [boneId: string]: number[];
642
+ };
556
643
  }
557
644
  export interface Keyframe {
558
645
  time: number;
@@ -718,7 +805,10 @@ export declare enum LogicOp {
718
805
  IS_MOUSE_DOWN = "IS_MOUSE_DOWN",
719
806
  EFFECTOR = "EFFECTOR",
720
807
  MONITOR = "MONITOR",
721
- DELAY = "DELAY"
808
+ DELAY = "DELAY",
809
+ SPRING_PULL = "SPRING_PULL",
810
+ SPRING_SETTLE = "SPRING_SETTLE",
811
+ EMIT = "EMIT"
722
812
  }
723
813
  export interface LogicNode {
724
814
  id: string;
@@ -0,0 +1,27 @@
1
+ export interface Transform {
2
+ x: number;
3
+ y: number;
4
+ rotation: number;
5
+ scale_x?: number;
6
+ scale_y?: number;
7
+ }
8
+ export interface WeightData {
9
+ boneId: string;
10
+ amount: number;
11
+ }
12
+ /**
13
+ * Deforms an array of points (including bezier handles) based on their vertex weights,
14
+ * the inverse bind matrices of the bones, and the current world transforms of the shape and bones.
15
+ *
16
+ * @param points The original rest-pose points (e.g. from geometry.points).
17
+ * @param weights A map from vertex index to an array of bone weights.
18
+ * @param bindMatrices A map from boneId to its inverse bind matrix [a, b, c, d, tx, ty].
19
+ * @param shapeWorld The current world transform of the shape being deformed.
20
+ * @param getGlobalTransform A callback to fetch the current world transform of a bone by ID.
21
+ * @returns A new array of deformed points.
22
+ */
23
+ export declare const deformPathPoints: (points: any[], weights: {
24
+ [vertexIndex: number]: WeightData[];
25
+ }, bindMatrices: {
26
+ [boneId: string]: number[];
27
+ }, shapeWorld: Transform, getGlobalTransform: (id: string) => Transform | null) => any[];
@@ -12,6 +12,9 @@ export interface TextMeasurementOptions {
12
12
  textCase?: 'uppercase' | 'lowercase' | 'capitalize' | 'none';
13
13
  segments?: any[];
14
14
  enableSegments?: boolean;
15
+ hyphenation?: boolean;
16
+ composer?: 'single-line' | 'every-line';
17
+ balanceRaggedLines?: boolean;
15
18
  }
16
19
  export declare function measureText(options: TextMeasurementOptions): {
17
20
  width: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "exodeui",
3
- "version": "6.3.14",
3
+ "version": "6.3.19",
4
4
  "description": "React Runtime for ExodeUI Animation Engine",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",