@eva/plugin-ui 2.1.0-beta.1 → 2.1.0-beta.2

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.
@@ -21,6 +21,15 @@ export declare interface CheckBoxParams {
21
21
  checked?: ViewRef;
22
22
  unchecked?: ViewRef;
23
23
  };
24
+ textStyle?: {
25
+ fontFamily?: string;
26
+ fontSize?: number;
27
+ fill?: string | number;
28
+ };
29
+ textOffset?: {
30
+ x?: number;
31
+ y?: number;
32
+ };
24
33
  disabledStyle?: CheckBoxStateStyle;
25
34
  }
26
35
 
@@ -30,7 +39,7 @@ export declare interface CheckBoxStateStyle {
30
39
  }
31
40
 
32
41
  /** 圆形样式 */
33
- export declare interface CircleStyle extends UIStyle {
42
+ export declare interface CircleStyle extends ShapeStyle {
34
43
  x?: number;
35
44
  y?: number;
36
45
  radius: number;
@@ -48,7 +57,13 @@ export declare interface CircularProgressBarParams {
48
57
  fillColor?: number | string;
49
58
  backgroundAlpha?: number;
50
59
  fillAlpha?: number;
60
+ cap?: 'round' | 'butt' | 'square';
51
61
  bindToStore?: string;
62
+ rotation?: number;
63
+ offset?: {
64
+ x?: number;
65
+ y?: number;
66
+ };
52
67
  }
53
68
 
54
69
  export declare const COMPONENT_DEFINITIONS: Record<string, ComponentDefinition>;
@@ -74,6 +89,8 @@ export declare interface ComponentDefinition<TParams = any, TInstance = any> {
74
89
  signalMap?: (component: TParams & Record<string, any>) => Record<string, true | ((...args: any[]) => Record<string, any>)>;
75
90
  /** CHANGE 事件触发,把字段写回 PIXI 实例 */
76
91
  syncOnChange?: (instance: TInstance, component: TParams & Record<string, any>) => void;
92
+ /** Transform.size -> @pixi/ui 实例尺寸同步。未提供时由 UISystem 使用通用 setSize/width/height 策略。 */
93
+ applySize?: (instance: TInstance, size: UiRenderSize, component: TParams & Record<string, any>, context: UiSizeSyncContext) => void;
77
94
  /** ADD 完成后跑(Dialog 挂 content / MaskedFrame 挂 border)*/
78
95
  onAttachedExtra?: (instance: TInstance, component: TParams & Record<string, any>, go: any, game: any) => void;
79
96
  /** 实例方法 mixin(注入到 wrapper class.prototype) */
@@ -84,6 +101,51 @@ export declare function defineUiComponent<TParams = any, TInstance = any>(def: C
84
101
 
85
102
  export declare const Dialog: UiComponentClass<DialogParams>;
86
103
 
104
+ declare interface DialogButtonParams {
105
+ kind?: 'button' | 'fancy';
106
+ text?: string;
107
+ value?: string | number;
108
+ closeOnPress?: boolean;
109
+ reopenDelay?: number;
110
+ width?: number;
111
+ height?: number;
112
+ radius?: number;
113
+ color?: number | string;
114
+ hoverColor?: number | string;
115
+ pressedColor?: number | string;
116
+ disabledColor?: number | string;
117
+ defaultView?: string;
118
+ hoverView?: string;
119
+ pressedView?: string;
120
+ disabledView?: string;
121
+ nineSliceSprite?: [number, number, number, number];
122
+ textStyle?: {
123
+ fontFamily?: string;
124
+ fontSize?: number;
125
+ fill?: string | number;
126
+ fontWeight?: string;
127
+ };
128
+ disabled?: boolean;
129
+ animations?: unknown;
130
+ }
131
+
132
+ declare interface DialogCheckBoxParams {
133
+ text?: string;
134
+ size?: number;
135
+ radius?: number;
136
+ checked?: boolean;
137
+ uncheckedColor?: number | string;
138
+ checkedColor?: number | string;
139
+ strokeColor?: number | string;
140
+ strokeWidth?: number;
141
+ textStyle?: {
142
+ fontFamily?: string;
143
+ fontSize?: number;
144
+ fill?: string | number;
145
+ fontWeight?: string;
146
+ };
147
+ }
148
+
87
149
  export declare interface DialogParams {
88
150
  open?: boolean;
89
151
  title?: string;
@@ -98,6 +160,50 @@ export declare interface DialogParams {
98
160
  contentChildName?: string;
99
161
  nineSliceSprite?: [number, number, number, number];
100
162
  bindToStore?: string;
163
+ titleStyle?: {
164
+ fontFamily?: string;
165
+ fontSize?: number;
166
+ fill?: string | number;
167
+ fontWeight?: string;
168
+ lineHeight?: number;
169
+ dropShadow?: unknown;
170
+ };
171
+ content?: string;
172
+ contentStyle?: {
173
+ fontFamily?: string;
174
+ fontSize?: number;
175
+ fill?: string | number;
176
+ fontWeight?: string;
177
+ align?: 'left' | 'center' | 'right';
178
+ wordWrap?: boolean;
179
+ wordWrapWidth?: number;
180
+ lineHeight?: number;
181
+ dropShadow?: unknown;
182
+ };
183
+ contentButtons?: DialogButtonParams[];
184
+ contentCheckBoxes?: DialogCheckBoxParams[];
185
+ buttons?: DialogButtonParams[];
186
+ buttonList?: {
187
+ elementsMargin?: number;
188
+ type?: ListType;
189
+ padding?: number;
190
+ };
191
+ buttonListOffset?: {
192
+ x?: number;
193
+ y?: number;
194
+ };
195
+ scrollBox?: Partial<ScrollBoxParams> & {
196
+ type?: ListType;
197
+ offset?: {
198
+ x?: number;
199
+ y?: number;
200
+ };
201
+ size?: {
202
+ width?: number;
203
+ height?: number;
204
+ };
205
+ };
206
+ animations?: unknown;
101
207
  }
102
208
 
103
209
  export declare const DoubleSlider: UiComponentClass<DoubleSliderParams>;
@@ -116,12 +222,28 @@ export declare interface DoubleSliderParams {
116
222
  slider1?: ViewRef;
117
223
  slider2?: ViewRef;
118
224
  };
225
+ nineSliceSprite?: {
226
+ bg?: [number, number, number, number];
227
+ fill?: [number, number, number, number];
228
+ };
229
+ fillPaddings?: ProgressBarFillPaddings;
230
+ valueTextStyle?: {
231
+ fontFamily?: string;
232
+ fontSize?: number;
233
+ fill?: string | number;
234
+ };
235
+ valueTextOffset?: {
236
+ x?: number;
237
+ y?: number;
238
+ };
239
+ width?: number;
240
+ height?: number;
119
241
  bindToStore1?: string;
120
242
  bindToStore2?: string;
121
243
  }
122
244
 
123
245
  /** 椭圆样式 */
124
- export declare interface EllipseStyle extends UIStyle {
246
+ export declare interface EllipseStyle extends ShapeStyle {
125
247
  x?: number;
126
248
  y?: number;
127
249
  width: number;
@@ -159,9 +281,44 @@ export declare interface FancyButtonParams {
159
281
  views?: FancyButtonViewRefs;
160
282
  offset?: FancyButtonOffset;
161
283
  textOffset?: FancyButtonOffset;
284
+ iconOffset?: FancyButtonOffset;
162
285
  padding?: number;
163
286
  nineSliceSprite?: [number, number, number, number];
164
287
  selectedTint?: string;
288
+ textStyle?: {
289
+ fontFamily?: string;
290
+ fontSize?: number;
291
+ fill?: string | number;
292
+ fontWeight?: string;
293
+ dropShadow?: unknown;
294
+ };
295
+ textClass?: 'text' | 'html' | 'bitmap';
296
+ bitmapFontName?: string;
297
+ defaultTextScale?: {
298
+ x?: number;
299
+ y?: number;
300
+ } | number;
301
+ defaultIconScale?: {
302
+ x?: number;
303
+ y?: number;
304
+ } | number;
305
+ defaultTextAnchor?: {
306
+ x?: number;
307
+ y?: number;
308
+ } | number;
309
+ defaultIconAnchor?: {
310
+ x?: number;
311
+ y?: number;
312
+ } | number;
313
+ anchor?: number;
314
+ anchorX?: number;
315
+ anchorY?: number;
316
+ scale?: number;
317
+ animations?: unknown;
318
+ contentFittingMode?: 'default' | 'fill' | 'none';
319
+ ignoreRefitting?: boolean;
320
+ width?: number;
321
+ height?: number;
165
322
  }
166
323
 
167
324
  export declare type FancyButtonState = 'default' | 'hover' | 'pressed' | 'disabled' | 'selected';
@@ -171,6 +328,7 @@ export declare interface FancyButtonViewRefs {
171
328
  hover?: ViewRef;
172
329
  pressed?: ViewRef;
173
330
  disabled?: ViewRef;
331
+ icon?: ViewRef;
174
332
  }
175
333
 
176
334
  export declare type FieldKind = 'scalar' | 'shallowMerge' | 'arrayCopy' | 'tuple' | 'opaque';
@@ -214,6 +372,8 @@ export declare interface InputParams {
214
372
  cleanOnFocus?: boolean;
215
373
  addMask?: boolean;
216
374
  bindToStore?: string;
375
+ width?: number;
376
+ height?: number;
217
377
  }
218
378
 
219
379
  export declare interface InputStyle {
@@ -276,6 +436,8 @@ export declare interface MaskedFrameParams {
276
436
  targetView?: ViewRef;
277
437
  maskView?: ViewRef;
278
438
  borderView?: ViewRef;
439
+ borderWidth?: number;
440
+ borderColor?: number | string;
279
441
  }
280
442
 
281
443
  /**
@@ -287,12 +449,20 @@ export declare class PixiUiComponent<TParams = any> extends Component<TParams> {
287
449
  /** runtime 计数,供 spec / debug 验证(toggleCount / pressCount / hoverCount / ...)*/
288
450
  toggleCount: number;
289
451
  pressCount: number;
452
+ downCount: number;
453
+ upCount: number;
290
454
  hoverCount: number;
455
+ outCount: number;
456
+ upOutCount: number;
291
457
  changeCount: number;
292
458
  updateCount: number;
293
459
  selectCount: number;
460
+ lastSignal: string;
461
+ visualState: string;
294
462
  /** Input 私有 focused */
295
463
  focused: boolean;
464
+ /** DSL/constructor 中显式传入过的字段,用于区分 metadata default 与用户配置。 */
465
+ __evaExplicitFields: Set<string>;
296
466
  /** 由 factory 通过 metadata 注入的动态字段(views / value / checked / ...)*/
297
467
  [key: string]: any;
298
468
  init(p?: TParams): void;
@@ -321,6 +491,8 @@ export declare interface ProgressBarParams {
321
491
  };
322
492
  fillPaddings?: ProgressBarFillPaddings;
323
493
  bindToStore?: string;
494
+ width?: number;
495
+ height?: number;
324
496
  }
325
497
 
326
498
  export declare class RadioGroup extends Component<RadioGroupParams> {
@@ -350,7 +522,7 @@ export declare interface RadioGroupParams {
350
522
  }
351
523
 
352
524
  /** 矩形样式 */
353
- export declare interface RectStyle extends UIStyle {
525
+ export declare interface RectStyle extends ShapeStyle {
354
526
  x?: number;
355
527
  y?: number;
356
528
  width: number;
@@ -367,7 +539,7 @@ export declare interface ResolvedViews {
367
539
  }
368
540
 
369
541
  /** 圆角矩形样式 */
370
- export declare interface RoundedRectStyle extends UIStyle {
542
+ export declare interface RoundedRectStyle extends ShapeStyle {
371
543
  x?: number;
372
544
  y?: number;
373
545
  width: number;
@@ -388,6 +560,16 @@ export declare interface ScrollBoxParams {
388
560
  disableDynamicRendering?: boolean;
389
561
  disableEasing?: boolean;
390
562
  padding?: number;
563
+ vertPadding?: number;
564
+ horPadding?: number;
565
+ topPadding?: number;
566
+ bottomPadding?: number;
567
+ leftPadding?: number;
568
+ rightPadding?: number;
569
+ globalScroll?: boolean;
570
+ shiftScroll?: boolean;
571
+ proximityRange?: number;
572
+ proximityDebounce?: number;
391
573
  inertia?: boolean;
392
574
  inertiaDecay?: number;
393
575
  bounceFactor?: number;
@@ -415,47 +597,36 @@ export declare interface SelectParams {
415
597
  };
416
598
  nineSliceSprite?: [number, number, number, number];
417
599
  bindToStore?: string;
418
- }
419
-
420
- export declare const Slider: UiComponentClass<SliderParams>;
421
-
422
- export declare type SliderOrientation = 'horizontal' | 'vertical';
423
-
424
- export declare interface SliderParams {
425
- enabled?: boolean;
426
- value?: number;
427
- min?: number;
428
- max?: number;
429
- step?: number;
430
- orientation?: SliderOrientation;
431
- showValue?: boolean;
432
- views?: {
433
- bg?: ViewRef;
434
- fill?: ViewRef;
435
- thumb?: ViewRef;
600
+ width?: number;
601
+ height?: number;
602
+ radius?: number;
603
+ visibleItems?: number;
604
+ itemWidth?: number;
605
+ itemHeight?: number;
606
+ itemBackgroundColor?: number | string;
607
+ itemHoverColor?: number | string;
608
+ selectedTextOffset?: {
609
+ x?: number;
610
+ y?: number;
436
611
  };
437
- bindToStore?: string;
438
- }
439
-
440
- export declare const Switcher: UiComponentClass<SwitcherParams>;
441
-
442
- export declare interface SwitcherParams {
443
- active?: number;
444
- views?: ViewRef[];
445
- triggerEvent?: SwitcherTriggerEvent;
446
- bindToStore?: string;
612
+ scrollBox?: Partial<ScrollBoxParams> & {
613
+ offset?: {
614
+ x?: number;
615
+ y?: number;
616
+ };
617
+ };
618
+ textClass?: 'text' | 'html';
619
+ open?: boolean;
447
620
  }
448
621
 
449
- export declare type SwitcherTriggerEvent = 'onPress' | 'onDown' | 'onUp' | 'onHover' | 'onOut';
450
-
451
622
  /**
452
- * UI 组件
623
+ * Shape 组件
453
624
  *
454
625
  * 基于 `@eva/plugin-renderer-graphics` 实现 rect/circle/ellipse/roundedRect 的
455
626
  * 矢量绘制,支持纯色 / linear-gradient 填充与描边。`shapes` 数组允许在同一个
456
627
  * GameObject 上层叠多个形状。
457
628
  */
458
- export declare class UI extends Component<UIParams> {
629
+ declare class Shape extends Component<ShapeParams> {
459
630
  /** 组件名称 */
460
631
  static componentName: string;
461
632
  /** 实例侧 componentName,DSL 序列化时使用 */
@@ -463,7 +634,7 @@ export declare class UI extends Component<UIParams> {
463
634
  private shapes;
464
635
  /** 编辑器 Inspector 元数据,主仓 ComponentInspector 通过静态方法读取 */
465
636
  static getInspectorMetadata(): InspectorFieldMetadata;
466
- init(params?: UIParams): void;
637
+ init(params?: ShapeParams): void;
467
638
  awake(): void;
468
639
  start(): void;
469
640
  /**
@@ -493,17 +664,17 @@ export declare class UI extends Component<UIParams> {
493
664
  private drawEllipse;
494
665
  private drawRoundedRect;
495
666
  /** 追加一个形状 */
496
- addShape(type: UIShapeType, style: RectStyle | CircleStyle | EllipseStyle | RoundedRectStyle): void;
667
+ addShape(type: ShapeType, style: RectStyle | CircleStyle | EllipseStyle | RoundedRectStyle): void;
497
668
  /** 清除所有形状 */
498
669
  clearShapes(): void;
499
670
  /** 更新指定索引的形状 */
500
- updateShape(index: number, type: UIShapeType, style: RectStyle | CircleStyle | EllipseStyle | RoundedRectStyle): void;
671
+ updateShape(index: number, type: ShapeType, style: RectStyle | CircleStyle | EllipseStyle | RoundedRectStyle): void;
501
672
  /** 移除指定索引的形状 */
502
673
  removeShape(index: number): void;
503
674
  /** 获取形状数量 */
504
675
  getShapeCount(): number;
505
676
  /** 获取指定索引的形状(只读视图) */
506
- getShape(index: number): UIShape | null;
677
+ getShape(index: number): ShapeDefinition | null;
507
678
  /** 设置所有形状的透明度 */
508
679
  setAlpha(alpha: number): void;
509
680
  /** 设置所有形状的填充色 */
@@ -511,37 +682,26 @@ export declare class UI extends Component<UIParams> {
511
682
  /** 设置所有形状的描边 */
512
683
  setStroke(stroke: string, lineWidth?: number): void;
513
684
  }
514
-
515
- declare type UiComponentClass<TParams = any> = new () => PixiUiComponent<TParams>;
516
-
517
- /** 兼容别名:历史代码中沿用的 UIComponentParams */
518
- export declare type UIComponentParams = UIParams;
519
-
520
- /** UI 组件参数接口 */
521
- export declare interface UIParams {
522
- componentName?: string;
523
- shapes?: UIShape[];
524
- /** 单形状简化用法:type + style */
525
- type?: UIShapeType;
526
- style?: RectStyle | CircleStyle | EllipseStyle | RoundedRectStyle;
527
- }
685
+ export { Shape }
686
+ export { Shape as UI }
528
687
 
529
688
  /** 单个 shape 描述 */
530
- export declare interface UIShape {
531
- type: UIShapeType;
689
+ export declare interface ShapeDefinition {
690
+ type: ShapeType;
532
691
  style: RectStyle | CircleStyle | EllipseStyle | RoundedRectStyle;
533
692
  }
534
693
 
535
- /** UI 形状类型枚举 */
536
- export declare enum UIShapeType {
537
- RECT = "rect",
538
- CIRCLE = "circle",
539
- ELLIPSE = "ellipse",
540
- ROUNDED_RECT = "roundedRect"
694
+ /** Shape component params */
695
+ export declare interface ShapeParams {
696
+ componentName?: string;
697
+ shapes?: ShapeDefinition[];
698
+ /** 单形状简化用法:type + style */
699
+ type?: ShapeType;
700
+ style?: RectStyle | CircleStyle | EllipseStyle | RoundedRectStyle;
541
701
  }
542
702
 
543
- /** UI 基础样式 */
544
- export declare interface UIStyle {
703
+ /** Shape base style */
704
+ export declare interface ShapeStyle {
545
705
  /** 填充颜色,支持 #RRGGBB / rgb()/rgba() / linear-gradient(...) */
546
706
  fill?: string;
547
707
  /** 描边颜色 */
@@ -552,18 +712,102 @@ export declare interface UIStyle {
552
712
  alpha?: number;
553
713
  }
554
714
 
715
+ /** Shape primitive type enum */
716
+ export declare enum ShapeType {
717
+ RECT = "rect",
718
+ CIRCLE = "circle",
719
+ ELLIPSE = "ellipse",
720
+ ROUNDED_RECT = "roundedRect"
721
+ }
722
+
723
+ export declare const Slider: UiComponentClass<SliderParams>;
724
+
725
+ export declare type SliderOrientation = 'horizontal' | 'vertical';
726
+
727
+ export declare interface SliderParams {
728
+ enabled?: boolean;
729
+ value?: number;
730
+ min?: number;
731
+ max?: number;
732
+ step?: number;
733
+ orientation?: SliderOrientation;
734
+ showValue?: boolean;
735
+ views?: {
736
+ bg?: ViewRef;
737
+ fill?: ViewRef;
738
+ thumb?: ViewRef;
739
+ };
740
+ nineSliceSprite?: {
741
+ bg?: [number, number, number, number];
742
+ fill?: [number, number, number, number];
743
+ };
744
+ fillPaddings?: ProgressBarFillPaddings;
745
+ valueTextStyle?: {
746
+ fontFamily?: string;
747
+ fontSize?: number;
748
+ fill?: string | number;
749
+ };
750
+ valueTextOffset?: {
751
+ x?: number;
752
+ y?: number;
753
+ };
754
+ width?: number;
755
+ height?: number;
756
+ bindToStore?: string;
757
+ }
758
+
759
+ export declare const Switcher: UiComponentClass<SwitcherParams>;
760
+
761
+ export declare interface SwitcherParams {
762
+ active?: number;
763
+ views?: ViewRef[];
764
+ triggerEvent?: SwitcherTriggerEvent | SwitcherTriggerEvent[];
765
+ bindToStore?: string;
766
+ }
767
+
768
+ export declare type SwitcherTriggerEvent = 'onPress' | 'onDown' | 'onUp' | 'onHover' | 'onOut' | 'onUpOut';
769
+
770
+ declare type UiComponentClass<TParams = any> = new () => PixiUiComponent<TParams>;
771
+
772
+ export declare type UIComponentParams = ShapeParams;
773
+
774
+ /** Backward-compatible aliases kept for existing TS imports. */
775
+ export declare type UIParams = ShapeParams;
776
+
777
+ declare interface UiRenderSize {
778
+ width?: number;
779
+ height?: number;
780
+ }
781
+
782
+ export declare type UIShape = ShapeDefinition;
783
+
784
+ /** Backward-compatible enum value alias for existing TypeScript consumers. */
785
+ export declare const UIShapeType: typeof ShapeType;
786
+
787
+ export declare type UIShapeType = ShapeType;
788
+
789
+ declare interface UiSizeSyncContext {
790
+ componentName: string;
791
+ component?: Record<string, any>;
792
+ gameObject?: any;
793
+ source: 'initial-transform' | 'transform-change' | 'component-change';
794
+ }
795
+
796
+ export declare type UIStyle = ShapeStyle;
797
+
555
798
  declare class UISystem extends System {
556
799
  static systemName: string;
557
800
  name: string;
558
801
  /** componentName -> instance map(generic 共享一份) */
559
802
  private instances;
560
803
  private signalCleanups;
804
+ private transformSizeAuthorities;
561
805
  /** 给 RadioGroup 反查 PixiCheckBox 实例用 */
562
806
  private get checkBoxInstances();
563
807
  private radioGroupInstances;
564
808
  update(_e?: any): void;
565
809
  componentChanged(changed: ComponentChanged): void;
566
- private handleUI;
810
+ private handleShape;
567
811
  private handleGeneric;
568
812
  private attachGeneric;
569
813
  private detachGeneric;
@@ -571,6 +815,9 @@ declare class UISystem extends System {
571
815
  private attachRadioGroup;
572
816
  private getInstanceMap;
573
817
  private gameRef;
818
+ private handleTransformSizeChanged;
819
+ private relayoutLayoutInstances;
820
+ private applyTransientTransformSize;
574
821
  }
575
822
  export { UISystem as PluginUiSystem }
576
823
  export { UISystem }
@@ -581,7 +828,7 @@ export { UISystem }
581
828
  * - { entityName: "background" } — 引用同 GameObject 的子 entity 的 PIXI.Container,
582
829
  * 这个 child entity 必须先 ADD,然后我们把它的 Container "借走" 交给 @pixi/ui 实例。
583
830
  * 原 child entity 仍然存在(Transform/逻辑组件还在),只是 PIXI 显示对象被重新 parent。
584
- * - { ui: { type, style } } — 内联 UI shape,生成一个新的 PIXI.Graphics(临时,与 plugin-ui-graphics 不同源)
831
+ * - { shape: { type, style } } — 内联 shape,生成一个新的 PIXI.Graphics(临时,与 Shape 组件不同源)
585
832
  * - { texture: "loading.png" } — 从已加载的 Eva 资源池查 texture,生成 PIXI.Sprite
586
833
  * - { color: 0xRRGGBB, width, height } — 生成纯色矩形 Graphics
587
834
  * - { fallback: <ViewRef> } — 当主 ref 解析失败时使用
@@ -589,6 +836,9 @@ export { UISystem }
589
836
  export declare type ViewRef = {
590
837
  entityName: string;
591
838
  fallback?: ViewRef;
839
+ } | {
840
+ shape: InlineShape;
841
+ fallback?: ViewRef;
592
842
  } | {
593
843
  ui: InlineShape;
594
844
  fallback?: ViewRef;