onejs-react 0.1.0 → 0.1.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.
package/src/types.ts CHANGED
@@ -81,6 +81,15 @@ export interface ViewStyle {
81
81
  // Background
82
82
  /** Background color. Examples: "#3498db", "rgba(0,0,0,0.5)", "red" */
83
83
  backgroundColor?: StyleColor;
84
+ /**
85
+ * Background image - accepts a Texture2D, RenderTexture, or RenderTexture object from GPU compute.
86
+ *
87
+ * For GPU compute RenderTextures, you can pass the RenderTexture object directly:
88
+ * @example
89
+ * const rt = compute.renderTexture({ width: 100, height: 100 })
90
+ * <View style={{ backgroundImage: rt }} />
91
+ */
92
+ backgroundImage?: object | null;
84
93
 
85
94
  // Border
86
95
  /** Border color for all sides. Examples: "#ccc", "rgba(0,0,0,0.1)" */
@@ -115,7 +124,7 @@ export interface ViewStyle {
115
124
  color?: StyleColor;
116
125
  /** Font size in pixels. Examples: 16, "16px" */
117
126
  fontSize?: StyleLength;
118
- fontStyle?: 'normal' | 'italic' | 'bold' | 'bold-and-italic';
127
+ /** Text alignment. Note: Use USS class or stylesheet for -unity-font-style (italic/bold) */
119
128
  unityTextAlign?: 'upper-left' | 'upper-center' | 'upper-right' | 'middle-left' | 'middle-center' | 'middle-right' | 'lower-left' | 'lower-center' | 'lower-right';
120
129
  whiteSpace?: 'normal' | 'nowrap';
121
130
  }
@@ -127,6 +136,23 @@ export interface PointerEventData {
127
136
  y: number;
128
137
  button: number;
129
138
  pointerId: number;
139
+ modifiers?: number;
140
+ }
141
+
142
+ export interface MouseEventData {
143
+ type: string;
144
+ x: number;
145
+ y: number;
146
+ button: number;
147
+ modifiers?: number;
148
+ }
149
+
150
+ export interface WheelEventData {
151
+ type: string;
152
+ x: number;
153
+ y: number;
154
+ delta: { x: number; y: number };
155
+ modifiers?: number;
130
156
  }
131
157
 
132
158
  export interface KeyEventData {
@@ -145,10 +171,96 @@ export interface ChangeEventData<T = unknown> {
145
171
  value: T;
146
172
  }
147
173
 
174
+ export interface FocusEventData {
175
+ type: string;
176
+ relatedTarget?: unknown;
177
+ }
178
+
179
+ export interface DragEventData {
180
+ type: string;
181
+ x: number;
182
+ y: number;
183
+ // Drag-specific properties
184
+ getData?: (type: string) => unknown;
185
+ }
186
+
187
+ export interface GeometryEventData {
188
+ type: string;
189
+ oldRect: { x: number; y: number; width: number; height: number };
190
+ newRect: { x: number; y: number; width: number; height: number };
191
+ }
192
+
193
+ export interface NavigationEventData {
194
+ type: string;
195
+ direction?: string;
196
+ modifiers?: number;
197
+ }
198
+
199
+ export interface TransitionEventData {
200
+ type: string;
201
+ styleProperty: string;
202
+ elapsedTime: number;
203
+ }
204
+
148
205
  export type PointerEventHandler = (event: PointerEventData) => void;
206
+ export type MouseEventHandler = (event: MouseEventData) => void;
207
+ export type WheelEventHandler = (event: WheelEventData) => void;
149
208
  export type KeyEventHandler = (event: KeyEventData) => void;
150
209
  export type ChangeEventHandler<T = unknown> = (event: ChangeEventData<T>) => void;
151
- export type FocusEventHandler = () => void;
210
+ export type FocusEventHandler = (event?: FocusEventData) => void;
211
+ export type DragEventHandler = (event: DragEventData) => void;
212
+ export type GeometryEventHandler = (event: GeometryEventData) => void;
213
+ export type NavigationEventHandler = (event: NavigationEventData) => void;
214
+ export type TransitionEventHandler = (event: TransitionEventData) => void;
215
+
216
+ // Vector Drawing Types - Re-export from unity-types (CS.* namespace)
217
+ // These types are provided by the unity-types package and represent Unity's actual API
218
+
219
+ /** Unity Vector2 - 2D point/vector. Use CS.UnityEngine.Vector2 at runtime. */
220
+ export type Vector2 = CS.UnityEngine.Vector2;
221
+
222
+ /** Unity Color - RGBA color. Use CS.UnityEngine.Color at runtime. */
223
+ export type Color = CS.UnityEngine.Color;
224
+
225
+ /** Unity Angle - Represents an angle with unit. Use CS.UnityEngine.UIElements.Angle at runtime. */
226
+ export type Angle = CS.UnityEngine.UIElements.Angle;
227
+
228
+ /** Unity ArcDirection - Direction for arc drawing. Use CS.UnityEngine.UIElements.ArcDirection at runtime. */
229
+ export type ArcDirection = CS.UnityEngine.UIElements.ArcDirection;
230
+
231
+ /** Unity Painter2D - Vector drawing API. Accessed via mgc.painter2D in generateVisualContent. */
232
+ export type Painter2D = CS.UnityEngine.UIElements.Painter2D;
233
+
234
+ /**
235
+ * Unity MeshGenerationContext - Provides rendering context within generateVisualContent callback.
236
+ *
237
+ * Access painter2D for vector drawing, or use DrawText/DrawVectorImage for other content.
238
+ *
239
+ * @example
240
+ * <View
241
+ * style={{ width: 200, height: 200 }}
242
+ * onGenerateVisualContent={(mgc) => {
243
+ * const p = mgc.painter2D
244
+ *
245
+ * p.fillColor = new CS.UnityEngine.Color(0, 0.5, 1, 1)
246
+ * p.BeginPath()
247
+ * p.Arc(
248
+ * new CS.UnityEngine.Vector2(100, 100),
249
+ * 80,
250
+ * CS.UnityEngine.UIElements.Angle.Degrees(0),
251
+ * CS.UnityEngine.UIElements.Angle.Degrees(360),
252
+ * CS.UnityEngine.UIElements.ArcDirection.Clockwise
253
+ * )
254
+ * p.Fill()
255
+ * }}
256
+ * />
257
+ */
258
+ export type MeshGenerationContext = CS.UnityEngine.UIElements.MeshGenerationContext;
259
+
260
+ /**
261
+ * Callback type for generateVisualContent
262
+ */
263
+ export type GenerateVisualContentCallback = (context: MeshGenerationContext) => void;
152
264
 
153
265
  // Base props for all components
154
266
  export interface BaseProps {
@@ -157,26 +269,105 @@ export interface BaseProps {
157
269
  style?: ViewStyle;
158
270
  className?: string;
159
271
 
160
- // Pointer events
272
+ // Click
161
273
  onClick?: PointerEventHandler;
274
+
275
+ // Pointer events
162
276
  onPointerDown?: PointerEventHandler;
163
277
  onPointerUp?: PointerEventHandler;
164
278
  onPointerMove?: PointerEventHandler;
165
279
  onPointerEnter?: PointerEventHandler;
166
280
  onPointerLeave?: PointerEventHandler;
281
+ onPointerCancel?: PointerEventHandler;
282
+ onPointerCapture?: PointerEventHandler;
283
+ onPointerCaptureOut?: PointerEventHandler;
284
+ onPointerStationary?: PointerEventHandler;
285
+
286
+ // Mouse events
287
+ onMouseDown?: MouseEventHandler;
288
+ onMouseUp?: MouseEventHandler;
289
+ onMouseMove?: MouseEventHandler;
290
+ onMouseEnter?: MouseEventHandler;
291
+ onMouseLeave?: MouseEventHandler;
292
+ onMouseOver?: MouseEventHandler;
293
+ onMouseOut?: MouseEventHandler;
294
+ onWheel?: WheelEventHandler;
295
+ onContextClick?: MouseEventHandler;
167
296
 
168
297
  // Focus events
169
298
  onFocus?: FocusEventHandler;
170
299
  onBlur?: FocusEventHandler;
300
+ onFocusIn?: FocusEventHandler;
301
+ onFocusOut?: FocusEventHandler;
171
302
 
172
303
  // Keyboard events
173
304
  onKeyDown?: KeyEventHandler;
174
305
  onKeyUp?: KeyEventHandler;
306
+
307
+ // Input events
308
+ onInput?: ChangeEventHandler;
309
+
310
+ // Drag events
311
+ onDragEnter?: DragEventHandler;
312
+ onDragLeave?: DragEventHandler;
313
+ onDragUpdated?: DragEventHandler;
314
+ onDragPerform?: DragEventHandler;
315
+ onDragExited?: DragEventHandler;
316
+
317
+ // Geometry events
318
+ onGeometryChanged?: GeometryEventHandler;
319
+
320
+ // Navigation events
321
+ onNavigationMove?: NavigationEventHandler;
322
+ onNavigationSubmit?: NavigationEventHandler;
323
+ onNavigationCancel?: NavigationEventHandler;
324
+
325
+ // Tooltip
326
+ onTooltip?: () => void;
327
+
328
+ // Transition events
329
+ onTransitionRun?: TransitionEventHandler;
330
+ onTransitionStart?: TransitionEventHandler;
331
+ onTransitionEnd?: TransitionEventHandler;
332
+ onTransitionCancel?: TransitionEventHandler;
333
+
334
+ // Vector drawing
335
+ /**
336
+ * Callback for custom vector drawing via Unity's generateVisualContent.
337
+ * Called when the element needs to repaint its visual content.
338
+ *
339
+ * Use element.MarkDirtyRepaint() to trigger a repaint when your drawing state changes.
340
+ *
341
+ * @example
342
+ * <View
343
+ * style={{ width: 200, height: 200 }}
344
+ * onGenerateVisualContent={(mgc) => {
345
+ * const p = mgc.painter2D
346
+ * const Angle = CS.UnityEngine.UIElements.Angle
347
+ *
348
+ * p.fillColor = new CS.UnityEngine.Color(0, 0.5, 1, 1)
349
+ * p.BeginPath()
350
+ * p.Arc(
351
+ * new CS.UnityEngine.Vector2(100, 100),
352
+ * 80,
353
+ * Angle.Degrees(0),
354
+ * Angle.Degrees(360),
355
+ * CS.UnityEngine.UIElements.ArcDirection.Clockwise
356
+ * )
357
+ * p.Fill()
358
+ * }}
359
+ * />
360
+ */
361
+ onGenerateVisualContent?: GenerateVisualContentCallback;
175
362
  }
176
363
 
177
364
  // Component-specific props
178
365
  export interface ViewProps extends BaseProps {}
179
366
 
367
+ export interface TextProps extends BaseProps {
368
+ text?: string;
369
+ }
370
+
180
371
  export interface LabelProps extends BaseProps {
181
372
  text?: string;
182
373
  }
@@ -187,23 +378,39 @@ export interface ButtonProps extends BaseProps {
187
378
 
188
379
  export interface TextFieldProps extends BaseProps {
189
380
  value?: string;
381
+ label?: string;
190
382
  placeholder?: string;
191
383
  multiline?: boolean;
192
384
  readOnly?: boolean;
193
385
  maxLength?: number;
386
+ isPasswordField?: boolean;
387
+ maskChar?: string;
388
+ isDelayed?: boolean;
389
+ selectAllOnFocus?: boolean;
390
+ selectAllOnMouseUp?: boolean;
391
+ hideMobileInput?: boolean;
392
+ autoCorrection?: boolean;
194
393
  onChange?: ChangeEventHandler<string>;
195
394
  }
196
395
 
197
396
  export interface ToggleProps extends BaseProps {
198
397
  value?: boolean;
199
398
  label?: string;
399
+ text?: string;
400
+ toggleOnLabelClick?: boolean;
200
401
  onChange?: ChangeEventHandler<boolean>;
201
402
  }
202
403
 
203
404
  export interface SliderProps extends BaseProps {
204
405
  value?: number;
406
+ label?: string;
205
407
  lowValue?: number;
206
408
  highValue?: number;
409
+ direction?: 'Horizontal' | 'Vertical';
410
+ pageSize?: number;
411
+ showInputField?: boolean;
412
+ inverted?: boolean;
413
+ fill?: boolean;
207
414
  onChange?: ChangeEventHandler<number>;
208
415
  }
209
416
 
@@ -231,22 +438,133 @@ export interface ScrollViewProps extends BaseProps {
231
438
  }
232
439
 
233
440
  export interface ImageProps extends BaseProps {
234
- src?: string;
235
- scaleMode?: 'stretch-to-fill' | 'scale-and-crop' | 'scale-to-fit';
441
+ /** Image source - can be a Texture2D, Sprite, or path string */
442
+ image?: object;
443
+ /** Sprite to display (alternative to image) */
444
+ sprite?: object;
445
+ /** Vector image to display */
446
+ vectorImage?: object;
447
+ /** How the image scales to fit the element */
448
+ scaleMode?: 'StretchToFill' | 'ScaleAndCrop' | 'ScaleToFit';
449
+ /** Tint color applied to the image */
450
+ tintColor?: string;
451
+ /** Source rectangle within the texture (normalized 0-1 coordinates) */
452
+ sourceRect?: { x: number; y: number; width: number; height: number };
453
+ /** UV coordinates for the image */
454
+ uv?: { x: number; y: number; width: number; height: number };
236
455
  }
237
456
 
238
- // VisualElement type for ListView callbacks
239
- // This is the C# VisualElement exposed to JS
240
- export interface VisualElement {
457
+ /**
458
+ * Minimal container type for render() function.
459
+ * Accepts any Unity VisualElement (CS.UnityEngine.UIElements.VisualElement)
460
+ * or the detailed VisualElement interface below.
461
+ */
462
+ export interface RenderContainer {
241
463
  __csHandle: number;
242
464
  __csType: string;
465
+ }
466
+
467
+ // VisualElement - base type for all UI Toolkit elements
468
+ // This is the C# VisualElement exposed to JS via refs
469
+ // Note: This interface represents the JS-side view of Unity's VisualElement
470
+ export interface VisualElement extends RenderContainer {
243
471
  style: Record<string, unknown>;
472
+ name: string;
473
+ visible: boolean;
474
+ enabledSelf: boolean;
475
+ enabledInHierarchy: boolean;
476
+
477
+ // Text content (for TextElement-derived types)
244
478
  text?: string;
479
+
480
+ // Label (for labeled controls like Toggle)
481
+ label?: string;
482
+
483
+ // Value (for input controls)
245
484
  value?: unknown;
485
+
486
+ // Hierarchy
246
487
  Add: (child: VisualElement) => void;
488
+ Insert: (index: number, child: VisualElement) => void;
247
489
  Remove: (child: VisualElement) => void;
490
+ RemoveAt: (index: number) => void;
491
+ Clear: () => void;
492
+ IndexOf: (child: VisualElement) => number;
493
+ childCount: number;
494
+ parent: VisualElement | null;
495
+
496
+ // Classes
248
497
  AddToClassList: (className: string) => void;
249
498
  RemoveFromClassList: (className: string) => void;
499
+ ClearClassList: () => void;
500
+ ClassListContains: (className: string) => boolean;
501
+
502
+ // Focus
503
+ Focus: () => void;
504
+ Blur: () => void;
505
+ focusable: boolean;
506
+
507
+ // Layout
508
+ MarkDirtyRepaint: () => void;
509
+
510
+ // Vector drawing
511
+ /**
512
+ * Callback delegate for custom visual content generation.
513
+ * Can be used via ref for raw access to Unity's generateVisualContent.
514
+ *
515
+ * @example
516
+ * useEffect(() => {
517
+ * const ve = ref.current
518
+ * const draw = (mgc) => { ... }
519
+ * ve.generateVisualContent += draw
520
+ * return () => { ve.generateVisualContent -= draw }
521
+ * }, [])
522
+ */
523
+ generateVisualContent: {
524
+ (callback: GenerateVisualContentCallback): void;
525
+ } & {
526
+ // Delegate operators (C# interop)
527
+ '+='?: (callback: GenerateVisualContentCallback) => void;
528
+ '-='?: (callback: GenerateVisualContentCallback) => void;
529
+ };
530
+ }
531
+
532
+ // Specific element types for better ref typing
533
+ export interface TextElement extends VisualElement {
534
+ text: string;
535
+ }
536
+
537
+ export interface LabelElement extends TextElement {}
538
+
539
+ export interface ButtonElement extends TextElement {}
540
+
541
+ export interface TextFieldElement extends VisualElement {
542
+ value: string;
543
+ text: string;
544
+ isReadOnly: boolean;
545
+ isPasswordField: boolean;
546
+ maxLength: number;
547
+ SelectAll: () => void;
548
+ }
549
+
550
+ export interface ToggleElement extends VisualElement {
551
+ value: boolean;
552
+ text: string;
553
+ }
554
+
555
+ export interface SliderElement extends VisualElement {
556
+ value: number;
557
+ lowValue: number;
558
+ highValue: number;
559
+ }
560
+
561
+ export interface ScrollViewElement extends VisualElement {
562
+ scrollOffset: { x: number; y: number };
563
+ ScrollTo: (child: VisualElement) => void;
564
+ }
565
+
566
+ export interface ImageElement extends VisualElement {
567
+ // Image-specific properties handled via style.backgroundImage
250
568
  }
251
569
 
252
570
  // ListView uses Unity's virtualization callbacks directly