steamworks-ffi-node 0.6.10 → 0.7.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,496 @@
1
+ import { InputHandle, InputActionSetHandle, InputDigitalActionHandle, InputAnalogActionHandle, InputDigitalActionData, InputAnalogActionData, InputMotionData, SteamInputType, ControllerInfo, DeviceBindingRevision, SteamInputGlyphSize, SteamControllerPad, ControllerHapticLocation } from '../types';
2
+ import { SteamLibraryLoader } from './SteamLibraryLoader';
3
+ /**
4
+ * SteamInputManager
5
+ *
6
+ * Manages Steam Input operations for unified controller support.
7
+ * Supports Xbox, PlayStation, Nintendo Switch, Steam Controller, and more.
8
+ *
9
+ * Features:
10
+ * - Controller detection and enumeration
11
+ * - Action set management
12
+ * - Digital and analog action handling
13
+ * - Motion data (gyro, accelerometer)
14
+ * - Haptic feedback and vibration
15
+ * - LED control
16
+ * - Button glyph display
17
+ * - Configuration UI
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const inputManager = new SteamInputManager(libraryLoader, apiCore);
22
+ *
23
+ * // Initialize
24
+ * inputManager.init();
25
+ *
26
+ * // Update every frame
27
+ * inputManager.runFrame();
28
+ *
29
+ * // Get connected controllers
30
+ * const controllers = inputManager.getConnectedControllers();
31
+ *
32
+ * // Read actions
33
+ * const jumpHandle = inputManager.getDigitalActionHandle('Jump');
34
+ * const jumpData = inputManager.getDigitalActionData(controllerHandle, jumpHandle);
35
+ * if (jumpData.state) {
36
+ * console.log('Jump pressed!');
37
+ * }
38
+ * ```
39
+ */
40
+ export declare class SteamInputManager {
41
+ /** Steam library loader for FFI function calls */
42
+ private libraryLoader;
43
+ /** Cached ISteamInput interface pointer */
44
+ private steamInputInterface;
45
+ /**
46
+ * Creates a new SteamInputManager instance
47
+ *
48
+ * @param libraryLoader - The Steam library loader for FFI calls
49
+ */
50
+ constructor(libraryLoader: SteamLibraryLoader);
51
+ /**
52
+ * Get the ISteamInput interface pointer
53
+ * @private
54
+ */
55
+ private getSteamInputInterface;
56
+ /**
57
+ * Initialize Steam Input
58
+ *
59
+ * Must be called before using any other Steam Input functions.
60
+ * Should be called after SteamAPI_Init().
61
+ *
62
+ * @param explicitlyCallRunFrame - If true, you must call runFrame() manually each frame.
63
+ * If false, Steam will automatically update input state.
64
+ * Default is true for explicit control.
65
+ * @returns True if initialization was successful
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * if (inputManager.init()) {
70
+ * console.log('Steam Input initialized successfully');
71
+ * }
72
+ * ```
73
+ */
74
+ init(explicitlyCallRunFrame?: boolean): boolean;
75
+ /**
76
+ * Shutdown Steam Input
77
+ *
78
+ * Should be called before SteamAPI_Shutdown().
79
+ *
80
+ * @returns True if shutdown was successful
81
+ */
82
+ shutdown(): boolean;
83
+ /**
84
+ * Set the absolute path to the Input Action Manifest file
85
+ *
86
+ * Used for games that provide their own input_actions.vdf file.
87
+ * Must be called before init().
88
+ *
89
+ * @param manifestPath - Absolute path to input_actions.vdf
90
+ * @returns True if successful
91
+ */
92
+ setInputActionManifestFilePath(manifestPath: string): boolean;
93
+ /**
94
+ * Update input state for all controllers
95
+ *
96
+ * Must be called every frame if init() was called with explicitlyCallRunFrame=true.
97
+ * Synchronizes controller state and processes input data.
98
+ *
99
+ * @param reservedValue - Reserved for future use, should be false
100
+ *
101
+ * @example
102
+ * ```typescript
103
+ * // In your game loop
104
+ * function gameLoop() {
105
+ * inputManager.runFrame();
106
+ * // Read input state
107
+ * // Update game logic
108
+ * requestAnimationFrame(gameLoop);
109
+ * }
110
+ * ```
111
+ */
112
+ runFrame(reservedValue?: boolean): void;
113
+ /**
114
+ * Get all currently connected controller handles
115
+ *
116
+ * Controller handles persist across disconnects/reconnects.
117
+ *
118
+ * @returns Array of controller handles (max 16 controllers)
119
+ *
120
+ * @example
121
+ * ```typescript
122
+ * const controllers = inputManager.getConnectedControllers();
123
+ * console.log(`Found ${controllers.length} controller(s)`);
124
+ *
125
+ * controllers.forEach(handle => {
126
+ * const type = inputManager.getInputTypeForHandle(handle);
127
+ * console.log(`Controller: ${handle}, Type: ${type}`);
128
+ * });
129
+ * ```
130
+ */
131
+ getConnectedControllers(): InputHandle[];
132
+ /**
133
+ * Get the input type for a specific controller
134
+ *
135
+ * @param inputHandle - Controller handle
136
+ * @returns Controller type enum value
137
+ *
138
+ * @example
139
+ * ```typescript
140
+ * const type = inputManager.getInputTypeForHandle(handle);
141
+ * if (type === SteamInputType.PS5Controller) {
142
+ * console.log('DualSense detected!');
143
+ * }
144
+ * ```
145
+ */
146
+ getInputTypeForHandle(inputHandle: InputHandle): SteamInputType;
147
+ /**
148
+ * Get comprehensive controller information
149
+ *
150
+ * Convenience method that combines multiple queries into one object.
151
+ *
152
+ * @param inputHandle - Controller handle
153
+ * @returns Controller information object
154
+ */
155
+ getControllerInfo(inputHandle: InputHandle): ControllerInfo;
156
+ /**
157
+ * Get the controller handle for a specific gamepad index
158
+ *
159
+ * Useful for mapping XInput indices to Steam Input handles.
160
+ *
161
+ * @param gamepadIndex - XInput gamepad index (0-3)
162
+ * @returns Controller handle, or 0n if not found
163
+ */
164
+ getControllerForGamepadIndex(gamepadIndex: number): InputHandle;
165
+ /**
166
+ * Get the gamepad index for a controller handle
167
+ *
168
+ * @param inputHandle - Controller handle
169
+ * @returns XInput gamepad index (0-3), or -1 if not emulating gamepad
170
+ */
171
+ getGamepadIndexForController(inputHandle: InputHandle): number;
172
+ /**
173
+ * Get the handle for an action set by name
174
+ *
175
+ * Action sets group related actions together (e.g., "MenuControls", "GameplayControls").
176
+ * Should be queried once at startup and cached.
177
+ *
178
+ * @param actionSetName - Name of the action set from input_actions.vdf
179
+ * @returns Action set handle
180
+ *
181
+ * @example
182
+ * ```typescript
183
+ * const menuSet = inputManager.getActionSetHandle('MenuControls');
184
+ * const gameSet = inputManager.getActionSetHandle('GameplayControls');
185
+ * ```
186
+ */
187
+ getActionSetHandle(actionSetName: string): InputActionSetHandle;
188
+ /**
189
+ * Activate an action set for a controller
190
+ *
191
+ * Only one action set can be active at a time (plus layers).
192
+ *
193
+ * @param inputHandle - Controller handle
194
+ * @param actionSetHandle - Action set handle to activate
195
+ *
196
+ * @example
197
+ * ```typescript
198
+ * const gameSet = inputManager.getActionSetHandle('GameplayControls');
199
+ * inputManager.activateActionSet(controllerHandle, gameSet);
200
+ * ```
201
+ */
202
+ activateActionSet(inputHandle: InputHandle, actionSetHandle: InputActionSetHandle): void;
203
+ /**
204
+ * Get the currently active action set for a controller
205
+ *
206
+ * @param inputHandle - Controller handle
207
+ * @returns Currently active action set handle
208
+ */
209
+ getCurrentActionSet(inputHandle: InputHandle): InputActionSetHandle;
210
+ /**
211
+ * Activate an action set layer
212
+ *
213
+ * Layers add additional actions on top of the base action set.
214
+ * Up to 16 layers can be active simultaneously.
215
+ *
216
+ * @param inputHandle - Controller handle
217
+ * @param actionSetLayerHandle - Action set layer handle
218
+ */
219
+ activateActionSetLayer(inputHandle: InputHandle, actionSetLayerHandle: InputActionSetHandle): void;
220
+ /**
221
+ * Deactivate an action set layer
222
+ *
223
+ * @param inputHandle - Controller handle
224
+ * @param actionSetLayerHandle - Action set layer handle
225
+ */
226
+ deactivateActionSetLayer(inputHandle: InputHandle, actionSetLayerHandle: InputActionSetHandle): void;
227
+ /**
228
+ * Deactivate all action set layers
229
+ *
230
+ * @param inputHandle - Controller handle
231
+ */
232
+ deactivateAllActionSetLayers(inputHandle: InputHandle): void;
233
+ /**
234
+ * Get all currently active action set layers
235
+ *
236
+ * @param inputHandle - Controller handle
237
+ * @returns Array of active layer handles
238
+ */
239
+ getActiveActionSetLayers(inputHandle: InputHandle): InputActionSetHandle[];
240
+ /**
241
+ * Get the handle for a digital action by name
242
+ *
243
+ * Digital actions represent button presses (on/off state).
244
+ * Should be queried once at startup and cached.
245
+ *
246
+ * @param actionName - Name of the digital action from input_actions.vdf
247
+ * @returns Digital action handle
248
+ *
249
+ * @example
250
+ * ```typescript
251
+ * const jumpHandle = inputManager.getDigitalActionHandle('Jump');
252
+ * const shootHandle = inputManager.getDigitalActionHandle('Shoot');
253
+ * ```
254
+ */
255
+ getDigitalActionHandle(actionName: string): InputDigitalActionHandle;
256
+ /**
257
+ * Get the current state of a digital action
258
+ *
259
+ * @param inputHandle - Controller handle
260
+ * @param digitalActionHandle - Digital action handle
261
+ * @returns Digital action data (state and active status)
262
+ *
263
+ * @example
264
+ * ```typescript
265
+ * const jumpData = inputManager.getDigitalActionData(controllerHandle, jumpHandle);
266
+ * if (jumpData.state && jumpData.active) {
267
+ * player.jump();
268
+ * }
269
+ * ```
270
+ */
271
+ getDigitalActionData(inputHandle: InputHandle, digitalActionHandle: InputDigitalActionHandle): InputDigitalActionData;
272
+ /**
273
+ * Get the localized string for a digital action name
274
+ *
275
+ * @param digitalActionHandle - Digital action handle
276
+ * @returns Localized action name, or empty string if not found
277
+ */
278
+ getStringForDigitalActionName(digitalActionHandle: InputDigitalActionHandle): string;
279
+ /**
280
+ * Get the handle for an analog action by name
281
+ *
282
+ * Analog actions represent continuous inputs like joysticks and triggers.
283
+ * Should be queried once at startup and cached.
284
+ *
285
+ * @param actionName - Name of the analog action from input_actions.vdf
286
+ * @returns Analog action handle
287
+ *
288
+ * @example
289
+ * ```typescript
290
+ * const moveHandle = inputManager.getAnalogActionHandle('Move');
291
+ * const lookHandle = inputManager.getAnalogActionHandle('Look');
292
+ * ```
293
+ */
294
+ getAnalogActionHandle(actionName: string): InputAnalogActionHandle;
295
+ /**
296
+ * Get the current state of an analog action
297
+ *
298
+ * @param inputHandle - Controller handle
299
+ * @param analogActionHandle - Analog action handle
300
+ * @returns Analog action data (mode, x, y values, and active status)
301
+ *
302
+ * @example
303
+ * ```typescript
304
+ * const moveData = inputManager.getAnalogActionData(controllerHandle, moveHandle);
305
+ * if (moveData.active) {
306
+ * player.move(moveData.x, moveData.y);
307
+ * }
308
+ * ```
309
+ */
310
+ getAnalogActionData(inputHandle: InputHandle, analogActionHandle: InputAnalogActionHandle): InputAnalogActionData;
311
+ /**
312
+ * Get the localized string for an analog action name
313
+ *
314
+ * @param analogActionHandle - Analog action handle
315
+ * @returns Localized action name, or empty string if not found
316
+ */
317
+ getStringForAnalogActionName(analogActionHandle: InputAnalogActionHandle): string;
318
+ /**
319
+ * Stop analog action momentum for trackball mode
320
+ *
321
+ * If an analog action is in trackball mode (mouse emulation),
322
+ * this stops the momentum/inertia.
323
+ *
324
+ * @param inputHandle - Controller handle
325
+ * @param analogActionHandle - Analog action handle
326
+ */
327
+ stopAnalogActionMomentum(inputHandle: InputHandle, analogActionHandle: InputAnalogActionHandle): void;
328
+ /**
329
+ * Get motion data from controller (gyroscope and accelerometer)
330
+ *
331
+ * Provides quaternion rotation, positional acceleration, and angular velocity.
332
+ *
333
+ * @param inputHandle - Controller handle
334
+ * @returns Motion data, or null if not supported
335
+ *
336
+ * @example
337
+ * ```typescript
338
+ * const motion = inputManager.getMotionData(controllerHandle);
339
+ * if (motion) {
340
+ * // Use gyro for aiming
341
+ * camera.rotateByGyro(motion.rotVelX, motion.rotVelY, motion.rotVelZ);
342
+ * }
343
+ * ```
344
+ */
345
+ getMotionData(inputHandle: InputHandle): InputMotionData | null;
346
+ /**
347
+ * Trigger vibration/rumble on a controller
348
+ *
349
+ * @param inputHandle - Controller handle
350
+ * @param leftSpeed - Left motor speed (0-65535)
351
+ * @param rightSpeed - Right motor speed (0-65535)
352
+ *
353
+ * @example
354
+ * ```typescript
355
+ * // Light rumble
356
+ * inputManager.triggerVibration(handle, 10000, 10000);
357
+ *
358
+ * // Strong rumble
359
+ * inputManager.triggerVibration(handle, 65535, 65535);
360
+ *
361
+ * // Stop rumble
362
+ * inputManager.triggerVibration(handle, 0, 0);
363
+ * ```
364
+ */
365
+ triggerVibration(inputHandle: InputHandle, leftSpeed: number, rightSpeed: number): void;
366
+ /**
367
+ * Trigger extended vibration with trigger motor support (Xbox controllers)
368
+ *
369
+ * @param inputHandle - Controller handle
370
+ * @param leftSpeed - Left motor speed (0-65535)
371
+ * @param rightSpeed - Right motor speed (0-65535)
372
+ * @param leftTriggerSpeed - Left trigger motor speed (0-65535)
373
+ * @param rightTriggerSpeed - Right trigger motor speed (0-65535)
374
+ */
375
+ triggerVibrationExtended(inputHandle: InputHandle, leftSpeed: number, rightSpeed: number, leftTriggerSpeed: number, rightTriggerSpeed: number): void;
376
+ /**
377
+ * Trigger a simple haptic event (Steam Controller, Steam Deck)
378
+ *
379
+ * @param inputHandle - Controller handle
380
+ * @param hapticLocation - Left, right, or both
381
+ * @param intensity - Intensity (0-255)
382
+ * @param gainDB - Gain in decibels
383
+ * @param otherIntensity - Intensity for the other pad
384
+ * @param otherGainDB - Gain for the other pad
385
+ */
386
+ triggerSimpleHapticEvent(inputHandle: InputHandle, hapticLocation: ControllerHapticLocation, intensity: number, gainDB: number, otherIntensity: number, otherGainDB: number): void;
387
+ /**
388
+ * Set controller LED color (supported controllers only)
389
+ *
390
+ * @param inputHandle - Controller handle
391
+ * @param colorR - Red (0-255)
392
+ * @param colorG - Green (0-255)
393
+ * @param colorB - Blue (0-255)
394
+ * @param flags - LED flags (0 = set color, 1 = restore default)
395
+ *
396
+ * @example
397
+ * ```typescript
398
+ * // Set LED to red
399
+ * inputManager.setLEDColor(handle, 255, 0, 0, 0);
400
+ *
401
+ * // Set LED to blue
402
+ * inputManager.setLEDColor(handle, 0, 0, 255, 0);
403
+ *
404
+ * // Restore default LED color
405
+ * inputManager.setLEDColor(handle, 0, 0, 0, 1);
406
+ * ```
407
+ */
408
+ setLEDColor(inputHandle: InputHandle, colorR: number, colorG: number, colorB: number, flags?: number): void;
409
+ /**
410
+ * Trigger a legacy haptic pulse (Steam Controller)
411
+ *
412
+ * @param inputHandle - Controller handle
413
+ * @param targetPad - Left or right pad
414
+ * @param durationMicroSec - Duration in microseconds
415
+ */
416
+ legacyTriggerHapticPulse(inputHandle: InputHandle, targetPad: SteamControllerPad, durationMicroSec: number): void;
417
+ /**
418
+ * Get the path to a PNG glyph for an action origin
419
+ *
420
+ * Useful for showing button prompts in your UI.
421
+ *
422
+ * @param origin - Action origin (button)
423
+ * @param size - Glyph size (small, medium, large)
424
+ * @param flags - Glyph style flags
425
+ * @returns Path to PNG file, or empty string if not available
426
+ *
427
+ * @example
428
+ * ```typescript
429
+ * const origins = inputManager.getDigitalActionOrigins(handle, actionSet, jumpHandle);
430
+ * if (origins.length > 0) {
431
+ * const glyphPath = inputManager.getGlyphPNGForActionOrigin(
432
+ * origins[0],
433
+ * SteamInputGlyphSize.Medium,
434
+ * SteamInputGlyphStyle.Dark
435
+ * );
436
+ * // Display glyph image in UI
437
+ * }
438
+ * ```
439
+ */
440
+ getGlyphPNGForActionOrigin(origin: number, size: SteamInputGlyphSize, flags: number): string;
441
+ /**
442
+ * Get the path to an SVG glyph for an action origin
443
+ *
444
+ * @param origin - Action origin (button)
445
+ * @param flags - Glyph style flags
446
+ * @returns Path to SVG file, or empty string if not available
447
+ */
448
+ getGlyphSVGForActionOrigin(origin: number, flags: number): string;
449
+ /**
450
+ * Get localized string for an action origin
451
+ *
452
+ * @param origin - Action origin (button)
453
+ * @returns Localized button name (e.g., "A Button", "Cross")
454
+ */
455
+ getStringForActionOrigin(origin: number): string;
456
+ /**
457
+ * Open the Steam Input configuration UI
458
+ *
459
+ * Shows the binding panel where users can customize their controller configuration.
460
+ *
461
+ * @param inputHandle - Controller handle
462
+ * @returns True if successful
463
+ *
464
+ * @example
465
+ * ```typescript
466
+ * // In your settings menu
467
+ * if (userClicksConfigureController) {
468
+ * inputManager.showBindingPanel(controllerHandle);
469
+ * }
470
+ * ```
471
+ */
472
+ showBindingPanel(inputHandle: InputHandle): boolean;
473
+ /**
474
+ * Get the binding revision for a device
475
+ *
476
+ * @param inputHandle - Controller handle
477
+ * @returns Device binding revision, or null if not available
478
+ */
479
+ getDeviceBindingRevision(inputHandle: InputHandle): DeviceBindingRevision | null;
480
+ /**
481
+ * Get the Remote Play session ID for a controller
482
+ *
483
+ * @param inputHandle - Controller handle
484
+ * @returns Session ID, or 0 if not in a Remote Play session
485
+ */
486
+ getRemotePlaySessionID(inputHandle: InputHandle): number;
487
+ /**
488
+ * Get the current session input configuration settings
489
+ *
490
+ * Returns a bitmask of ESteamInputConfigurationEnableType values.
491
+ *
492
+ * @returns Configuration settings bitmask
493
+ */
494
+ getSessionInputConfigurationSettings(): number;
495
+ }
496
+ //# sourceMappingURL=SteamInputManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SteamInputManager.d.ts","sourceRoot":"","sources":["../../src/internal/SteamInputManager.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EAEzB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAuB1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBAAa,iBAAiB;IAC5B,kDAAkD;IAClD,OAAO,CAAC,aAAa,CAAqB;IAE1C,2CAA2C;IAC3C,OAAO,CAAC,mBAAmB,CAAa;IAExC;;;;OAIG;gBACS,aAAa,EAAE,kBAAkB;IAI7C;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAW9B;;;;;;;;;;;;;;;;;OAiBG;IACH,IAAI,CAAC,sBAAsB,GAAE,OAAc,GAAG,OAAO;IAgBrD;;;;;;OAMG;IACH,QAAQ,IAAI,OAAO;IAanB;;;;;;;;OAQG;IACH,8BAA8B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAY7D;;;;;;;;;;;;;;;;;;OAkBG;IACH,QAAQ,CAAC,aAAa,GAAE,OAAe,GAAG,IAAI;IAe9C;;;;;;;;;;;;;;;;;OAiBG;IACH,uBAAuB,IAAI,WAAW,EAAE;IAsBxC;;;;;;;;;;;;;OAaG;IACH,qBAAqB,CAAC,WAAW,EAAE,WAAW,GAAG,cAAc;IAY/D;;;;;;;OAOG;IACH,iBAAiB,CAAC,WAAW,EAAE,WAAW,GAAG,cAAc;IAY3D;;;;;;;OAOG;IACH,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW;IAY/D;;;;;OAKG;IACH,4BAA4B,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM;IAgB9D;;;;;;;;;;;;;;OAcG;IACH,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,oBAAoB;IAY/D;;;;;;;;;;;;;OAaG;IACH,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,oBAAoB,GAAG,IAAI;IAWxF;;;;;OAKG;IACH,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,oBAAoB;IAYnE;;;;;;;;OAQG;IACH,sBAAsB,CAAC,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE,oBAAoB,GAAG,IAAI;IAWlG;;;;;OAKG;IACH,wBAAwB,CAAC,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE,oBAAoB,GAAG,IAAI;IAWpG;;;;OAIG;IACH,4BAA4B,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAW5D;;;;;OAKG;IACH,wBAAwB,CAAC,WAAW,EAAE,WAAW,GAAG,oBAAoB,EAAE;IA0B1E;;;;;;;;;;;;;;OAcG;IACH,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,wBAAwB;IAYpE;;;;;;;;;;;;;;OAcG;IACH,oBAAoB,CAAC,WAAW,EAAE,WAAW,EAAE,mBAAmB,EAAE,wBAAwB,GAAG,sBAAsB;IAsBrH;;;;;OAKG;IACH,6BAA6B,CAAC,mBAAmB,EAAE,wBAAwB,GAAG,MAAM;IAgBpF;;;;;;;;;;;;;;OAcG;IACH,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,uBAAuB;IAYlE;;;;;;;;;;;;;;OAcG;IACH,mBAAmB,CAAC,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,uBAAuB,GAAG,qBAAqB;IAyBjH;;;;;OAKG;IACH,4BAA4B,CAAC,kBAAkB,EAAE,uBAAuB,GAAG,MAAM;IAYjF;;;;;;;;OAQG;IACH,wBAAwB,CAAC,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,uBAAuB,GAAG,IAAI;IAerG;;;;;;;;;;;;;;;;OAgBG;IACH,aAAa,CAAC,WAAW,EAAE,WAAW,GAAG,eAAe,GAAG,IAAI;IAiC/D;;;;;;;;;;;;;;;;;;OAkBG;IACH,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAWvF;;;;;;;;OAQG;IACH,wBAAwB,CACtB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM,GACxB,IAAI;IAkBP;;;;;;;;;OASG;IACH,wBAAwB,CACtB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,wBAAwB,EACxC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,IAAI;IAmBP;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,WAAW,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,IAAI;IAW9G;;;;;;OAMG;IACH,wBAAwB,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAejH;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAY5F;;;;;;OAMG;IACH,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAYjE;;;;;OAKG;IACH,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAgBhD;;;;;;;;;;;;;;;OAeG;IACH,gBAAgB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAYnD;;;;;OAKG;IACH,wBAAwB,CAAC,WAAW,EAAE,WAAW,GAAG,qBAAqB,GAAG,IAAI;IA6BhF;;;;;OAKG;IACH,sBAAsB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM;IAYxD;;;;;;OAMG;IACH,oCAAoC,IAAI,MAAM;CAW/C"}