@unbound-app/api 0.11.0 → 1.1.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.
- package/ambient/image-modules.d.ts +58 -0
- package/package.json +27 -4
- package/src/_internal.d.ts +2771 -139
- package/src/{utils.d.ts → _types.d.ts} +10 -0
- package/src/assets.d.ts +64 -26
- package/src/builtins.d.ts +17 -0
- package/src/commands.d.ts +101 -25
- package/src/dialogs.d.ts +90 -25
- package/src/flux.d.ts +317 -0
- package/src/fonts.d.ts +51 -0
- package/src/fs.d.ts +15 -24
- package/src/global.d.ts +173 -11
- package/src/i18n.d.ts +33 -31
- package/src/iconPacks.d.ts +43 -0
- package/src/index.d.ts +14 -0
- package/src/marketplace.d.ts +50 -0
- package/src/metro/api.d.ts +8 -0
- package/src/metro/common.d.ts +34 -5
- package/src/metro/components.d.ts +34 -25
- package/src/metro/filters.d.ts +31 -16
- package/src/metro/index.d.ts +26079 -83
- package/src/metro/stores.d.ts +5 -0
- package/src/native.d.ts +77 -5
- package/src/patcher.d.ts +214 -57
- package/src/plugins.d.ts +55 -0
- package/src/settings.d.ts +8 -16
- package/src/shims.d.ts +5 -0
- package/src/storage.d.ts +80 -224
- package/src/sync.d.ts +51 -0
- package/src/themes.d.ts +43 -0
- package/src/toasts.d.ts +62 -9
- package/src/ui.d.ts +650 -0
- package/src/updates.d.ts +25 -0
- package/src/utils/index.d.ts +53 -0
- package/src/utils/react/index.d.ts +82 -0
- package/testing/fake-api.ts +256 -0
- package/testing/fake-components.ts +183 -0
- package/testing/fake-feedback.ts +258 -0
- package/testing/fake-fs.ts +54 -0
- package/testing/fake-java.ts +513 -0
- package/testing/fake-locales.ts +85 -0
- package/testing/fake-metro.ts +346 -0
- package/testing/fake-native-bridge.ts +98 -0
- package/testing/fake-native.ts +211 -0
- package/testing/fake-objc.ts +388 -0
- package/testing/fake-plugins.ts +176 -0
- package/testing/fake-react-native-modules.ts +362 -0
- package/testing/fake-react-native.ts +180 -0
- package/testing/fake-react.ts +54 -0
- package/testing/fake-settings-panel.ts +173 -0
- package/testing/fake-settings.ts +428 -0
- package/testing/fake-timers.ts +74 -0
- package/testing/fake-utils.ts +216 -0
- package/testing/icu-format.ts +132 -0
- package/testing/icu-parse.ts +277 -0
- package/testing/index.ts +42 -0
- package/testing/install-addon-globals.ts +260 -0
- package/testing/listener-registry.ts +39 -0
- package/testing/memory-storage.ts +149 -0
- package/testing/plugin-files.ts +155 -0
- package/testing/plugin-lifecycle.ts +149 -0
- package/testing/plugin-types.ts +34 -0
- package/testing/preset.ts +263 -0
- package/testing/react-patcher.ts +154 -0
- package/testing/react-value.ts +3 -0
- package/testing/recorders.ts +183 -0
- package/testing/recording-patcher.ts +173 -0
- package/testing/render.ts +84 -0
- package/testing/session.ts +77 -0
- package/testing/test-node.ts +163 -0
- package/testing/test-renderer.ts +753 -0
- package/testing/unfrozen-elements.ts +49 -0
package/src/_internal.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Auto-generated by generate-plugin-sdk.ts - DO NOT EDIT
|
|
2
2
|
|
|
3
|
-
import type { LiteralUnion } from './
|
|
3
|
+
import type { LiteralUnion } from './_types';
|
|
4
4
|
import * as React$1 from 'react';
|
|
5
|
-
import { ComponentType, ReactNode } from 'react';
|
|
5
|
+
import { ComponentType, FunctionComponent, ReactElement, ReactNode } from 'react';
|
|
6
6
|
import * as RN from 'react-native';
|
|
7
7
|
import { ImageSourcePropType, ImageStyle, TextStyle, ViewStyle } from 'react-native';
|
|
8
8
|
|
|
@@ -15,10 +15,32 @@ declare const THEME_FLAG_KEYS: readonly [
|
|
|
15
15
|
];
|
|
16
16
|
declare const TRANSITION_STATE_KEYS: readonly ['MOUNTED', 'ENTERED', 'YEETED'];
|
|
17
17
|
declare const nativeHandle: unique symbol;
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
declare const nativeJavaCallPlan: unique symbol;
|
|
19
|
+
declare const nativeObjCCallPlan: unique symbol;
|
|
20
|
+
/** The kinds of addon, as a manifest's `type` declares them. One manager governs each, in this start order. */
|
|
21
|
+
export declare const ADDON_KINDS: readonly ['plugin', 'theme', 'icon-pack', 'font'];
|
|
22
|
+
/**
|
|
23
|
+
* The globals a plugin bundle is evaluated with, in parameter order. Bytecode compiled against an earlier
|
|
24
|
+
* list receives them by position, so new globals are only ever appended.
|
|
25
|
+
*/
|
|
26
|
+
export declare const ADDON_SCOPE_GLOBALS: readonly [
|
|
27
|
+
'React',
|
|
28
|
+
'unbound',
|
|
29
|
+
'addon',
|
|
30
|
+
'patcher',
|
|
31
|
+
'logger',
|
|
32
|
+
'setTimeout',
|
|
33
|
+
'setInterval',
|
|
34
|
+
'clearTimeout',
|
|
35
|
+
'clearInterval',
|
|
36
|
+
'commands',
|
|
37
|
+
];
|
|
38
|
+
/** The core settings store; each addon's settings store is named after the addon id. */
|
|
39
|
+
export declare const CORE_SETTINGS_STORE = 'unbound';
|
|
20
40
|
/** The components of Discord's design module, each of which Unbound can stand in for when Discord drops it. */
|
|
21
41
|
export declare const DESIGN_COMPONENTS: readonly [
|
|
42
|
+
'SearchBar',
|
|
43
|
+
'Badge',
|
|
22
44
|
'Text',
|
|
23
45
|
'Heading',
|
|
24
46
|
'TableRow',
|
|
@@ -55,6 +77,7 @@ export declare const DESIGN_COMPONENTS: readonly [
|
|
|
55
77
|
'ActionSheetRow',
|
|
56
78
|
'ContextMenu',
|
|
57
79
|
];
|
|
80
|
+
/** Every capability name a manifest may declare; an unknown name fails manifest validation. */
|
|
58
81
|
export declare const NATIVE_PLUGIN_CAPABILITIES: readonly [
|
|
59
82
|
'native.objc.classes',
|
|
60
83
|
'native.objc.invoke',
|
|
@@ -80,6 +103,83 @@ export declare const NATIVE_PLUGIN_CAPABILITIES: readonly [
|
|
|
80
103
|
'native.debug.evaluations',
|
|
81
104
|
'native.debug.environment',
|
|
82
105
|
];
|
|
106
|
+
/** The Capability each native bridge method needs. */
|
|
107
|
+
export declare const NATIVE_PLUGIN_METHOD_CAPABILITIES: {
|
|
108
|
+
readonly 'objc.getClass': 'native.objc.classes';
|
|
109
|
+
readonly 'objc.alloc': 'native.objc.classes';
|
|
110
|
+
readonly 'objc.create': 'native.objc.invoke';
|
|
111
|
+
readonly 'objc.className': 'native.objc.classes';
|
|
112
|
+
readonly 'objc.respondsTo': 'native.objc.classes';
|
|
113
|
+
readonly 'objc.call': 'native.objc.invoke';
|
|
114
|
+
readonly 'objc.callSuper': 'native.objc.invoke';
|
|
115
|
+
readonly 'objc.invoke': 'native.objc.invoke';
|
|
116
|
+
readonly 'objc.prepare': 'native.objc.invoke';
|
|
117
|
+
readonly 'objc.invokePrepared': 'native.objc.invoke';
|
|
118
|
+
readonly 'objc.disposePlan': 'native.objc.invoke';
|
|
119
|
+
readonly 'objc.invokeAsync': 'native.objc.invokeAsync';
|
|
120
|
+
readonly 'objc.invokePreparedAsync': 'native.objc.invokeAsync';
|
|
121
|
+
readonly 'objc.batch': 'native.objc.batch';
|
|
122
|
+
readonly 'objc.snapshot': 'native.objc.snapshot';
|
|
123
|
+
readonly 'objc.findViews': 'native.objc.snapshot';
|
|
124
|
+
readonly 'objc.invokeSuper': 'native.objc.invoke';
|
|
125
|
+
readonly 'objc.invokeSuperAsync': 'native.objc.invokeAsync';
|
|
126
|
+
readonly 'objc.getIvar': 'native.objc.ivars';
|
|
127
|
+
readonly 'objc.setIvar': 'native.objc.ivars';
|
|
128
|
+
readonly 'objc.createAssociationKey': 'native.objc.associations';
|
|
129
|
+
readonly 'objc.getAssociatedObject': 'native.objc.associations';
|
|
130
|
+
readonly 'objc.setAssociatedObject': 'native.objc.associations';
|
|
131
|
+
readonly 'objc.struct': 'native.objc.classes';
|
|
132
|
+
readonly 'objc.array': 'native.objc.classes';
|
|
133
|
+
readonly 'objc.data': 'native.objc.classes';
|
|
134
|
+
readonly 'objc.hook': 'native.objc.hooks';
|
|
135
|
+
readonly 'ffi.symbol': 'native.ffi.symbols';
|
|
136
|
+
readonly 'ffi.call': 'native.ffi.call';
|
|
137
|
+
readonly 'fabric.mount': 'native.fabric.mount';
|
|
138
|
+
readonly 'fabric.update': 'native.fabric.mount';
|
|
139
|
+
readonly 'fabric.setSize': 'native.fabric.mount';
|
|
140
|
+
readonly 'fabric.setFrame': 'native.fabric.mount';
|
|
141
|
+
readonly 'fabric.measure': 'native.fabric.mount';
|
|
142
|
+
readonly 'fabric.unmount': 'native.fabric.mount';
|
|
143
|
+
readonly 'fabric.releaseIdle': 'native.fabric.mount';
|
|
144
|
+
readonly 'fabric.mountAsync': 'native.fabric.async';
|
|
145
|
+
readonly 'fabric.updateAsync': 'native.fabric.async';
|
|
146
|
+
readonly 'fabric.setSizeAsync': 'native.fabric.async';
|
|
147
|
+
readonly 'fabric.setFrameAsync': 'native.fabric.async';
|
|
148
|
+
readonly 'fabric.measureAsync': 'native.fabric.async';
|
|
149
|
+
readonly 'fabric.unmountAsync': 'native.fabric.async';
|
|
150
|
+
readonly 'fabric.releaseIdleAsync': 'native.fabric.async';
|
|
151
|
+
readonly 'runtime.subscribe': 'native.runtime.events';
|
|
152
|
+
readonly 'java.getClass': 'native.java.classes';
|
|
153
|
+
readonly 'java.className': 'native.java.classes';
|
|
154
|
+
readonly 'java.describe': 'native.java.classes';
|
|
155
|
+
readonly 'java.construct': 'native.java.construct';
|
|
156
|
+
readonly 'java.respondsTo': 'native.java.classes';
|
|
157
|
+
readonly 'java.invoke': 'native.java.invoke';
|
|
158
|
+
readonly 'java.invokeAsync': 'native.java.invokeAsync';
|
|
159
|
+
readonly 'java.prepare': 'native.java.invoke';
|
|
160
|
+
readonly 'java.invokePrepared': 'native.java.invoke';
|
|
161
|
+
readonly 'java.invokePreparedAsync': 'native.java.invokeAsync';
|
|
162
|
+
readonly 'java.disposePlan': 'native.java.invoke';
|
|
163
|
+
readonly 'java.getField': 'native.java.fields';
|
|
164
|
+
readonly 'java.setField': 'native.java.fields';
|
|
165
|
+
readonly 'java.release': 'native.java.classes';
|
|
166
|
+
readonly 'java.batch': 'native.java.batch';
|
|
167
|
+
readonly 'java.batchAsync': 'native.java.batch';
|
|
168
|
+
readonly 'java.findViews': 'native.java.invoke';
|
|
169
|
+
readonly 'java.createAssociationKey': 'native.java.associations';
|
|
170
|
+
readonly 'java.getAssociatedObject': 'native.java.associations';
|
|
171
|
+
readonly 'java.setAssociatedObject': 'native.java.associations';
|
|
172
|
+
readonly 'debug.recordEvaluation': 'native.debug.evaluations';
|
|
173
|
+
readonly 'debug.environment': 'native.debug.environment';
|
|
174
|
+
readonly 'hooks.hook': 'native.java.hooks';
|
|
175
|
+
readonly 'hooks.setReturnValue': 'native.java.hooks';
|
|
176
|
+
readonly 'hooks.removeReturnValue': 'native.java.hooks';
|
|
177
|
+
readonly 'hooks.clearReturnValues': 'native.java.hooks';
|
|
178
|
+
readonly 'hooks.remove': 'native.java.hooks';
|
|
179
|
+
};
|
|
180
|
+
/** The host platforms a native bridge runs on. */
|
|
181
|
+
export declare const NATIVE_PLUGIN_PLATFORMS: readonly ['ios', 'android'];
|
|
182
|
+
/** The capabilities each platform's loader offers; Objective-C ones are iOS only and Java ones Android only. */
|
|
83
183
|
export declare const NATIVE_PLUGIN_PLATFORM_CAPABILITIES: {
|
|
84
184
|
readonly android: readonly [
|
|
85
185
|
'native.java.classes',
|
|
@@ -115,6 +215,8 @@ export declare const NATIVE_PLUGIN_PLATFORM_CAPABILITIES: {
|
|
|
115
215
|
'native.runtime.events',
|
|
116
216
|
];
|
|
117
217
|
};
|
|
218
|
+
/** The design components Discord added after the build the generated types describe; see {@link NewerDesignComponents}. */
|
|
219
|
+
export declare const NEWER_DESIGN_COMPONENTS: readonly ['SearchBar', 'Badge'];
|
|
118
220
|
/**
|
|
119
221
|
* Props of `AIGlyphText` (function). Exports: AIGlyphText.
|
|
120
222
|
* @see design/visual-identities/ai/AIGlyphText.native.tsx
|
|
@@ -311,69 +413,83 @@ export type ActionSheetSwitchRowComponent = React$1.ComponentType<
|
|
|
311
413
|
* @see design/components/Sheet/native/ActionSheetRow.native.tsx
|
|
312
414
|
*/
|
|
313
415
|
export type ActionSheetSwitchRowProps = TableSwitchRowProps;
|
|
314
|
-
/**
|
|
315
|
-
export type
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
416
|
+
/** One image a plugin ships beside its bundle, as `ubd build` lists it in the manifest. */
|
|
417
|
+
export type AddonAsset = {
|
|
418
|
+
/** The file type. */
|
|
419
|
+
type: 'png' | 'jpg' | 'webp' | 'gif';
|
|
420
|
+
/** Width in points at scale 1. */
|
|
421
|
+
width: number;
|
|
422
|
+
/** Height in points at scale 1. */
|
|
423
|
+
height: number;
|
|
424
|
+
/** The SHA-256 of the file at each pixel density it ships at; the file is `assets/<sha256>.<type>` beside the bundle. */
|
|
425
|
+
scales: Partial<Record<'1' | '2' | '3', string>>;
|
|
324
426
|
};
|
|
325
427
|
/** The author of an addon: a display name and a numeric user id. */
|
|
326
428
|
export type AddonAuthor = {
|
|
429
|
+
/** The name shown for the author. */
|
|
327
430
|
name: string;
|
|
431
|
+
/** The author's Discord user id, as a string of digits. */
|
|
328
432
|
id: `${number}`;
|
|
329
433
|
};
|
|
330
|
-
/**
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
/**
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
434
|
+
/**
|
|
435
|
+
* A loaded plugin, theme or icon pack its manager governs: its manifest and state, and what its manager
|
|
436
|
+
* does to it. Stringifies to its {@link AddonManifest}.
|
|
437
|
+
*/
|
|
438
|
+
export type AddonHandle = {
|
|
439
|
+
/** The manifest's `id`. */
|
|
440
|
+
readonly id: string;
|
|
441
|
+
/** The manifest's display `name`. */
|
|
442
|
+
readonly name: string;
|
|
443
|
+
/** The manifest's `version`. */
|
|
444
|
+
readonly version: string;
|
|
445
|
+
/** The manifest's `authors`. */
|
|
446
|
+
readonly authors: AddonAuthor[];
|
|
447
|
+
/** The loaded manifest, including what the loader and installer recorded. */
|
|
448
|
+
readonly manifest: AddonManifest;
|
|
449
|
+
/** Whether the addon is running. */
|
|
450
|
+
readonly started: boolean;
|
|
451
|
+
/** Whether the addon failed to start. */
|
|
452
|
+
readonly failed: boolean;
|
|
453
|
+
/** Whether the user has the addon enabled, as its manager records it. */
|
|
454
|
+
isEnabled(): boolean;
|
|
455
|
+
/** Whether the plugin manager governs this addon. */
|
|
456
|
+
isPlugin(): boolean;
|
|
457
|
+
/** Asks the addon's manager to enable it. */
|
|
458
|
+
enable(): void | Promise<void>;
|
|
459
|
+
/** Asks the addon's manager to disable it. */
|
|
460
|
+
disable(): void;
|
|
461
|
+
/** Restarts the addon on its current bundle if it is running; settles once it is running again. */
|
|
462
|
+
reload(): Promise<void>;
|
|
463
|
+
/** Returns the manifest, so serializing the addon never leaks its bundle or instance. */
|
|
464
|
+
toJSON(): AddonManifest;
|
|
465
|
+
};
|
|
466
|
+
/** One addon kind, such as `plugin` or `icon-pack`; each has its own manager. */
|
|
467
|
+
export type AddonKind = (typeof ADDON_KINDS)[number];
|
|
468
|
+
/** The `logger` global a plugin runs with: console levels prefixed with the plugin's name. */
|
|
469
|
+
export type AddonLogger = Record<
|
|
470
|
+
'log' | 'info' | 'success' | 'warn' | 'error' | 'debug',
|
|
471
|
+
(...args: unknown[]) => void
|
|
472
|
+
>;
|
|
473
|
+
/** A loaded addon's manifest: the {@link AuthoredAddonManifest} plus what the loader and installer record. */
|
|
474
|
+
export type AddonManifest = AuthoredAddonManifest & {
|
|
475
|
+
/** Set by the loader for an addon it read from disk: the addon's folder name. */
|
|
476
|
+
folder?: string;
|
|
477
|
+
/** Set by the loader for an addon it read from disk: the addon's absolute directory. */
|
|
478
|
+
path?: string;
|
|
364
479
|
/** Set by the loader and installer: whether the bundle carries a valid Unbound signature. */
|
|
365
480
|
trust?: AddonTrust;
|
|
366
|
-
/** Requirements on the Unbound client running the addon. */
|
|
367
|
-
unbound?: {
|
|
368
|
-
/** The minimum Unbound client version (semver) the addon supports. */
|
|
369
|
-
min?: string;
|
|
370
|
-
};
|
|
371
481
|
};
|
|
372
|
-
/**
|
|
373
|
-
export type
|
|
482
|
+
/** What an addon declares for one platform it runs on: the capabilities that platform provides which it needs. */
|
|
483
|
+
export type AddonPlatform<P extends NativePluginPlatform = NativePluginPlatform> = {
|
|
484
|
+
/** Capabilities needed on this platform only, added to the manifest's top-level `capabilities`. */
|
|
485
|
+
capabilities?: NativePluginPlatformCapability<P>[];
|
|
486
|
+
};
|
|
487
|
+
/** The platforms an addon runs on, keyed by platform. */
|
|
488
|
+
export type AddonPlatforms = {
|
|
489
|
+
[P in NativePluginPlatform]?: AddonPlatform<P>;
|
|
490
|
+
};
|
|
374
491
|
/** Whether an addon's bundle carries a valid Unbound signature. */
|
|
375
492
|
export type AddonTrust = 'signed' | 'unsigned';
|
|
376
|
-
export type AddonType = (typeof ADDON_TYPES)[number];
|
|
377
493
|
export type AlertActionButtonComponent = React$1.ComponentType<
|
|
378
494
|
AlertActionButtonProps & Record<string, unknown>
|
|
379
495
|
>;
|
|
@@ -410,11 +526,73 @@ export type AlertModalProps = {
|
|
|
410
526
|
header?: StackProps['children'];
|
|
411
527
|
title?: DesignTextProps['children'];
|
|
412
528
|
};
|
|
529
|
+
/**
|
|
530
|
+
* An asset name of file type `T`: the names Discord's generated build registers as suggestions, and any other
|
|
531
|
+
* string, since a build may register names the generator never saw.
|
|
532
|
+
*/
|
|
533
|
+
export type AssetName<T extends string = DiscordAssetType> = LiteralUnion<
|
|
534
|
+
DiscordAssetName<Extract<T, DiscordAssetType>>
|
|
535
|
+
>;
|
|
536
|
+
/** A file type the asset lookups take: Discord's types as suggestions, and any other string. */
|
|
537
|
+
export type AssetType = LiteralUnion<DiscordAssetType>;
|
|
413
538
|
/** The native module used to register and resolve {@link DiscordAsset}s by id. */
|
|
414
539
|
export type AssetsModule = {
|
|
540
|
+
/** Adds an asset to the registry and returns its new asset id. */
|
|
415
541
|
registerAsset: (asset: DiscordAsset) => number;
|
|
542
|
+
/** Returns the asset registered under `id`; `null` or `undefined` when there is none. */
|
|
416
543
|
getAssetByID: (id: number) => DiscordAsset | null;
|
|
417
544
|
};
|
|
545
|
+
/** The manifest an author ships in an addon's `manifest.json`: its metadata and entry point. */
|
|
546
|
+
export type AuthoredAddonManifest = {
|
|
547
|
+
/** The unique id: alphanumeric runs joined by single `.`, `_` or `-`, at most 100 characters. */
|
|
548
|
+
id: string;
|
|
549
|
+
/** The addon kind this manifest describes; used to validate installs. */
|
|
550
|
+
type?: AddonKind;
|
|
551
|
+
/** The display name; must not be empty. */
|
|
552
|
+
name: string;
|
|
553
|
+
/** A short summary shown with the addon; may be empty. */
|
|
554
|
+
description: string;
|
|
555
|
+
/** Who made the addon; a published manifest lists at least one. */
|
|
556
|
+
authors: AddonAuthor[];
|
|
557
|
+
/** An image for the addon, as a URL or an `{ uri }` image source. */
|
|
558
|
+
icon?:
|
|
559
|
+
| string
|
|
560
|
+
| {
|
|
561
|
+
uri: string;
|
|
562
|
+
};
|
|
563
|
+
/** The bundle's path relative to the manifest, such as `index.js`; it may not leave the addon's directory. */
|
|
564
|
+
main: string;
|
|
565
|
+
/** The addon's version, in strict SemVer 2.0.0 with no `v` prefix. */
|
|
566
|
+
version: string;
|
|
567
|
+
/** The platforms the addon runs on, each with the capabilities it needs there; absent means every platform. */
|
|
568
|
+
platforms?: AddonPlatforms;
|
|
569
|
+
/** Capabilities the addon needs on every platform it runs on. */
|
|
570
|
+
capabilities?: NativePluginCapability[];
|
|
571
|
+
/** The lowest native plugin API version the addon supports; an older native bridge fails its start. */
|
|
572
|
+
minNativePluginApi?: string;
|
|
573
|
+
/** The Ed25519 signature the Unbound team's publish pipeline puts on first-party plugins. */
|
|
574
|
+
signature?: {
|
|
575
|
+
version: 1;
|
|
576
|
+
ed25519: string;
|
|
577
|
+
};
|
|
578
|
+
/** Marks a plugin other plugins build on, which the plugin list hides by default. */
|
|
579
|
+
library?: boolean;
|
|
580
|
+
/** Starts the plugin once Discord has drawn its first frame, for one that changes nothing on the first screen. */
|
|
581
|
+
startAfterFirstFrame?: boolean;
|
|
582
|
+
/** The addons this one needs, by id, each with the semver range it accepts, such as `^1.2.0`. */
|
|
583
|
+
dependencies?: Record<string, string>;
|
|
584
|
+
/** The SHA-512 of each bundle compiled to Hermes bytecode, by bytecode version; covered by `signature`. */
|
|
585
|
+
bytecode?: Record<string, string>;
|
|
586
|
+
/** The SHA-256 of each locale file beside the bundle (`i18n/<code>.json`), by locale code; en-US is in the bundle. */
|
|
587
|
+
locales?: Record<string, string>;
|
|
588
|
+
/** The images `ubd build` emits beside the bundle, by asset name, such as `icons/star`. */
|
|
589
|
+
assets?: Record<string, AddonAsset>;
|
|
590
|
+
/** Requirements on the Unbound client running the addon. */
|
|
591
|
+
unbound?: {
|
|
592
|
+
/** The minimum Unbound client version (semver) the addon supports. */
|
|
593
|
+
min?: string;
|
|
594
|
+
};
|
|
595
|
+
};
|
|
418
596
|
export type AvatarDuoPileComponent = React$1.ComponentType<
|
|
419
597
|
AvatarDuoPileProps & Record<string, unknown>
|
|
420
598
|
>;
|
|
@@ -504,6 +682,34 @@ export type BackgroundBlurViewComponentProps = Omit<
|
|
|
504
682
|
ref?: React$1.Ref<any>;
|
|
505
683
|
style?: React$1.ComponentProps<typeof RN.View>['style'];
|
|
506
684
|
};
|
|
685
|
+
/** The props of Discord's `Badge`, read from Discord 352's `design/components/Badge/native/Badge.native.tsx`. */
|
|
686
|
+
export type BadgeProps = {
|
|
687
|
+
/** A built-in label, or `{ text }` for custom text. */
|
|
688
|
+
type:
|
|
689
|
+
| 'new'
|
|
690
|
+
| 'beta'
|
|
691
|
+
| 'early_access'
|
|
692
|
+
| 'free_trial'
|
|
693
|
+
| {
|
|
694
|
+
text: string;
|
|
695
|
+
};
|
|
696
|
+
/** The badge's colour scheme. */
|
|
697
|
+
variant?: BadgeVariant;
|
|
698
|
+
/** A leading icon component, such as `StarIcon`, drawn at `xxs`. */
|
|
699
|
+
icon?: React$1.ComponentType<DiscordIconProps>;
|
|
700
|
+
};
|
|
701
|
+
/** The colours of Discord's `Badge`; with none, it is grey. `primary` is the brand colour. */
|
|
702
|
+
export type BadgeVariant =
|
|
703
|
+
| 'primary'
|
|
704
|
+
| 'secondary'
|
|
705
|
+
| 'expressive'
|
|
706
|
+
| 'premium'
|
|
707
|
+
| 'inverted'
|
|
708
|
+
| 'notification'
|
|
709
|
+
| 'rarity-common'
|
|
710
|
+
| 'rarity-rare'
|
|
711
|
+
| 'rarity-epic'
|
|
712
|
+
| 'rarity-mythic';
|
|
507
713
|
/**
|
|
508
714
|
* Props of `BaseIconButton` (function). Exports: BaseIconButton.
|
|
509
715
|
* @see design/components/Button/native/BaseIconButton.native.tsx
|
|
@@ -810,6 +1016,14 @@ export type ButtonIconButtonProps = Omit<
|
|
|
810
1016
|
export type ButtonPillProps = Omit<LoadingButtonPillProps, 'loading'> & {
|
|
811
1017
|
loading?: boolean;
|
|
812
1018
|
};
|
|
1019
|
+
/** A button row: it stores nothing, and calls the export `action` of the plugin's `src/actions.ts`. */
|
|
1020
|
+
export type ButtonSchema = SettingCommon & {
|
|
1021
|
+
kind: 'button';
|
|
1022
|
+
displayAs: 'button' | 'danger';
|
|
1023
|
+
action: string;
|
|
1024
|
+
/** The message key of a confirmation asked before `run`. */
|
|
1025
|
+
confirm?: string;
|
|
1026
|
+
};
|
|
813
1027
|
/**
|
|
814
1028
|
* Props of `ButtonShine` (function). Exports: ButtonShine.
|
|
815
1029
|
* @see design/components/Button/native/ButtonShine.native.tsx
|
|
@@ -817,6 +1031,8 @@ export type ButtonPillProps = Omit<LoadingButtonPillProps, 'loading'> & {
|
|
|
817
1031
|
export type ButtonShineProps = {
|
|
818
1032
|
variant?: 'primary' | 'secondary' | 'tertiary' | (string & {});
|
|
819
1033
|
};
|
|
1034
|
+
/** A callback the generator typed: kept as is, since its parameters and arity are what a caller relies on. */
|
|
1035
|
+
export type Callback = (...args: never[]) => unknown;
|
|
820
1036
|
export type CameraLottieComponent = React$1.ComponentType<
|
|
821
1037
|
CameraLottieProps & Record<string, unknown>
|
|
822
1038
|
>;
|
|
@@ -827,6 +1043,17 @@ export type CameraLottieComponent = React$1.ComponentType<
|
|
|
827
1043
|
export type CameraLottieProps = Omit<LottieIconProps, 'ref'> & {
|
|
828
1044
|
ref?: LottieIconProps['ref'];
|
|
829
1045
|
};
|
|
1046
|
+
/** A choice setting: one of its options' keys. */
|
|
1047
|
+
export type ChoiceSettingSchema = {
|
|
1048
|
+
/** Marks a setting that stores one of a fixed set of options. */
|
|
1049
|
+
kind: 'choice';
|
|
1050
|
+
/** Draws the options as a radio group, a picker sheet or a segmented control. */
|
|
1051
|
+
displayAs: 'radio' | 'picker' | 'segmented';
|
|
1052
|
+
/** The `const` of the option picked before the user changes it. */
|
|
1053
|
+
default: string;
|
|
1054
|
+
/** The options, in the order they are drawn. */
|
|
1055
|
+
options: SettingChoice[];
|
|
1056
|
+
};
|
|
830
1057
|
export type CoachmarkComponent = React$1.ComponentType<CoachmarkProps>;
|
|
831
1058
|
/**
|
|
832
1059
|
* Props of `Coachmark` (function). Exports: Coachmark.
|
|
@@ -1107,28 +1334,50 @@ export type DesignCheckboxProps = {
|
|
|
1107
1334
|
onToggle: (...args: any[]) => unknown;
|
|
1108
1335
|
required?: unknown;
|
|
1109
1336
|
};
|
|
1337
|
+
/** The name of one component in {@link DESIGN_COMPONENTS}. */
|
|
1110
1338
|
export type DesignComponentName = (typeof DESIGN_COMPONENTS)[number];
|
|
1111
|
-
/**
|
|
1112
|
-
|
|
1339
|
+
/**
|
|
1340
|
+
* Every component the `design/native.tsx` barrel exports, typed by `bun run generate-discord-types` and made
|
|
1341
|
+
* {@link LooseModule | loose}: known props optional and checked where concrete, unknown props allowed.
|
|
1342
|
+
*/
|
|
1343
|
+
export type DesignComponents = LooseModule<DesignBarrelComponents & NewerDesignComponents>;
|
|
1113
1344
|
/** The design module's non-component exports (hooks, functions, constants), which the generator does not type. */
|
|
1114
1345
|
export type DesignHelpers = {
|
|
1346
|
+
/** Discord's theme-aware style factory; see {@link CreateStyles}. */
|
|
1115
1347
|
createStyles: CreateStyles;
|
|
1348
|
+
/** The text style Discord uses for each typography variant. */
|
|
1116
1349
|
TextStyleSheet: Record<TextVariant, TextStyle>;
|
|
1350
|
+
/** Hook that resolves a semantic colour token, such as `Theme.colors.TEXT_DEFAULT`, to a colour for the current theme. */
|
|
1117
1351
|
useToken: (token: SemanticColorToken) => string;
|
|
1352
|
+
/** Hook that builds the state a `SegmentedControl` and its `SegmentedControlPages` share. */
|
|
1118
1353
|
useSegmentedControlState: (options: SegmentedControlStateOptions) => SegmentedControlState;
|
|
1354
|
+
/** Opens an alert as `openAlert(key, element)`; pass the same key to `dismissAlert` to close it. */
|
|
1119
1355
|
openAlert: DiscordFunction<void>;
|
|
1356
|
+
/** Closes the alert opened under `key`. */
|
|
1120
1357
|
dismissAlert: (key: string) => void;
|
|
1358
|
+
/** Closes every open alert. */
|
|
1121
1359
|
dismissAlerts: DiscordFunction<void>;
|
|
1360
|
+
/** Shows a confirm modal from `{ title, content, confirmText, cancelText, onConfirm }`. */
|
|
1122
1361
|
showConfirmModal: DiscordFunction;
|
|
1362
|
+
/** Shows an action sheet from `{ key, header: { title }, options: [{ label, icon, onPress }] }`. */
|
|
1123
1363
|
showSimpleActionSheet: DiscordFunction;
|
|
1364
|
+
/** Closes the open context menu, such as after a plugin's menu item runs. */
|
|
1124
1365
|
hideContextMenu: DiscordFunction<void>;
|
|
1366
|
+
/** Hook that returns the navigation of the screen the calling component renders in. */
|
|
1125
1367
|
useNavigation: <T = any>() => Navigation<T>;
|
|
1368
|
+
/** Returns `color` with its opacity set to `opacity`. */
|
|
1126
1369
|
setColorOpacity: (color: string, opacity: number) => string;
|
|
1370
|
+
/** Returns `color` darkened by `amount`. */
|
|
1127
1371
|
darkenColor: (color: string, amount: number) => string;
|
|
1372
|
+
/** Returns `color` brightened by `amount`. */
|
|
1128
1373
|
brightenColor: (color: string, amount: number) => string;
|
|
1374
|
+
/** Returns a colour that contrasts with `color`, for content drawn on it. */
|
|
1129
1375
|
getContrastingColor: (color: string) => string;
|
|
1376
|
+
/** Discord's transition state enum; see {@link TransitionState}. */
|
|
1130
1377
|
TransitionStates: EnumLike<typeof TRANSITION_STATE_KEYS>;
|
|
1378
|
+
/** Discord's theme flag enum: gradient themes, reduced or increased contrast, and reduced saturation. */
|
|
1131
1379
|
ThemeContextFlags: EnumLike<typeof THEME_FLAG_KEYS>;
|
|
1380
|
+
/** The minimum WCAG contrast ratios Discord applies to non-text, text and high-contrast text. */
|
|
1132
1381
|
WCAGContrastRatios: Record<'NonText' | 'Text' | 'HighContrastText', number>;
|
|
1133
1382
|
};
|
|
1134
1383
|
export type DesignModalComponent = React$1.ComponentType<
|
|
@@ -1318,17 +1567,1458 @@ export type DisableCustomThemeProps = {
|
|
|
1318
1567
|
};
|
|
1319
1568
|
/** An asset registered with Discord's packager (its metadata and dimensions). */
|
|
1320
1569
|
export type DiscordAsset = {
|
|
1570
|
+
/** `true` on assets the React Native packager generated. */
|
|
1321
1571
|
__packager_asset?: boolean;
|
|
1572
|
+
/** The file name without extension, such as `ic_close`; `assets.getByName` matches on it. */
|
|
1322
1573
|
name: string;
|
|
1574
|
+
/** The asset's directory in the bundle, such as `/assets/images`. */
|
|
1323
1575
|
httpServerLocation: string;
|
|
1576
|
+
/** Width in points at scale 1. */
|
|
1324
1577
|
width: number;
|
|
1578
|
+
/** Height in points at scale 1. */
|
|
1325
1579
|
height: number;
|
|
1580
|
+
/** The pixel densities the bundle ships the file at, such as `[1, 2, 3]`. */
|
|
1326
1581
|
scales: number[];
|
|
1582
|
+
/** The packager's content hash of the file. */
|
|
1327
1583
|
hash: string;
|
|
1584
|
+
/** The file extension, such as `png` or `svg`. */
|
|
1328
1585
|
type: string;
|
|
1329
1586
|
};
|
|
1587
|
+
/** The name of an asset Discord registers, of the given file types. */
|
|
1588
|
+
export type DiscordAssetName<T extends DiscordAssetType = DiscordAssetType> = DiscordAssetNames[T];
|
|
1589
|
+
/** The names of the assets Discord discord-350 registers, by file type, as `assets.getIdByName` takes them. */
|
|
1590
|
+
export type DiscordAssetNames = {
|
|
1591
|
+
jpg: 'background-splash-dev';
|
|
1592
|
+
lottie:
|
|
1593
|
+
| 'Camera'
|
|
1594
|
+
| 'MessageRequest'
|
|
1595
|
+
| 'MessagesTab'
|
|
1596
|
+
| 'Microphone'
|
|
1597
|
+
| 'NitroGem1'
|
|
1598
|
+
| 'NitroGem12'
|
|
1599
|
+
| 'NitroGem15'
|
|
1600
|
+
| 'NitroGem18'
|
|
1601
|
+
| 'NitroGem2'
|
|
1602
|
+
| 'NitroGem24'
|
|
1603
|
+
| 'NitroGem3'
|
|
1604
|
+
| 'NitroGem6'
|
|
1605
|
+
| 'NitroGem9'
|
|
1606
|
+
| 'NotificationsTab'
|
|
1607
|
+
| 'ServerTab'
|
|
1608
|
+
| 'SpendEarnOrbs'
|
|
1609
|
+
| 'SpendEarnOrbsLightTheme'
|
|
1610
|
+
| 'YouTab';
|
|
1611
|
+
png:
|
|
1612
|
+
| 'AccessibilityIcon'
|
|
1613
|
+
| 'AchievementsIcon'
|
|
1614
|
+
| 'ActivitiesIcon'
|
|
1615
|
+
| 'AnalyticsIcon'
|
|
1616
|
+
| 'AngryIcon'
|
|
1617
|
+
| 'AnnouncementsIcon'
|
|
1618
|
+
| 'AnnouncementsLockIcon'
|
|
1619
|
+
| 'AnnouncementsSpoilerIcon'
|
|
1620
|
+
| 'AnnouncementsWarningIcon'
|
|
1621
|
+
| 'AppIcon'
|
|
1622
|
+
| 'AppleNeutralIcon'
|
|
1623
|
+
| 'AppsIcon'
|
|
1624
|
+
| 'AppsLockIcon'
|
|
1625
|
+
| 'AppsSpoilerIcon'
|
|
1626
|
+
| 'AppsWarningIcon'
|
|
1627
|
+
| 'ArrowAngleLeftUpIcon'
|
|
1628
|
+
| 'ArrowAngleRightUpIcon'
|
|
1629
|
+
| 'ArrowLargeDownIcon'
|
|
1630
|
+
| 'ArrowLargeLeftIcon'
|
|
1631
|
+
| 'ArrowLargeRightIcon'
|
|
1632
|
+
| 'ArrowLargeUpIcon'
|
|
1633
|
+
| 'ArrowSmallDownIcon'
|
|
1634
|
+
| 'ArrowSmallLeftIcon'
|
|
1635
|
+
| 'ArrowSmallRightIcon'
|
|
1636
|
+
| 'ArrowSmallUpIcon'
|
|
1637
|
+
| 'ArrowsLeftRightIcon'
|
|
1638
|
+
| 'ArrowsUpDownIcon'
|
|
1639
|
+
| 'AtIcon'
|
|
1640
|
+
| 'AttachmentIcon'
|
|
1641
|
+
| 'BackspaceIcon'
|
|
1642
|
+
| 'BattlenetNeutralIcon'
|
|
1643
|
+
| 'BeakerIcon'
|
|
1644
|
+
| 'BeanieIcon'
|
|
1645
|
+
| 'BellIcon'
|
|
1646
|
+
| 'BellSlashIcon'
|
|
1647
|
+
| 'BellZIcon'
|
|
1648
|
+
| 'BicycleIcon'
|
|
1649
|
+
| 'BillIcon'
|
|
1650
|
+
| 'BlueskyNeutralIcon'
|
|
1651
|
+
| 'BlurBackgroundIcon'
|
|
1652
|
+
| 'BlurpleTwilightIcon'
|
|
1653
|
+
| 'BlushIcon'
|
|
1654
|
+
| 'BookCheckIcon'
|
|
1655
|
+
| 'BookmarkIcon'
|
|
1656
|
+
| 'BookmarkOutlineIcon'
|
|
1657
|
+
| 'BoostGemIcon'
|
|
1658
|
+
| 'BoostGemOutlineIcon'
|
|
1659
|
+
| 'BoostGemSlashIcon'
|
|
1660
|
+
| 'BoostTier1Icon'
|
|
1661
|
+
| 'BoostTier2Icon'
|
|
1662
|
+
| 'BoostTier3Icon'
|
|
1663
|
+
| 'BrandDarkIcon'
|
|
1664
|
+
| 'BrandInvertedIcon'
|
|
1665
|
+
| 'BugIcon'
|
|
1666
|
+
| 'BurgerIcon'
|
|
1667
|
+
| 'CalendarIcon'
|
|
1668
|
+
| 'CalendarMinusIcon'
|
|
1669
|
+
| 'CalendarPlusIcon'
|
|
1670
|
+
| 'CameraIcon'
|
|
1671
|
+
| 'CamoIcon'
|
|
1672
|
+
| 'CarIcon'
|
|
1673
|
+
| 'ChannelListIcon'
|
|
1674
|
+
| 'ChannelListMagnifyingGlassIcon'
|
|
1675
|
+
| 'ChannelListPlusIcon'
|
|
1676
|
+
| 'ChannelNotificationIcon'
|
|
1677
|
+
| 'ChannelsFollowedIcon'
|
|
1678
|
+
| 'ChatArrowRightIcon'
|
|
1679
|
+
| 'ChatCheckIcon'
|
|
1680
|
+
| 'ChatDotsIcon'
|
|
1681
|
+
| 'ChatIcon'
|
|
1682
|
+
| 'ChatMarkUnreadIcon'
|
|
1683
|
+
| 'ChatPlusIcon'
|
|
1684
|
+
| 'ChatShieldIcon'
|
|
1685
|
+
| 'ChatSmileIcon'
|
|
1686
|
+
| 'ChatWarningIcon'
|
|
1687
|
+
| 'ChatXIcon'
|
|
1688
|
+
| 'Check'
|
|
1689
|
+
| 'CheckmarkLargeBoldIcon'
|
|
1690
|
+
| 'CheckmarkLargeIcon'
|
|
1691
|
+
| 'CheckmarkSmallBoldIcon'
|
|
1692
|
+
| 'CheckmarkSmallIcon'
|
|
1693
|
+
| 'CherryBlossomIcon'
|
|
1694
|
+
| 'ChevronLargeDownIcon'
|
|
1695
|
+
| 'ChevronLargeLeftIcon'
|
|
1696
|
+
| 'ChevronLargeRightIcon'
|
|
1697
|
+
| 'ChevronLargeUpIcon'
|
|
1698
|
+
| 'ChevronSmallDownIcon'
|
|
1699
|
+
| 'ChevronSmallRightIcon'
|
|
1700
|
+
| 'ChevronSmallUpIcon'
|
|
1701
|
+
| 'CircleCheckIcon'
|
|
1702
|
+
| 'CircleCheckIcon-primary'
|
|
1703
|
+
| 'CircleCheckIcon-secondary'
|
|
1704
|
+
| 'CircleErrorIcon'
|
|
1705
|
+
| 'CircleErrorIcon-primary'
|
|
1706
|
+
| 'CircleErrorIcon-secondary'
|
|
1707
|
+
| 'CircleInformationIcon'
|
|
1708
|
+
| 'CircleInformationIcon-primary'
|
|
1709
|
+
| 'CircleInformationIcon-secondary'
|
|
1710
|
+
| 'CircleMinusIcon-primary'
|
|
1711
|
+
| 'CircleMinusIcon-secondary'
|
|
1712
|
+
| 'CirclePlayIcon-primary'
|
|
1713
|
+
| 'CirclePlayIcon-secondary'
|
|
1714
|
+
| 'CirclePlusIcon-primary'
|
|
1715
|
+
| 'CirclePlusIcon-secondary'
|
|
1716
|
+
| 'CircleQuestionIcon'
|
|
1717
|
+
| 'CircleQuestionIcon-primary'
|
|
1718
|
+
| 'CircleQuestionIcon-secondary'
|
|
1719
|
+
| 'CircleXIcon'
|
|
1720
|
+
| 'CircleXIcon-primary'
|
|
1721
|
+
| 'CircleXIcon-secondary'
|
|
1722
|
+
| 'CircuitIcon'
|
|
1723
|
+
| 'ClipboardCheckIcon'
|
|
1724
|
+
| 'ClipboardListIcon'
|
|
1725
|
+
| 'ClipsIcon'
|
|
1726
|
+
| 'ClockIcon'
|
|
1727
|
+
| 'ClockWarningIcon'
|
|
1728
|
+
| 'ClockXIcon'
|
|
1729
|
+
| 'ClosedCaptionsOutlineIcon'
|
|
1730
|
+
| 'CloudDownloadIcon'
|
|
1731
|
+
| 'CloudIcon'
|
|
1732
|
+
| 'ClydeIcon'
|
|
1733
|
+
| 'ColorWaveIcon'
|
|
1734
|
+
| 'CompassIcon'
|
|
1735
|
+
| 'ConnectionAverageIcon'
|
|
1736
|
+
| 'ConnectionBadIcon'
|
|
1737
|
+
| 'ConnectionFineIcon'
|
|
1738
|
+
| 'ConnectionUnknownIcon'
|
|
1739
|
+
| 'ControllerIcon'
|
|
1740
|
+
| 'CopyIcon'
|
|
1741
|
+
| 'CreditCardIcon'
|
|
1742
|
+
| 'CrownIcon'
|
|
1743
|
+
| 'CrunchyrollNeutralIcon'
|
|
1744
|
+
| 'DenyIcon'
|
|
1745
|
+
| 'DiceIcon'
|
|
1746
|
+
| 'Discord'
|
|
1747
|
+
| 'DoorExitIcon'
|
|
1748
|
+
| 'DoubleCheckmarkIcon'
|
|
1749
|
+
| 'DoubleChevronSmallRightIcon'
|
|
1750
|
+
| 'DownloadIcon'
|
|
1751
|
+
| 'DragIcon'
|
|
1752
|
+
| 'EducationIcon'
|
|
1753
|
+
| 'EmbedIcon'
|
|
1754
|
+
| 'EmojiAngryFaceWithHornsIcon'
|
|
1755
|
+
| 'EmojiColdFaceIcon'
|
|
1756
|
+
| 'EmojiCowboyHatFaceIcon'
|
|
1757
|
+
| 'EmojiCryingFaceIcon'
|
|
1758
|
+
| 'EmojiDisguisedFaceIcon'
|
|
1759
|
+
| 'EmojiFaceVomitingIcon'
|
|
1760
|
+
| 'EmojiFaceWithMonocleIcon'
|
|
1761
|
+
| 'EmojiFaceWithSpiralEyesIcon'
|
|
1762
|
+
| 'EmojiMeltingFaceIcon'
|
|
1763
|
+
| 'EmojiMoneyMouthFaceIcon'
|
|
1764
|
+
| 'EmojiNerdFaceIcon'
|
|
1765
|
+
| 'EmojiPartyingFaceIcon'
|
|
1766
|
+
| 'EmojiRollingOnTheFloorLaughingIcon'
|
|
1767
|
+
| 'EmojiSalutingFaceIcon'
|
|
1768
|
+
| 'EmojiSkullIcon'
|
|
1769
|
+
| 'EmojiSmilingFaceWithHeartsIcon'
|
|
1770
|
+
| 'EmojiSmilingFaceWithHornsIcon'
|
|
1771
|
+
| 'EmojiSmilingFaceWithSunglassesIcon'
|
|
1772
|
+
| 'EmojiSquintingFaceWithTongueIcon'
|
|
1773
|
+
| 'EmojiUpsideDownFaceIcon'
|
|
1774
|
+
| 'EmojiWoozyFaceIcon'
|
|
1775
|
+
| 'EmojiZanyFaceIcon'
|
|
1776
|
+
| 'EnvelopeIcon'
|
|
1777
|
+
| 'EpicGamesNeutralIcon'
|
|
1778
|
+
| 'ExampleSketchheadsActivity'
|
|
1779
|
+
| 'ExampleVoiceChatActivity'
|
|
1780
|
+
| 'ExperimentalCommonIcon'
|
|
1781
|
+
| 'ExperimentalDirectSelectIcon'
|
|
1782
|
+
| 'ExperimentalEpicIcon'
|
|
1783
|
+
| 'ExperimentalGameControllerLinkIcon'
|
|
1784
|
+
| 'ExperimentalLfgIcon'
|
|
1785
|
+
| 'ExperimentalLfgLockIcon'
|
|
1786
|
+
| 'ExperimentalMythicIcon'
|
|
1787
|
+
| 'ExperimentalRareIcon'
|
|
1788
|
+
| 'EyeDropperIcon'
|
|
1789
|
+
| 'EyeIcon'
|
|
1790
|
+
| 'EyeSlashIcon'
|
|
1791
|
+
| 'FacebookNeutralIcon'
|
|
1792
|
+
| 'FileIcon'
|
|
1793
|
+
| 'FileUpIcon'
|
|
1794
|
+
| 'FileWarningIcon'
|
|
1795
|
+
| 'FiltersHorizontalIcon'
|
|
1796
|
+
| 'FireIcon'
|
|
1797
|
+
| 'FlagIcon'
|
|
1798
|
+
| 'FlashIcon'
|
|
1799
|
+
| 'FolderIcon'
|
|
1800
|
+
| 'FolderPlusIcon'
|
|
1801
|
+
| 'FoodIcon'
|
|
1802
|
+
| 'ForumIcon'
|
|
1803
|
+
| 'ForumLockIcon'
|
|
1804
|
+
| 'ForumSpoilerIcon'
|
|
1805
|
+
| 'ForumWarningIcon'
|
|
1806
|
+
| 'FriendsIcon'
|
|
1807
|
+
| 'FullscreenEnterIcon'
|
|
1808
|
+
| 'GalaxyIcon'
|
|
1809
|
+
| 'GameControllerIcon'
|
|
1810
|
+
| 'GamingIcon'
|
|
1811
|
+
| 'GifIcon'
|
|
1812
|
+
| 'GiftIcon'
|
|
1813
|
+
| 'GlobeEarthIcon'
|
|
1814
|
+
| 'Glow'
|
|
1815
|
+
| 'GoogleNeutralIcon'
|
|
1816
|
+
| 'GridSquareIcon'
|
|
1817
|
+
| 'GroupArrowDownIcon'
|
|
1818
|
+
| 'GroupIcon'
|
|
1819
|
+
| 'GroupPlusIcon'
|
|
1820
|
+
| 'HammerIcon'
|
|
1821
|
+
| 'HandRequestDenyIcon'
|
|
1822
|
+
| 'HandRequestSpeakIcon'
|
|
1823
|
+
| 'HandRequestSpeakListIcon'
|
|
1824
|
+
| 'HashmarkIcon'
|
|
1825
|
+
| 'HeadphonesDenyIcon'
|
|
1826
|
+
| 'HeadphonesIcon'
|
|
1827
|
+
| 'HeadphonesSlashIcon'
|
|
1828
|
+
| 'HeartIcon'
|
|
1829
|
+
| 'HeartOutlineIcon'
|
|
1830
|
+
| 'HoloWavesIcon'
|
|
1831
|
+
| 'HomeIcon'
|
|
1832
|
+
| 'HourglassIcon'
|
|
1833
|
+
| 'HubIcon'
|
|
1834
|
+
| 'IAP_feature_education'
|
|
1835
|
+
| 'IdCardIcon'
|
|
1836
|
+
| 'IdIcon'
|
|
1837
|
+
| 'ImageBrokenIcon'
|
|
1838
|
+
| 'ImageFileIcon'
|
|
1839
|
+
| 'ImageIcon'
|
|
1840
|
+
| 'ImageLockIcon'
|
|
1841
|
+
| 'ImagePlusIcon'
|
|
1842
|
+
| 'ImageSparkleIcon'
|
|
1843
|
+
| 'ImageTextIcon'
|
|
1844
|
+
| 'ImageWarningIcon'
|
|
1845
|
+
| 'ImagesIcon'
|
|
1846
|
+
| 'InRainbowsIcon'
|
|
1847
|
+
| 'InboxIcon'
|
|
1848
|
+
| 'InstagramNeutralIcon'
|
|
1849
|
+
| 'InventoryIcon'
|
|
1850
|
+
| 'KeyIcon'
|
|
1851
|
+
| 'KeyboardIcon'
|
|
1852
|
+
| 'LanguageIcon'
|
|
1853
|
+
| 'LaptopPhoneIcon'
|
|
1854
|
+
| 'LettersIcon'
|
|
1855
|
+
| 'LightbulbIcon'
|
|
1856
|
+
| 'LinkExternalMediumIcon'
|
|
1857
|
+
| 'LinkExternalSmallIcon'
|
|
1858
|
+
| 'LinkIcon'
|
|
1859
|
+
| 'LinkPlusIcon'
|
|
1860
|
+
| 'ListBulletsIcon'
|
|
1861
|
+
| 'ListNumberedIcon'
|
|
1862
|
+
| 'ListViewIcon'
|
|
1863
|
+
| 'LocationIcon'
|
|
1864
|
+
| 'LockIcon'
|
|
1865
|
+
| 'LockUnlockedIcon'
|
|
1866
|
+
| 'MagicDoorIcon'
|
|
1867
|
+
| 'MagicWandIcon'
|
|
1868
|
+
| 'MagnifyingGlassIcon'
|
|
1869
|
+
| 'MangaIcon'
|
|
1870
|
+
| 'MatteDarkIcon'
|
|
1871
|
+
| 'MatteLightIcon'
|
|
1872
|
+
| 'MaximizeIcon'
|
|
1873
|
+
| 'MedalIcon'
|
|
1874
|
+
| 'MenuIcon'
|
|
1875
|
+
| 'MicrophoneArrowRightIcon'
|
|
1876
|
+
| 'MicrophoneDenyIcon'
|
|
1877
|
+
| 'MicrophoneIcon'
|
|
1878
|
+
| 'MicrophoneSlashIcon'
|
|
1879
|
+
| 'MidnightPrismIcon'
|
|
1880
|
+
| 'MinecraftNeutralIcon-primary'
|
|
1881
|
+
| 'MinecraftNeutralIcon-secondary'
|
|
1882
|
+
| 'MinecraftNeutralIcon-tertiary'
|
|
1883
|
+
| 'MobilePhoneDenyIcon'
|
|
1884
|
+
| 'MobilePhoneIcon'
|
|
1885
|
+
| 'MobilePhoneSettingsIcon'
|
|
1886
|
+
| 'MobilePhoneShareIcon'
|
|
1887
|
+
| 'ModerationIcon'
|
|
1888
|
+
| 'MoreHorizontalIcon'
|
|
1889
|
+
| 'MoreVerticalIcon'
|
|
1890
|
+
| 'MushroomIcon'
|
|
1891
|
+
| 'MusicIcon'
|
|
1892
|
+
| 'MusicSlashIcon'
|
|
1893
|
+
| 'NatureIcon'
|
|
1894
|
+
| 'NewUserIcon'
|
|
1895
|
+
| 'NewUserSimpleIcon'
|
|
1896
|
+
| 'NintendoSwitchNeutralIcon'
|
|
1897
|
+
| 'NitroWheelIcon'
|
|
1898
|
+
| 'NitroWheelIconWithGradient'
|
|
1899
|
+
| 'NotificationCenter'
|
|
1900
|
+
| 'ObjectIcon'
|
|
1901
|
+
| 'OrbsIcon'
|
|
1902
|
+
| 'PaintPaletteIcon'
|
|
1903
|
+
| 'PaintbrushThinIcon'
|
|
1904
|
+
| 'PaperIcon'
|
|
1905
|
+
| 'PaperPlusIcon'
|
|
1906
|
+
| 'PastelIcon'
|
|
1907
|
+
| 'PauseIcon'
|
|
1908
|
+
| 'PawPrintIcon'
|
|
1909
|
+
| 'PencilIcon'
|
|
1910
|
+
| 'PencilSparkleIcon'
|
|
1911
|
+
| 'PhoneCallIcon'
|
|
1912
|
+
| 'PhoneHangUpIcon'
|
|
1913
|
+
| 'PhoneIcon'
|
|
1914
|
+
| 'PiggyBankIcon'
|
|
1915
|
+
| 'PinIcon'
|
|
1916
|
+
| 'PirateIcon'
|
|
1917
|
+
| 'PlayIcon'
|
|
1918
|
+
| 'PlaystationNeutralIcon'
|
|
1919
|
+
| 'PlusLargeIcon'
|
|
1920
|
+
| 'PlusMediumIcon'
|
|
1921
|
+
| 'PlusSmallIcon'
|
|
1922
|
+
| 'PollsIcon'
|
|
1923
|
+
| 'PremiumGroupEmbedImage'
|
|
1924
|
+
| 'PuzzlePieceIcon'
|
|
1925
|
+
| 'QrCodeIcon'
|
|
1926
|
+
| 'QuestsIcon'
|
|
1927
|
+
| 'QuoteIcon'
|
|
1928
|
+
| 'ReactionIcon'
|
|
1929
|
+
| 'RecordPlayerIcon'
|
|
1930
|
+
| 'RedditNeutralIcon'
|
|
1931
|
+
| 'RedoIcon'
|
|
1932
|
+
| 'RefreshIcon'
|
|
1933
|
+
| 'RemixIcon'
|
|
1934
|
+
| 'RetryIcon'
|
|
1935
|
+
| 'RibbonIcon'
|
|
1936
|
+
| 'RiotGamesNeutralIcon'
|
|
1937
|
+
| 'RobloxNeutralIcon'
|
|
1938
|
+
| 'RobotIcon'
|
|
1939
|
+
| 'SaveIcon'
|
|
1940
|
+
| 'ScienceIcon'
|
|
1941
|
+
| 'ScreenArrowIcon'
|
|
1942
|
+
| 'ScreenIcon'
|
|
1943
|
+
| 'ScreenStreamIcon'
|
|
1944
|
+
| 'ScreenXIcon'
|
|
1945
|
+
| 'SendMessageIcon'
|
|
1946
|
+
| 'ServerGridIcon'
|
|
1947
|
+
| 'ServerIcon'
|
|
1948
|
+
| 'SettingsIcon'
|
|
1949
|
+
| 'SettingsInfoIcon'
|
|
1950
|
+
| 'Share'
|
|
1951
|
+
| 'ShareIcon'
|
|
1952
|
+
| 'ShieldIcon'
|
|
1953
|
+
| 'ShieldLockIcon'
|
|
1954
|
+
| 'ShieldUserIcon'
|
|
1955
|
+
| 'ShopIcon'
|
|
1956
|
+
| 'SignPostIcon'
|
|
1957
|
+
| 'SlashBoxIcon'
|
|
1958
|
+
| 'SlashIcon'
|
|
1959
|
+
| 'Small'
|
|
1960
|
+
| 'SoundboardIcon'
|
|
1961
|
+
| 'SoundboardSlashIcon'
|
|
1962
|
+
| 'SparklesIcon'
|
|
1963
|
+
| 'SpeedometerIcon'
|
|
1964
|
+
| 'SpoilerIcon'
|
|
1965
|
+
| 'SpotifyNeutralIcon'
|
|
1966
|
+
| 'StaffBadgeIcon'
|
|
1967
|
+
| 'StageIcon'
|
|
1968
|
+
| 'StageLockIcon'
|
|
1969
|
+
| 'StampIcon'
|
|
1970
|
+
| 'StampXIcon'
|
|
1971
|
+
| 'StarIcon'
|
|
1972
|
+
| 'StarOutlineIcon'
|
|
1973
|
+
| 'StatusDND'
|
|
1974
|
+
| 'StatusIdle'
|
|
1975
|
+
| 'StatusMobileOnline'
|
|
1976
|
+
| 'StatusOffline'
|
|
1977
|
+
| 'StatusOnline'
|
|
1978
|
+
| 'StatusStreaming'
|
|
1979
|
+
| 'StatusVROnline'
|
|
1980
|
+
| 'SteamNeutralIcon'
|
|
1981
|
+
| 'StickerIcon'
|
|
1982
|
+
| 'StickerPlusIcon'
|
|
1983
|
+
| 'StopIcon'
|
|
1984
|
+
| 'SubscriptionIcon'
|
|
1985
|
+
| 'SunsetIcon'
|
|
1986
|
+
| 'SuperReactionIcon'
|
|
1987
|
+
| 'TagIcon'
|
|
1988
|
+
| 'TagsIcon'
|
|
1989
|
+
| 'TeacupIcon'
|
|
1990
|
+
| 'TextControllerIcon'
|
|
1991
|
+
| 'TextIcon'
|
|
1992
|
+
| 'TextLockIcon'
|
|
1993
|
+
| 'TextSpoilerIcon'
|
|
1994
|
+
| 'TextWarningIcon'
|
|
1995
|
+
| 'ThemeDarkIcon'
|
|
1996
|
+
| 'ThemeGrayIcon'
|
|
1997
|
+
| 'ThemeLightIcon'
|
|
1998
|
+
| 'ThemeMidnightIcon'
|
|
1999
|
+
| 'ThreadIcon'
|
|
2000
|
+
| 'ThreadLockIcon'
|
|
2001
|
+
| 'ThreadMinusIcon'
|
|
2002
|
+
| 'ThreadPlusIcon'
|
|
2003
|
+
| 'ThumbsDownIcon'
|
|
2004
|
+
| 'ThumbsUpIcon'
|
|
2005
|
+
| 'TicketIcon'
|
|
2006
|
+
| 'TiktokNeutralIcon'
|
|
2007
|
+
| 'TimerIcon'
|
|
2008
|
+
| 'TopicsIcon'
|
|
2009
|
+
| 'TrainIcon'
|
|
2010
|
+
| 'TranscriptOutlineIcon'
|
|
2011
|
+
| 'TrashIcon'
|
|
2012
|
+
| 'TreehouseIcon'
|
|
2013
|
+
| 'TrophyIcon'
|
|
2014
|
+
| 'TvIcon'
|
|
2015
|
+
| 'TwitchNeutralIcon'
|
|
2016
|
+
| 'TwitterNeutralIcon'
|
|
2017
|
+
| 'UndoIcon'
|
|
2018
|
+
| 'UnknownGameIcon'
|
|
2019
|
+
| 'UnsendIcon'
|
|
2020
|
+
| 'UploadIcon'
|
|
2021
|
+
| 'UserCheckIcon'
|
|
2022
|
+
| 'UserCircleIcon'
|
|
2023
|
+
| 'UserClockIcon'
|
|
2024
|
+
| 'UserIcon'
|
|
2025
|
+
| 'UserMinusIcon'
|
|
2026
|
+
| 'UserPlatformIcon'
|
|
2027
|
+
| 'UserPlusIcon'
|
|
2028
|
+
| 'UserSquareIcon'
|
|
2029
|
+
| 'VideoDenyIcon'
|
|
2030
|
+
| 'VideoIcon'
|
|
2031
|
+
| 'VideoSelfieIcon'
|
|
2032
|
+
| 'VideoSlashIcon'
|
|
2033
|
+
| 'VoiceLockIcon'
|
|
2034
|
+
| 'VoiceNormalIcon'
|
|
2035
|
+
| 'VoiceNormalSpoilerIcon'
|
|
2036
|
+
| 'VoiceWarningIcon'
|
|
2037
|
+
| 'VoiceXIcon'
|
|
2038
|
+
| 'VrHeadsetIcon'
|
|
2039
|
+
| 'WarningIcon'
|
|
2040
|
+
| 'WaveformIcon'
|
|
2041
|
+
| 'WebhookIcon'
|
|
2042
|
+
| 'WebhookPlusIcon'
|
|
2043
|
+
| 'WidgetsIcon'
|
|
2044
|
+
| 'WindowLaunchIcon'
|
|
2045
|
+
| 'WrenchIcon'
|
|
2046
|
+
| 'XLargeBoldIcon'
|
|
2047
|
+
| 'XLargeIcon'
|
|
2048
|
+
| 'XNeutralIcon'
|
|
2049
|
+
| 'XSmallBoldIcon'
|
|
2050
|
+
| 'XSmallIcon'
|
|
2051
|
+
| 'XboxNeutralIcon'
|
|
2052
|
+
| 'Y2KIcon'
|
|
2053
|
+
| 'YoutubeNeutralIcon'
|
|
2054
|
+
| 'add'
|
|
2055
|
+
| 'add_friend_32px'
|
|
2056
|
+
| 'add_server'
|
|
2057
|
+
| 'add_white'
|
|
2058
|
+
| 'airplay'
|
|
2059
|
+
| 'alert'
|
|
2060
|
+
| 'amanda_1'
|
|
2061
|
+
| 'amanda_2'
|
|
2062
|
+
| 'announcement_birb'
|
|
2063
|
+
| 'app_dock_no_permissions_dark'
|
|
2064
|
+
| 'app_dock_no_permissions_light'
|
|
2065
|
+
| 'app_dock_not_found_dark'
|
|
2066
|
+
| 'app_dock_not_found_light'
|
|
2067
|
+
| 'app_icon_marketing'
|
|
2068
|
+
| 'app_icons_upsell'
|
|
2069
|
+
| 'app_installed_check'
|
|
2070
|
+
| 'arrow'
|
|
2071
|
+
| 'arrow-right'
|
|
2072
|
+
| 'arrow-sm-down'
|
|
2073
|
+
| 'asset_blurred_media_post_preview'
|
|
2074
|
+
| 'asset_bronze_badge_small'
|
|
2075
|
+
| 'asset_diamond_badge_small'
|
|
2076
|
+
| 'asset_emerald_badge_small'
|
|
2077
|
+
| 'asset_gold_badge_small'
|
|
2078
|
+
| 'asset_gradient'
|
|
2079
|
+
| 'asset_nitro_ticket'
|
|
2080
|
+
| 'asset_opal_badge_small'
|
|
2081
|
+
| 'asset_platinum_badge_small'
|
|
2082
|
+
| 'asset_role_subscription_earnings'
|
|
2083
|
+
| 'asset_role_subscription_exclusive_perks'
|
|
2084
|
+
| 'asset_role_subscription_megaphone'
|
|
2085
|
+
| 'asset_ruby_badge_small'
|
|
2086
|
+
| 'asset_silver_badge_small'
|
|
2087
|
+
| 'audience_welcome'
|
|
2088
|
+
| 'audio'
|
|
2089
|
+
| 'auto_moderation_avatar'
|
|
2090
|
+
| 'avatar_placeholder'
|
|
2091
|
+
| 'back-icon'
|
|
2092
|
+
| 'back-icon-mask'
|
|
2093
|
+
| 'background'
|
|
2094
|
+
| 'background-splash-mobile'
|
|
2095
|
+
| 'badconnection'
|
|
2096
|
+
| 'badge'
|
|
2097
|
+
| 'badge_2'
|
|
2098
|
+
| 'bg'
|
|
2099
|
+
| 'blocked-purchases-dark'
|
|
2100
|
+
| 'blocked-purchases-light'
|
|
2101
|
+
| 'blocked_dark'
|
|
2102
|
+
| 'blocked_darker'
|
|
2103
|
+
| 'blocked_light'
|
|
2104
|
+
| 'blue-pointer-hand'
|
|
2105
|
+
| 'boost'
|
|
2106
|
+
| 'box_idle'
|
|
2107
|
+
| 'breaddog_1'
|
|
2108
|
+
| 'cactus'
|
|
2109
|
+
| 'cake_idle'
|
|
2110
|
+
| 'camera'
|
|
2111
|
+
| 'camera-swap'
|
|
2112
|
+
| 'camera_swap'
|
|
2113
|
+
| 'camera_upload'
|
|
2114
|
+
| 'camera_upload_light'
|
|
2115
|
+
| 'cap_2'
|
|
2116
|
+
| 'channel-following-backdrop-dark'
|
|
2117
|
+
| 'channel-following-backdrop-light'
|
|
2118
|
+
| 'channel_following_success_1'
|
|
2119
|
+
| 'channel_following_success_2'
|
|
2120
|
+
| 'channel_following_success_3'
|
|
2121
|
+
| 'channel_settings_grid_view_example_post'
|
|
2122
|
+
| 'channel_settings_list_view_example_post'
|
|
2123
|
+
| 'channel_setup'
|
|
2124
|
+
| 'channel_setup_darker'
|
|
2125
|
+
| 'channel_setup_light'
|
|
2126
|
+
| 'channels-empty'
|
|
2127
|
+
| 'check-with-stars'
|
|
2128
|
+
| 'chest_idle'
|
|
2129
|
+
| 'clear-icon'
|
|
2130
|
+
| 'client_theme'
|
|
2131
|
+
| 'client_themes_upsell'
|
|
2132
|
+
| 'close'
|
|
2133
|
+
| 'close-icon'
|
|
2134
|
+
| 'clouds_background'
|
|
2135
|
+
| 'clouds_light_background'
|
|
2136
|
+
| 'clyde-avatar'
|
|
2137
|
+
| 'code-illustration-dark'
|
|
2138
|
+
| 'code-illustration-light'
|
|
2139
|
+
| 'coffee_idle'
|
|
2140
|
+
| 'confetti'
|
|
2141
|
+
| 'conjure_activity_dark'
|
|
2142
|
+
| 'conjure_activity_light'
|
|
2143
|
+
| 'connections-profile-steam-dota2'
|
|
2144
|
+
| 'connections-profile-steam-tf2'
|
|
2145
|
+
| 'conversation'
|
|
2146
|
+
| 'copy'
|
|
2147
|
+
| 'crunchyroll_connect'
|
|
2148
|
+
| 'crunchyroll_link_intro'
|
|
2149
|
+
| 'crunchyroll_link_success'
|
|
2150
|
+
| 'cs'
|
|
2151
|
+
| 'cta'
|
|
2152
|
+
| 'custom_icons'
|
|
2153
|
+
| 'custom_profile'
|
|
2154
|
+
| 'custom_sounds'
|
|
2155
|
+
| 'customize_empty'
|
|
2156
|
+
| 'customize_empty_light'
|
|
2157
|
+
| 'da'
|
|
2158
|
+
| 'dark_home_header_placeholder'
|
|
2159
|
+
| 'de'
|
|
2160
|
+
| 'deafen'
|
|
2161
|
+
| 'debug'
|
|
2162
|
+
| 'default_avatar_0'
|
|
2163
|
+
| 'default_avatar_0_small'
|
|
2164
|
+
| 'default_avatar_1'
|
|
2165
|
+
| 'default_avatar_1_small'
|
|
2166
|
+
| 'default_avatar_2'
|
|
2167
|
+
| 'default_avatar_2_small'
|
|
2168
|
+
| 'default_avatar_3'
|
|
2169
|
+
| 'default_avatar_3_small'
|
|
2170
|
+
| 'default_avatar_4'
|
|
2171
|
+
| 'default_avatar_4_small'
|
|
2172
|
+
| 'default_avatar_5'
|
|
2173
|
+
| 'default_avatar_5_small'
|
|
2174
|
+
| 'default_provisional_avatar_0'
|
|
2175
|
+
| 'default_provisional_avatar_1'
|
|
2176
|
+
| 'default_provisional_avatar_2'
|
|
2177
|
+
| 'default_provisional_avatar_3'
|
|
2178
|
+
| 'default_provisional_avatar_4'
|
|
2179
|
+
| 'default_provisional_avatar_5'
|
|
2180
|
+
| 'devices_not_found'
|
|
2181
|
+
| 'discoverability-header'
|
|
2182
|
+
| 'early_access'
|
|
2183
|
+
| 'el'
|
|
2184
|
+
| 'emoji'
|
|
2185
|
+
| 'emoji-negative'
|
|
2186
|
+
| 'emoji-neutral'
|
|
2187
|
+
| 'emoji-positive'
|
|
2188
|
+
| 'empty'
|
|
2189
|
+
| 'empty-suggestions-header'
|
|
2190
|
+
| 'empty_castle'
|
|
2191
|
+
| 'empty_permission'
|
|
2192
|
+
| 'empty_photos'
|
|
2193
|
+
| 'empty_quest_home'
|
|
2194
|
+
| 'empty_quick_switcher'
|
|
2195
|
+
| 'empty_server_settings_audit_log_dark'
|
|
2196
|
+
| 'empty_server_settings_audit_log_darker'
|
|
2197
|
+
| 'empty_server_settings_audit_log_light'
|
|
2198
|
+
| 'empty_server_settings_emoji_dark'
|
|
2199
|
+
| 'empty_server_settings_emoji_darker'
|
|
2200
|
+
| 'empty_server_settings_emoji_light'
|
|
2201
|
+
| 'empty_voice_channel'
|
|
2202
|
+
| 'en-GB'
|
|
2203
|
+
| 'en-US'
|
|
2204
|
+
| 'entrace_sounds'
|
|
2205
|
+
| 'es-419'
|
|
2206
|
+
| 'es-ES'
|
|
2207
|
+
| 'failure-header'
|
|
2208
|
+
| 'family_center_activity_banner_image_parent'
|
|
2209
|
+
| 'family_center_activity_banner_image_teen'
|
|
2210
|
+
| 'family_center_activity_checklist_image'
|
|
2211
|
+
| 'family_center_chat_check_icon'
|
|
2212
|
+
| 'featured_page_footer_dark'
|
|
2213
|
+
| 'featured_page_footer_light'
|
|
2214
|
+
| 'feedback-modal-happy'
|
|
2215
|
+
| 'feedback-modal-happy-desaturated'
|
|
2216
|
+
| 'feedback-modal-happy-desaturated_darker'
|
|
2217
|
+
| 'feedback-modal-neutral'
|
|
2218
|
+
| 'feedback-modal-neutral-desaturated'
|
|
2219
|
+
| 'feedback-modal-neutral-desaturated_darker'
|
|
2220
|
+
| 'feedback-modal-sad'
|
|
2221
|
+
| 'feedback-modal-sad-desaturated'
|
|
2222
|
+
| 'feedback-modal-sad-desaturated_darker'
|
|
2223
|
+
| 'fi'
|
|
2224
|
+
| 'finishing_touches'
|
|
2225
|
+
| 'finishing_touches_light'
|
|
2226
|
+
| 'fist_bump'
|
|
2227
|
+
| 'flash'
|
|
2228
|
+
| 'fr'
|
|
2229
|
+
| 'fullscreen'
|
|
2230
|
+
| 'game-empty-state'
|
|
2231
|
+
| 'game-empty-state-controller'
|
|
2232
|
+
| 'game_icon_placeholder'
|
|
2233
|
+
| 'gif'
|
|
2234
|
+
| 'gift_box'
|
|
2235
|
+
| 'gift_cake'
|
|
2236
|
+
| 'gift_chest'
|
|
2237
|
+
| 'gift_coffee'
|
|
2238
|
+
| 'gmail'
|
|
2239
|
+
| 'googleauth-logo'
|
|
2240
|
+
| 'graggle_2'
|
|
2241
|
+
| 'grey_badge'
|
|
2242
|
+
| 'grey_server_boosts'
|
|
2243
|
+
| 'grid'
|
|
2244
|
+
| 'guild_identity_education_dark'
|
|
2245
|
+
| 'guild_identity_education_light'
|
|
2246
|
+
| 'guild_subscription_no_guilds_dark'
|
|
2247
|
+
| 'guild_subscription_no_guilds_darker'
|
|
2248
|
+
| 'guild_subscription_no_guilds_light'
|
|
2249
|
+
| 'guild_subscription_removal_dark'
|
|
2250
|
+
| 'guild_subscription_removal_darker'
|
|
2251
|
+
| 'guild_subscription_removal_light'
|
|
2252
|
+
| 'hd_video'
|
|
2253
|
+
| 'header-art-onboarding'
|
|
2254
|
+
| 'header_arrow_right'
|
|
2255
|
+
| 'hero-orbs'
|
|
2256
|
+
| 'hi'
|
|
2257
|
+
| 'history'
|
|
2258
|
+
| 'hr'
|
|
2259
|
+
| 'hu'
|
|
2260
|
+
| 'hub-header'
|
|
2261
|
+
| 'hub_header'
|
|
2262
|
+
| 'ic-application-rejected'
|
|
2263
|
+
| 'ic-application-required'
|
|
2264
|
+
| 'ic-application-submitted'
|
|
2265
|
+
| 'ic-customize'
|
|
2266
|
+
| 'ic-location'
|
|
2267
|
+
| 'ic_add_18px'
|
|
2268
|
+
| 'ic_add_24px'
|
|
2269
|
+
| 'ic_add_circle'
|
|
2270
|
+
| 'ic_add_perk_24px'
|
|
2271
|
+
| 'ic_add_reaction_v2'
|
|
2272
|
+
| 'ic_add_super_reaction'
|
|
2273
|
+
| 'ic_add_tier_40px'
|
|
2274
|
+
| 'ic_alert'
|
|
2275
|
+
| 'ic_application_command_24px'
|
|
2276
|
+
| 'ic_application_command_built_in'
|
|
2277
|
+
| 'ic_archived_thread_embed_16px'
|
|
2278
|
+
| 'ic_arrow'
|
|
2279
|
+
| 'ic_arrow_back_24px'
|
|
2280
|
+
| 'ic_arrow_down'
|
|
2281
|
+
| 'ic_arrow_forward_24px'
|
|
2282
|
+
| 'ic_arrow_right'
|
|
2283
|
+
| 'ic_audit_create_24px'
|
|
2284
|
+
| 'ic_audit_delete_24px'
|
|
2285
|
+
| 'ic_audit_update_24px'
|
|
2286
|
+
| 'ic_auto_moderation_shield'
|
|
2287
|
+
| 'ic_badge_nitro'
|
|
2288
|
+
| 'ic_badge_staff'
|
|
2289
|
+
| 'ic_bell_on'
|
|
2290
|
+
| 'ic_block'
|
|
2291
|
+
| 'ic_blocked_chat_bubble_icon'
|
|
2292
|
+
| 'ic_browse_channel'
|
|
2293
|
+
| 'ic_caret_24px'
|
|
2294
|
+
| 'ic_category_16px'
|
|
2295
|
+
| 'ic_channel_arrow'
|
|
2296
|
+
| 'ic_channel_arrow_collapsed_24px'
|
|
2297
|
+
| 'ic_chat_bubble_32px'
|
|
2298
|
+
| 'ic_check_18px'
|
|
2299
|
+
| 'ic_check_24px'
|
|
2300
|
+
| 'ic_checkmark'
|
|
2301
|
+
| 'ic_clock'
|
|
2302
|
+
| 'ic_close'
|
|
2303
|
+
| 'ic_close_16px'
|
|
2304
|
+
| 'ic_close_18px'
|
|
2305
|
+
| 'ic_close_24px'
|
|
2306
|
+
| 'ic_close_circle'
|
|
2307
|
+
| 'ic_close_circle_24px'
|
|
2308
|
+
| 'ic_closed_lock'
|
|
2309
|
+
| 'ic_community_guild_badge_dark_24px'
|
|
2310
|
+
| 'ic_community_guild_badge_light_24px'
|
|
2311
|
+
| 'ic_community_guild_badge_premium_24px'
|
|
2312
|
+
| 'ic_controller_24px'
|
|
2313
|
+
| 'ic_crown_16px'
|
|
2314
|
+
| 'ic_discoverable_guild_badge_dark_24px'
|
|
2315
|
+
| 'ic_discoverable_guild_badge_light_24px'
|
|
2316
|
+
| 'ic_discoverable_guild_badge_premium_24px'
|
|
2317
|
+
| 'ic_download_24px'
|
|
2318
|
+
| 'ic_drag_icon_24px'
|
|
2319
|
+
| 'ic_emoji_picker_20px'
|
|
2320
|
+
| 'ic_emoji_recent_color_24px'
|
|
2321
|
+
| 'ic_emoji_zipper_24px'
|
|
2322
|
+
| 'ic_event_calendar'
|
|
2323
|
+
| 'ic_expand_more_24px'
|
|
2324
|
+
| 'ic_eye'
|
|
2325
|
+
| 'ic_eye_hidden'
|
|
2326
|
+
| 'ic_feed_more'
|
|
2327
|
+
| 'ic_feedback'
|
|
2328
|
+
| 'ic_feedback_dark'
|
|
2329
|
+
| 'ic_file_small_acrobat'
|
|
2330
|
+
| 'ic_file_small_ae'
|
|
2331
|
+
| 'ic_file_small_ai'
|
|
2332
|
+
| 'ic_file_small_archive'
|
|
2333
|
+
| 'ic_file_small_audio'
|
|
2334
|
+
| 'ic_file_small_code'
|
|
2335
|
+
| 'ic_file_small_document'
|
|
2336
|
+
| 'ic_file_small_image'
|
|
2337
|
+
| 'ic_file_small_ps'
|
|
2338
|
+
| 'ic_file_small_sketch'
|
|
2339
|
+
| 'ic_file_small_spreadsheet'
|
|
2340
|
+
| 'ic_file_small_unknown'
|
|
2341
|
+
| 'ic_file_small_video'
|
|
2342
|
+
| 'ic_file_small_webcode'
|
|
2343
|
+
| 'ic_flower_star_18px'
|
|
2344
|
+
| 'ic_flower_star_24px'
|
|
2345
|
+
| 'ic_forward_chevron'
|
|
2346
|
+
| 'ic_friend_wave_24px'
|
|
2347
|
+
| 'ic_full_server_gating_24px'
|
|
2348
|
+
| 'ic_gear'
|
|
2349
|
+
| 'ic_gift'
|
|
2350
|
+
| 'ic_group'
|
|
2351
|
+
| 'ic_group_dm'
|
|
2352
|
+
| 'ic_guild_grid_24px'
|
|
2353
|
+
| 'ic_guild_template'
|
|
2354
|
+
| 'ic_guild_video_24px'
|
|
2355
|
+
| 'ic_guild_voice_24px'
|
|
2356
|
+
| 'ic_header_members_24px'
|
|
2357
|
+
| 'ic_headset_deafened_24px'
|
|
2358
|
+
| 'ic_headset_deafened_dark_24px'
|
|
2359
|
+
| 'ic_headset_neutral'
|
|
2360
|
+
| 'ic_hide_24px'
|
|
2361
|
+
| 'ic_highlight'
|
|
2362
|
+
| 'ic_home'
|
|
2363
|
+
| 'ic_icon_upload'
|
|
2364
|
+
| 'ic_image'
|
|
2365
|
+
| 'ic_image_upload'
|
|
2366
|
+
| 'ic_information_24px'
|
|
2367
|
+
| 'ic_information_filled_24px'
|
|
2368
|
+
| 'ic_input_clear_24px'
|
|
2369
|
+
| 'ic_invite'
|
|
2370
|
+
| 'ic_invites_disabled'
|
|
2371
|
+
| 'ic_launch'
|
|
2372
|
+
| 'ic_leave_24px'
|
|
2373
|
+
| 'ic_leave_stage'
|
|
2374
|
+
| 'ic_link_24px'
|
|
2375
|
+
| 'ic_loading_emoji_dark'
|
|
2376
|
+
| 'ic_loading_emoji_light'
|
|
2377
|
+
| 'ic_lock'
|
|
2378
|
+
| 'ic_lock_short_16px'
|
|
2379
|
+
| 'ic_mail'
|
|
2380
|
+
| 'ic_media_post_share_prompt'
|
|
2381
|
+
| 'ic_members'
|
|
2382
|
+
| 'ic_members_24px'
|
|
2383
|
+
| 'ic_mention_24px'
|
|
2384
|
+
| 'ic_message'
|
|
2385
|
+
| 'ic_mic_24px'
|
|
2386
|
+
| 'ic_mic_muted_24px'
|
|
2387
|
+
| 'ic_mic_muted_dark_24px'
|
|
2388
|
+
| 'ic_mic_muted_light_24px'
|
|
2389
|
+
| 'ic_mic_neutral'
|
|
2390
|
+
| 'ic_minimize'
|
|
2391
|
+
| 'ic_mobile_device'
|
|
2392
|
+
| 'ic_moderator'
|
|
2393
|
+
| 'ic_money_emoji_24px'
|
|
2394
|
+
| 'ic_monitor'
|
|
2395
|
+
| 'ic_more_24px'
|
|
2396
|
+
| 'ic_move_to_audience'
|
|
2397
|
+
| 'ic_move_to_speaker'
|
|
2398
|
+
| 'ic_mute_channel_24px'
|
|
2399
|
+
| 'ic_nitro_basic_wheel_gradient'
|
|
2400
|
+
| 'ic_nitro_wheel'
|
|
2401
|
+
| 'ic_nitro_wheel_gradient_purple'
|
|
2402
|
+
| 'ic_notif'
|
|
2403
|
+
| 'ic_notif_off'
|
|
2404
|
+
| 'ic_overflow_android'
|
|
2405
|
+
| 'ic_paperclip_24px'
|
|
2406
|
+
| 'ic_partnered_guild_icon_black_24px'
|
|
2407
|
+
| 'ic_partnered_guild_icon_blurple_24px'
|
|
2408
|
+
| 'ic_person_shield'
|
|
2409
|
+
| 'ic_person_waving'
|
|
2410
|
+
| 'ic_pins'
|
|
2411
|
+
| 'ic_play'
|
|
2412
|
+
| 'ic_play_dark'
|
|
2413
|
+
| 'ic_playstation_24px'
|
|
2414
|
+
| 'ic_playstation_device_ps5_32px'
|
|
2415
|
+
| 'ic_polls'
|
|
2416
|
+
| 'ic_premium_channel_16px'
|
|
2417
|
+
| 'ic_premium_info_24px'
|
|
2418
|
+
| 'ic_premium_overview_24px'
|
|
2419
|
+
| 'ic_premium_perk_money_24px'
|
|
2420
|
+
| 'ic_premium_tiers_24px'
|
|
2421
|
+
| 'ic_profile_badge_active_developer'
|
|
2422
|
+
| 'ic_public'
|
|
2423
|
+
| 'ic_qr_code_24px'
|
|
2424
|
+
| 'ic_radio_circle'
|
|
2425
|
+
| 'ic_radio_circle_checked'
|
|
2426
|
+
| 'ic_radio_circle_checked_green'
|
|
2427
|
+
| 'ic_radio_square_24px'
|
|
2428
|
+
| 'ic_radio_square_checked_24px'
|
|
2429
|
+
| 'ic_raised_hand'
|
|
2430
|
+
| 'ic_raised_hand_list'
|
|
2431
|
+
| 'ic_report_message'
|
|
2432
|
+
| 'ic_rulebook'
|
|
2433
|
+
| 'ic_rulebook_16px'
|
|
2434
|
+
| 'ic_select_all_24px'
|
|
2435
|
+
| 'ic_select_manually_24px'
|
|
2436
|
+
| 'ic_selection_checked_24px'
|
|
2437
|
+
| 'ic_selection_none_24px'
|
|
2438
|
+
| 'ic_send'
|
|
2439
|
+
| 'ic_settings'
|
|
2440
|
+
| 'ic_settings_grey_24px'
|
|
2441
|
+
| 'ic_settings_white_24px'
|
|
2442
|
+
| 'ic_share_android'
|
|
2443
|
+
| 'ic_share_ios'
|
|
2444
|
+
| 'ic_shield_24px'
|
|
2445
|
+
| 'ic_show_password'
|
|
2446
|
+
| 'ic_sparkle'
|
|
2447
|
+
| 'ic_sparkle2'
|
|
2448
|
+
| 'ic_spotify_white_16px'
|
|
2449
|
+
| 'ic_stage_channel_24px'
|
|
2450
|
+
| 'ic_stage_channel_32px'
|
|
2451
|
+
| 'ic_stage_music'
|
|
2452
|
+
| 'ic_stage_music_disabled'
|
|
2453
|
+
| 'ic_star_filled'
|
|
2454
|
+
| 'ic_sticker_24px'
|
|
2455
|
+
| 'ic_stop_stream_24px'
|
|
2456
|
+
| 'ic_swipe_reply_24px'
|
|
2457
|
+
| 'ic_sync_24px'
|
|
2458
|
+
| 'ic_table_arrow_right'
|
|
2459
|
+
| 'ic_text_channel_16px'
|
|
2460
|
+
| 'ic_text_in_voice_24px'
|
|
2461
|
+
| 'ic_thread_normal_24px'
|
|
2462
|
+
| 'ic_thumbsdown'
|
|
2463
|
+
| 'ic_thumbsup'
|
|
2464
|
+
| 'ic_trash_24px'
|
|
2465
|
+
| 'ic_trash_filled_16px'
|
|
2466
|
+
| 'ic_unmute_channel_24px'
|
|
2467
|
+
| 'ic_update_profile'
|
|
2468
|
+
| 'ic_upload'
|
|
2469
|
+
| 'ic_upload_image_40px'
|
|
2470
|
+
| 'ic_verified_check_18px'
|
|
2471
|
+
| 'ic_verified_check_24px'
|
|
2472
|
+
| 'ic_verified_guild_icon_black_24px'
|
|
2473
|
+
| 'ic_verified_guild_icon_green_24px'
|
|
2474
|
+
| 'ic_verified_icon_white_16px'
|
|
2475
|
+
| 'ic_video'
|
|
2476
|
+
| 'ic_video_disabled_dark'
|
|
2477
|
+
| 'ic_video_disabled_white'
|
|
2478
|
+
| 'ic_voice_channel_16px'
|
|
2479
|
+
| 'ic_voice_channel_24px'
|
|
2480
|
+
| 'ic_volume'
|
|
2481
|
+
| 'ic_volume_locked'
|
|
2482
|
+
| 'ic_volume_mute'
|
|
2483
|
+
| 'ic_vr_headset_24px'
|
|
2484
|
+
| 'ic_wand'
|
|
2485
|
+
| 'ic_warning_24px'
|
|
2486
|
+
| 'ic_wreath'
|
|
2487
|
+
| 'ic_xbox_24px'
|
|
2488
|
+
| 'icon-afk'
|
|
2489
|
+
| 'icon-call'
|
|
2490
|
+
| 'icon-group'
|
|
2491
|
+
| 'icon-new-group'
|
|
2492
|
+
| 'icon-search'
|
|
2493
|
+
| 'icon-server-muted'
|
|
2494
|
+
| 'icon-settings'
|
|
2495
|
+
| 'icon0'
|
|
2496
|
+
| 'icon1'
|
|
2497
|
+
| 'icon2'
|
|
2498
|
+
| 'icon3'
|
|
2499
|
+
| 'icon4'
|
|
2500
|
+
| 'icon5'
|
|
2501
|
+
| 'icon6'
|
|
2502
|
+
| 'icon7'
|
|
2503
|
+
| 'image_role_subscription_badge'
|
|
2504
|
+
| 'image_role_subscription_lanyard'
|
|
2505
|
+
| 'image_role_subscription_purchase_card_bg'
|
|
2506
|
+
| 'img-auth-qrcode-overlay'
|
|
2507
|
+
| 'img_account_sync_battlenet_light_and_dark'
|
|
2508
|
+
| 'img_account_sync_battlenet_white'
|
|
2509
|
+
| 'img_account_sync_bluesky_light_and_dark'
|
|
2510
|
+
| 'img_account_sync_bluesky_white'
|
|
2511
|
+
| 'img_account_sync_crunchyroll_light_and_dark'
|
|
2512
|
+
| 'img_account_sync_ebay_light_and_dark'
|
|
2513
|
+
| 'img_account_sync_ebay_white'
|
|
2514
|
+
| 'img_account_sync_epic_dark_and_white'
|
|
2515
|
+
| 'img_account_sync_epic_light'
|
|
2516
|
+
| 'img_account_sync_facebook_light_and_dark'
|
|
2517
|
+
| 'img_account_sync_facebook_white'
|
|
2518
|
+
| 'img_account_sync_github_light'
|
|
2519
|
+
| 'img_account_sync_github_white'
|
|
2520
|
+
| 'img_account_sync_instagram_light_and_dark'
|
|
2521
|
+
| 'img_account_sync_instagram_white'
|
|
2522
|
+
| 'img_account_sync_league_of_legends_light_and_dark'
|
|
2523
|
+
| 'img_account_sync_league_of_legends_white'
|
|
2524
|
+
| 'img_account_sync_mastodon_light_and_dark'
|
|
2525
|
+
| 'img_account_sync_mastodon_white'
|
|
2526
|
+
| 'img_account_sync_paypal_light_and_dark'
|
|
2527
|
+
| 'img_account_sync_paypal_white'
|
|
2528
|
+
| 'img_account_sync_playstation_light'
|
|
2529
|
+
| 'img_account_sync_playstation_white'
|
|
2530
|
+
| 'img_account_sync_reddit_light_and_dark'
|
|
2531
|
+
| 'img_account_sync_reddit_white'
|
|
2532
|
+
| 'img_account_sync_riot_light_and_dark'
|
|
2533
|
+
| 'img_account_sync_riot_white'
|
|
2534
|
+
| 'img_account_sync_samsung_light_and_dark'
|
|
2535
|
+
| 'img_account_sync_samsung_white'
|
|
2536
|
+
| 'img_account_sync_skype_light_and_dark'
|
|
2537
|
+
| 'img_account_sync_skype_white'
|
|
2538
|
+
| 'img_account_sync_spotify_light_and_dark'
|
|
2539
|
+
| 'img_account_sync_spotify_white'
|
|
2540
|
+
| 'img_account_sync_steam_light'
|
|
2541
|
+
| 'img_account_sync_steam_white'
|
|
2542
|
+
| 'img_account_sync_tiktok_dark'
|
|
2543
|
+
| 'img_account_sync_tiktok_light'
|
|
2544
|
+
| 'img_account_sync_twitch_light_and_dark'
|
|
2545
|
+
| 'img_account_sync_twitch_white'
|
|
2546
|
+
| 'img_account_sync_twitter_light_and_dark'
|
|
2547
|
+
| 'img_account_sync_twitter_white'
|
|
2548
|
+
| 'img_account_sync_x_dark'
|
|
2549
|
+
| 'img_account_sync_x_light'
|
|
2550
|
+
| 'img_account_sync_x_white'
|
|
2551
|
+
| 'img_account_sync_xbox_custom'
|
|
2552
|
+
| 'img_account_sync_xbox_light'
|
|
2553
|
+
| 'img_account_sync_xbox_white'
|
|
2554
|
+
| 'img_account_sync_youtube_light_and_dark'
|
|
2555
|
+
| 'img_account_sync_youtube_white'
|
|
2556
|
+
| 'img_amazon_music'
|
|
2557
|
+
| 'img_app_crash_dark'
|
|
2558
|
+
| 'img_app_crash_darker'
|
|
2559
|
+
| 'img_app_crash_light'
|
|
2560
|
+
| 'img_artists_creators'
|
|
2561
|
+
| 'img_ban'
|
|
2562
|
+
| 'img_bans_empty_dark'
|
|
2563
|
+
| 'img_bans_empty_darker'
|
|
2564
|
+
| 'img_bans_empty_light'
|
|
2565
|
+
| 'img_boost'
|
|
2566
|
+
| 'img_boost_activated_border'
|
|
2567
|
+
| 'img_boost_error_mobile'
|
|
2568
|
+
| 'img_boost_hands'
|
|
2569
|
+
| 'img_boost_mobile'
|
|
2570
|
+
| 'img_boost_resubscribe_mobile'
|
|
2571
|
+
| 'img_boost_subheader_error_mobile'
|
|
2572
|
+
| 'img_boost_subheader_mobile'
|
|
2573
|
+
| 'img_boost_subheader_resub_mobile'
|
|
2574
|
+
| 'img_bundle_banner'
|
|
2575
|
+
| 'img_bundle_mobile'
|
|
2576
|
+
| 'img_bundle_subheader_mobile'
|
|
2577
|
+
| 'img_bungie_dark'
|
|
2578
|
+
| 'img_bungie_light'
|
|
2579
|
+
| 'img_bungie_white'
|
|
2580
|
+
| 'img_classic_error_mobile'
|
|
2581
|
+
| 'img_classic_mobile'
|
|
2582
|
+
| 'img_classic_resubscribe_mobile'
|
|
2583
|
+
| 'img_classic_subheader_mobile'
|
|
2584
|
+
| 'img_clouds_header_tier_0'
|
|
2585
|
+
| 'img_clouds_header_tier_2'
|
|
2586
|
+
| 'img_clubs'
|
|
2587
|
+
| 'img_collectibles_shop'
|
|
2588
|
+
| 'img_create_my_own'
|
|
2589
|
+
| 'img_custom_app_icons'
|
|
2590
|
+
| 'img_discord_nitro_logo_centered_dark'
|
|
2591
|
+
| 'img_discord_nitro_logo_centered_light'
|
|
2592
|
+
| 'img_discord_nitro_logo_left'
|
|
2593
|
+
| 'img_discord_nitro_logo_left_light'
|
|
2594
|
+
| 'img_domain_dark'
|
|
2595
|
+
| 'img_domain_light'
|
|
2596
|
+
| 'img_forum_empty_state_dark'
|
|
2597
|
+
| 'img_forum_empty_state_light'
|
|
2598
|
+
| 'img_friends'
|
|
2599
|
+
| 'img_gaming'
|
|
2600
|
+
| 'img_gifting_empty'
|
|
2601
|
+
| 'img_group_dm_illustration'
|
|
2602
|
+
| 'img_guild_cap_upsell_dark'
|
|
2603
|
+
| 'img_guild_cap_upsell_light'
|
|
2604
|
+
| 'img_guild_folder'
|
|
2605
|
+
| 'img_invalid_link_dark'
|
|
2606
|
+
| 'img_invalid_link_darker'
|
|
2607
|
+
| 'img_invalid_link_light'
|
|
2608
|
+
| 'img_invite_empty_dark'
|
|
2609
|
+
| 'img_invite_empty_darker'
|
|
2610
|
+
| 'img_invite_empty_light'
|
|
2611
|
+
| 'img_keychain'
|
|
2612
|
+
| 'img_kick_member'
|
|
2613
|
+
| 'img_local_community'
|
|
2614
|
+
| 'img_logo_basic_small_dark'
|
|
2615
|
+
| 'img_logo_basic_small_light'
|
|
2616
|
+
| 'img_logo_boost'
|
|
2617
|
+
| 'img_logo_bundle_horizontal'
|
|
2618
|
+
| 'img_logo_bundle_horizontal_black'
|
|
2619
|
+
| 'img_logo_discord'
|
|
2620
|
+
| 'img_logo_nitro_basic_stacked'
|
|
2621
|
+
| 'img_logo_nitro_classic'
|
|
2622
|
+
| 'img_logo_nitro_classic_horizontal'
|
|
2623
|
+
| 'img_logo_nitro_classic_horizontal_light'
|
|
2624
|
+
| 'img_logo_nitro_classic_stacked'
|
|
2625
|
+
| 'img_logo_nitro_dark'
|
|
2626
|
+
| 'img_logo_nitro_small_dark'
|
|
2627
|
+
| 'img_logo_nitro_small_light'
|
|
2628
|
+
| 'img_logo_nitro_tier_0'
|
|
2629
|
+
| 'img_logo_nitro_tier_0_horizontal_dark'
|
|
2630
|
+
| 'img_logo_nitro_tier_0_light'
|
|
2631
|
+
| 'img_logo_nitro_tier_2_horizontal_dark'
|
|
2632
|
+
| 'img_logo_plus_boost'
|
|
2633
|
+
| 'img_logo_premium_tier_0_full'
|
|
2634
|
+
| 'img_logo_premium_tier_1_full'
|
|
2635
|
+
| 'img_marketing_frog'
|
|
2636
|
+
| 'img_marketing_profiles'
|
|
2637
|
+
| 'img_marketing_uploads_light_border'
|
|
2638
|
+
| 'img_meta_quest_dark'
|
|
2639
|
+
| 'img_meta_quest_light'
|
|
2640
|
+
| 'img_meta_quest_white'
|
|
2641
|
+
| 'img_nitro_animated_avatar'
|
|
2642
|
+
| 'img_nitro_animated_emoji'
|
|
2643
|
+
| 'img_nitro_badge'
|
|
2644
|
+
| 'img_nitro_classic_icon_80px'
|
|
2645
|
+
| 'img_nitro_classic_icon_white_80px'
|
|
2646
|
+
| 'img_nitro_file_upload'
|
|
2647
|
+
| 'img_nitro_global_emoji'
|
|
2648
|
+
| 'img_nitro_icon_80px'
|
|
2649
|
+
| 'img_nitro_icon_filled'
|
|
2650
|
+
| 'img_nitro_longer_message_upsell_dark'
|
|
2651
|
+
| 'img_nitro_longer_message_upsell_light'
|
|
2652
|
+
| 'img_nitro_misc_perks_20px'
|
|
2653
|
+
| 'img_nitro_premium_guilds_20px'
|
|
2654
|
+
| 'img_nitro_sticker_yellow_24px'
|
|
2655
|
+
| 'img_nitro_subheader_mobile'
|
|
2656
|
+
| 'img_nitro_ticket_bg'
|
|
2657
|
+
| 'img_nitro_tier_0_activated_dark'
|
|
2658
|
+
| 'img_nitro_tier_0_activated_light'
|
|
2659
|
+
| 'img_nitro_tier_0_icon_80px'
|
|
2660
|
+
| 'img_nitro_tier_1_activated_dark'
|
|
2661
|
+
| 'img_nitro_tier_1_activated_light'
|
|
2662
|
+
| 'img_nitro_tier_2_activated_dark'
|
|
2663
|
+
| 'img_nitro_tier_2_activated_light'
|
|
2664
|
+
| 'img_no_results'
|
|
2665
|
+
| 'img_no_results_alt_darker'
|
|
2666
|
+
| 'img_no_results_dark'
|
|
2667
|
+
| 'img_no_results_dark_theme'
|
|
2668
|
+
| 'img_no_results_darker'
|
|
2669
|
+
| 'img_no_results_light'
|
|
2670
|
+
| 'img_none'
|
|
2671
|
+
| 'img_outbound_promotion_error'
|
|
2672
|
+
| 'img_outbound_promotion_redemption'
|
|
2673
|
+
| 'img_plan_activated'
|
|
2674
|
+
| 'img_plan_activated_light'
|
|
2675
|
+
| 'img_poop_dark'
|
|
2676
|
+
| 'img_poop_light'
|
|
2677
|
+
| 'img_premium_basic_icon'
|
|
2678
|
+
| 'img_premium_canvas_mobile'
|
|
2679
|
+
| 'img_premium_classic_icon_80px'
|
|
2680
|
+
| 'img_premium_embed_background_dark'
|
|
2681
|
+
| 'img_premium_embed_background_light'
|
|
2682
|
+
| 'img_premium_error_mobile'
|
|
2683
|
+
| 'img_premium_icon_80px'
|
|
2684
|
+
| 'img_premium_resubscribe_mobile'
|
|
2685
|
+
| 'img_preview_not_available_dark'
|
|
2686
|
+
| 'img_preview_not_available_light'
|
|
2687
|
+
| 'img_profile_upsell'
|
|
2688
|
+
| 'img_register_header'
|
|
2689
|
+
| 'img_roblox_dark'
|
|
2690
|
+
| 'img_roblox_light'
|
|
2691
|
+
| 'img_roblox_white'
|
|
2692
|
+
| 'img_search_empty_dark'
|
|
2693
|
+
| 'img_search_empty_darker'
|
|
2694
|
+
| 'img_search_empty_light'
|
|
2695
|
+
| 'img_security'
|
|
2696
|
+
| 'img_stream_ended_dark'
|
|
2697
|
+
| 'img_stream_ended_darker'
|
|
2698
|
+
| 'img_stream_full'
|
|
2699
|
+
| 'img_study'
|
|
2700
|
+
| 'img_subheader_error_mobile'
|
|
2701
|
+
| 'img_subheader_error_mobile_v2'
|
|
2702
|
+
| 'img_subheader_error_mobile_v2_light'
|
|
2703
|
+
| 'img_subheader_resub_mobile'
|
|
2704
|
+
| 'img_subscription_activated_dark'
|
|
2705
|
+
| 'img_subscription_activated_light'
|
|
2706
|
+
| 'img_tier_0_clouds'
|
|
2707
|
+
| 'img_tier_0_clouds_bigger'
|
|
2708
|
+
| 'img_tier_0_error_mobile'
|
|
2709
|
+
| 'img_tier_0_marketing_boosting'
|
|
2710
|
+
| 'img_tier_0_marketing_emojis'
|
|
2711
|
+
| 'img_tier_0_mobile'
|
|
2712
|
+
| 'img_tier_0_resubscribe_mobile'
|
|
2713
|
+
| 'img_tier_0_subheader_mobile'
|
|
2714
|
+
| 'img_tier_2_clouds'
|
|
2715
|
+
| 'img_tier_2_clouds_bigger'
|
|
2716
|
+
| 'img_top_pattern_dark'
|
|
2717
|
+
| 'img_top_pattern_darker'
|
|
2718
|
+
| 'img_top_pattern_light'
|
|
2719
|
+
| 'img_transfer_arrow'
|
|
2720
|
+
| 'img_vanity_urls'
|
|
2721
|
+
| 'img_verify_email_sent'
|
|
2722
|
+
| 'img_verify_phone_dark_theme'
|
|
2723
|
+
| 'img_verify_phone_darker'
|
|
2724
|
+
| 'img_verify_phone_light_theme'
|
|
2725
|
+
| 'img_what_you_lose_boost'
|
|
2726
|
+
| 'img_what_you_lose_emojis'
|
|
2727
|
+
| 'img_what_you_lose_hd_video'
|
|
2728
|
+
| 'img_what_you_lose_profile'
|
|
2729
|
+
| 'img_what_you_lose_profile_tier1_dark'
|
|
2730
|
+
| 'img_what_you_lose_profile_tier1_darker'
|
|
2731
|
+
| 'img_what_you_lose_profile_tier1_light'
|
|
2732
|
+
| 'img_what_you_lose_uploads'
|
|
2733
|
+
| 'img_wump_trash_dark'
|
|
2734
|
+
| 'img_wump_trash_darker'
|
|
2735
|
+
| 'img_wumpus_lightro'
|
|
2736
|
+
| 'img_wumpus_nitro'
|
|
2737
|
+
| 'img_wumpus_nitro_boost'
|
|
2738
|
+
| 'img_wumpus_nitro_classic'
|
|
2739
|
+
| 'img_wumpus_nitro_classic_boost'
|
|
2740
|
+
| 'img_wumpus_nitro_rev'
|
|
2741
|
+
| 'img_wumpus_nitro_tier_0'
|
|
2742
|
+
| 'intro_header_dark'
|
|
2743
|
+
| 'intro_header_darker'
|
|
2744
|
+
| 'intro_header_light'
|
|
2745
|
+
| 'invite'
|
|
2746
|
+
| 'invite-bg'
|
|
2747
|
+
| 'it'
|
|
2748
|
+
| 'ja'
|
|
2749
|
+
| 'ko'
|
|
2750
|
+
| 'krisp_logo_dark'
|
|
2751
|
+
| 'krisp_logo_light'
|
|
2752
|
+
| 'large_uploads'
|
|
2753
|
+
| 'light_home_header_placeholder'
|
|
2754
|
+
| 'line'
|
|
2755
|
+
| 'link_expired'
|
|
2756
|
+
| 'link_expired_light'
|
|
2757
|
+
| 'link_failure'
|
|
2758
|
+
| 'load-issue-dark'
|
|
2759
|
+
| 'load-issue-light'
|
|
2760
|
+
| 'lock'
|
|
2761
|
+
| 'locke_2'
|
|
2762
|
+
| 'logo'
|
|
2763
|
+
| 'lt'
|
|
2764
|
+
| 'mac_2'
|
|
2765
|
+
| 'mail'
|
|
2766
|
+
| 'mallow_1'
|
|
2767
|
+
| 'maximize'
|
|
2768
|
+
| 'member_list_badge_16px'
|
|
2769
|
+
| 'member_list_icon'
|
|
2770
|
+
| 'member_pricing'
|
|
2771
|
+
| 'messages'
|
|
2772
|
+
| 'messenger'
|
|
2773
|
+
| 'mfa-server'
|
|
2774
|
+
| 'mobile-empty-state'
|
|
2775
|
+
| 'money_birb_placeholder_dark'
|
|
2776
|
+
| 'money_birb_placeholder_light'
|
|
2777
|
+
| 'nameplate_avatar_placeholder_dark_mode'
|
|
2778
|
+
| 'nameplate_avatar_placeholder_light_mode'
|
|
2779
|
+
| 'nav_header_disconnect'
|
|
2780
|
+
| 'nelly_1'
|
|
2781
|
+
| 'nitro_home_banner'
|
|
2782
|
+
| 'nitro_modal_header_background'
|
|
2783
|
+
| 'nitro_wumpus_avatar'
|
|
2784
|
+
| 'nl'
|
|
2785
|
+
| 'no'
|
|
2786
|
+
| 'no-app-icon'
|
|
2787
|
+
| 'no_mutual_friends_dark'
|
|
2788
|
+
| 'no_mutual_friends_darker'
|
|
2789
|
+
| 'no_mutual_friends_light'
|
|
2790
|
+
| 'no_mutual_servers_dark'
|
|
2791
|
+
| 'no_mutual_servers_darker'
|
|
2792
|
+
| 'no_mutual_servers_light'
|
|
2793
|
+
| 'notification_upsell'
|
|
2794
|
+
| 'nsfw_gate'
|
|
2795
|
+
| 'nsfw_gate_unavailable'
|
|
2796
|
+
| 'nux'
|
|
2797
|
+
| 'onboarding_v2_upsell'
|
|
2798
|
+
| 'partner_icon'
|
|
2799
|
+
| 'partying_face'
|
|
2800
|
+
| 'pending-alert'
|
|
2801
|
+
| 'pending_dark'
|
|
2802
|
+
| 'pending_darker'
|
|
2803
|
+
| 'pending_light'
|
|
2804
|
+
| 'personalize_32px'
|
|
2805
|
+
| 'phibi_1'
|
|
2806
|
+
| 'pl'
|
|
2807
|
+
| 'poop_dark_large'
|
|
2808
|
+
| 'poop_light_large'
|
|
2809
|
+
| 'premium_gift_plan_selection_header'
|
|
2810
|
+
| 'premium_role_unavailable'
|
|
2811
|
+
| 'progress-setup'
|
|
2812
|
+
| 'ps_relink_upsell'
|
|
2813
|
+
| 'pt-BR'
|
|
2814
|
+
| 'quests_embed_mobile_missing'
|
|
2815
|
+
| 'redesign_email_header'
|
|
2816
|
+
| 'register-background-dark'
|
|
2817
|
+
| 'register-background-light'
|
|
2818
|
+
| 'rejected-alert'
|
|
2819
|
+
| 'report'
|
|
2820
|
+
| 'resubscribed_alert_header'
|
|
2821
|
+
| 'ro'
|
|
2822
|
+
| 'role'
|
|
2823
|
+
| 'role_2'
|
|
2824
|
+
| 'role_subscription_benefit_avatar_1'
|
|
2825
|
+
| 'role_subscription_benefit_bunny_avatar'
|
|
2826
|
+
| 'role_subscription_benefit_nelly_avatar'
|
|
2827
|
+
| 'role_subscription_benefit_wise_avatar'
|
|
2828
|
+
| 'role_subscription_earning_illo'
|
|
2829
|
+
| 'role_subscription_earning_metric_avatar'
|
|
2830
|
+
| 'role_subscription_lanyard_illo'
|
|
2831
|
+
| 'role_subscription_settings_hero'
|
|
2832
|
+
| 'role_subscription_social'
|
|
2833
|
+
| 'ru'
|
|
2834
|
+
| 'safety_check'
|
|
2835
|
+
| 'safety_check_light'
|
|
2836
|
+
| 'safety_shield'
|
|
2837
|
+
| 'sample_banner'
|
|
2838
|
+
| 'screenshare'
|
|
2839
|
+
| 'screenshare_end'
|
|
2840
|
+
| 'screenshare_splash'
|
|
2841
|
+
| 'scrubber'
|
|
2842
|
+
| 'search-icon'
|
|
2843
|
+
| 'search_empty_state'
|
|
2844
|
+
| 'search_empty_state_dark'
|
|
2845
|
+
| 'search_empty_state_light'
|
|
2846
|
+
| 'send_message_32px'
|
|
2847
|
+
| 'server-error'
|
|
2848
|
+
| 'server-invite-envelope'
|
|
2849
|
+
| 'server_boost_logo_dark'
|
|
2850
|
+
| 'server_boost_logo_light'
|
|
2851
|
+
| 'server_boosts'
|
|
2852
|
+
| 'settings'
|
|
2853
|
+
| 'share'
|
|
2854
|
+
| 'sparkle_star_elongated'
|
|
2855
|
+
| 'sparkle_star_pointed'
|
|
2856
|
+
| 'speaker'
|
|
2857
|
+
| 'spectator'
|
|
2858
|
+
| 'stack-nav-back'
|
|
2859
|
+
| 'stack-nav-close'
|
|
2860
|
+
| 'stage-channel-upsell'
|
|
2861
|
+
| 'stage-sparkles'
|
|
2862
|
+
| 'stamp-wave'
|
|
2863
|
+
| 'star'
|
|
2864
|
+
| 'sticker'
|
|
2865
|
+
| 'sticker_search_empty'
|
|
2866
|
+
| 'stream'
|
|
2867
|
+
| 'study'
|
|
2868
|
+
| 'subscribe_confirm'
|
|
2869
|
+
| 'subscription_placeholder_pattern_dark'
|
|
2870
|
+
| 'subscription_placeholder_pattern_darker'
|
|
2871
|
+
| 'subscription_placeholder_pattern_light'
|
|
2872
|
+
| 'success-header'
|
|
2873
|
+
| 'summary_indicator_end'
|
|
2874
|
+
| 'summary_indicator_start'
|
|
2875
|
+
| 'sunbeam_gradient_mobile'
|
|
2876
|
+
| 'super_reaction'
|
|
2877
|
+
| 'support'
|
|
2878
|
+
| 'sv-SE'
|
|
2879
|
+
| 'system-user-avatar'
|
|
2880
|
+
| 'telegram'
|
|
2881
|
+
| 'th'
|
|
2882
|
+
| 'tier_0_24px'
|
|
2883
|
+
| 'tier_0_48px_dark'
|
|
2884
|
+
| 'tier_0_48px_darker'
|
|
2885
|
+
| 'tier_0_48px_light'
|
|
2886
|
+
| 'tier_1_24px'
|
|
2887
|
+
| 'tier_1_32px'
|
|
2888
|
+
| 'tier_2_24px'
|
|
2889
|
+
| 'tier_2_32px'
|
|
2890
|
+
| 'tier_3_24px'
|
|
2891
|
+
| 'tier_3_32px'
|
|
2892
|
+
| 'tiny-bronco-spot'
|
|
2893
|
+
| 'top_perk_streaming_quality'
|
|
2894
|
+
| 'top_perk_vanity_url'
|
|
2895
|
+
| 'tr'
|
|
2896
|
+
| 'twitter'
|
|
2897
|
+
| 'uk'
|
|
2898
|
+
| 'updateAppIcon'
|
|
2899
|
+
| 'upload'
|
|
2900
|
+
| 'verify-email'
|
|
2901
|
+
| 'vi'
|
|
2902
|
+
| 'vibing_wumpus_rings'
|
|
2903
|
+
| 'video'
|
|
2904
|
+
| 'video_dark'
|
|
2905
|
+
| 'video_light'
|
|
2906
|
+
| 'voice_bar_bluetooth'
|
|
2907
|
+
| 'voice_bar_deafen_off'
|
|
2908
|
+
| 'voice_bar_deafen_on'
|
|
2909
|
+
| 'voice_bar_mute_off'
|
|
2910
|
+
| 'voice_bar_mute_on'
|
|
2911
|
+
| 'voice_bar_phone'
|
|
2912
|
+
| 'voice_bar_speaker_new'
|
|
2913
|
+
| 'voice_channels'
|
|
2914
|
+
| 'vr'
|
|
2915
|
+
| 'watch'
|
|
2916
|
+
| 'webhook_empty_dark'
|
|
2917
|
+
| 'webhook_empty_darker'
|
|
2918
|
+
| 'webhook_empty_light'
|
|
2919
|
+
| 'welcome-bg'
|
|
2920
|
+
| 'whatsapp'
|
|
2921
|
+
| 'wreath_dark'
|
|
2922
|
+
| 'wreath_light'
|
|
2923
|
+
| 'wumpus-ash'
|
|
2924
|
+
| 'wumpus-link'
|
|
2925
|
+
| 'wumpus-luigi'
|
|
2926
|
+
| 'wumpus-mario'
|
|
2927
|
+
| 'wumpus-pikachu'
|
|
2928
|
+
| 'wumpus-wizard'
|
|
2929
|
+
| 'wumpus-wump'
|
|
2930
|
+
| 'wumpus_1'
|
|
2931
|
+
| 'wumpus_box_premium120'
|
|
2932
|
+
| 'wumpus_cup_premium120'
|
|
2933
|
+
| 'wumpus_snowglobe_premium120'
|
|
2934
|
+
| 'wumpus_wave'
|
|
2935
|
+
| 'xbox'
|
|
2936
|
+
| 'xbox_app_phone'
|
|
2937
|
+
| 'xbox_upsell'
|
|
2938
|
+
| 'yearly_upsell_wumpus'
|
|
2939
|
+
| 'yellow-alert'
|
|
2940
|
+
| 'youtube_icon'
|
|
2941
|
+
| 'zh-CN'
|
|
2942
|
+
| 'zh-TW';
|
|
2943
|
+
svg:
|
|
2944
|
+
| 'img_account_sync_battlenet_light_and_dark'
|
|
2945
|
+
| 'img_account_sync_battlenet_white'
|
|
2946
|
+
| 'img_account_sync_bluesky_light_and_dark'
|
|
2947
|
+
| 'img_account_sync_bluesky_white'
|
|
2948
|
+
| 'img_account_sync_crunchyroll_light_and_dark'
|
|
2949
|
+
| 'img_account_sync_crunchyroll_white'
|
|
2950
|
+
| 'img_account_sync_ebay_light_and_dark'
|
|
2951
|
+
| 'img_account_sync_ebay_white'
|
|
2952
|
+
| 'img_account_sync_epic_dark_and_white'
|
|
2953
|
+
| 'img_account_sync_epic_light'
|
|
2954
|
+
| 'img_account_sync_facebook_light_and_dark'
|
|
2955
|
+
| 'img_account_sync_facebook_white'
|
|
2956
|
+
| 'img_account_sync_github_light'
|
|
2957
|
+
| 'img_account_sync_github_white'
|
|
2958
|
+
| 'img_account_sync_instagram_light_and_dark'
|
|
2959
|
+
| 'img_account_sync_instagram_white'
|
|
2960
|
+
| 'img_account_sync_league_of_legends_light_and_dark'
|
|
2961
|
+
| 'img_account_sync_league_of_legends_white'
|
|
2962
|
+
| 'img_account_sync_mastodon_light_and_dark'
|
|
2963
|
+
| 'img_account_sync_mastodon_white'
|
|
2964
|
+
| 'img_account_sync_paypal_light_and_dark'
|
|
2965
|
+
| 'img_account_sync_paypal_white'
|
|
2966
|
+
| 'img_account_sync_playstation_light'
|
|
2967
|
+
| 'img_account_sync_playstation_white'
|
|
2968
|
+
| 'img_account_sync_reddit_light_and_dark'
|
|
2969
|
+
| 'img_account_sync_reddit_white'
|
|
2970
|
+
| 'img_account_sync_riot_black'
|
|
2971
|
+
| 'img_account_sync_riot_light_and_dark'
|
|
2972
|
+
| 'img_account_sync_riot_white'
|
|
2973
|
+
| 'img_account_sync_samsung_light_and_dark'
|
|
2974
|
+
| 'img_account_sync_samsung_white'
|
|
2975
|
+
| 'img_account_sync_skype_light_and_dark'
|
|
2976
|
+
| 'img_account_sync_skype_white'
|
|
2977
|
+
| 'img_account_sync_spotify_light_and_dark'
|
|
2978
|
+
| 'img_account_sync_spotify_white'
|
|
2979
|
+
| 'img_account_sync_steam_light'
|
|
2980
|
+
| 'img_account_sync_steam_white'
|
|
2981
|
+
| 'img_account_sync_tiktok_dark'
|
|
2982
|
+
| 'img_account_sync_tiktok_light'
|
|
2983
|
+
| 'img_account_sync_twitch_light_and_dark'
|
|
2984
|
+
| 'img_account_sync_twitch_white'
|
|
2985
|
+
| 'img_account_sync_twitter_light_and_dark'
|
|
2986
|
+
| 'img_account_sync_twitter_white'
|
|
2987
|
+
| 'img_account_sync_x_dark'
|
|
2988
|
+
| 'img_account_sync_x_light'
|
|
2989
|
+
| 'img_account_sync_x_white'
|
|
2990
|
+
| 'img_account_sync_xbox_light'
|
|
2991
|
+
| 'img_account_sync_xbox_white'
|
|
2992
|
+
| 'img_account_sync_youtube_light_and_dark'
|
|
2993
|
+
| 'img_account_sync_youtube_white'
|
|
2994
|
+
| 'img_amazon_music'
|
|
2995
|
+
| 'img_bungie_dark'
|
|
2996
|
+
| 'img_bungie_light'
|
|
2997
|
+
| 'img_bungie_white'
|
|
2998
|
+
| 'img_domain_dark'
|
|
2999
|
+
| 'img_domain_light'
|
|
3000
|
+
| 'img_meta_quest'
|
|
3001
|
+
| 'img_meta_quest_light'
|
|
3002
|
+
| 'img_roblox_dark'
|
|
3003
|
+
| 'img_roblox_light'
|
|
3004
|
+
| 'img_roblox_white';
|
|
3005
|
+
webm: 'halloween_loading_dark' | 'halloween_loading_light';
|
|
3006
|
+
};
|
|
3007
|
+
/** A file type Discord registers assets of. */
|
|
3008
|
+
export type DiscordAssetType = keyof DiscordAssetNames;
|
|
1330
3009
|
/** A function exported by a Discord module, whose signature Discord does not document. */
|
|
1331
3010
|
export type DiscordFunction<T = any> = (...args: any[]) => T;
|
|
3011
|
+
/** The props Discord passes its `*Icon` components, such as `WrenchIcon`, and an imported SVG takes. */
|
|
3012
|
+
export type DiscordIconProps = {
|
|
3013
|
+
/** A size on Discord's scale, or points. Defaults to `'md'` (24). */
|
|
3014
|
+
size?: DiscordIconSize | number;
|
|
3015
|
+
/** A theme token or a colour. Defaults to the theme's interactive icon colour. */
|
|
3016
|
+
color?: SemanticColorToken | string;
|
|
3017
|
+
};
|
|
3018
|
+
/** The sizes of Discord's icons, from 12 points (`xxs`) to 32 (`lg`); `custom` leaves the size to `style`. */
|
|
3019
|
+
export type DiscordIconSize = 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'custom' | 'refresh_sm';
|
|
3020
|
+
/** A duration's units, smallest first. */
|
|
3021
|
+
export type DurationUnit = 'ms' | 's' | 'm' | 'h' | 'd';
|
|
1332
3022
|
/**
|
|
1333
3023
|
* Props of `EllipsisCircle` (function). Exports: none.
|
|
1334
3024
|
* @see design/components/Button/native/ButtonEllipsis.native.tsx
|
|
@@ -1338,6 +3028,8 @@ export type EllipsisCircleProps = {
|
|
|
1338
3028
|
size?: unknown;
|
|
1339
3029
|
variant?: unknown;
|
|
1340
3030
|
};
|
|
3031
|
+
/** The displays of a `string` setting that pick a Discord entity by its id. */
|
|
3032
|
+
export type EntityDisplay = 'user' | 'channel' | 'guild' | 'role';
|
|
1341
3033
|
/** Discord ships numeric enums as bidirectional maps; this models both directions. */
|
|
1342
3034
|
export type EnumLike<K extends readonly string[]> = {
|
|
1343
3035
|
[P in K[number]]: number;
|
|
@@ -1393,14 +3085,8 @@ export type FloatingActionButtonProps = Omit<
|
|
|
1393
3085
|
/** @default 16 */
|
|
1394
3086
|
positionRight?: number;
|
|
1395
3087
|
};
|
|
1396
|
-
/** A
|
|
1397
|
-
export type
|
|
1398
|
-
name: string;
|
|
1399
|
-
file: string;
|
|
1400
|
-
path: string;
|
|
1401
|
-
};
|
|
1402
|
-
/** A font managed by the Fonts manager: currently identical to its {@link FontDescriptor}. */
|
|
1403
|
-
export type FontEntity = FontDescriptor;
|
|
3088
|
+
/** A font face managed by the Fonts manager, as `UnboundNative.fonts.list()` returns it. */
|
|
3089
|
+
export type FontEntity = UnboundInstalledFont;
|
|
1404
3090
|
/**
|
|
1405
3091
|
* Props of `FormLabel` (function). Exports: default.
|
|
1406
3092
|
* @see design/void/Form/native/FormLabel.tsx
|
|
@@ -1592,9 +3278,13 @@ export type HeaderSubmittingIndicatorComponent =
|
|
|
1592
3278
|
* @see design/components/Navigator/native/NavigatorHeader.native.tsx
|
|
1593
3279
|
*/
|
|
1594
3280
|
export type HeaderSubmittingIndicatorProps = {};
|
|
3281
|
+
/** An icon a row or toast draws: an asset id, an element such as `<Star />`, or an icon component such as `Star`. */
|
|
3282
|
+
export type IconInput = number | React$1.ReactElement | React$1.ComponentType<DiscordIconProps>;
|
|
1595
3283
|
/** A loaded icon pack: its bundle marker and {@link IconPackManifest}. */
|
|
1596
3284
|
export type IconPack = {
|
|
3285
|
+
/** The name the pack was loaded under: its manifest `name`, or `Default` for Discord's own icons. */
|
|
1597
3286
|
bundle: string;
|
|
3287
|
+
/** The pack's manifest. */
|
|
1598
3288
|
manifest: IconPackManifest;
|
|
1599
3289
|
};
|
|
1600
3290
|
/** An icon pack's manifest: an {@link AddonManifest} tagged with its source kind. */
|
|
@@ -1711,6 +3401,8 @@ export type LayerScopeProps = {
|
|
|
1711
3401
|
children?: React$1.ReactNode;
|
|
1712
3402
|
zIndex?: number;
|
|
1713
3403
|
};
|
|
3404
|
+
/** The `objc` namespace the loader publishes, before the client adds `create` and scopes it to a plugin. */
|
|
3405
|
+
export type LoaderObjCBridge = Omit<NativeObjCBridge, 'create'> & NativeUIScopeFactory;
|
|
1714
3406
|
/**
|
|
1715
3407
|
* Props of `LoadingButtonPill` (function). Exports: LoadingButtonPill.
|
|
1716
3408
|
* @see design/components/Button/native/ButtonPill.native.tsx
|
|
@@ -1729,6 +3421,31 @@ export type LoadingButtonPillProps = {
|
|
|
1729
3421
|
/** @default 'primary' */
|
|
1730
3422
|
variant?: PillWrapperProps['variant'];
|
|
1731
3423
|
};
|
|
3424
|
+
/** A generated component that also accepts {@link LooseProps}, keeping its statics such as `TableRow.Icon`. */
|
|
3425
|
+
export type LooseComponent<C> =
|
|
3426
|
+
C extends React$1.ComponentType<infer P> ? C & React$1.FunctionComponent<LooseProps<P>> : C;
|
|
3427
|
+
/** Each export of a generated module with {@link LooseComponent} applied. */
|
|
3428
|
+
export type LooseModule<M> = {
|
|
3429
|
+
[K in keyof M]: LooseComponent<M[K]>;
|
|
3430
|
+
};
|
|
3431
|
+
/**
|
|
3432
|
+
* The value type a loose prop accepts: a primitive, literal union or callback stays checked; anything else the
|
|
3433
|
+
* generator inferred (`any`, objects, React nodes, wide unions) is {@link UncertainValue}.
|
|
3434
|
+
*/
|
|
3435
|
+
export type LoosePropValue<T> = 0 extends 1 & T
|
|
3436
|
+
? UncertainValue
|
|
3437
|
+
: [NonNullable<T>] extends [Primitive]
|
|
3438
|
+
? T
|
|
3439
|
+
: [NonNullable<T>] extends [Callback]
|
|
3440
|
+
? T
|
|
3441
|
+
: UncertainValue;
|
|
3442
|
+
/**
|
|
3443
|
+
* Generated component props made safe to pass: every known prop is optional and checked only where its type is
|
|
3444
|
+
* concrete, and any other prop is allowed, since the generator can miss props or mark a defaulted one required.
|
|
3445
|
+
*/
|
|
3446
|
+
export type LooseProps<P> = {
|
|
3447
|
+
[K in keyof P]?: LoosePropValue<P[K]>;
|
|
3448
|
+
} & Record<string, unknown>;
|
|
1732
3449
|
/**
|
|
1733
3450
|
* Props of `LottieIcon` (function). Exports: LottieIcon.
|
|
1734
3451
|
* @see design/components/LottieIcon/native/LottieIcon.tsx
|
|
@@ -1762,6 +3479,63 @@ export type ManaContextProviderProps = {
|
|
|
1762
3479
|
children?: React$1.ReactNode;
|
|
1763
3480
|
value?: unknown;
|
|
1764
3481
|
};
|
|
3482
|
+
/** Parses nested Markdown, as a rule's `parse` receives it. */
|
|
3483
|
+
export type MarkdownNestedParse = (source: string, state: MarkdownState) => MarkdownNode[];
|
|
3484
|
+
/** One node of a parsed Markdown tree; `type` names the rule that parsed it. */
|
|
3485
|
+
export type MarkdownNode = {
|
|
3486
|
+
/** The name of the rule that parsed the node, such as `text` or `strong`. */
|
|
3487
|
+
type: string;
|
|
3488
|
+
/** The node's children, or its text for a leaf rule; absent when a rule stores its data elsewhere. */
|
|
3489
|
+
content?: MarkdownNode[] | string;
|
|
3490
|
+
};
|
|
3491
|
+
/** Renders a node or a list of nodes, as a rule's `react` receives it. */
|
|
3492
|
+
export type MarkdownOutput = (
|
|
3493
|
+
node: MarkdownNode | MarkdownNode[],
|
|
3494
|
+
state: MarkdownState,
|
|
3495
|
+
) => React$1.ReactNode;
|
|
3496
|
+
/** Discord's Markdown module (`MarkupUtils`), found by `parse`, `parseToAST` and `reactParserFor`. */
|
|
3497
|
+
export type MarkdownParserModule = {
|
|
3498
|
+
/** The rules Discord renders messages with. */
|
|
3499
|
+
defaultRules: MarkdownRules;
|
|
3500
|
+
/** Builds a renderer from a rule set, such as `defaultRules` plus your own rules. */
|
|
3501
|
+
reactParserFor(rules: MarkdownRules): MarkdownReactParser;
|
|
3502
|
+
/** Renders Markdown with `defaultRules`, as Discord renders message content. */
|
|
3503
|
+
parse: MarkdownReactParser;
|
|
3504
|
+
/** Parses Markdown with `defaultRules` into nodes without rendering them; `inline` defaults to `true`. */
|
|
3505
|
+
parseToAST(source?: string, inline?: boolean, state?: MarkdownState): MarkdownNode[];
|
|
3506
|
+
};
|
|
3507
|
+
/** Renders Markdown source to React Native elements; `inline` defaults to `true`. */
|
|
3508
|
+
export type MarkdownReactParser = (
|
|
3509
|
+
source?: string,
|
|
3510
|
+
inline?: boolean,
|
|
3511
|
+
state?: MarkdownState,
|
|
3512
|
+
) => React$1.ReactNode;
|
|
3513
|
+
/** A simple-markdown rule: `match` finds it at the start of the source, `parse` builds its node, `react` renders it. */
|
|
3514
|
+
export type MarkdownRule<TNode extends MarkdownNode = MarkdownNode> = {
|
|
3515
|
+
/** Discord 349 ships `highlight`, `guild` and `channel` without one; the parser never calls those. */
|
|
3516
|
+
order?: number;
|
|
3517
|
+
/** Matches the rule at the start of `source`; `previous` is the text already consumed. `null` means no match. */
|
|
3518
|
+
match(source: string, state: MarkdownState, previous: string): RegExpExecArray | null;
|
|
3519
|
+
/** Builds the node from `match`'s capture; call `parse` to parse nested Markdown. */
|
|
3520
|
+
parse(capture: RegExpExecArray, parse: MarkdownNestedParse, state: MarkdownState): TNode;
|
|
3521
|
+
/** Renders the node; call `output` to render its children. */
|
|
3522
|
+
react?(node: TNode, output: MarkdownOutput, state: MarkdownState): React$1.ReactNode;
|
|
3523
|
+
};
|
|
3524
|
+
/** A rule set by rule name, the shape `reactParserFor` takes. */
|
|
3525
|
+
export type MarkdownRules = Record<string, MarkdownRule>;
|
|
3526
|
+
/** The parse state Discord's rules read; the `allow*` flags turn links, headings and lists on. */
|
|
3527
|
+
export type MarkdownState = {
|
|
3528
|
+
/** The React key the output function sets before calling a rule's `react`. */
|
|
3529
|
+
key?: string | number;
|
|
3530
|
+
/** Whether the parser is inside inline content; inline-only rules such as `strong` match only then. */
|
|
3531
|
+
inline?: boolean;
|
|
3532
|
+
/** Renders links as links instead of plain text. */
|
|
3533
|
+
allowLinks?: boolean;
|
|
3534
|
+
/** Parses `#` headings. */
|
|
3535
|
+
allowHeading?: boolean;
|
|
3536
|
+
/** Parses `-` and `1.` lists. */
|
|
3537
|
+
allowList?: boolean;
|
|
3538
|
+
};
|
|
1765
3539
|
export type MenuComponent = React$1.ComponentType<MenuProps>;
|
|
1766
3540
|
export type MenuGroupComponent = React$1.ComponentType<MenuGroupProps>;
|
|
1767
3541
|
/**
|
|
@@ -1941,25 +3715,85 @@ export type ModalStepIndicatorProps = {
|
|
|
1941
3715
|
};
|
|
1942
3716
|
/** The outcome of checking an addon's signature against the keys compiled into the loader. */
|
|
1943
3717
|
export type NativeAddonVerification = {
|
|
3718
|
+
/** `signed` when a trusted key signed the bundle, `unsigned` when there is no signature, `invalid` when it fails. */
|
|
1944
3719
|
readonly status: 'signed' | 'unsigned' | 'invalid';
|
|
3720
|
+
/** Who signed the addon; set only when `status` is `signed`. */
|
|
1945
3721
|
readonly signer?: string;
|
|
3722
|
+
/** Why verification did not succeed, when the loader can say. */
|
|
1946
3723
|
readonly problem?: string;
|
|
1947
3724
|
};
|
|
3725
|
+
/** Where a running install is: `confirming` waits on the system prompt; `failed` carries `error`. */
|
|
3726
|
+
export type NativeAndroidInstallPhase =
|
|
3727
|
+
| 'idle'
|
|
3728
|
+
| 'downloading'
|
|
3729
|
+
| 'installing'
|
|
3730
|
+
| 'confirming'
|
|
3731
|
+
| 'failed';
|
|
3732
|
+
/** How far the running install is. */
|
|
3733
|
+
export type NativeAndroidInstallProgress = {
|
|
3734
|
+
/** What the installer is doing now. */
|
|
3735
|
+
readonly phase: NativeAndroidInstallPhase;
|
|
3736
|
+
/** Gzipped bytes downloaded so far, of `total`. */
|
|
3737
|
+
readonly downloaded: number;
|
|
3738
|
+
/** Gzipped bytes the install downloads in all. */
|
|
3739
|
+
readonly total: number;
|
|
3740
|
+
/** Why the last install failed, or `null`. */
|
|
3741
|
+
readonly error: string | null;
|
|
3742
|
+
};
|
|
3743
|
+
/** One gzipped split APK of a build to install. */
|
|
3744
|
+
export type NativeAndroidInstallSplit = {
|
|
3745
|
+
/** The split's name: `base` or a config split such as `config.arm64_v8a`. */
|
|
3746
|
+
readonly name: string;
|
|
3747
|
+
/** Where the gzipped APK downloads from. */
|
|
3748
|
+
readonly url: string;
|
|
3749
|
+
/** SHA-256 of the APK after it is gunzipped. */
|
|
3750
|
+
readonly sha256: string;
|
|
3751
|
+
/** Size of the APK in bytes. */
|
|
3752
|
+
readonly size: number;
|
|
3753
|
+
/** Size of the gzipped download in bytes. */
|
|
3754
|
+
readonly compressedSize: number;
|
|
3755
|
+
};
|
|
3756
|
+
/** Whether Discord can install another patched build of itself: not patched with LSPatch, patched before in-app installs, waiting on the "Install unknown apps" permission, or ready. */
|
|
3757
|
+
export type NativeAndroidInstallerAvailability =
|
|
3758
|
+
| 'unpatched'
|
|
3759
|
+
| 'unsupported'
|
|
3760
|
+
| 'needs-permission'
|
|
3761
|
+
| 'ready';
|
|
3762
|
+
/** The Discord install the installer would replace. */
|
|
3763
|
+
export type NativeAndroidInstallerStatus = {
|
|
3764
|
+
/** Whether in-app installs work, or what blocks them. */
|
|
3765
|
+
readonly availability: NativeAndroidInstallerAvailability;
|
|
3766
|
+
/** Discord's version name, such as `352.17 - Stable`. */
|
|
3767
|
+
readonly versionName: string;
|
|
3768
|
+
/** The installed split names, `base` first. */
|
|
3769
|
+
readonly splits: string[];
|
|
3770
|
+
};
|
|
3771
|
+
/** A key from `objc.createAssociationKey` that names one associated object. */
|
|
1948
3772
|
export type NativeAssociationKey = NativeHandle;
|
|
3773
|
+
/** Refers to an earlier step's result inside `objc.batch`, as a target or an argument. */
|
|
1949
3774
|
export type NativeBatchReference = {
|
|
3775
|
+
/** The zero-based index of the earlier step whose result to use. */
|
|
1950
3776
|
readonly $nativeBatchResult: number;
|
|
1951
3777
|
};
|
|
3778
|
+
/** One Objective-C call in `objc.batch`; a batch takes up to 64 steps. */
|
|
1952
3779
|
export type NativeBatchStep = {
|
|
3780
|
+
/** The object to call, or an earlier step's result. */
|
|
1953
3781
|
target: NativeObjectHandle | NativeBatchReference;
|
|
3782
|
+
/** The selector to send, at most 256 characters. */
|
|
1954
3783
|
selector: string;
|
|
3784
|
+
/** The call's arguments, at most 16; each may be an earlier step's result. */
|
|
1955
3785
|
args: unknown[];
|
|
1956
3786
|
};
|
|
3787
|
+
/** Options for a synchronous Objective-C call. */
|
|
1957
3788
|
export type NativeCallOptions = {
|
|
3789
|
+
/** The thread to run on. Defaults to `current`. */
|
|
1958
3790
|
thread?: NativeThreadPolicy;
|
|
1959
3791
|
};
|
|
3792
|
+
/** A promise for native work; `cancel` drops it, and stopping the plugin cancels every pending one. */
|
|
1960
3793
|
export type NativeCancelablePromise<T> = Promise<T> & {
|
|
1961
3794
|
cancel(): void;
|
|
1962
3795
|
};
|
|
3796
|
+
/** A handle to an Objective-C class, from `objc.getClass`. */
|
|
1963
3797
|
export type NativeClassHandle = NativeHandle;
|
|
1964
3798
|
/** A plugin bundle the loader evaluated from bytecode: it takes the scoped React and returns the plugin module. */
|
|
1965
3799
|
export type NativeCompiledPlugin = (react: typeof React$1) =>
|
|
@@ -1967,45 +3801,85 @@ export type NativeCompiledPlugin = (react: typeof React$1) =>
|
|
|
1967
3801
|
| {
|
|
1968
3802
|
default: Plugin$1;
|
|
1969
3803
|
};
|
|
3804
|
+
/** What an addon was doing when the loader blamed it: `starting` or `running` for a crash, `frozen` for a freeze. */
|
|
1970
3805
|
export type NativeCrashPhase = 'starting' | 'running' | 'frozen';
|
|
3806
|
+
/** An addon the loader disabled because Discord crashed or froze in it on consecutive launches. */
|
|
1971
3807
|
export type NativeCrashedAddon = {
|
|
3808
|
+
/** The addon's crash guard key, `<bucket>:<addon id>`. */
|
|
1972
3809
|
readonly id: string;
|
|
3810
|
+
/** The addon's display name. */
|
|
1973
3811
|
readonly name: string;
|
|
1974
|
-
|
|
3812
|
+
/** What the addon was doing. */
|
|
3813
|
+
readonly phase: NativeCrashPhase;
|
|
1975
3814
|
};
|
|
3815
|
+
/** Debugger support for plugins. */
|
|
1976
3816
|
export type NativeDebugBridge = {
|
|
3817
|
+
/** Logs an evaluation and adds it to the loader's history; false when the record is malformed. Needs `native.debug.evaluations`. */
|
|
1977
3818
|
recordEvaluation(record: NativeDebugEvaluation): boolean;
|
|
1978
|
-
environment
|
|
3819
|
+
/** Reads the debug environment, optionally collecting garbage or resetting counters first. Needs `native.debug.environment`. */
|
|
3820
|
+
environment(options?: NativeDebugEnvironmentOptions): NativeDebugEnvironment;
|
|
1979
3821
|
};
|
|
3822
|
+
/** Facts about the device a debugger session needs. */
|
|
1980
3823
|
export type NativeDebugEnvironment = {
|
|
3824
|
+
/** Whether Discord runs in a simulator, emulator or virtual machine. */
|
|
1981
3825
|
isVirtualDevice: boolean;
|
|
3826
|
+
/** The address of the machine hosting the virtual device, or `null` on a physical one. */
|
|
1982
3827
|
hostAddress: string | null;
|
|
1983
|
-
|
|
1984
|
-
|
|
3828
|
+
/** The loader's resource counts. */
|
|
3829
|
+
resources: NativeResourceCounts;
|
|
3830
|
+
/** Present when the read collected garbage first. */
|
|
3831
|
+
garbageCollection?: NativeGarbageCollection;
|
|
3832
|
+
};
|
|
3833
|
+
/** What reading the debug environment may do first. */
|
|
3834
|
+
export type NativeDebugEnvironmentOptions = {
|
|
3835
|
+
/** Collects garbage on the calling runtime and the UI runtime before counting. */
|
|
3836
|
+
collectGarbage?: boolean;
|
|
3837
|
+
/** Zeroes the main-thread counters after reading them. */
|
|
3838
|
+
resetCounters?: boolean;
|
|
3839
|
+
};
|
|
3840
|
+
/** One debugger evaluation, which the loader logs and keeps in its evaluation history. */
|
|
1985
3841
|
export type NativeDebugEvaluation = {
|
|
1986
3842
|
id: string;
|
|
1987
3843
|
code: string;
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
3844
|
+
logs?: NativeDebugEvaluationLog[];
|
|
3845
|
+
} & (
|
|
3846
|
+
| {
|
|
3847
|
+
ok: true;
|
|
3848
|
+
value?: string;
|
|
3849
|
+
}
|
|
3850
|
+
| {
|
|
3851
|
+
ok: false;
|
|
3852
|
+
error?: string;
|
|
3853
|
+
}
|
|
3854
|
+
);
|
|
3855
|
+
/** One console line an evaluation printed. */
|
|
3856
|
+
export type NativeDebugEvaluationLog = {
|
|
3857
|
+
/** 1 for log, 2 for warn, 3 for error. */
|
|
3858
|
+
level: 1 | 2 | 3;
|
|
3859
|
+
/** The printed text. */
|
|
3860
|
+
message: string;
|
|
1995
3861
|
};
|
|
3862
|
+
/** Calls C functions in images Discord already loaded. An unsigned plugin needs the user's consent to use it. */
|
|
1996
3863
|
export type NativeFFIBridge = {
|
|
3864
|
+
/** Resolves a symbol in a loaded image, or in every loaded image when `image` is omitted; `null` when not found. */
|
|
1997
3865
|
symbol(name: string, image?: string): NativePointer | null;
|
|
3866
|
+
/** Calls a symbol from `symbol` with an explicit signature. */
|
|
1998
3867
|
call(pointer: NativePointer, signature: NativeFFISignature, ...args: unknown[]): unknown;
|
|
1999
3868
|
};
|
|
3869
|
+
/** A non-variadic C function signature for `ffi.call`. */
|
|
2000
3870
|
export type NativeFFISignature = {
|
|
3871
|
+
/** The result type; `i64` and `u64` results come back as `BigInt`. */
|
|
2001
3872
|
returnType: NativeFFIType;
|
|
3873
|
+
/** The argument types, at most 16 and none `void`. */
|
|
2002
3874
|
args: NativeFFIType[];
|
|
2003
3875
|
};
|
|
3876
|
+
/** An FFI type: a scalar or pointer name, or a registered struct by name, such as `{ struct: 'CGRect' }`. */
|
|
2004
3877
|
export type NativeFFIType =
|
|
2005
3878
|
| NativeFFITypeName
|
|
2006
3879
|
| {
|
|
2007
3880
|
struct: string;
|
|
2008
3881
|
};
|
|
3882
|
+
/** A C type in an FFI signature; `object`, `class` and `selector` exist only on iOS. */
|
|
2009
3883
|
export type NativeFFITypeName =
|
|
2010
3884
|
| 'void'
|
|
2011
3885
|
| 'bool'
|
|
@@ -2024,188 +3898,371 @@ export type NativeFFITypeName =
|
|
|
2024
3898
|
| 'object'
|
|
2025
3899
|
| 'class'
|
|
2026
3900
|
| 'selector';
|
|
3901
|
+
/** Mounts registered React Native components inside existing native views. Sync methods are iOS only. */
|
|
2027
3902
|
export type NativeFabricBridge = {
|
|
3903
|
+
/** Starts a surface for a registered component inside a container view. Needs `native.fabric.mount`. */
|
|
2028
3904
|
mount(
|
|
2029
3905
|
container: NativeObjectHandle,
|
|
2030
3906
|
moduleName: string,
|
|
2031
3907
|
properties?: NativeSerializableObject,
|
|
3908
|
+
options?: NativeFabricMountOptions,
|
|
2032
3909
|
): NativeFabricSurface;
|
|
3910
|
+
/** Like `mount`, on the main thread. Needs `native.fabric.async`. */
|
|
2033
3911
|
mountAsync(
|
|
2034
3912
|
container: NativeObjectHandle,
|
|
2035
3913
|
moduleName: string,
|
|
2036
3914
|
properties?: NativeSerializableObject,
|
|
3915
|
+
options?: NativeFabricMountOptions,
|
|
2037
3916
|
): NativeCancelablePromise<NativeFabricSurface>;
|
|
3917
|
+
/** Sends new properties to a surface. */
|
|
2038
3918
|
update(surface: NativeFabricSurface, properties: NativeSerializableObject): void;
|
|
3919
|
+
/** Like `update`, on the main thread. */
|
|
2039
3920
|
updateAsync(
|
|
2040
3921
|
surface: NativeFabricSurface,
|
|
2041
3922
|
properties: NativeSerializableObject,
|
|
2042
3923
|
): NativeCancelablePromise<void>;
|
|
3924
|
+
/** Sets the smallest and largest size the surface may lay out at. */
|
|
2043
3925
|
setSize(
|
|
2044
3926
|
surface: NativeFabricSurface,
|
|
2045
3927
|
minimumSize: NativeFabricSize,
|
|
2046
3928
|
maximumSize: NativeFabricSize,
|
|
2047
3929
|
): void;
|
|
3930
|
+
/** Like `setSize`, on the main thread. */
|
|
2048
3931
|
setSizeAsync(
|
|
2049
3932
|
surface: NativeFabricSurface,
|
|
2050
3933
|
minimumSize: NativeFabricSize,
|
|
2051
3934
|
maximumSize: NativeFabricSize,
|
|
2052
3935
|
): NativeCancelablePromise<void>;
|
|
3936
|
+
/** Positions the surface's view in its container. */
|
|
2053
3937
|
setFrame(surface: NativeFabricSurface, frame: NativeFabricFrame): void;
|
|
3938
|
+
/** Like `setFrame`, on the main thread. */
|
|
2054
3939
|
setFrameAsync(
|
|
2055
3940
|
surface: NativeFabricSurface,
|
|
2056
3941
|
frame: NativeFabricFrame,
|
|
2057
3942
|
): NativeCancelablePromise<void>;
|
|
3943
|
+
/** Reads a view's frame. */
|
|
2058
3944
|
measure(view: NativeObjectHandle): NativeFabricFrame;
|
|
3945
|
+
/** Like `measure`, on the main thread. */
|
|
2059
3946
|
measureAsync(view: NativeObjectHandle): NativeCancelablePromise<NativeFabricFrame>;
|
|
3947
|
+
/** Stops a surface and removes its view. */
|
|
2060
3948
|
unmount(surface: NativeFabricSurface): void;
|
|
3949
|
+
/** Like `unmount`, on the main thread. */
|
|
2061
3950
|
unmountAsync(surface: NativeFabricSurface): NativeCancelablePromise<void>;
|
|
3951
|
+
/** Destroys the idle surfaces this plugin left for reuse. */
|
|
3952
|
+
releaseIdle?(): void;
|
|
3953
|
+
/** Like `releaseIdle`, on the main thread; the plugin scope calls it when the plugin stops. */
|
|
3954
|
+
releaseIdleAsync(): NativeCancelablePromise<void>;
|
|
2062
3955
|
};
|
|
3956
|
+
/** A view's frame in its container, in points on iOS and dp on Android. */
|
|
2063
3957
|
export type NativeFabricFrame = {
|
|
3958
|
+
/** The left edge, between -100,000 and 100,000. */
|
|
2064
3959
|
x: number;
|
|
3960
|
+
/** The top edge, between -100,000 and 100,000. */
|
|
2065
3961
|
y: number;
|
|
3962
|
+
/** Width, between 0 and 32,768. */
|
|
2066
3963
|
width: number;
|
|
3964
|
+
/** Height, between 0 and 32,768. */
|
|
2067
3965
|
height: number;
|
|
2068
3966
|
};
|
|
3967
|
+
/** Options for mounting a Fabric surface. */
|
|
3968
|
+
export type NativeFabricMountOptions = {
|
|
3969
|
+
/** Reuses an idle surface of the same component this plugin unmounted, re-hosted in the new container with the new properties, instead of starting one. Only for components whose state follows their properties. */
|
|
3970
|
+
reuse?: boolean;
|
|
3971
|
+
};
|
|
3972
|
+
/** A Fabric surface size, in points on iOS and dp on Android, between 0 and 32,768. */
|
|
2069
3973
|
export type NativeFabricSize = {
|
|
3974
|
+
/** Width, in points on iOS and dp on Android. */
|
|
2070
3975
|
width: number;
|
|
3976
|
+
/** Height, in points on iOS and dp on Android. */
|
|
2071
3977
|
height: number;
|
|
2072
3978
|
};
|
|
3979
|
+
/** A mounted Fabric surface; the plugin scope unmounts it on dispose. */
|
|
2073
3980
|
export type NativeFabricSurface = NativeHandle;
|
|
3981
|
+
/** One font the loader can apply. */
|
|
2074
3982
|
export type NativeFontEntry = {
|
|
3983
|
+
/** The font's PostScript name, falling back to its full or file name; unique in the list. */
|
|
2075
3984
|
readonly name: string;
|
|
3985
|
+
/** The font's full name, or `name` when the file has none. */
|
|
2076
3986
|
readonly displayName: string;
|
|
3987
|
+
/** The family name, when the font file declares one. */
|
|
2077
3988
|
readonly family?: string;
|
|
3989
|
+
/** The style name, such as `Bold`, when the font file declares one. */
|
|
2078
3990
|
readonly style?: string;
|
|
3991
|
+
/** The font file's path; missing for system fonts the loader lists by name only. */
|
|
2079
3992
|
readonly path?: string;
|
|
3993
|
+
/** Where the font comes from. */
|
|
2080
3994
|
readonly source: NativeFontSource;
|
|
2081
3995
|
};
|
|
3996
|
+
/** Where a font comes from: bundled with Discord, installed on the system, or a font addon. */
|
|
2082
3997
|
export type NativeFontSource = 'app' | 'system' | 'custom';
|
|
3998
|
+
/** Which runtimes a debug garbage collection reached. */
|
|
3999
|
+
export type NativeGarbageCollection = {
|
|
4000
|
+
/** Whether garbage was collected on the runtime that made the call. */
|
|
4001
|
+
runtime: boolean;
|
|
4002
|
+
/** Whether garbage was collected on the UI runtime; false when no UI runtime is registered or collection failed. */
|
|
4003
|
+
uiRuntime: boolean;
|
|
4004
|
+
};
|
|
2083
4005
|
/** An opaque reference to a native object. Only the bridge creates handles; plugins pass them back. */
|
|
2084
4006
|
export type NativeHandle = {
|
|
4007
|
+
/** A type-only brand, absent at runtime, so plain objects cannot pass as handles. */
|
|
2085
4008
|
readonly [nativeHandle]: true;
|
|
2086
4009
|
};
|
|
2087
|
-
|
|
2088
|
-
|
|
4010
|
+
/** What an Objective-C hook handler receives for one call of the hooked method. */
|
|
4011
|
+
export type NativeHookContext<Receiver extends boolean = true> = {
|
|
4012
|
+
/** The receiver, borrowed until the handler returns. */
|
|
4013
|
+
self: Receiver extends true ? NativeObjectHandle : undefined;
|
|
4014
|
+
/** The hooked selector's name. */
|
|
2089
4015
|
selector: string;
|
|
4016
|
+
/** The method's explicit arguments, without `self` and `_cmd`, borrowed until the handler returns. */
|
|
2090
4017
|
args: unknown[];
|
|
2091
|
-
|
|
4018
|
+
/** The method argument index each entry of `args` came from, as trimmed by `payload.arguments`. */
|
|
4019
|
+
argumentIndexes: number[];
|
|
4020
|
+
/** Which handler is running. */
|
|
4021
|
+
phase: 'before' | 'after' | 'replace';
|
|
4022
|
+
/** Runs the original implementation; it works only synchronously on the hook's thread. */
|
|
4023
|
+
original: (...args: unknown[]) => NativeObjCResult;
|
|
4024
|
+
/** Swaps the object argument at an index of `args` before the original runs; only during a synchronous handler. */
|
|
2092
4025
|
replaceObjectArgument(index: number, value: NativeObjectHandle | null): void;
|
|
2093
4026
|
};
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
4027
|
+
/** The handlers an Objective-C hook runs around each call; it needs at least one, unless `cacheOnly` is set. */
|
|
4028
|
+
export type NativeHookHandlers<Receiver extends boolean = true> = {
|
|
4029
|
+
/** Runs before the original implementation. */
|
|
4030
|
+
before?: (context: NativeHookContext<Receiver>) => void | Promise<void>;
|
|
4031
|
+
/** Runs after the original implementation. */
|
|
4032
|
+
after?: (context: NativeHookContext<Receiver>) => void | Promise<void>;
|
|
4033
|
+
/** Runs instead of the original; what it returns becomes the method's result. */
|
|
4034
|
+
replace?: (context: NativeHookContext<Receiver>) => NativeObjCResult;
|
|
4035
|
+
};
|
|
4036
|
+
/** Options for `objc.hook`. */
|
|
4037
|
+
export type NativeHookOptions<Receiver extends boolean = boolean> = {
|
|
4038
|
+
/** Runs no JavaScript and returns values set with `setReturnValue`; needs a scalar or struct return type. */
|
|
2100
4039
|
cacheOnly?: boolean;
|
|
4040
|
+
coalesce?: 'receiver';
|
|
4041
|
+
/** Hooks calls on this object only. */
|
|
2101
4042
|
instance?: NativeObjectHandle;
|
|
4043
|
+
/** Removes the hook after its first call. */
|
|
2102
4044
|
once?: boolean;
|
|
4045
|
+
payload?: NativeHookPayload<Receiver>;
|
|
2103
4046
|
} & NativeCallOptions;
|
|
4047
|
+
/** Trims what a hook sends to JavaScript per call, to cut crossing cost on hot methods. */
|
|
4048
|
+
export type NativeHookPayload<Receiver extends boolean = boolean> = {
|
|
4049
|
+
/** Whether handlers receive `self`. Defaults to true. */
|
|
4050
|
+
receiver?: Receiver;
|
|
4051
|
+
/** The zero-based indexes of the arguments to send; every argument when omitted. */
|
|
4052
|
+
arguments?: number[];
|
|
4053
|
+
/** Sends only the `before` or only the `after` call; both when omitted. */
|
|
4054
|
+
phase?: 'before' | 'after';
|
|
4055
|
+
};
|
|
4056
|
+
/** An installed Objective-C hook; the plugin scope removes it on dispose. */
|
|
2104
4057
|
export type NativeHookToken = {
|
|
4058
|
+
/** False once the hook is removed. */
|
|
2105
4059
|
readonly active: boolean;
|
|
2106
|
-
|
|
4060
|
+
/** Sets the result a `cacheOnly` hook returns for calls with this receiver and these arguments. */
|
|
4061
|
+
setReturnValue(self: NativeObjectHandle, args: unknown[], value: NativeObjCResult): void;
|
|
4062
|
+
/** Removes the result set for this receiver and these arguments. */
|
|
2107
4063
|
removeReturnValue(self: NativeObjectHandle, args: unknown[]): void;
|
|
4064
|
+
/** Removes every result set on this hook. */
|
|
2108
4065
|
clearReturnValues(): void;
|
|
4066
|
+
/** Removes the hook; calling it again does nothing. */
|
|
2109
4067
|
remove(): void;
|
|
2110
4068
|
};
|
|
4069
|
+
/** An argument to a Java call: a tagged value or a handle. */
|
|
2111
4070
|
export type NativeJavaArgument = NativeJavaValue | NativeJavaHandle;
|
|
4071
|
+
/** A key from `java.createAssociationKey` that names one associated value. */
|
|
2112
4072
|
export type NativeJavaAssociationKey = NativeHandle;
|
|
4073
|
+
/** One independent operation in a Java `batch` or `batchAsync`. */
|
|
2113
4074
|
export type NativeJavaBatchOperation = {
|
|
4075
|
+
/** What to do with `handle`. */
|
|
2114
4076
|
op: 'invoke' | 'getField' | 'setField' | 'respondsTo';
|
|
4077
|
+
/** The object to act on. */
|
|
2115
4078
|
handle: NativeJavaReference;
|
|
4079
|
+
/** The method or field name. */
|
|
2116
4080
|
name: string;
|
|
4081
|
+
/** The method's arguments, for `invoke` and `respondsTo`. */
|
|
2117
4082
|
args?: NativeJavaArgument[];
|
|
4083
|
+
/** The value to write, for `setField`. */
|
|
2118
4084
|
value?: NativeJavaArgument;
|
|
2119
4085
|
};
|
|
4086
|
+
/** The Android bridge to Java through reflection. Sync calls run on the JavaScript thread, so touch views only asynchronously. */
|
|
2120
4087
|
export type NativeJavaBridge = {
|
|
4088
|
+
/** Looks up a class by fully qualified name and returns a handle the scope holds until released. */
|
|
2121
4089
|
getClass(name: string): NativeJavaHandle;
|
|
4090
|
+
/** Lists a class's constructors, methods and fields. */
|
|
2122
4091
|
describe(name: string): NativeJavaClassDescription;
|
|
4092
|
+
/** Runs independent operations in one call on the JavaScript thread and returns every result in order. */
|
|
2123
4093
|
batch(operations: NativeJavaBatchOperation[]): NativeJavaValue[];
|
|
4094
|
+
/** Runs the operations like `batch`, on the main thread, so views can be read safely. */
|
|
4095
|
+
batchAsync(operations: NativeJavaBatchOperation[]): NativeCancelablePromise<NativeJavaValue[]>;
|
|
4096
|
+
/** Finds the views of a class under or above a view, on the main thread, like `objc.findViews`. */
|
|
4097
|
+
findViews(
|
|
4098
|
+
root: NativeJavaReference,
|
|
4099
|
+
className: string,
|
|
4100
|
+
options?: NativeViewSearchOptions,
|
|
4101
|
+
): NativeCancelablePromise<NativeJavaValue[]>;
|
|
4102
|
+
/** Creates a key for attaching a value to objects with `setAssociatedObject`. */
|
|
2124
4103
|
createAssociationKey(): NativeJavaAssociationKey;
|
|
4104
|
+
/** Reads the value attached to an object under a key. */
|
|
2125
4105
|
getAssociatedObject(
|
|
2126
4106
|
handle: NativeJavaReference,
|
|
2127
4107
|
key: NativeJavaAssociationKey,
|
|
2128
4108
|
): NativeJavaValue;
|
|
4109
|
+
/** Attaches a value to an object under a key. */
|
|
2129
4110
|
setAssociatedObject(
|
|
2130
4111
|
handle: NativeJavaReference,
|
|
2131
4112
|
key: NativeJavaAssociationKey,
|
|
2132
4113
|
value: NativeJavaArgument,
|
|
2133
4114
|
): void;
|
|
4115
|
+
/** Reads an object's class name, as a string value. */
|
|
2134
4116
|
className(handle: NativeJavaReference): NativeJavaValue;
|
|
4117
|
+
/** Calls the constructor matching `args` and returns a handle the scope holds until released. */
|
|
2135
4118
|
construct(name: string, args?: NativeJavaArgument[]): NativeJavaHandle;
|
|
4119
|
+
/** Checks whether the object has a method `name` callable with `args`, as a boolean value. */
|
|
2136
4120
|
respondsTo(
|
|
2137
4121
|
handle: NativeJavaReference,
|
|
2138
4122
|
name: string,
|
|
2139
4123
|
args?: NativeJavaArgument[],
|
|
2140
4124
|
): NativeJavaValue;
|
|
4125
|
+
/** Calls a method on the JavaScript thread. */
|
|
2141
4126
|
invoke(handle: NativeJavaReference, name: string, args?: NativeJavaArgument[]): NativeJavaValue;
|
|
4127
|
+
/** Resolves a method by name and parameter types once, for repeated calls through `invokePrepared`. */
|
|
4128
|
+
prepare(
|
|
4129
|
+
target: NativeJavaReference,
|
|
4130
|
+
name: string,
|
|
4131
|
+
parameterTypes: readonly string[],
|
|
4132
|
+
): NativeJavaCallPlan;
|
|
4133
|
+
/** Calls a prepared method on the JavaScript thread, like `invoke`. */
|
|
4134
|
+
invokePrepared(
|
|
4135
|
+
plan: NativeJavaCallPlan,
|
|
4136
|
+
target: NativeJavaReference,
|
|
4137
|
+
args?: NativeJavaArgument[],
|
|
4138
|
+
): NativeJavaValue;
|
|
4139
|
+
/** Calls a prepared method on the main thread and resolves with its result, like `invokeAsync`. */
|
|
4140
|
+
invokePreparedAsync(
|
|
4141
|
+
plan: NativeJavaCallPlan,
|
|
4142
|
+
target: NativeJavaReference,
|
|
4143
|
+
args?: NativeJavaArgument[],
|
|
4144
|
+
): NativeCancelablePromise<NativeJavaValue>;
|
|
4145
|
+
/** Frees a call plan; using it afterwards throws. */
|
|
4146
|
+
disposePlan(plan: NativeJavaCallPlan): void;
|
|
4147
|
+
/** Calls a method on the main thread and resolves with its result. Needs `native.java.invokeAsync`. */
|
|
2142
4148
|
invokeAsync(
|
|
2143
4149
|
handle: NativeJavaReference,
|
|
2144
4150
|
name: string,
|
|
2145
4151
|
args?: NativeJavaArgument[],
|
|
2146
4152
|
): NativeCancelablePromise<NativeJavaValue>;
|
|
4153
|
+
/** Reads a field by name. */
|
|
2147
4154
|
getField(handle: NativeJavaReference, name: string): NativeJavaValue;
|
|
4155
|
+
/** Writes a field by name. */
|
|
2148
4156
|
setField(handle: NativeJavaReference, name: string, value: NativeJavaArgument): void;
|
|
4157
|
+
/** Drops the plugin's hold on a handle so the loader can free the object. */
|
|
2149
4158
|
release(handle: NativeJavaReference): void;
|
|
2150
4159
|
};
|
|
4160
|
+
/** A method resolved once by `java.prepare`, for calling many times without the lookup. */
|
|
4161
|
+
export type NativeJavaCallPlan = NativeJavaHandle & {
|
|
4162
|
+
readonly [nativeJavaCallPlan]: true;
|
|
4163
|
+
};
|
|
4164
|
+
/** A Java class's shape, read by reflection with `java.describe`. */
|
|
2151
4165
|
export type NativeJavaClassDescription = {
|
|
4166
|
+
/** The fully qualified class name. */
|
|
2152
4167
|
name: string;
|
|
4168
|
+
/** The superclass name, or `null` when there is none. */
|
|
2153
4169
|
superclass: string | null;
|
|
4170
|
+
/** The names of the interfaces the class implements. */
|
|
2154
4171
|
interfaces: string[];
|
|
4172
|
+
/** Each constructor's parameter class names. */
|
|
2155
4173
|
constructors: string[][];
|
|
4174
|
+
/** The methods the class declares. */
|
|
2156
4175
|
methods: NativeJavaMethodDescription[];
|
|
4176
|
+
/** The fields the class declares. */
|
|
2157
4177
|
fields: NativeJavaFieldDescription[];
|
|
2158
4178
|
};
|
|
4179
|
+
/** One field a Java class declares, from `java.describe`. */
|
|
2159
4180
|
export type NativeJavaFieldDescription = {
|
|
4181
|
+
/** The field name. */
|
|
2160
4182
|
name: string;
|
|
4183
|
+
/** The field type's class name. */
|
|
2161
4184
|
type: string;
|
|
4185
|
+
/** Whether the field is static. */
|
|
2162
4186
|
static: boolean;
|
|
2163
4187
|
};
|
|
4188
|
+
/** A handle to a Java object or class; the plugin scope releases it on dispose. */
|
|
2164
4189
|
export type NativeJavaHandle = NativeHandle;
|
|
4190
|
+
/** A Java object reference the bridge returns inside a result. */
|
|
2165
4191
|
export type NativeJavaHandleValue = {
|
|
4192
|
+
/** Marks the value as an object reference. */
|
|
2166
4193
|
type: 'handle';
|
|
4194
|
+
/** The id the loader issued for the object. */
|
|
2167
4195
|
value: string;
|
|
2168
4196
|
};
|
|
2169
|
-
|
|
2170
|
-
|
|
4197
|
+
/** What a Java hook listener receives for one call of the hooked method. */
|
|
4198
|
+
export type NativeJavaHookEvent<Receiver extends boolean = true> = {
|
|
4199
|
+
/** The object the hooked method was called on. */
|
|
4200
|
+
self: Receiver extends true ? NativeJavaValue : undefined;
|
|
4201
|
+
/** The call's arguments. */
|
|
2171
4202
|
args: NativeJavaValue[];
|
|
2172
|
-
|
|
2173
|
-
|
|
4203
|
+
/** The method argument index each entry of `args` came from, as trimmed by `payload.arguments`. */
|
|
4204
|
+
argumentIndexes: number[];
|
|
4205
|
+
/** Whether the listener heard the call before or after the method ran. */
|
|
4206
|
+
phase: 'before' | 'after';
|
|
4207
|
+
};
|
|
4208
|
+
/** Options for `hooks.hook`. */
|
|
4209
|
+
export type NativeJavaHookOptions<Receiver extends boolean = boolean> = {
|
|
4210
|
+
/** Collapses queued `after` events for the same receiver into one; needs a non-static method and an `after` payload. */
|
|
4211
|
+
coalesce?: 'receiver';
|
|
4212
|
+
/** Returns a value set with `setReturnValue` for a matching call instead of running the method. Defaults to false. */
|
|
2174
4213
|
replace?: boolean;
|
|
2175
|
-
|
|
4214
|
+
/** Whether the listener hears calls: before the method by default, `after` once it has run, `false` never. */
|
|
4215
|
+
notify?: boolean | 'after';
|
|
4216
|
+
/** Trims the receiver, arguments and phase each event sends, to cut crossing cost on hot methods. */
|
|
4217
|
+
payload?: NativeHookPayload<Receiver>;
|
|
2176
4218
|
};
|
|
4219
|
+
/** An installed Java hook; the plugin scope removes it on dispose. */
|
|
2177
4220
|
export type NativeJavaHookToken = {
|
|
4221
|
+
/** The id the loader issued, such as `hook-1`. */
|
|
2178
4222
|
readonly id: string;
|
|
2179
4223
|
};
|
|
4224
|
+
/** The Android bridge for hooking Java methods. Needs `native.java.hooks`. */
|
|
2180
4225
|
export type NativeJavaHooksBridge = {
|
|
2181
|
-
|
|
4226
|
+
/** Hooks the method whose parameter class names match `parameterTypes`, and sends each call to `listener`. */
|
|
4227
|
+
hook<Receiver extends boolean = true>(
|
|
2182
4228
|
className: string,
|
|
2183
4229
|
methodName: string,
|
|
2184
4230
|
parameterTypes: string[],
|
|
2185
|
-
options?: NativeJavaHookOptions
|
|
2186
|
-
listener?: (event: NativeJavaHookEvent) => void,
|
|
4231
|
+
options?: NativeJavaHookOptions<Receiver>,
|
|
4232
|
+
listener?: (event: NativeJavaHookEvent<Receiver>) => void,
|
|
2187
4233
|
): NativeJavaHookToken;
|
|
4234
|
+
/** Sets the result a `replace` hook returns for calls with this receiver and these arguments. */
|
|
2188
4235
|
setReturnValue(
|
|
2189
4236
|
token: NativeJavaHookToken,
|
|
2190
4237
|
self: NativeJavaValue,
|
|
2191
4238
|
args: NativeJavaValue[],
|
|
2192
4239
|
value: NativeJavaValue,
|
|
2193
4240
|
): void;
|
|
4241
|
+
/** Removes the result set for this receiver and these arguments. */
|
|
2194
4242
|
removeReturnValue(
|
|
2195
4243
|
token: NativeJavaHookToken,
|
|
2196
4244
|
self: NativeJavaValue,
|
|
2197
4245
|
args: NativeJavaValue[],
|
|
2198
4246
|
): void;
|
|
4247
|
+
/** Removes every result set on a hook. */
|
|
2199
4248
|
clearReturnValues(token: NativeJavaHookToken): void;
|
|
4249
|
+
/** Removes a hook. */
|
|
2200
4250
|
remove(token: NativeJavaHookToken): void;
|
|
2201
4251
|
};
|
|
4252
|
+
/** One method a Java class declares, from `java.describe`. */
|
|
2202
4253
|
export type NativeJavaMethodDescription = {
|
|
4254
|
+
/** The method name. */
|
|
2203
4255
|
name: string;
|
|
4256
|
+
/** The parameters' class names, in order, as `hooks.hook` takes them. */
|
|
2204
4257
|
parameters: string[];
|
|
4258
|
+
/** The return type's class name. */
|
|
2205
4259
|
returnType: string;
|
|
4260
|
+
/** Whether the method is static. */
|
|
2206
4261
|
static: boolean;
|
|
2207
4262
|
};
|
|
4263
|
+
/** A Java object, as a handle or as a tagged handle value from a result. */
|
|
2208
4264
|
export type NativeJavaReference = NativeJavaHandle | NativeJavaHandleValue;
|
|
4265
|
+
/** A Java value tagged with its type, as the Java bridge returns and accepts it. */
|
|
2209
4266
|
export type NativeJavaValue =
|
|
2210
4267
|
| {
|
|
2211
4268
|
type: 'null';
|
|
@@ -2237,171 +4294,410 @@ export type NativeJavaValue =
|
|
|
2237
4294
|
componentType: string;
|
|
2238
4295
|
value: (NativeJavaValue | NativeJavaHandle | string | number | boolean)[];
|
|
2239
4296
|
};
|
|
4297
|
+
/** How long main-thread crossings for one addon, kind and call label waited and ran. */
|
|
4298
|
+
export type NativeMainWaitCounts = {
|
|
4299
|
+
/** The id of the addon that made the crossings. */
|
|
4300
|
+
addon: string;
|
|
4301
|
+
/** How the caller crossed: blocking (`sync`), fire-and-forget (`posted`) or awaiting a promise (`async`). */
|
|
4302
|
+
kind: 'sync' | 'posted' | 'async' | 'unknown';
|
|
4303
|
+
/** The call label the crossings ran under, `(other)` once the table is full. */
|
|
4304
|
+
label: string;
|
|
4305
|
+
/** Crossings queued for the main thread. */
|
|
4306
|
+
posted: number;
|
|
4307
|
+
/** Crossings that began running on the main thread. */
|
|
4308
|
+
started: number;
|
|
4309
|
+
/** Crossings that finished running on the main thread. */
|
|
4310
|
+
finished: number;
|
|
4311
|
+
/** Crossings that timed out or were refused before they started. */
|
|
4312
|
+
expired: number;
|
|
4313
|
+
/** Total time between posting and starting on the main thread. */
|
|
4314
|
+
queuedMs: number;
|
|
4315
|
+
/** The longest wait between posting and starting. */
|
|
4316
|
+
maxQueuedMs: number;
|
|
4317
|
+
/** Total time spent running on the main thread. */
|
|
4318
|
+
runMs: number;
|
|
4319
|
+
/** The longest single run on the main thread. */
|
|
4320
|
+
maxRunMs: number;
|
|
4321
|
+
};
|
|
4322
|
+
/** Main-thread drains since launch or the last counter reset. */
|
|
4323
|
+
export type NativeMainWorkCounts = {
|
|
4324
|
+
/** Times the loader drained its main-thread queue. */
|
|
4325
|
+
drains: number;
|
|
4326
|
+
/** Work items run across every drain. */
|
|
4327
|
+
items: number;
|
|
4328
|
+
/** Total time spent draining. */
|
|
4329
|
+
drainMs: number;
|
|
4330
|
+
/** The longest single drain. */
|
|
4331
|
+
maxDrainMs: number;
|
|
4332
|
+
/** The most items one drain ran. */
|
|
4333
|
+
maxDrainItems: number;
|
|
4334
|
+
};
|
|
4335
|
+
/** The iOS bridge to the Objective-C runtime, scoped to the plugin's capabilities. */
|
|
2240
4336
|
export type NativeObjCBridge = {
|
|
4337
|
+
/** Looks up a class by name, or returns `null` when none is registered. */
|
|
2241
4338
|
getClass(name: string): NativeClassHandle | null;
|
|
4339
|
+
/** Allocates an instance and initializes it with `init`, UIKit classes on the main thread; use `create` for any other initializer. */
|
|
2242
4340
|
alloc(classOrName: string | NativeClassHandle): NativeObjectHandle;
|
|
4341
|
+
/** Allocates an uninitialized instance, UIKit classes on the main thread unless `options.thread` says otherwise, and returns what `initSelector` initializes; throws when that is nil. */
|
|
4342
|
+
create(
|
|
4343
|
+
classOrName: string | NativeClassHandle,
|
|
4344
|
+
initSelector: string,
|
|
4345
|
+
args?: unknown[],
|
|
4346
|
+
options?: NativeCallOptions,
|
|
4347
|
+
): NativeObjectHandle;
|
|
4348
|
+
/** Returns the class name of the object a handle refers to, or `null`. */
|
|
2243
4349
|
className(handle: NativeHandle): string | null;
|
|
4350
|
+
/** Checks whether the object responds to a selector. */
|
|
2244
4351
|
respondsTo(handle: NativeHandle, selector: string): boolean;
|
|
2245
|
-
|
|
4352
|
+
/** Sends a selector with its arguments on the current runtime thread. */
|
|
4353
|
+
call(handle: NativeHandle, selector: string, ...args: unknown[]): NativeObjCResult;
|
|
4354
|
+
/** Runs the implementation `currentClass`'s superclass provides, like `super` in Objective-C. */
|
|
2246
4355
|
callSuper(
|
|
2247
4356
|
handle: NativeObjectHandle,
|
|
2248
4357
|
currentClass: NativeClassHandle | string,
|
|
2249
4358
|
selector: string,
|
|
2250
4359
|
...args: unknown[]
|
|
2251
|
-
):
|
|
4360
|
+
): NativeObjCResult;
|
|
4361
|
+
/** Sends a selector on the thread `options.thread` names; `main` blocks, `main-post` queues `void` methods, so prefer `invokeAsync` or `main-post` for UI work. Ownership follows Cocoa naming: an `alloc`, `new`, `copy`, `mutableCopy` or `init` result is owned by its handle without an extra reference, and the receiver of an `init` selector stays valid. */
|
|
2252
4362
|
invoke(
|
|
2253
4363
|
handle: NativeObjectHandle,
|
|
2254
4364
|
selector: string,
|
|
2255
4365
|
args: unknown[],
|
|
2256
4366
|
options?: NativeCallOptions,
|
|
2257
|
-
):
|
|
4367
|
+
): NativeObjCResult;
|
|
4368
|
+
/** Sends a selector on the main thread and resolves with its result. Needs `native.objc.invokeAsync`. */
|
|
2258
4369
|
invokeAsync(
|
|
2259
4370
|
handle: NativeObjectHandle,
|
|
2260
4371
|
selector: string,
|
|
2261
4372
|
args: unknown[],
|
|
2262
|
-
): NativeCancelablePromise<
|
|
2263
|
-
|
|
4373
|
+
): NativeCancelablePromise<NativeObjCResult>;
|
|
4374
|
+
/** Resolves a selector's method signature on an object once, for repeated calls through `invokePrepared`. */
|
|
4375
|
+
prepare(handle: NativeHandle, selector: string): NativeObjCCallPlan;
|
|
4376
|
+
/** Calls a prepared selector on an object, on the thread `options.thread` names, like `invoke`. */
|
|
4377
|
+
invokePrepared(
|
|
4378
|
+
plan: NativeObjCCallPlan,
|
|
4379
|
+
handle: NativeHandle,
|
|
4380
|
+
args: unknown[],
|
|
4381
|
+
options?: NativeCallOptions,
|
|
4382
|
+
): NativeObjCResult;
|
|
4383
|
+
/** Calls a prepared selector on the main thread and resolves with its result, like `invokeAsync`. */
|
|
4384
|
+
invokePreparedAsync(
|
|
4385
|
+
plan: NativeObjCCallPlan,
|
|
4386
|
+
handle: NativeHandle,
|
|
4387
|
+
args: unknown[],
|
|
4388
|
+
): NativeCancelablePromise<NativeObjCResult>;
|
|
4389
|
+
/** Frees a call plan; using it afterwards throws. */
|
|
4390
|
+
disposePlan(plan: NativeObjCCallPlan): void;
|
|
4391
|
+
/** Runs dependent calls in one main-thread pass; a failed step rejects it without undoing earlier steps. */
|
|
4392
|
+
batch(steps: readonly NativeBatchStep[]): NativeCancelablePromise<NativeObjCResult[]>;
|
|
4393
|
+
/** Reads a `UIView` subtree in one main-thread pass, as a point-in-time list. Needs `native.objc.snapshot`. */
|
|
2264
4394
|
snapshot(
|
|
2265
4395
|
root: NativeObjectHandle,
|
|
2266
4396
|
options?: NativeViewSnapshotOptions,
|
|
2267
4397
|
): NativeCancelablePromise<NativeViewSnapshotNode[]>;
|
|
4398
|
+
/** Finds the views of a class under or above a view on the main thread. Needs `native.objc.snapshot`. */
|
|
2268
4399
|
findViews(
|
|
2269
4400
|
root: NativeObjectHandle,
|
|
2270
4401
|
className: string,
|
|
2271
4402
|
options?: NativeViewSearchOptions,
|
|
2272
4403
|
): NativeCancelablePromise<NativeObjectHandle[]>;
|
|
4404
|
+
/** Like `callSuper` with a thread policy; it cannot cross to the main thread synchronously. */
|
|
2273
4405
|
invokeSuper(
|
|
2274
4406
|
handle: NativeObjectHandle,
|
|
2275
4407
|
currentClass: NativeClassHandle | string,
|
|
2276
4408
|
selector: string,
|
|
2277
4409
|
args: unknown[],
|
|
2278
4410
|
options?: NativeCallOptions,
|
|
2279
|
-
):
|
|
4411
|
+
): NativeObjCResult;
|
|
4412
|
+
/** Runs the superclass implementation on the main thread and resolves with its result. */
|
|
2280
4413
|
invokeSuperAsync(
|
|
2281
4414
|
handle: NativeObjectHandle,
|
|
2282
4415
|
currentClass: NativeClassHandle | string,
|
|
2283
4416
|
selector: string,
|
|
2284
4417
|
args: unknown[],
|
|
2285
|
-
): NativeCancelablePromise<
|
|
2286
|
-
|
|
2287
|
-
|
|
4418
|
+
): NativeCancelablePromise<NativeObjCResult>;
|
|
4419
|
+
/** Reads an instance variable by name, such as `_viewModel`. */
|
|
4420
|
+
getIvar(handle: NativeObjectHandle, name: string): NativeObjCResult;
|
|
4421
|
+
/** Writes an instance variable by name. */
|
|
4422
|
+
setIvar(handle: NativeObjectHandle, name: string, value: NativeObjCResult): void;
|
|
4423
|
+
/** Creates a key for attaching a value to objects with `setAssociatedObject`. */
|
|
2288
4424
|
createAssociationKey(): NativeAssociationKey;
|
|
2289
|
-
|
|
4425
|
+
/** Reads the value attached to an object under a key. */
|
|
4426
|
+
getAssociatedObject(handle: NativeObjectHandle, key: NativeAssociationKey): NativeObjCResult;
|
|
4427
|
+
/** Attaches a value to an object; `null` clears it. `policy` is `assign`, `retain`, `copy`, `retainNonatomic` or `copyNonatomic`. */
|
|
2290
4428
|
setAssociatedObject(
|
|
2291
4429
|
handle: NativeObjectHandle,
|
|
2292
4430
|
key: NativeAssociationKey,
|
|
2293
|
-
value:
|
|
4431
|
+
value: NativeObjCResult,
|
|
2294
4432
|
policy?: string,
|
|
2295
4433
|
): void;
|
|
4434
|
+
/** Builds a registered struct, such as `CGRect` or `UIEdgeInsets`, to pass to native calls. */
|
|
2296
4435
|
struct<T extends NativeStructFields = NativeStructFields>(
|
|
2297
4436
|
name: string,
|
|
2298
4437
|
fields: T,
|
|
2299
4438
|
): NativeStruct<T>;
|
|
2300
|
-
|
|
4439
|
+
/** Converts an `NSArray` handle to a JavaScript array. */
|
|
4440
|
+
array(handle: NativeObjectHandle): NativeObjCResult[];
|
|
4441
|
+
/** Copies bytes into a new `NSData` object. */
|
|
2301
4442
|
data(value: ArrayBuffer | Uint8Array): NativeObjectHandle;
|
|
2302
|
-
hook
|
|
4443
|
+
/** Hooks a method by class and selector; handlers run in registration order, and the scope removes the hook on dispose. */
|
|
4444
|
+
hook<Receiver extends boolean = true>(
|
|
2303
4445
|
className: string,
|
|
2304
4446
|
selector: string,
|
|
2305
|
-
handlers: NativeHookHandlers
|
|
2306
|
-
options?: NativeHookOptions
|
|
4447
|
+
handlers: NativeHookHandlers<Receiver>,
|
|
4448
|
+
options?: NativeHookOptions<Receiver>,
|
|
2307
4449
|
): NativeHookToken;
|
|
2308
4450
|
};
|
|
4451
|
+
/** A selector and method signature resolved once by `objc.prepare`, for calling many times without the lookup. */
|
|
4452
|
+
export type NativeObjCCallPlan = NativeHandle & {
|
|
4453
|
+
readonly [nativeObjCCallPlan]: true;
|
|
4454
|
+
};
|
|
4455
|
+
/** What an Objective-C call returns: a plain value, a handle to an object, a 64-bit integer, or nothing for `void`. */
|
|
4456
|
+
export type NativeObjCResult = NativeSerializable | NativeHandle | bigint | undefined;
|
|
4457
|
+
/** A retained handle to an Objective-C object. */
|
|
2309
4458
|
export type NativeObjectHandle = NativeHandle;
|
|
4459
|
+
/** Loader helpers for verifying and loading installed addons. */
|
|
2310
4460
|
export type NativePlatformAddons = {
|
|
2311
4461
|
/** Checks a manifest's `signature` against its bundle. */
|
|
2312
4462
|
verify(manifest: string, bundle: string): NativeAddonVerification;
|
|
2313
4463
|
/** Evaluates an installed plugin's bundle compiled for this bytecode version, if its digest matches the manifest. */
|
|
2314
|
-
evaluateBytecode
|
|
2315
|
-
|
|
4464
|
+
evaluateBytecode(folder: string, bytecodeVersion: number): NativeCompiledPlugin | undefined;
|
|
4465
|
+
/** Reads an installed plugin's source, for one the loader handed over without it, if its signature still holds. */
|
|
4466
|
+
readSource(folder: string): string | undefined;
|
|
4467
|
+
};
|
|
4468
|
+
/** Android-only helpers; missing on iOS. */
|
|
4469
|
+
export type NativePlatformAndroidBridge = {
|
|
4470
|
+
/** Installs patched Discord builds over this one. */
|
|
4471
|
+
readonly installer: NativePlatformAndroidInstaller;
|
|
4472
|
+
};
|
|
4473
|
+
/** Installs another patched Discord build over this one, upgrade or downgrade, downloading only the splits that differ. */
|
|
4474
|
+
export type NativePlatformAndroidInstaller = {
|
|
4475
|
+
/** Reads whether in-app installs work and which Discord is installed. */
|
|
4476
|
+
status(): NativeAndroidInstallerStatus;
|
|
4477
|
+
/** Opens the system's "Install unknown apps" screen for Discord. */
|
|
4478
|
+
requestPermission(): boolean;
|
|
4479
|
+
/** SHA-256 of each installed split APK, `null` where it cannot be read. */
|
|
4480
|
+
installedSplits(): Promise<Record<string, string | null>>;
|
|
4481
|
+
/** Starts installing a build in the background; false when an install is already running. Poll `progress`. */
|
|
4482
|
+
install(splits: readonly NativeAndroidInstallSplit[]): boolean;
|
|
4483
|
+
/** Reads how far the running install is. */
|
|
4484
|
+
progress(): NativeAndroidInstallProgress;
|
|
4485
|
+
/** Stops a running download or abandons the install session. */
|
|
4486
|
+
cancel(): boolean;
|
|
4487
|
+
};
|
|
4488
|
+
/** Facts about the Discord install the loader runs in. */
|
|
2316
4489
|
export type NativePlatformApp = {
|
|
4490
|
+
/** Where Discord was installed from, such as `App Store` or `Google Play`. */
|
|
2317
4491
|
getAppSource(): string;
|
|
2318
|
-
/**
|
|
2319
|
-
|
|
4492
|
+
/** The framework that injected the loader, such as Vector or LSPosed on Android and ElleKit on iOS, or an empty string. */
|
|
4493
|
+
getFramework(): string;
|
|
4494
|
+
/** Whether the loader's embedded attestation verified against Unbound's pinned key. False for development builds. */
|
|
4495
|
+
isVerifiedBuild(): boolean;
|
|
4496
|
+
/** True for the first caller in this process; a reloaded runtime sees false. */
|
|
4497
|
+
claimLaunchURL(): boolean;
|
|
2320
4498
|
};
|
|
4499
|
+
/** Platform-wide helpers the loader publishes as `globalThis.NativePlatform`, not scoped to a plugin. */
|
|
2321
4500
|
export type NativePlatformBridge = {
|
|
4501
|
+
/** The host platform. */
|
|
2322
4502
|
readonly platform: NativePluginPlatform;
|
|
4503
|
+
/** Evaluates Hermes bytecode in the current runtime; `tag` names it in errors. Throws on invalid bytecode. */
|
|
2323
4504
|
evaluateBytecode(bytecode: ArrayBuffer, tag?: string): unknown;
|
|
4505
|
+
/** Facts about the device. */
|
|
2324
4506
|
readonly device: NativePlatformDevice;
|
|
4507
|
+
/** Facts about the Discord install. */
|
|
2325
4508
|
readonly app: NativePlatformApp;
|
|
4509
|
+
/** File removal in the Unbound folder; missing when the loader has no documents directory. */
|
|
2326
4510
|
readonly files?: NativePlatformFiles;
|
|
4511
|
+
/** Crash and freeze attribution for addons; missing when the loader has no documents directory. */
|
|
2327
4512
|
readonly crashGuard?: NativePlatformCrashGuard;
|
|
4513
|
+
/** The native settings file; missing when the loader does not manage settings. */
|
|
2328
4514
|
readonly settings?: NativePlatformSettings;
|
|
4515
|
+
/** The font list; missing when the loader cannot list fonts. */
|
|
2329
4516
|
readonly fonts?: NativePlatformFonts;
|
|
2330
|
-
|
|
4517
|
+
/** Addon verification and bytecode loading. */
|
|
4518
|
+
readonly addons: NativePlatformAddons;
|
|
4519
|
+
/** Hermes' sampling profiler. */
|
|
4520
|
+
readonly profiler: NativePlatformProfiler;
|
|
4521
|
+
/** iOS-only helpers; missing on Android. */
|
|
2331
4522
|
readonly ios?: NativePlatformIOSBridge;
|
|
4523
|
+
/** Android-only helpers; missing on iOS and on loaders without the in-app installer. */
|
|
4524
|
+
readonly android?: NativePlatformAndroidBridge;
|
|
2332
4525
|
};
|
|
4526
|
+
/** The loader's record of which addon was starting or running when Discord crashed, kept across launches. */
|
|
2333
4527
|
export type NativePlatformCrashGuard = {
|
|
4528
|
+
/** Marks an addon as starting, by crash guard key and display name, so a crash during its start is blamed on it. */
|
|
2334
4529
|
begin(id: string, name: string): boolean;
|
|
4530
|
+
/** Clears the start marker once the addon's start has returned. */
|
|
2335
4531
|
end(id: string): boolean;
|
|
4532
|
+
/** Lists the addons the loader disabled after crashes on consecutive launches. */
|
|
2336
4533
|
disabled(): NativeCrashedAddon[];
|
|
2337
|
-
|
|
2338
|
-
|
|
4534
|
+
/** Registers an addon for crash attribution and returns its slot, or 0 when the loader cannot attribute crashes. */
|
|
4535
|
+
register(id: string, name: string): number;
|
|
4536
|
+
/** Returns a 4-byte buffer shared with the loader that holds the running addon's slot, or `undefined` when unavailable. */
|
|
4537
|
+
activity(): ArrayBuffer | undefined;
|
|
2339
4538
|
};
|
|
4539
|
+
/** Facts about the device Discord runs on. */
|
|
2340
4540
|
export type NativePlatformDevice = {
|
|
4541
|
+
/** The host platform. */
|
|
2341
4542
|
readonly platform: NativePluginPlatform;
|
|
4543
|
+
/** The device's model name. */
|
|
2342
4544
|
getDeviceModel(): string;
|
|
4545
|
+
/** The operating system's version. */
|
|
2343
4546
|
getOSVersionString(): string;
|
|
4547
|
+
/** Whether the device is jailbroken on iOS or has an `su` binary on Android. */
|
|
2344
4548
|
isRooted(): boolean;
|
|
4549
|
+
/** The active iOS jailbreak's name, such as `Dopamine 2.4`, or an empty string on Android and when none is found; older loaders lack it. */
|
|
4550
|
+
getJailbreak?(): string;
|
|
4551
|
+
/** Whether Discord is installed as a system app. */
|
|
2345
4552
|
isSystemApp(): boolean;
|
|
4553
|
+
/** Whether Discord runs in a simulator, emulator or virtual machine. */
|
|
2346
4554
|
isVirtualDevice(): boolean;
|
|
2347
4555
|
};
|
|
4556
|
+
/** File operations inside the Unbound folder in Discord's documents directory. */
|
|
2348
4557
|
export type NativePlatformFiles = {
|
|
4558
|
+
/** Removes a file or folder tree, by path relative to the Unbound folder; returns whether anything was removed. */
|
|
2349
4559
|
remove(path: string): boolean;
|
|
2350
4560
|
};
|
|
4561
|
+
/** The fonts the loader can apply. */
|
|
2351
4562
|
export type NativePlatformFonts = {
|
|
4563
|
+
/** Lists font addons first, then app and system fonts, without duplicate names. */
|
|
2352
4564
|
list(): NativeFontEntry[];
|
|
2353
4565
|
};
|
|
4566
|
+
/** iOS-only facts about Discord's code signature. */
|
|
2354
4567
|
export type NativePlatformIOSBridge = {
|
|
2355
|
-
|
|
4568
|
+
/** Discord's code-signing entitlements, as an object. */
|
|
2356
4569
|
getEntitlements(): NativeSerializableObject;
|
|
4570
|
+
/** Discord's code-signing entitlements, as plist text. */
|
|
2357
4571
|
getEntitlementsAsPlist(): string;
|
|
2358
4572
|
};
|
|
4573
|
+
/** Hermes' sampling profiler, shared with the loader's freeze watchdog. */
|
|
4574
|
+
export type NativePlatformProfiler = {
|
|
4575
|
+
/** Starts sampling; `false` when the profiler is missing or already running. */
|
|
4576
|
+
start(): boolean;
|
|
4577
|
+
/** Stops sampling and returns the Chrome trace it recorded, or `undefined` when it was not running. */
|
|
4578
|
+
stop(): string | undefined;
|
|
4579
|
+
};
|
|
4580
|
+
/** The loader's native settings file, which holds every Bucket. */
|
|
2359
4581
|
export type NativePlatformSettings = {
|
|
4582
|
+
/** Applies changes and writes the file at once; false when the changes are malformed or the write failed. */
|
|
2360
4583
|
apply(changes: readonly NativeSettingsChange[]): boolean;
|
|
2361
|
-
|
|
4584
|
+
/** Applies changes in memory, to be written by `flush`. */
|
|
4585
|
+
stage(changes: readonly NativeSettingsChange[]): boolean;
|
|
4586
|
+
/** Writes staged changes to the file, if any. */
|
|
4587
|
+
flush(): boolean;
|
|
4588
|
+
/** Reads every Bucket with no arguments, one Bucket with `store`, or one dot-path `key`; `undefined` when unset. */
|
|
4589
|
+
get(store?: string, key?: string): NativeSerializable | undefined;
|
|
4590
|
+
};
|
|
4591
|
+
/** The native bridge a plugin reaches through `context.native`, gated by the capabilities it declares. */
|
|
2362
4592
|
export type NativePluginBridge = {
|
|
4593
|
+
/** The version of the JavaScript API plugins use, compared with a manifest's `minNativePluginApi`. */
|
|
2363
4594
|
readonly apiVersion: string;
|
|
4595
|
+
/** The version of the native ABI the loader implements. */
|
|
2364
4596
|
readonly abiVersion: string;
|
|
4597
|
+
/** Every capability this loader build provides, not only the ones the plugin declares. */
|
|
2365
4598
|
readonly capabilities: readonly NativePluginCapability[];
|
|
4599
|
+
/** The Objective-C runtime; iOS only. */
|
|
2366
4600
|
readonly objc: NativeObjCBridge;
|
|
4601
|
+
/** Raw calls to C functions. */
|
|
2367
4602
|
readonly ffi: NativeFFIBridge;
|
|
4603
|
+
/** React Native surfaces mounted in native views. */
|
|
2368
4604
|
readonly fabric: NativeFabricBridge;
|
|
4605
|
+
/** Subscriptions to Discord activity. */
|
|
2369
4606
|
readonly runtime: NativeRuntimeBridge;
|
|
4607
|
+
/** Java reflection; Android only. */
|
|
2370
4608
|
readonly java: NativeJavaBridge;
|
|
4609
|
+
/** Java method hooks; Android only. */
|
|
2371
4610
|
readonly hooks: NativeJavaHooksBridge;
|
|
4611
|
+
/** Debugger support. */
|
|
2372
4612
|
readonly debug: NativeDebugBridge;
|
|
4613
|
+
/** Worklets on the UI runtime. */
|
|
4614
|
+
readonly ui: NativeUIBridge;
|
|
2373
4615
|
};
|
|
4616
|
+
/** A named permission to use one part of the native bridge, declared in an addon's manifest. */
|
|
2374
4617
|
export type NativePluginCapability = (typeof NATIVE_PLUGIN_CAPABILITIES)[number];
|
|
4618
|
+
/** The shape of an error the native bridge or its plugin scope throws. */
|
|
2375
4619
|
export type NativePluginError = {
|
|
4620
|
+
/** Which failure it is; native failures without their own code use `NATIVE_BRIDGE_ERROR`. */
|
|
2376
4621
|
code: NativePluginErrorCode;
|
|
4622
|
+
/** A human-readable description. */
|
|
2377
4623
|
message: string;
|
|
4624
|
+
/** The capability the plugin lacks, for `NATIVE_PLUGIN_CAPABILITY_DENIED`. */
|
|
2378
4625
|
capability?: NativePluginCapability;
|
|
2379
4626
|
};
|
|
4627
|
+
/** The stable `code` on an error the native bridge or its plugin scope throws. */
|
|
2380
4628
|
export type NativePluginErrorCode =
|
|
2381
4629
|
| 'NATIVE_BRIDGE_ERROR'
|
|
2382
4630
|
| 'NATIVE_PLUGIN_API_VERSION_UNSUPPORTED'
|
|
4631
|
+
| 'NATIVE_PLUGIN_CALL_CANCELLED'
|
|
4632
|
+
| 'NATIVE_PLUGIN_CALL_TIMEOUT'
|
|
2383
4633
|
| 'NATIVE_PLUGIN_CAPABILITY_DENIED'
|
|
2384
4634
|
| 'NATIVE_PLUGIN_SCOPE_DISPOSED'
|
|
2385
4635
|
| 'NATIVE_PLUGIN_UNAVAILABLE';
|
|
2386
|
-
|
|
4636
|
+
/** A native bridge method by the path a plugin calls it through, such as `objc.invoke`. */
|
|
4637
|
+
export type NativePluginMethod = {
|
|
4638
|
+
[N in NativePluginNamespace]: `${N}.${keyof NativePluginBridge[N] & string}`;
|
|
4639
|
+
}[NativePluginNamespace];
|
|
4640
|
+
/** A {@link NativePluginBridge} namespace whose methods a plugin calls, such as `objc` or `java`. */
|
|
4641
|
+
export type NativePluginNamespace = Exclude<
|
|
4642
|
+
keyof NativePluginBridge,
|
|
4643
|
+
'apiVersion' | 'abiVersion' | 'capabilities' | 'ui'
|
|
4644
|
+
>;
|
|
4645
|
+
/** A host platform the loader reports, `ios` or `android`. */
|
|
4646
|
+
export type NativePluginPlatform = (typeof NATIVE_PLUGIN_PLATFORMS)[number];
|
|
4647
|
+
/** A capability the native bridge on platform `P` provides. */
|
|
4648
|
+
export type NativePluginPlatformCapability<P extends NativePluginPlatform> =
|
|
4649
|
+
(typeof NATIVE_PLUGIN_PLATFORM_CAPABILITIES)[P][number];
|
|
4650
|
+
/** The raw bridge the loader publishes as `globalThis.NativePlugin`; `objc` exists only on iOS, `java` and `hooks` only on Android. */
|
|
2387
4651
|
export type NativePluginRuntimeBridge = Pick<
|
|
2388
4652
|
NativePluginBridge,
|
|
2389
|
-
'apiVersion' | 'abiVersion' | 'capabilities'
|
|
4653
|
+
'apiVersion' | 'abiVersion' | 'capabilities' | 'ffi' | 'fabric' | 'debug'
|
|
2390
4654
|
> &
|
|
2391
|
-
Partial<
|
|
4655
|
+
Partial<Pick<NativePluginBridge, 'hooks'>> & {
|
|
4656
|
+
readonly objc?: LoaderObjCBridge;
|
|
4657
|
+
readonly java?: NativeJavaBridge & NativeUIScopeFactory;
|
|
4658
|
+
};
|
|
4659
|
+
/** A handle to a native symbol's address, from `ffi.symbol`; `ffi.call` accepts only these. */
|
|
2392
4660
|
export type NativePointer = NativeHandle;
|
|
4661
|
+
/** How many native resources the loader holds across every plugin. */
|
|
2393
4662
|
export type NativeResourceCounts = {
|
|
4663
|
+
/** Installed hooks. */
|
|
2394
4664
|
hooks: number;
|
|
4665
|
+
/** Mounted Fabric surfaces. */
|
|
2395
4666
|
surfaces: number;
|
|
4667
|
+
/** Hook return values set with `setReturnValue`. */
|
|
2396
4668
|
cachedReturns: number;
|
|
4669
|
+
/** Handles still referenced from JavaScript: leases plus the platform's own handle count. */
|
|
2397
4670
|
handles: number;
|
|
2398
|
-
|
|
4671
|
+
/** Handle leases JavaScript still holds. */
|
|
4672
|
+
leases: number;
|
|
4673
|
+
/** Live Objective-C value handles; iOS only, 0 elsewhere. */
|
|
4674
|
+
objcHandles: number;
|
|
4675
|
+
/** Prepared Objective-C call plans; iOS only, 0 elsewhere. */
|
|
4676
|
+
objcPlans: number;
|
|
4677
|
+
/** Objective-C objects the loader retains internally; iOS only, 0 elsewhere. */
|
|
4678
|
+
objcRetains: number;
|
|
4679
|
+
/** Java objects with a live handle; Android only, 0 elsewhere. */
|
|
4680
|
+
javaHandles: number;
|
|
4681
|
+
/** Pooled Fabric surfaces waiting to be reused. */
|
|
4682
|
+
idleSurfaces: number;
|
|
4683
|
+
/** Fabric surfaces created since launch. */
|
|
4684
|
+
createdSurfaces: number;
|
|
4685
|
+
/** Fabric surfaces reused from the pool since launch. */
|
|
4686
|
+
reusedSurfaces: number;
|
|
4687
|
+
/** Batches of main-thread work the loader drained. */
|
|
4688
|
+
mainWork: NativeMainWorkCounts;
|
|
4689
|
+
/** Main-thread crossings per addon, kind and call label, busiest first. */
|
|
4690
|
+
mainWaits: NativeMainWaitCounts[];
|
|
4691
|
+
};
|
|
4692
|
+
/** Delivers Discord activity to plugins. Needs `native.runtime.events`. */
|
|
2399
4693
|
export type NativeRuntimeBridge = {
|
|
4694
|
+
/** Calls `listener` with a serializable payload each time the event happens. */
|
|
2400
4695
|
subscribe(
|
|
2401
4696
|
event: NativeRuntimeEventName,
|
|
2402
4697
|
listener: (payload: NativeSerializableObject) => void,
|
|
2403
4698
|
): NativeRuntimeEventToken;
|
|
2404
4699
|
};
|
|
4700
|
+
/** A Discord activity a plugin can subscribe to; the client derives each from Flux actions, such as `MESSAGE_CREATE`. */
|
|
2405
4701
|
export type NativeRuntimeEventName =
|
|
2406
4702
|
| 'message.created'
|
|
2407
4703
|
| 'message.updated'
|
|
@@ -2410,8 +4706,11 @@ export type NativeRuntimeEventName =
|
|
|
2410
4706
|
| 'channel.changed'
|
|
2411
4707
|
| 'composer.changed'
|
|
2412
4708
|
| 'ui.changed';
|
|
4709
|
+
/** A runtime event subscription; the plugin scope removes it on dispose. */
|
|
2413
4710
|
export type NativeRuntimeEventToken = {
|
|
4711
|
+
/** False once the subscription is removed. */
|
|
2414
4712
|
readonly active: boolean;
|
|
4713
|
+
/** Stops the listener receiving events. */
|
|
2415
4714
|
remove(): void;
|
|
2416
4715
|
};
|
|
2417
4716
|
/** A value the bridge serializes by structure, such as Fabric surface props or a plist. */
|
|
@@ -2422,9 +4721,11 @@ export type NativeSerializable =
|
|
|
2422
4721
|
| null
|
|
2423
4722
|
| NativeSerializable[]
|
|
2424
4723
|
| NativeSerializableObject;
|
|
4724
|
+
/** A plain object of serializable values, such as a runtime event payload. */
|
|
2425
4725
|
export type NativeSerializableObject = {
|
|
2426
4726
|
[key: string]: NativeSerializable;
|
|
2427
4727
|
};
|
|
4728
|
+
/** One change to a Bucket: set a key, remove a key, or clear the whole Bucket. Keys are dot paths. */
|
|
2428
4729
|
export type NativeSettingsChange =
|
|
2429
4730
|
| {
|
|
2430
4731
|
store: string;
|
|
@@ -2440,35 +4741,95 @@ export type NativeSettingsChange =
|
|
|
2440
4741
|
store: string;
|
|
2441
4742
|
clear: true;
|
|
2442
4743
|
};
|
|
4744
|
+
/** A registered C struct, such as `CGRect`, built by `objc.struct` or returned from a native call. */
|
|
2443
4745
|
export type NativeStruct<T extends NativeStructFields = NativeStructFields> = {
|
|
2444
4746
|
readonly name: string;
|
|
2445
4747
|
readonly value?: T;
|
|
2446
4748
|
} & NativeHandle;
|
|
2447
4749
|
/** A C struct field: a scalar, a pointer or object, or a nested struct. */
|
|
2448
4750
|
export type NativeStructField = number | boolean | NativeHandle | NativeStructFields;
|
|
4751
|
+
/** A struct's field values by field name. */
|
|
2449
4752
|
export type NativeStructFields = {
|
|
2450
4753
|
[field: string]: NativeStructField;
|
|
2451
4754
|
};
|
|
2452
|
-
|
|
4755
|
+
/**
|
|
4756
|
+
* Where a native call runs: `current` is the calling thread; `main` blocks until the main thread runs it;
|
|
4757
|
+
* `main-post` queues a `void` method on main and logs its failure, and blocks like `main` otherwise.
|
|
4758
|
+
*/
|
|
4759
|
+
export type NativeThreadPolicy = 'current' | 'main' | 'main-post';
|
|
4760
|
+
/** A value a worklet can take from the JS runtime: a serializable value, a UI scope, which is shared as is, or a callback into the JS thread. */
|
|
4761
|
+
export type NativeUIArgument = NativeSerializable | NativeUIScope | NativeUICallback;
|
|
4762
|
+
/** Runs plugin worklets on the UI runtime, where native views live, so hooks there act before the next frame. */
|
|
4763
|
+
export type NativeUIBridge = {
|
|
4764
|
+
/** Opens a scope with every synchronous method the plugin's capabilities allow; capture it in a worklet. */
|
|
4765
|
+
createScope(): NativeUIScope;
|
|
4766
|
+
/** Runs a worklet on the UI runtime and resolves with what it returns, which must be serializable. */
|
|
4767
|
+
call<A extends NativeUIArgument[], R extends NativeSerializable | void>(
|
|
4768
|
+
worklet: (...args: A) => R,
|
|
4769
|
+
...args: A
|
|
4770
|
+
): NativeCancelablePromise<R>;
|
|
4771
|
+
/** Queues a worklet on the UI runtime. */
|
|
4772
|
+
run<A extends NativeUIArgument[]>(worklet: (...args: A) => void, ...args: A): void;
|
|
4773
|
+
/** Wraps a JS-thread listener so a worklet can call it, for example to wake JS only for the hook events that need it; it stops calling the listener once the plugin stops. */
|
|
4774
|
+
callback<A extends NativeSerializable[]>(listener: (...args: A) => void): NativeUICallback<A>;
|
|
4775
|
+
};
|
|
4776
|
+
/** A function a worklet calls on the UI runtime to hand serializable values to a listener on the JS thread, made with `callback`. */
|
|
4777
|
+
export type NativeUICallback<A extends NativeSerializable[] = NativeSerializable[]> = {
|
|
4778
|
+
call(...args: A): void;
|
|
4779
|
+
}['call'];
|
|
4780
|
+
/** The bridge methods a plugin may call from the UI runtime, synchronously and on the main thread. */
|
|
4781
|
+
export type NativeUIScope = {
|
|
4782
|
+
/** The Objective-C methods the scope allows; present on iOS. */
|
|
4783
|
+
readonly objc?: NativeObjCBridge;
|
|
4784
|
+
/** The Java methods the scope allows; present on Android. */
|
|
4785
|
+
readonly java?: NativeJavaBridge;
|
|
4786
|
+
/** The Java hook methods the scope allows; present on Android. Listeners run inline for calls on the main thread. */
|
|
4787
|
+
readonly hooks?: NativeJavaHooksBridge;
|
|
4788
|
+
/** Removes every hook the scope installed. */
|
|
4789
|
+
dispose(): void;
|
|
4790
|
+
};
|
|
4791
|
+
/** The loader's way to open UI-runtime scopes, offered on its raw `objc` namespace on iOS and `java` on Android. */
|
|
4792
|
+
export type NativeUIScopeFactory = {
|
|
4793
|
+
/** Opens a UI-runtime scope allowed only the listed method paths, such as `objc.invoke`. */
|
|
4794
|
+
createUIScope(paths: readonly string[]): NativeUIScope;
|
|
4795
|
+
};
|
|
4796
|
+
/** Limits and direction for a breadth-first `findViews` search; larger limits are clamped. */
|
|
2453
4797
|
export type NativeViewSearchOptions = {
|
|
4798
|
+
/** How many levels to walk from the root. Defaults to 24, at most 128. */
|
|
2454
4799
|
maxDepth?: number;
|
|
4800
|
+
/** How many views to visit. Defaults to 512, at most 8,192. */
|
|
2455
4801
|
maxVisited?: number;
|
|
4802
|
+
/** How many matches to return. Defaults to 64, at most 256. */
|
|
2456
4803
|
maxResults?: number;
|
|
4804
|
+
/** Matches only views attached to a window. */
|
|
2457
4805
|
attachedOnly?: boolean;
|
|
4806
|
+
/** Skips the views beneath a match. */
|
|
2458
4807
|
stopAtMatch?: boolean;
|
|
4808
|
+
/** `ancestors` walks up the superview chain instead of down. Defaults to `descendants`. */
|
|
2459
4809
|
direction?: 'ancestors' | 'descendants';
|
|
2460
4810
|
};
|
|
4811
|
+
/** One view in an `objc.snapshot` result, which lists views in breadth-first order. */
|
|
2461
4812
|
export type NativeViewSnapshotNode = {
|
|
4813
|
+
/** A retained handle to the view; discard it after cell reuse or a channel change. */
|
|
2462
4814
|
view: NativeObjectHandle;
|
|
4815
|
+
/** The index of the parent node in the result, or -1 for the root. */
|
|
2463
4816
|
parent: number;
|
|
4817
|
+
/** Levels below the root, which is 0. */
|
|
2464
4818
|
depth: number;
|
|
4819
|
+
/** The view's Objective-C class name. */
|
|
2465
4820
|
className: string;
|
|
4821
|
+
/** The view's `frame` in its superview's coordinates, in points. */
|
|
2466
4822
|
frame: NativeFabricFrame;
|
|
4823
|
+
/** The view's `text` when it has a string one, such as a `UILabel`'s, else `null`. */
|
|
2467
4824
|
text: string | null;
|
|
4825
|
+
/** Whether the view is not hidden, has a non-zero alpha and is in a window. */
|
|
2468
4826
|
visible: boolean;
|
|
2469
4827
|
};
|
|
4828
|
+
/** Limits for `objc.snapshot`; larger values are clamped and non-integers rejected. */
|
|
2470
4829
|
export type NativeViewSnapshotOptions = {
|
|
4830
|
+
/** How many levels below the root to read. Defaults to 8, at most 12. */
|
|
2471
4831
|
maxDepth?: number;
|
|
4832
|
+
/** How many views to return. Defaults to 100, at most 256. */
|
|
2472
4833
|
maxNodes?: number;
|
|
2473
4834
|
};
|
|
2474
4835
|
export type NavScrimComponent = React$1.ComponentType<NavScrimProps>;
|
|
@@ -2477,12 +4838,19 @@ export type NavScrimComponent = React$1.ComponentType<NavScrimProps>;
|
|
|
2477
4838
|
* @see design/components/Navigator/native/NavScrim.ios.tsx
|
|
2478
4839
|
*/
|
|
2479
4840
|
export type NavScrimProps = {};
|
|
4841
|
+
/** A screen's handle on Discord's React Navigation stack, as `useNavigation` returns it. */
|
|
2480
4842
|
export type Navigation<T = any> = {
|
|
4843
|
+
/** Pushes a new screen for `route` with `params` onto the stack. */
|
|
2481
4844
|
push: (route: string, params?: T) => void;
|
|
4845
|
+
/** Removes the top screen from the stack. */
|
|
2482
4846
|
pop: () => void;
|
|
4847
|
+
/** Goes to `route`, reusing a screen already on the stack for it. */
|
|
2483
4848
|
navigate: (route: string, params?: T) => void;
|
|
4849
|
+
/** Returns to the previous screen. */
|
|
2484
4850
|
goBack: () => void;
|
|
4851
|
+
/** Updates the current screen's header options. */
|
|
2485
4852
|
setOptions: (options: NavigationOptions) => void;
|
|
4853
|
+
/** Subscribes to a navigation event, such as `focus`; returns a function that unsubscribes. */
|
|
2486
4854
|
addListener: (event: string, callback: DiscordFunction) => DiscordFunction<void>;
|
|
2487
4855
|
};
|
|
2488
4856
|
/**
|
|
@@ -2510,7 +4878,9 @@ export type NavigationContainerInnerProps = Omit<
|
|
|
2510
4878
|
};
|
|
2511
4879
|
/** The screen options accepted by {@link Navigation.setOptions}. */
|
|
2512
4880
|
export type NavigationOptions = {
|
|
4881
|
+
/** The header title. */
|
|
2513
4882
|
title?: string;
|
|
4883
|
+
/** Renders the element shown at the header's right edge. */
|
|
2514
4884
|
headerRight?: DiscordFunction<React$1.ReactNode>;
|
|
2515
4885
|
};
|
|
2516
4886
|
/**
|
|
@@ -2597,6 +4967,16 @@ export type NewInlineNoticeProps = {
|
|
|
2597
4967
|
title?: DesignTextProps['children'];
|
|
2598
4968
|
type?: 'info' | 'warning' | (string & {});
|
|
2599
4969
|
};
|
|
4970
|
+
/**
|
|
4971
|
+
* Design components newer than the Discord build the generated types describe, typed by hand from Discord 352's
|
|
4972
|
+
* sources. Regenerating the types from 352 or later makes these generated; then drop them here.
|
|
4973
|
+
*/
|
|
4974
|
+
export type NewerDesignComponents = {
|
|
4975
|
+
/** Discord's search field: a `TextField` with a search icon, clear button and search return key. */
|
|
4976
|
+
SearchBar: DesignBarrelComponents['TextField'];
|
|
4977
|
+
/** Discord's status label, such as New or Beta, or custom text. */
|
|
4978
|
+
Badge: React$1.ComponentType<BadgeProps>;
|
|
4979
|
+
};
|
|
2600
4980
|
export type NitroGem12LottieComponent = React$1.ComponentType<
|
|
2601
4981
|
NitroGem12LottieProps & Record<string, unknown>
|
|
2602
4982
|
>;
|
|
@@ -2687,6 +5067,13 @@ export type NitroGem9LottieComponent = React$1.ComponentType<
|
|
|
2687
5067
|
export type NitroGem9LottieProps = Omit<LottieIconProps, 'ref'> & {
|
|
2688
5068
|
ref?: LottieIconProps['ref'];
|
|
2689
5069
|
};
|
|
5070
|
+
/** A notice row: it stores nothing, and shows `title` and `subtitle` as a message of its `tone`. */
|
|
5071
|
+
export type NoticeSchema = SettingCommon & {
|
|
5072
|
+
kind: 'notice';
|
|
5073
|
+
displayAs: 'notice';
|
|
5074
|
+
/** How the message reads: `info` plain, `warning` cautious, `danger` for something that cannot be undone. */
|
|
5075
|
+
tone: 'info' | 'warning' | 'danger';
|
|
5076
|
+
};
|
|
2690
5077
|
export type NotificationsTabLottieComponent = React$1.ComponentType<
|
|
2691
5078
|
NotificationsTabLottieProps & Record<string, unknown>
|
|
2692
5079
|
>;
|
|
@@ -2748,17 +5135,27 @@ export type PlainTextExperimentProviderProps = {
|
|
|
2748
5135
|
children?: React$1.ReactNode;
|
|
2749
5136
|
enabled?: boolean;
|
|
2750
5137
|
};
|
|
5138
|
+
/** What the addon manager passes to a plugin's `start`. */
|
|
2751
5139
|
export type PluginContext = {
|
|
5140
|
+
/** The plugin's manifest. */
|
|
2752
5141
|
readonly manifest: AddonManifest;
|
|
5142
|
+
/** The plugin's id, from its manifest. */
|
|
2753
5143
|
readonly id: string;
|
|
5144
|
+
/** The host platform, or `undefined` when the loader reports none. */
|
|
2754
5145
|
readonly platform?: NativePluginPlatform;
|
|
5146
|
+
/** The capabilities the manifest declares for this platform; `native` allows only these. */
|
|
2755
5147
|
readonly capabilities: readonly NativePluginCapability[];
|
|
5148
|
+
/** The native bridge, scoped to the plugin's capabilities. */
|
|
2756
5149
|
readonly native: NativePluginBridge;
|
|
5150
|
+
/** Releases the plugin's hooks, surfaces, handles and subscriptions; the addon manager calls it on stop, unload, reload or a failed start. */
|
|
2757
5151
|
dispose(): void;
|
|
2758
5152
|
};
|
|
2759
|
-
/**
|
|
2760
|
-
export type
|
|
2761
|
-
|
|
5153
|
+
/** What a plugin's self-test found: whether the plugin works on this device, and why. */
|
|
5154
|
+
export type PluginSelfTestResult = {
|
|
5155
|
+
/** `true` when the plugin works on this device. */
|
|
5156
|
+
ok: boolean;
|
|
5157
|
+
/** A human-readable reason for the result. */
|
|
5158
|
+
detail: string;
|
|
2762
5159
|
};
|
|
2763
5160
|
/**
|
|
2764
5161
|
* Props of `PostponeRender` (function). Exports: PostponeRender.
|
|
@@ -2812,6 +5209,8 @@ export type PressableOpacityProps = Omit<PressableBaseProps, 'activeOpacity' | '
|
|
|
2812
5209
|
activeOpacity?: PressableBaseProps['activeOpacity'];
|
|
2813
5210
|
ref?: PressableBaseProps['innerRef'];
|
|
2814
5211
|
};
|
|
5212
|
+
/** A value that is not an object or a function. */
|
|
5213
|
+
export type Primitive = string | number | boolean | bigint | null | undefined;
|
|
2815
5214
|
export type PromoSheetComponent = React$1.ComponentType<PromoSheetProps & Record<string, unknown>>;
|
|
2816
5215
|
/**
|
|
2817
5216
|
* Props of `PromoSheet` (function). Exports: PromoSheet.
|
|
@@ -2828,6 +5227,20 @@ export type PromoSheetProps = Omit<
|
|
|
2828
5227
|
illustration?: React$1.ComponentProps<typeof RN.View>['children'];
|
|
2829
5228
|
title?: DesignTextProps['children'];
|
|
2830
5229
|
};
|
|
5230
|
+
/**
|
|
5231
|
+
* A manifest pushed by `ubd dev`. The CLI only checks the fields it reads; the device validates the
|
|
5232
|
+
* whole manifest the same way it validates one it loads, so a dev build is never held to the publish rules.
|
|
5233
|
+
*/
|
|
5234
|
+
export type PushedManifest = {
|
|
5235
|
+
/** The addon's id, as in {@link AuthoredAddonManifest.id}. */
|
|
5236
|
+
id: string;
|
|
5237
|
+
/** The bundle's path relative to the manifest, as in {@link AuthoredAddonManifest.main}. */
|
|
5238
|
+
main: string;
|
|
5239
|
+
/** The SHA-512 of each bytecode build the push carries, by bytecode version; the CLI fills it in. */
|
|
5240
|
+
bytecode?: Record<string, string>;
|
|
5241
|
+
/** The images the build emitted beside the bundle, as in {@link AuthoredAddonManifest.assets}. */
|
|
5242
|
+
assets?: Record<string, AddonAsset>;
|
|
5243
|
+
};
|
|
2831
5244
|
/**
|
|
2832
5245
|
* Props of `RedesignBottomSheetTitleHeaderBase` (function). Exports: none.
|
|
2833
5246
|
* @see design/components/Sheet/native/BottomSheetTitleHeader.native.tsx
|
|
@@ -2916,8 +5329,11 @@ export type SearchFieldProps = Omit<TextFieldProps, 'ref'> & {
|
|
|
2916
5329
|
export type SegmentedControlComponent = React$1.ComponentType<SegmentedControlProps>;
|
|
2917
5330
|
/** A tab of a segmented control, with the page it shows. */
|
|
2918
5331
|
export type SegmentedControlItem = {
|
|
5332
|
+
/** A key unique among the control's tabs. */
|
|
2919
5333
|
id: string;
|
|
5334
|
+
/** The text shown on the tab. */
|
|
2920
5335
|
label: string;
|
|
5336
|
+
/** What `SegmentedControlPages` renders while this tab is selected. */
|
|
2921
5337
|
page?: React$1.ReactNode;
|
|
2922
5338
|
};
|
|
2923
5339
|
/**
|
|
@@ -2979,16 +5395,25 @@ export type SegmentedControlProps = {
|
|
|
2979
5395
|
};
|
|
2980
5396
|
/** The state controller `useSegmentedControlState` returns, which drives a `SegmentedControl`. */
|
|
2981
5397
|
export type SegmentedControlState = {
|
|
5398
|
+
/** The index of the selected tab in `items`. */
|
|
2982
5399
|
activeIndex: number;
|
|
5400
|
+
/** The tabs, in display order. */
|
|
2983
5401
|
items: SegmentedControlItem[];
|
|
5402
|
+
/** Selects the tab at `index`. */
|
|
2984
5403
|
setActiveIndex: (index: number) => void;
|
|
2985
5404
|
};
|
|
2986
5405
|
/** The options `useSegmentedControlState` builds a {@link SegmentedControlState} from. */
|
|
2987
5406
|
export type SegmentedControlStateOptions = {
|
|
5407
|
+
/** The tabs, in display order. */
|
|
2988
5408
|
items: SegmentedControlItem[];
|
|
5409
|
+
/** The width of one page in points; Unbound passes the window width. */
|
|
2989
5410
|
pageWidth: number;
|
|
5411
|
+
/** The index of the tab selected first. */
|
|
2990
5412
|
defaultIndex?: number;
|
|
5413
|
+
/** Called with the new index when the selected page changes. */
|
|
2991
5414
|
onPageChange?: (index: number) => void;
|
|
5415
|
+
/** Called with the index of the tab the user selects. */
|
|
5416
|
+
onSetActiveIndex?: (index: number) => void;
|
|
2992
5417
|
};
|
|
2993
5418
|
/** A semantic colour token from `Theme.colors`, which `useToken` resolves to a colour string. */
|
|
2994
5419
|
export type SemanticColorToken = Readonly<Record<string, string | number | boolean>>;
|
|
@@ -3002,24 +5427,120 @@ export type ServerTabLottieComponent = React$1.ComponentType<
|
|
|
3002
5427
|
export type ServerTabLottieProps = Omit<LottieIconProps, 'ref'> & {
|
|
3003
5428
|
ref?: LottieIconProps['ref'];
|
|
3004
5429
|
};
|
|
5430
|
+
/** One option of a `choice` setting. */
|
|
5431
|
+
export type SettingChoice = {
|
|
5432
|
+
/** The value stored when the option is picked. */
|
|
5433
|
+
const: string;
|
|
5434
|
+
/** The message key of the option's label. */
|
|
5435
|
+
title: string;
|
|
5436
|
+
/** The message key of the text under the option; only a radio group shows it. */
|
|
5437
|
+
subtitle?: string;
|
|
5438
|
+
};
|
|
5439
|
+
/** What every setting and section carries. Labels are message keys of the plugin's `i18n/en-US.json`. */
|
|
5440
|
+
export type SettingCommon = {
|
|
5441
|
+
/** The message key of the row's label or the section's title; only a hidden setting may omit it. */
|
|
5442
|
+
title?: string;
|
|
5443
|
+
/** The message key of the row's sub-label. */
|
|
5444
|
+
subtitle?: string;
|
|
5445
|
+
/** Stored and typed, but not drawn in the generated panel. */
|
|
5446
|
+
hidden?: boolean;
|
|
5447
|
+
/** Draws the row only while this holds. */
|
|
5448
|
+
visibleWhen?: SettingCondition;
|
|
5449
|
+
/** Draws the row disabled while this holds. */
|
|
5450
|
+
disabledWhen?: SettingCondition;
|
|
5451
|
+
/** Changing the setting shows a hint to restart Discord. */
|
|
5452
|
+
requiresRestart?: boolean;
|
|
5453
|
+
};
|
|
5454
|
+
/**
|
|
5455
|
+
* When a row shows or is enabled: a boolean setting's dot-separated key, or a predicate the build lifted
|
|
5456
|
+
* out of settings.ts into the plugin bundle, where the panel finds it by the setting's key.
|
|
5457
|
+
*/
|
|
5458
|
+
export type SettingCondition =
|
|
5459
|
+
| string
|
|
5460
|
+
| {
|
|
5461
|
+
predicate: true;
|
|
5462
|
+
};
|
|
5463
|
+
/** A value one schema-declared setting holds. */
|
|
5464
|
+
export type SettingPrimitive = string | number | boolean;
|
|
5465
|
+
/** One schema-declared setting, by the primitive it stores. */
|
|
5466
|
+
export type SettingSchema = SettingCommon &
|
|
5467
|
+
(
|
|
5468
|
+
| {
|
|
5469
|
+
kind: 'boolean';
|
|
5470
|
+
displayAs: 'switch' | 'checkbox';
|
|
5471
|
+
default: boolean;
|
|
5472
|
+
}
|
|
5473
|
+
| {
|
|
5474
|
+
kind: 'number' | 'integer';
|
|
5475
|
+
displayAs: 'input' | 'slider' | 'stepper' | 'duration';
|
|
5476
|
+
/** A `duration` is in milliseconds. */
|
|
5477
|
+
default: number;
|
|
5478
|
+
minimum?: number;
|
|
5479
|
+
maximum?: number;
|
|
5480
|
+
/** The slider's or stepper's step; values must be a multiple of it. */
|
|
5481
|
+
multipleOf?: number;
|
|
5482
|
+
/** `duration`: the units offered. */
|
|
5483
|
+
units?: DurationUnit[];
|
|
5484
|
+
}
|
|
5485
|
+
| StringSettingSchema
|
|
5486
|
+
| ChoiceSettingSchema
|
|
5487
|
+
| {
|
|
5488
|
+
kind: 'array';
|
|
5489
|
+
displayAs: 'list' | 'checkboxes' | EntityDisplay;
|
|
5490
|
+
default: string[];
|
|
5491
|
+
/** What each item is: a string, or one of a choice's options. */
|
|
5492
|
+
of: Omit<StringSettingSchema, 'default'> | Omit<ChoiceSettingSchema, 'default'>;
|
|
5493
|
+
minItems?: number;
|
|
5494
|
+
maxItems?: number;
|
|
5495
|
+
}
|
|
5496
|
+
);
|
|
5497
|
+
/** A value any schema-declared setting holds. */
|
|
5498
|
+
export type SettingValue = SettingPrimitive | string[];
|
|
3005
5499
|
/** A registered Unbound settings entry, mirroring Discord's `SETTING_RENDERER_CONFIG` route shape. */
|
|
3006
5500
|
export type SettingsEntry = {
|
|
5501
|
+
/** Always `'route'`: the entry opens its own screen. */
|
|
3007
5502
|
type: 'route';
|
|
5503
|
+
/** Unique id of the entry. Registering an existing key replaces that entry and logs a warning. */
|
|
3008
5504
|
key: string;
|
|
5505
|
+
/** A hook returning the row and screen title. */
|
|
3009
5506
|
useTitle: () => string;
|
|
5507
|
+
/** A hook returning whether Discord shows the row; omitted, it always shows. */
|
|
3010
5508
|
usePredicate?: () => boolean;
|
|
5509
|
+
/** The key of the parent entry; `null` for an entry at the top of the settings overview. */
|
|
3011
5510
|
parent: string | null;
|
|
5511
|
+
/** The label of the overview section the row belongs to; Unbound's own entries use `'Unbound'`. */
|
|
3012
5512
|
section?: string;
|
|
5513
|
+
/** Keeps the route registered but leaves its row out of the settings overview. */
|
|
3013
5514
|
excludeFromDisplay?: boolean;
|
|
5515
|
+
/** The icon drawn at the start of the row. */
|
|
3014
5516
|
IconComponent?: React$1.ComponentType;
|
|
5517
|
+
/** A hook returning what the row shows at its end, such as a count. */
|
|
5518
|
+
useTrailing?: () => React$1.ReactNode;
|
|
5519
|
+
/** The screen the row opens. */
|
|
3015
5520
|
screen: SettingsScreen;
|
|
3016
5521
|
};
|
|
5522
|
+
/** A nested object: its settings, drawn as their own section titled by `title`. */
|
|
5523
|
+
export type SettingsGroupSchema = SettingCommon & {
|
|
5524
|
+
kind: 'section';
|
|
5525
|
+
displayAs: 'group' | 'collapsible';
|
|
5526
|
+
properties: Record<string, SettingSchema | StorelessSchema>;
|
|
5527
|
+
};
|
|
3017
5528
|
/** A settings store, or a nested group of settings within one. */
|
|
3018
5529
|
export type SettingsObject = {
|
|
3019
5530
|
[key: string]: SettingsValue;
|
|
3020
5531
|
};
|
|
5532
|
+
/** A plugin's settings schema, the JSON its settings.ts `defineSettings(...)` evaluates to at build time. */
|
|
5533
|
+
export type SettingsSchema = {
|
|
5534
|
+
/** Marks the schema's root. */
|
|
5535
|
+
kind: 'settings';
|
|
5536
|
+
/** The message key of the title of the section holding the top-level settings. */
|
|
5537
|
+
title?: string;
|
|
5538
|
+
/** The settings, buttons, notices and sections by key, in the order they are drawn. */
|
|
5539
|
+
properties: Record<string, SettingSchema | StorelessSchema | SettingsGroupSchema>;
|
|
5540
|
+
};
|
|
3021
5541
|
/** The screen descriptor a settings route entry renders. */
|
|
3022
5542
|
export type SettingsScreen = {
|
|
5543
|
+
/** The navigator route name; Unbound sets it to the entry's `key`. */
|
|
3023
5544
|
route: string;
|
|
3024
5545
|
/** Discord's navigator renders the screen with its own route props, so any component fits. */
|
|
3025
5546
|
getComponent: () => React$1.ComponentType<never>;
|
|
@@ -3127,6 +5648,22 @@ export type SimpleActionSheetProps = {
|
|
|
3127
5648
|
map?: unknown;
|
|
3128
5649
|
};
|
|
3129
5650
|
};
|
|
5651
|
+
/** The `simple-markdown` library Discord bundles, found by `parserFor`, `outputFor` and `defaultRules`. */
|
|
5652
|
+
export type SimpleMarkdownModule = {
|
|
5653
|
+
/** CommonMark-like rules for a whole document, unlike Discord's message rules. */
|
|
5654
|
+
defaultRules: MarkdownRules;
|
|
5655
|
+
/** Builds a parser from a rule set, such as `defaultRules` plus your own; `TNode` names the nodes they parse. */
|
|
5656
|
+
parserFor<TNode extends MarkdownNode = MarkdownNode>(
|
|
5657
|
+
rules: MarkdownRules,
|
|
5658
|
+
): SimpleMarkdownParser<TNode>;
|
|
5659
|
+
/** Wraps a regex into a `match` that only matches inside inline content. */
|
|
5660
|
+
inlineRegex(regex: RegExp): MarkdownRule['match'];
|
|
5661
|
+
};
|
|
5662
|
+
/** Parses Markdown into nodes; `inline: false` parses blocks such as headings, lists, code and tables. */
|
|
5663
|
+
export type SimpleMarkdownParser<TNode extends MarkdownNode = MarkdownNode> = (
|
|
5664
|
+
source: string,
|
|
5665
|
+
state?: MarkdownState,
|
|
5666
|
+
) => TNode[];
|
|
3130
5667
|
export type SliderComponent = React$1.ComponentType<SliderProps & Record<string, unknown>>;
|
|
3131
5668
|
/**
|
|
3132
5669
|
* Props of `Slider` (function). Exports: Slider.
|
|
@@ -3252,6 +5789,42 @@ export type StickyWrapperProps = {
|
|
|
3252
5789
|
pointerEvents?: React$1.ComponentProps<typeof RN.View>['pointerEvents'];
|
|
3253
5790
|
style?: React$1.ComponentProps<typeof RN.View>['style'];
|
|
3254
5791
|
};
|
|
5792
|
+
/** A row that stores nothing: a button or a notice. */
|
|
5793
|
+
export type StorelessSchema = ButtonSchema | NoticeSchema;
|
|
5794
|
+
/** How a `string` setting displays; each validates the text its own way. */
|
|
5795
|
+
export type StringDisplay =
|
|
5796
|
+
| 'input'
|
|
5797
|
+
| 'multiline'
|
|
5798
|
+
| 'secret'
|
|
5799
|
+
| 'url'
|
|
5800
|
+
| 'color'
|
|
5801
|
+
| 'image'
|
|
5802
|
+
| 'font'
|
|
5803
|
+
| 'emoji'
|
|
5804
|
+
| EntityDisplay;
|
|
5805
|
+
/** A string setting: the primitive `array` items can be too. */
|
|
5806
|
+
export type StringSettingSchema = {
|
|
5807
|
+
/** Marks a text setting. */
|
|
5808
|
+
kind: 'string';
|
|
5809
|
+
/** The row that edits the text, and the validation it applies. */
|
|
5810
|
+
displayAs: StringDisplay;
|
|
5811
|
+
/** The value before the user changes it. */
|
|
5812
|
+
default: string;
|
|
5813
|
+
/** The fewest characters the text may have. */
|
|
5814
|
+
minLength?: number;
|
|
5815
|
+
/** The most characters the text may have. */
|
|
5816
|
+
maxLength?: number;
|
|
5817
|
+
/** The message key of the text shown while the input is empty. */
|
|
5818
|
+
placeholder?: string;
|
|
5819
|
+
/** `color`: also takes an alpha channel, `#RRGGBBAA`. */
|
|
5820
|
+
alpha?: boolean;
|
|
5821
|
+
/** `color`: colors offered first. */
|
|
5822
|
+
presets?: string[];
|
|
5823
|
+
/** `color`: draws `presets` inline instead of a swatch row. */
|
|
5824
|
+
palette?: boolean;
|
|
5825
|
+
/** `image`: the largest file accepted, in bytes. */
|
|
5826
|
+
maxSize?: number;
|
|
5827
|
+
};
|
|
3255
5828
|
/** A stylesheet spec: each key maps to a view, text, or image style. */
|
|
3256
5829
|
export type StyleSheetSpec = Record<string, ViewStyle | TextStyle | ImageStyle>;
|
|
3257
5830
|
/** A stylesheet spec, or a function producing one (Discord accepts both forms). */
|
|
@@ -3683,9 +6256,13 @@ export type TextVariant = LiteralUnion<
|
|
|
3683
6256
|
export type TextWeight = 'normal' | 'medium' | 'semibold' | 'bold';
|
|
3684
6257
|
/** A theme's semantic and raw colour definitions plus optional background. */
|
|
3685
6258
|
export type Theme = {
|
|
6259
|
+
/** Overrides for Discord's semantic colours, keyed by name such as `BACKGROUND_BASE_LOWER`; malformed entries are dropped. */
|
|
3686
6260
|
semantic: Record<PropertyKey, ThemeSemanticColor>;
|
|
6261
|
+
/** Overrides for Discord's raw palette colours, keyed by raw colour name. */
|
|
3687
6262
|
raw: Record<PropertyKey, string>;
|
|
3688
|
-
|
|
6263
|
+
/** The Discord base theme the bundle builds on: `light`, `dark` (Ash), `darker` (Dark) or `midnight` (Onyx); parsed as `darker` when absent or unknown. */
|
|
6264
|
+
type: 'light' | 'dark' | 'darker' | 'midnight';
|
|
6265
|
+
/** The chat background the theme recommends: an image `url`, a `blur` radius and an `opacity` from 0 to 1; dropped when `url` is not a string. */
|
|
3689
6266
|
background?: {
|
|
3690
6267
|
blur?: number;
|
|
3691
6268
|
opacity?: number;
|
|
@@ -3721,11 +6298,6 @@ export type ThemeContextProviderRootThemeContextProviderProps = {
|
|
|
3721
6298
|
secondaryColor?: unknown;
|
|
3722
6299
|
theme?: unknown;
|
|
3723
6300
|
};
|
|
3724
|
-
/** An {@link Addon} whose instance is a {@link Theme}, tracking its registration state. */
|
|
3725
|
-
export type ThemeEntity = Addon & {
|
|
3726
|
-
registered: boolean;
|
|
3727
|
-
instance: Theme | null;
|
|
3728
|
-
};
|
|
3729
6301
|
/**
|
|
3730
6302
|
* Props of `ThemeProvider` (function). Exports: ThemeProvider.
|
|
3731
6303
|
* @see module 4804 (no source path)
|
|
@@ -3736,8 +6308,11 @@ export type ThemeProviderProps = {
|
|
|
3736
6308
|
};
|
|
3737
6309
|
/** A single semantic colour definition in a {@link Theme}. */
|
|
3738
6310
|
export type ThemeSemanticColor = {
|
|
6311
|
+
/** `color` uses `value` as is; `raw` names a raw colour, looked up in the theme's `raw` and then Discord's. */
|
|
3739
6312
|
type: 'color' | 'raw';
|
|
6313
|
+
/** A colour string, or the name of a raw colour when `type` is `raw`. */
|
|
3740
6314
|
value: string;
|
|
6315
|
+
/** An alpha from 0 to 1, clamped, that replaces a `#rrggbb` or `#rrggbbaa` colour's alpha; other formats ignore it. */
|
|
3741
6316
|
opacity?: number;
|
|
3742
6317
|
};
|
|
3743
6318
|
/**
|
|
@@ -3747,11 +6322,17 @@ export type ThemeSemanticColor = {
|
|
|
3747
6322
|
export type TitleProps = DesignTextProps;
|
|
3748
6323
|
/** A button rendered inside a toast. */
|
|
3749
6324
|
export type ToastButton = {
|
|
6325
|
+
/** The Discord button style. Defaults to `'primary'`. */
|
|
3750
6326
|
variant?: 'primary' | 'secondary' | 'tertiary';
|
|
6327
|
+
/** The Discord button size. Defaults to `'sm'`. */
|
|
3751
6328
|
size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
6329
|
+
/** Which side of the label the icon sits on. Defaults to `'start'`. */
|
|
3752
6330
|
iconPosition?: 'start' | 'end';
|
|
6331
|
+
/** The button's label. */
|
|
3753
6332
|
content: string;
|
|
3754
|
-
icon
|
|
6333
|
+
/** An asset id, an element such as `<Star />`, or an icon component such as `Star`, drawn beside the label. */
|
|
6334
|
+
icon?: IconInput;
|
|
6335
|
+
/** Runs when the button is tapped. The toast stays open; call `close` on its handle to dismiss it. */
|
|
3755
6336
|
onPress: () => void;
|
|
3756
6337
|
};
|
|
3757
6338
|
export type ToastComponent = React$1.ComponentType<ToastProps>;
|
|
@@ -3797,18 +6378,28 @@ export type ToastEntityProps = {
|
|
|
3797
6378
|
};
|
|
3798
6379
|
/** A handle returned when showing a toast, used to update or close it. */
|
|
3799
6380
|
export type ToastHandle = {
|
|
6381
|
+
/** Merges `options` into the shown toast. Does nothing once the toast is gone. */
|
|
3800
6382
|
update: (options: Partial<ToastOptions>) => void;
|
|
6383
|
+
/** Plays the toast's exit animation, then removes it. */
|
|
3801
6384
|
close: () => void;
|
|
3802
6385
|
};
|
|
3803
6386
|
/** Options accepted when showing a toast. */
|
|
3804
6387
|
export type ToastOptions = {
|
|
6388
|
+
/** The bold first line, or a component rendered in its place. */
|
|
3805
6389
|
title?: string | React$1.ComponentType;
|
|
6390
|
+
/** The body text under the title. */
|
|
3806
6391
|
content?: string;
|
|
6392
|
+
/** Milliseconds before the toast closes itself; `0` keeps it until dismissed. Omitted, the user's toast duration setting. */
|
|
3807
6393
|
duration?: number;
|
|
6394
|
+
/** Declared for callers, but the client does not call it yet. */
|
|
3808
6395
|
onTimeout?: () => void;
|
|
3809
|
-
icon
|
|
6396
|
+
/** An asset name, asset id, image source, element such as `<Star />`, or icon component such as `Star`; a name with no matching asset draws no image. */
|
|
6397
|
+
icon?: string | IconInput | ImageSourcePropType;
|
|
6398
|
+
/** Identifies the toast; showing another toast with the same id replaces it. Omitted, a random id. */
|
|
3810
6399
|
id?: string;
|
|
6400
|
+
/** Buttons in a row under the content. */
|
|
3811
6401
|
buttons?: ToastButton[];
|
|
6402
|
+
/** Tints an image icon with the theme's icon colour. Defaults to `true`; set `false` for a coloured image. An element or component draws its own colour. */
|
|
3812
6403
|
tintedIcon?: boolean;
|
|
3813
6404
|
};
|
|
3814
6405
|
/**
|
|
@@ -3825,8 +6416,11 @@ export type ToastProps = {
|
|
|
3825
6416
|
};
|
|
3826
6417
|
/** State and actions of the toast store. */
|
|
3827
6418
|
export type ToastStoreState = {
|
|
6419
|
+
/** Every toast on screen, keyed by toast id, including ones playing their exit animation. */
|
|
3828
6420
|
toasts: Record<string, InternalToastOptions>;
|
|
6421
|
+
/** Shows a toast, replacing any with the same id, and stamps `date` when unset. */
|
|
3829
6422
|
addToast: (options: InternalToastOptions) => ToastHandle;
|
|
6423
|
+
/** Merges `options` into the toast `id`. Does nothing when no such toast is on screen. */
|
|
3830
6424
|
updateToastWithOptions: (id: string, options: Partial<InternalToastOptions>) => void;
|
|
3831
6425
|
};
|
|
3832
6426
|
export type ToggleIconButtonComponent = React$1.ComponentType<
|
|
@@ -3847,11 +6441,44 @@ export type ToggleIconButtonProps = {
|
|
|
3847
6441
|
};
|
|
3848
6442
|
/** `TransitionStates`: MOUNTED = 0, ENTERED = 1, YEETED = 2. */
|
|
3849
6443
|
export type TransitionState = 'MOUNTED' | 'ENTERED' | 'YEETED';
|
|
3850
|
-
/** A
|
|
6444
|
+
/** A home screen icon the loader ships, listed in Discord's app icon picker. */
|
|
6445
|
+
export type UnboundAppIcon = {
|
|
6446
|
+
/** The icon's native id, which the loader switches to. */
|
|
6447
|
+
id: string;
|
|
6448
|
+
/** The picker row it shows as, when it replaces one of Discord's own icons. */
|
|
6449
|
+
pickerId?: string;
|
|
6450
|
+
/** The name shown under it in the picker. */
|
|
6451
|
+
name: string;
|
|
6452
|
+
/** The URI of its preview image. */
|
|
6453
|
+
image: string;
|
|
6454
|
+
};
|
|
6455
|
+
/** A {@link DiscordAsset} extended with Unbound's icon-pack overrides and the files of an asset a plugin registered. */
|
|
3851
6456
|
export type UnboundAsset = DiscordAsset & {
|
|
3852
6457
|
iconPackPath?: string;
|
|
3853
6458
|
iconPackScale?: number;
|
|
6459
|
+
/** The URI of a registered plugin asset at each scale; set while it is registered. */
|
|
6460
|
+
unboundSources?: Record<number, string>;
|
|
6461
|
+
};
|
|
6462
|
+
/**
|
|
6463
|
+
* One installed face in the loader's font store.
|
|
6464
|
+
* @internal
|
|
6465
|
+
*/
|
|
6466
|
+
type UnboundInstalledFont = {
|
|
6467
|
+
/** The store id: the face's PostScript name with only `[A-Za-z0-9._-]`. */
|
|
6468
|
+
id: string;
|
|
6469
|
+
family: string;
|
|
6470
|
+
postScriptName: string;
|
|
6471
|
+
fullName: string;
|
|
6472
|
+
weight: number;
|
|
6473
|
+
style: UnboundFontStyle;
|
|
6474
|
+
/** The file, relative to Unbound's `Fonts` folder. */
|
|
6475
|
+
file: string;
|
|
6476
|
+
/** The file's absolute path; `list()` adds it. */
|
|
6477
|
+
path?: string;
|
|
6478
|
+
source: UnboundFontSource;
|
|
3854
6479
|
};
|
|
6480
|
+
/** A value the generator could not type with confidence, so a loose prop accepts anything for it. */
|
|
6481
|
+
export type UncertainValue = any;
|
|
3855
6482
|
/**
|
|
3856
6483
|
* Props of `VisualEffectView` (function). Exports: default.
|
|
3857
6484
|
* @see modules/visual_effect_view/native/VisualEffectView.tsx
|
|
@@ -3937,11 +6564,16 @@ export type YouTabLottieComponent = React$1.ComponentType<
|
|
|
3937
6564
|
export type YouTabLottieProps = Omit<LottieIconProps, 'ref'> & {
|
|
3938
6565
|
ref?: LottieIconProps['ref'];
|
|
3939
6566
|
};
|
|
3940
|
-
/** The
|
|
6567
|
+
/** The named exports of a plugin's entry module the client reads: its lifecycle and its settings panel. */
|
|
3941
6568
|
type Plugin$1 = {
|
|
3942
|
-
|
|
6569
|
+
/** Called when the plugin starts, inside its Addon scope, with its native bridge context; a rejected promise is recorded as a start failure. */
|
|
6570
|
+
start?(context?: PluginContext): void | Promise<void>;
|
|
6571
|
+
/** Called when the plugin stops; a returned promise is awaited, and the scope is disposed even if it throws. */
|
|
3943
6572
|
stop?(): void | Promise<void>;
|
|
3944
|
-
|
|
6573
|
+
/** The plugin's settings panel, rendered as `<SettingsPanel />` only while the plugin is running. */
|
|
6574
|
+
SettingsPanel?: React$1.ComponentType;
|
|
6575
|
+
/** Checks, without side effects, that the running plugin works on this device; the device matrix calls it after a restart. */
|
|
6576
|
+
selfTest?(): PluginSelfTestResult | Promise<PluginSelfTestResult>;
|
|
3945
6577
|
};
|
|
3946
6578
|
|
|
3947
6579
|
export { Plugin$1 as Plugin };
|