@idosgames/react 0.4.3 → 0.4.5
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/dist/ui/index.cjs +2 -2
- package/dist/ui/index.d.cts +250 -159
- package/dist/ui/index.d.ts +250 -159
- package/dist/ui/index.js +2 -2
- package/package.json +1 -1
package/dist/ui/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ReactNode, CSSProperties, MouseEvent } from 'react';
|
|
2
|
-
import { IDosGamesClient, ResourceConsume, ResourceGrant } from '@idosgames/core';
|
|
1
|
+
import { ReactNode, CSSProperties, MouseEvent, TextareaHTMLAttributes, InputHTMLAttributes } from 'react';
|
|
2
|
+
import { TitlePublicConfigurationModel, IDosGamesClient, ResourceConsume, ResourceGrant } from '@idosgames/core';
|
|
3
3
|
|
|
4
4
|
/** Interface sound events. Components of the kit play theirs by themselves. */
|
|
5
5
|
declare const UI_SOUND_EVENTS: readonly ["click", "tab", "open", "close", "reward", "coin", "purchase", "claim", "error", "notify", "lootbox", "levelUp", "countTick"];
|
|
@@ -267,7 +267,7 @@ declare class NotificationStore {
|
|
|
267
267
|
}
|
|
268
268
|
declare function createNotificationStore(): NotificationStore;
|
|
269
269
|
|
|
270
|
-
type ResourceKind = "currency" | "item" | "token" | "other";
|
|
270
|
+
type ResourceKind = "currency" | "crypto" | "item" | "token" | "other";
|
|
271
271
|
interface ResourceLine {
|
|
272
272
|
kind: ResourceKind;
|
|
273
273
|
/**
|
|
@@ -276,12 +276,18 @@ interface ResourceLine {
|
|
|
276
276
|
*/
|
|
277
277
|
id: string;
|
|
278
278
|
amount: number;
|
|
279
|
+
/**
|
|
280
|
+
* Crypto only: `amount` is a price in USD (`AmountUsd` of the config), converted to tokens by the server at the
|
|
281
|
+
* live price when charging — draw it as "$5", never as "5 tokens".
|
|
282
|
+
*/
|
|
283
|
+
usd?: boolean;
|
|
279
284
|
}
|
|
280
285
|
type BundleEntry = {
|
|
281
286
|
Type?: string | null;
|
|
282
287
|
CurrencyID?: string | null;
|
|
283
288
|
ItemID?: string | null;
|
|
284
289
|
Amount?: number | null;
|
|
290
|
+
AmountUsd?: number | null;
|
|
285
291
|
} | null;
|
|
286
292
|
/** An event token of a bundle; a server response adds what was actually applied (`Applied`, after caps). */
|
|
287
293
|
type BundleToken = {
|
|
@@ -325,9 +331,18 @@ declare function grantedBy(data: unknown): ResourceLine[];
|
|
|
325
331
|
/** Whether the player's balances cover a price (items are the server's check). */
|
|
326
332
|
declare function canAfford(price: ResourceLine[], balances: Record<string, {
|
|
327
333
|
Amount?: number;
|
|
328
|
-
} | null | undefined> | null | undefined
|
|
334
|
+
} | null | undefined> | null | undefined,
|
|
335
|
+
/** Crypto balances (`InventoryV2.CryptoCurrencies`). Omitted — crypto lines are left to the server. */
|
|
336
|
+
cryptoBalances?: Record<string, {
|
|
337
|
+
Amount?: number | string;
|
|
338
|
+
} | null | undefined> | null): boolean;
|
|
329
339
|
/** 1234 → "1 234", 1_250_000 → "1.25M" — balances must fit a chip. */
|
|
330
340
|
declare function formatAmount(value: number): string;
|
|
341
|
+
/**
|
|
342
|
+
* A crypto amount for a chip: tokens are fractional, so unlike {@link formatAmount} small values keep
|
|
343
|
+
* their decimals — 4.5 stays "4.5", 0.0123 stays "0.0123"; large ones are shortened the same way.
|
|
344
|
+
*/
|
|
345
|
+
declare function formatCryptoAmount(value: number): string;
|
|
331
346
|
/** Countdown "3h 05m" / "12m 09s" / "2d 4h" to a server timestamp, from `nowMs` (server-corrected). */
|
|
332
347
|
declare function countdown(targetUtc: string | null | undefined, nowMs: number): string | null;
|
|
333
348
|
/**
|
|
@@ -338,11 +353,19 @@ type Layout = "phone" | "tablet" | "desktop";
|
|
|
338
353
|
declare const TABLET_MIN_PX = 640;
|
|
339
354
|
declare const DESKTOP_MIN_PX = 1024;
|
|
340
355
|
declare function layoutFor(widthPx: number): Layout;
|
|
356
|
+
/** The title configuration's named sections (`Craft`, `Quest`, …) with their types - not the index signature. */
|
|
357
|
+
type TitleSections = {
|
|
358
|
+
[K in keyof TitlePublicConfigurationModel as string extends K ? never : number extends K ? never : K]-?: NonNullable<TitlePublicConfigurationModel[K]>;
|
|
359
|
+
};
|
|
341
360
|
/**
|
|
342
361
|
* A section of the title configuration. `getSection` holds only what a feature fetched on its own
|
|
343
362
|
* (GetDefinitions); the full config the client loads at sign-in lives in `titlePublicConfiguration`.
|
|
344
363
|
* Reading only the first left screens empty on titles that had everything (found 27.09.2026).
|
|
364
|
+
*
|
|
365
|
+
* A section the SDK knows (`"Craft"` -> `CraftDefinitions`) comes back with its own type; for a
|
|
366
|
+
* section it does not, name the shape you read: `configSection<MyView>(client, "Name")`.
|
|
345
367
|
*/
|
|
368
|
+
declare function configSection<K extends keyof TitleSections>(client: IDosGamesClient, key: K): TitleSections[K] | undefined;
|
|
346
369
|
declare function configSection<T>(client: IDosGamesClient, key: string): T | undefined;
|
|
347
370
|
interface ItemDefinitionView {
|
|
348
371
|
ItemID?: string;
|
|
@@ -368,6 +391,17 @@ interface CurrencySection {
|
|
|
368
391
|
DisplayName?: string | null;
|
|
369
392
|
ImagePath?: string | null;
|
|
370
393
|
} | null> | null;
|
|
394
|
+
/** The title's crypto currencies — a price may be paid in them (spent crypto goes to the developer). */
|
|
395
|
+
CryptoCurrencies?: Record<string, {
|
|
396
|
+
CurrencyID?: string;
|
|
397
|
+
DisplayName?: string | null;
|
|
398
|
+
AssetPaths?: Record<string, string> | null;
|
|
399
|
+
/** Developer fee (percent) on crypto moving between players (marketplace, PvP, Workshop). */
|
|
400
|
+
PlayerTradeFeePercent?: number | string | null;
|
|
401
|
+
/** The IOU virtual currency (`{ID}_IOU`): the unbacked part of crypto rewards. */
|
|
402
|
+
UnbackedRewardCurrencyID?: string | null;
|
|
403
|
+
DisplayDecimals?: number | null;
|
|
404
|
+
} | null> | null;
|
|
371
405
|
}
|
|
372
406
|
/** All item definitions of the title, across catalogs, by item id. */
|
|
373
407
|
declare function itemDefinitions(section: ItemSection | undefined): Map<string, ItemDefinitionView>;
|
|
@@ -379,6 +413,38 @@ declare function groupBy<T>(items: readonly T[], key: (item: T) => string): Arra
|
|
|
379
413
|
key: string;
|
|
380
414
|
items: T[];
|
|
381
415
|
}>;
|
|
416
|
+
/**
|
|
417
|
+
* A crypto balance as the player should see it (owner, 2026-10-09): ONE number — the real crypto
|
|
418
|
+
* (backed by the title's pool) plus its IOU (`{ID}_IOU`, the unbacked part of crypto rewards the
|
|
419
|
+
* developer repays later; in the game it spends like the crypto, the IOU first). The split goes into
|
|
420
|
+
* a hover popover, not into two chips.
|
|
421
|
+
*/
|
|
422
|
+
interface CryptoBalanceView {
|
|
423
|
+
currencyID: string;
|
|
424
|
+
/** Real crypto on the in-game balance (withdrawable). */
|
|
425
|
+
backed: number;
|
|
426
|
+
/** IOU — virtual until the developer backs it. */
|
|
427
|
+
unbacked: number;
|
|
428
|
+
total: number;
|
|
429
|
+
/** The IOU currency id, or null when the title has none for this crypto. */
|
|
430
|
+
iouID: string | null;
|
|
431
|
+
}
|
|
432
|
+
type StateBalances = {
|
|
433
|
+
InventoryV2?: {
|
|
434
|
+
VirtualCurrencies?: Record<string, {
|
|
435
|
+
Amount?: number | string | null;
|
|
436
|
+
} | null | undefined> | null;
|
|
437
|
+
CryptoCurrencies?: Record<string, {
|
|
438
|
+
Amount?: number | string | null;
|
|
439
|
+
} | null | undefined> | null;
|
|
440
|
+
} | null;
|
|
441
|
+
} | null | undefined;
|
|
442
|
+
/** The IOU currency id of a crypto: the config's `UnbackedRewardCurrencyID`, else `{ID}_IOU`. */
|
|
443
|
+
declare function iouCurrencyOf(cryptoID: string, cryptoDefs: CurrencySection["CryptoCurrencies"]): string;
|
|
444
|
+
/** Backed + unbacked balance of one crypto currency. */
|
|
445
|
+
declare function cryptoBalance(state: StateBalances, cryptoID: string, cryptoDefs: CurrencySection["CryptoCurrencies"]): CryptoBalanceView;
|
|
446
|
+
/** IOU currencies of the title — they are shown inside their crypto's balance, never as their own. */
|
|
447
|
+
declare function iouCurrencies(cryptoDefs: CurrencySection["CryptoCurrencies"]): Set<string>;
|
|
382
448
|
|
|
383
449
|
interface Point {
|
|
384
450
|
x: number;
|
|
@@ -540,55 +606,6 @@ declare function UiKitProvider({ config: input, children, overlays, notification
|
|
|
540
606
|
|
|
541
607
|
declare function renderKitOverlays(state: KitOverlayState): ReactNode;
|
|
542
608
|
|
|
543
|
-
type UiLanguage = "en" | "ru";
|
|
544
|
-
declare function pickLanguage(): UiLanguage;
|
|
545
|
-
/**
|
|
546
|
-
* A module's string table: `const t = makeT(EN, RU)`, then `t("buy")`. The Russian table must have
|
|
547
|
-
* every key of the English one (the type says so), so a missing translation is a compile error.
|
|
548
|
-
*/
|
|
549
|
-
declare function makeT<K extends string>(en: Record<K, string>, ru: Record<K, string>, language?: UiLanguage): (key: K) => string;
|
|
550
|
-
/**
|
|
551
|
-
* The word for a count, from a table entry of forms split by "|": English "lot|lots", Russian
|
|
552
|
-
* "лот|лота|лотов" (one / few / many — 1, 2–4, 5+). `plural(21, t("lots"))` → "лот".
|
|
553
|
-
*/
|
|
554
|
-
declare function plural(n: number, forms: string, language?: UiLanguage): string;
|
|
555
|
-
declare const EN: {
|
|
556
|
-
readonly close: "Close";
|
|
557
|
-
readonly back: "Back";
|
|
558
|
-
readonly confirm: "Confirm";
|
|
559
|
-
readonly cancel: "Cancel";
|
|
560
|
-
readonly youGot: "You got";
|
|
561
|
-
readonly great: "Great!";
|
|
562
|
-
readonly loading: "Loading…";
|
|
563
|
-
readonly ok: "OK";
|
|
564
|
-
readonly loadingNamed: "Loading {name}…";
|
|
565
|
-
readonly stillLoading: "Still loading — the first start can take a little longer";
|
|
566
|
-
readonly retry: "Retry";
|
|
567
|
-
readonly error: "Something went wrong";
|
|
568
|
-
readonly notEnough: "Not enough resources";
|
|
569
|
-
readonly offline: "No connection. Retrying…";
|
|
570
|
-
readonly more: "More";
|
|
571
|
-
readonly menu: "Menu";
|
|
572
|
-
readonly nothingHere: "Nothing here yet";
|
|
573
|
-
readonly economy: "Economy";
|
|
574
|
-
readonly events: "Activities";
|
|
575
|
-
readonly social: "Social";
|
|
576
|
-
readonly profile: "Profile";
|
|
577
|
-
readonly other: "Other";
|
|
578
|
-
readonly free: "Free";
|
|
579
|
-
readonly claim: "Claim";
|
|
580
|
-
readonly claimAll: "Claim all";
|
|
581
|
-
readonly tokenEvent: "Event points";
|
|
582
|
-
readonly tokenSeason: "Season status";
|
|
583
|
-
readonly tokenQuest: "Quest points";
|
|
584
|
-
readonly tokenScore: "Rating points";
|
|
585
|
-
};
|
|
586
|
-
type UiStringKey = keyof typeof EN;
|
|
587
|
-
/** Strings of the kit itself. */
|
|
588
|
-
declare const uiT: (key: "close" | "claim" | "error" | "events" | "other" | "back" | "confirm" | "cancel" | "youGot" | "great" | "loading" | "ok" | "loadingNamed" | "stillLoading" | "retry" | "notEnough" | "offline" | "more" | "menu" | "nothingHere" | "economy" | "social" | "profile" | "free" | "claimAll" | "tokenEvent" | "tokenSeason" | "tokenQuest" | "tokenScore") => string;
|
|
589
|
-
/** Turns a server error into words the player understands; long texts are cut. */
|
|
590
|
-
declare function errorText(error: string | null | undefined): string;
|
|
591
|
-
|
|
592
609
|
declare const GLYPHS: readonly ["coin", "gem", "potion", "scroll", "sword", "shield", "crown", "gift", "bag", "box", "trophy", "calendar", "star", "check", "lock", "shop", "chest", "quest", "user", "logout", "copy", "hero", "hammer", "market", "flame", "ticket", "friends", "chat", "link", "swords", "gear", "globe", "sound", "mute", "bell", "bulb", "menu", "close", "back", "plus", "energy", "heart", "offer", "clock", "trash", "edit"];
|
|
593
610
|
type Glyph = (typeof GLYPHS)[number];
|
|
594
611
|
declare function isGlyph(value: string): value is Glyph;
|
|
@@ -603,111 +620,6 @@ declare function Icon({ glyph, size, color, }: {
|
|
|
603
620
|
color?: string;
|
|
604
621
|
}): ReactNode;
|
|
605
622
|
|
|
606
|
-
/** CSS variables of a resolved config, to put on the kit root. */
|
|
607
|
-
declare function themeVars(config: UiKitConfig, reducedMotion: boolean): CSSProperties;
|
|
608
|
-
/** Shorthands for inline styles, so components never spell a variable name twice. */
|
|
609
|
-
declare const v: {
|
|
610
|
-
readonly bgTop: "var(--idos-ui-bg-top)";
|
|
611
|
-
readonly bgBottom: "var(--idos-ui-bg-bottom)";
|
|
612
|
-
readonly panel: "var(--idos-ui-panel)";
|
|
613
|
-
readonly panelDeep: "var(--idos-ui-panel-deep)";
|
|
614
|
-
readonly panelEdge: "var(--idos-ui-panel-edge)";
|
|
615
|
-
readonly text: "var(--idos-ui-text)";
|
|
616
|
-
readonly textDim: "var(--idos-ui-text-dim)";
|
|
617
|
-
readonly gold: "var(--idos-ui-gold)";
|
|
618
|
-
readonly goldDeep: "var(--idos-ui-gold-deep)";
|
|
619
|
-
readonly green: "var(--idos-ui-green)";
|
|
620
|
-
readonly greenDeep: "var(--idos-ui-green-deep)";
|
|
621
|
-
readonly blue: "var(--idos-ui-blue)";
|
|
622
|
-
readonly blueDeep: "var(--idos-ui-blue-deep)";
|
|
623
|
-
readonly red: "var(--idos-ui-red)";
|
|
624
|
-
readonly redDeep: "var(--idos-ui-red-deep)";
|
|
625
|
-
readonly shadow: "var(--idos-ui-shadow)";
|
|
626
|
-
readonly backdrop: "var(--idos-ui-backdrop)";
|
|
627
|
-
readonly onGreen: "var(--idos-ui-on-green)";
|
|
628
|
-
readonly onGold: "var(--idos-ui-on-gold)";
|
|
629
|
-
readonly onBlue: "var(--idos-ui-on-blue)";
|
|
630
|
-
readonly onRed: "var(--idos-ui-on-red)";
|
|
631
|
-
readonly onGreenOutline: "var(--idos-ui-on-green-outline)";
|
|
632
|
-
readonly onGoldOutline: "var(--idos-ui-on-gold-outline)";
|
|
633
|
-
readonly onBlueOutline: "var(--idos-ui-on-blue-outline)";
|
|
634
|
-
readonly onRedOutline: "var(--idos-ui-on-red-outline)";
|
|
635
|
-
readonly textOutline: "var(--idos-ui-text-outline)";
|
|
636
|
-
readonly line: "var(--idos-ui-line)";
|
|
637
|
-
readonly well: "var(--idos-ui-well)";
|
|
638
|
-
readonly wellSoft: "var(--idos-ui-well-soft)";
|
|
639
|
-
readonly wellShadow: "var(--idos-ui-well-shadow)";
|
|
640
|
-
readonly edge: "var(--idos-ui-edge)";
|
|
641
|
-
readonly glow: "var(--idos-ui-glow)";
|
|
642
|
-
readonly panelShadow: "var(--idos-ui-panel-shadow)";
|
|
643
|
-
readonly radius: "var(--idos-ui-radius)";
|
|
644
|
-
readonly buttonRadius: "var(--idos-ui-button-radius)";
|
|
645
|
-
readonly font: "var(--idos-ui-font)";
|
|
646
|
-
readonly fast: "var(--idos-ui-fast)";
|
|
647
|
-
readonly normal: "var(--idos-ui-normal)";
|
|
648
|
-
readonly slow: "var(--idos-ui-slow)";
|
|
649
|
-
};
|
|
650
|
-
/**
|
|
651
|
-
* Bold text in the theme's text colour with the casual "outline" for readability over art — the
|
|
652
|
-
* outline is a theme token (`textOutline`): on light text a dark outline, on dark text none, so a
|
|
653
|
-
* light theme's dark letters never get a dark double.
|
|
654
|
-
*/
|
|
655
|
-
declare const outlined: CSSProperties;
|
|
656
|
-
/** The glossy card every panel uses. */
|
|
657
|
-
declare const panel: CSSProperties;
|
|
658
|
-
/** Full-screen background of a screen. */
|
|
659
|
-
declare const screenBackground: string;
|
|
660
|
-
/** A recessed chip/slot (balances, round icon buttons). */
|
|
661
|
-
declare const well: CSSProperties;
|
|
662
|
-
/** Easing with an overshoot — the "pop" of casual games. */
|
|
663
|
-
declare const EASE_POP = "cubic-bezier(.2, .9, .3, 1.25)";
|
|
664
|
-
declare const EASE_OUT = "cubic-bezier(.2, .8, .2, 1)";
|
|
665
|
-
declare const EASE_IN = "cubic-bezier(.5, 0, .75, .2)";
|
|
666
|
-
/**
|
|
667
|
-
* Keyframes and the few class-based effects inline styles cannot express. Overshoots are written as
|
|
668
|
-
* `calc(1 + X * var(--idos-ui-k))`, so `motion.intensity` 0 flattens them and 2 doubles them.
|
|
669
|
-
*/
|
|
670
|
-
declare const KIT_CSS = "\n@keyframes idos-pop-in { 0% { transform: scale(.7); opacity: 0 } 65% { transform: scale(calc(1 + .06 * var(--idos-ui-k, 1))); opacity: 1 } 100% { transform: scale(1); opacity: 1 } }\n@keyframes idos-pop-out { 0% { transform: scale(1); opacity: 1 } 30% { transform: scale(calc(1 + .03 * var(--idos-ui-k, 1))) } 100% { transform: scale(.75); opacity: 0 } }\n@keyframes idos-fade-in { from { opacity: 0 } to { opacity: 1 } }\n@keyframes idos-fade-out { from { opacity: 1 } to { opacity: 0 } }\n@keyframes idos-rise-in { from { transform: translateY(14px); opacity: 0 } to { transform: none; opacity: 1 } }\n@keyframes idos-drop-in { 0% { transform: translateY(-16px) scale(.97); opacity: 0 } 70% { transform: translateY(calc(2px * var(--idos-ui-k, 1))); opacity: 1 } 100% { transform: none; opacity: 1 } }\n@keyframes idos-drop-out { from { transform: none; opacity: 1 } to { transform: translateY(-10px) scale(.97); opacity: 0 } }\n@keyframes idos-timer { from { transform: scaleX(1) } to { transform: scaleX(0) } }\n@keyframes idos-sheet-in { 0% { transform: translateY(100%) } 75% { transform: translateY(calc(-2% * var(--idos-ui-k, 1))) } 100% { transform: none } }\n@keyframes idos-sheet-out { from { transform: none } to { transform: translateY(100%) } }\n@keyframes idos-window-in { from { transform: translateY(24px) scale(.98); opacity: 0 } to { transform: none; opacity: 1 } }\n@keyframes idos-window-out { from { transform: none; opacity: 1 } to { transform: translateY(24px) scale(.98); opacity: 0 } }\n@keyframes idos-bounce { 0%, 100% { transform: translateY(0) rotate(0) } 50% { transform: translateY(calc(-1px * var(--idos-float-amp, 5) * var(--idos-ui-k, 1))) rotate(calc(1deg * var(--idos-float-tilt, 0) * var(--idos-ui-k, 1))) } }\n@keyframes idos-shine { 0% { transform: translateX(-120%) skewX(-20deg) } 60%, 100% { transform: translateX(220%) skewX(-20deg) } }\n@keyframes idos-spin { to { transform: rotate(360deg) } }\n@keyframes idos-glow { 0%, 100% { box-shadow: 0 0 0 0 transparent } 50% { box-shadow: 0 0 18px 4px color-mix(in srgb, var(--idos-ui-gold) 55%, transparent) } }\n@keyframes idos-pulse { 0%, 100% { transform: scale(1) } 50% { transform: scale(calc(1 + .18 * var(--idos-ui-k, 1))) } }\n@keyframes idos-bump { 0% { transform: scale(1) } 40% { transform: scale(calc(1 + .22 * var(--idos-ui-k, 1))) } 100% { transform: scale(1) } }\n@keyframes idos-shake { 0%, 100% { transform: rotate(0) } 20% { transform: rotate(calc(-9deg * var(--idos-ui-k, 1))) } 40% { transform: rotate(calc(8deg * var(--idos-ui-k, 1))) } 60% { transform: rotate(calc(-6deg * var(--idos-ui-k, 1))) } 80% { transform: rotate(calc(4deg * var(--idos-ui-k, 1))) } }\n@keyframes idos-star { 0% { transform: scale(0) rotate(-40deg) } 60% { transform: scale(calc(1 + .15 * var(--idos-ui-k, 1))) rotate(8deg) } 100% { transform: scale(1) rotate(0) } }\n@keyframes idos-rays { to { transform: rotate(360deg) } }\n.idos-press { transition: transform var(--idos-ui-fast) ease, filter var(--idos-ui-fast) ease; -webkit-tap-highlight-color: transparent; touch-action: manipulation }\n.idos-press:not(:disabled):hover { filter: brightness(1.07) }\n.idos-press:not(:disabled):active { transform: translateY(3px) scale(.96); filter: brightness(.95); transition-duration: 40ms }\n.idos-shine { position: relative; overflow: hidden }\n.idos-shine::after { content: \"\"; position: absolute; top: 0; bottom: 0; width: 40%; left: 0; pointer-events: none;\n background: linear-gradient(90deg, transparent, rgba(255,255,255,.28), transparent);\n animation: idos-shine calc(var(--idos-ui-slow) * var(--idos-shine-speed, 6)) ease-in-out calc(var(--idos-ui-slow) * var(--idos-shine-phase, 0)) infinite }\n.idos-bounce { animation: idos-bounce calc(var(--idos-ui-slow) * var(--idos-float-speed, 2.1)) ease-in-out calc(var(--idos-ui-slow) * var(--idos-float-phase, 0)) infinite }\n.idos-glow { animation: idos-glow calc(var(--idos-ui-slow) * var(--idos-float-speed, 2.1) * 1.4) ease-in-out calc(var(--idos-ui-slow) * var(--idos-float-phase, 0)) infinite }\n.idos-pulse { animation: idos-pulse calc(var(--idos-ui-slow) * var(--idos-float-speed, 2.1)) ease-in-out calc(var(--idos-ui-slow) * var(--idos-float-phase, 0)) infinite }\n.idos-bump { animation: idos-bump var(--idos-ui-normal) ease-out }\n.idos-scroll { scrollbar-width: thin; scrollbar-color: var(--idos-ui-panel-edge) transparent; overscroll-behavior: contain }\n.idos-scroll::-webkit-scrollbar { width: 6px; height: 6px }\n.idos-scroll::-webkit-scrollbar-thumb { background: var(--idos-ui-panel-edge); border-radius: 3px }\n[data-idos-motion=\"off\"] .idos-shine::after, [data-idos-motion=\"off\"] .idos-bounce, [data-idos-motion=\"off\"] .idos-glow, [data-idos-motion=\"off\"] .idos-pulse, [data-idos-motion=\"off\"] .idos-bump { animation: none }\n";
|
|
671
|
-
|
|
672
|
-
/** The layout for the element's current width, following it as it resizes. */
|
|
673
|
-
declare function useLayout(ref: {
|
|
674
|
-
current: HTMLElement | null;
|
|
675
|
-
}): Layout;
|
|
676
|
-
/** Layout of the whole game (the kit layer covers it). */
|
|
677
|
-
declare function useGameLayout(): Layout;
|
|
678
|
-
/**
|
|
679
|
-
* Keeps something on screen until its exit animation has played: `open` false → `closing` true for
|
|
680
|
-
* the exit duration, then `mounted` false. With motion off the exit is instant.
|
|
681
|
-
*/
|
|
682
|
-
declare function usePresence(open: boolean, exitMs: number): {
|
|
683
|
-
mounted: boolean;
|
|
684
|
-
closing: boolean;
|
|
685
|
-
};
|
|
686
|
-
/** Ticks a number towards its new value — balances "count" like in the Unity HUD. */
|
|
687
|
-
declare function useAnimatedNumber(target: number, durationMs?: number, onTick?: () => void): number;
|
|
688
|
-
/**
|
|
689
|
-
* The value a counter shows: frozen while reward icons fly to it (so it ticks when they LAND), then
|
|
690
|
-
* animated to the real amount with a tick sound.
|
|
691
|
-
*/
|
|
692
|
-
declare function useCounterValue(counterKey: string, amount: number): number;
|
|
693
|
-
interface Catalog {
|
|
694
|
-
items: Map<string, ItemDefinitionView>;
|
|
695
|
-
currencies: NonNullable<CurrencySection["VirtualCurrencies"]>;
|
|
696
|
-
/** The publisher's text through the title's localization, when it is a localization key. */
|
|
697
|
-
localize(text: string | null | undefined): string;
|
|
698
|
-
currencyName(id: string): string;
|
|
699
|
-
itemName(id: string): string;
|
|
700
|
-
/** Glyph or image for a resource line: the title's ImagePath when set, else a fitting glyph. */
|
|
701
|
-
iconOf(line: ResourceLine): Glyph | string;
|
|
702
|
-
rarityColor(rarity: string | null | undefined): string;
|
|
703
|
-
}
|
|
704
|
-
/** Names and icons of the title's currencies and items, from the configuration the client loaded. */
|
|
705
|
-
declare function useCatalog(): Catalog;
|
|
706
|
-
/** The player's currency balances (id → amount), live; only currencies the title defines. */
|
|
707
|
-
declare function useBalances(): Array<[string, number]>;
|
|
708
|
-
/** Re-renders every `ms` — for countdowns. */
|
|
709
|
-
declare function useNow(ms?: number): number;
|
|
710
|
-
|
|
711
623
|
type ButtonTone = "green" | "gold" | "blue" | "red" | "grey";
|
|
712
624
|
/** Text colour and its outline on a filled surface of each tone (theme tokens `onGreen`, …). */
|
|
713
625
|
declare const ON_TONE: Record<ButtonTone, {
|
|
@@ -847,6 +759,185 @@ declare function Card({ children, style, highlight, onClick, }: {
|
|
|
847
759
|
highlight?: boolean;
|
|
848
760
|
onClick?: () => void;
|
|
849
761
|
}): ReactNode;
|
|
762
|
+
/** A one-line text (or number) field. `style` overrides the kit's look per use (width, size). */
|
|
763
|
+
declare function TextInput({ style, ...rest }: InputHTMLAttributes<HTMLInputElement>): ReactNode;
|
|
764
|
+
/** A multi-line text field. */
|
|
765
|
+
declare function TextArea({ style, ...rest }: TextareaHTMLAttributes<HTMLTextAreaElement>): ReactNode;
|
|
766
|
+
/** A label above a control (a field of a form). */
|
|
767
|
+
declare function Field({ label, children, }: {
|
|
768
|
+
label: string;
|
|
769
|
+
children: ReactNode;
|
|
770
|
+
}): ReactNode;
|
|
771
|
+
/**
|
|
772
|
+
* A crypto balance chip: the TOTAL (backed crypto + its IOU) — one number, like any balance; hover
|
|
773
|
+
* (a tap on a phone) shows the split. The IOU part is virtual until the developer backs it.
|
|
774
|
+
*/
|
|
775
|
+
declare function CryptoBalanceChip({ currencyID, size, align, }: {
|
|
776
|
+
currencyID: string;
|
|
777
|
+
size?: number;
|
|
778
|
+
/** Which edge of the chip the popover lines up with. */
|
|
779
|
+
align?: "left" | "right";
|
|
780
|
+
}): ReactNode;
|
|
781
|
+
|
|
782
|
+
type UiLanguage = "en" | "ru";
|
|
783
|
+
declare function pickLanguage(): UiLanguage;
|
|
784
|
+
/**
|
|
785
|
+
* A module's string table: `const t = makeT(EN, RU)`, then `t("buy")`. The Russian table must have
|
|
786
|
+
* every key of the English one (the type says so), so a missing translation is a compile error.
|
|
787
|
+
*/
|
|
788
|
+
declare function makeT<K extends string>(en: Record<K, string>, ru: Record<K, string>, language?: UiLanguage): (key: K) => string;
|
|
789
|
+
/**
|
|
790
|
+
* The word for a count, from a table entry of forms split by "|": English "lot|lots", Russian
|
|
791
|
+
* "лот|лота|лотов" (one / few / many — 1, 2–4, 5+). `plural(21, t("lots"))` → "лот".
|
|
792
|
+
*/
|
|
793
|
+
declare function plural(n: number, forms: string, language?: UiLanguage): string;
|
|
794
|
+
declare const EN: {
|
|
795
|
+
readonly close: "Close";
|
|
796
|
+
readonly back: "Back";
|
|
797
|
+
readonly confirm: "Confirm";
|
|
798
|
+
readonly cancel: "Cancel";
|
|
799
|
+
readonly youGot: "You got";
|
|
800
|
+
readonly great: "Great!";
|
|
801
|
+
readonly loading: "Loading…";
|
|
802
|
+
readonly ok: "OK";
|
|
803
|
+
readonly loadingNamed: "Loading {name}…";
|
|
804
|
+
readonly stillLoading: "Still loading — the first start can take a little longer";
|
|
805
|
+
readonly retry: "Retry";
|
|
806
|
+
readonly error: "Something went wrong";
|
|
807
|
+
readonly notEnough: "Not enough resources";
|
|
808
|
+
readonly offline: "No connection. Retrying…";
|
|
809
|
+
readonly more: "More";
|
|
810
|
+
readonly menu: "Menu";
|
|
811
|
+
readonly nothingHere: "Nothing here yet";
|
|
812
|
+
readonly economy: "Economy";
|
|
813
|
+
readonly events: "Activities";
|
|
814
|
+
readonly social: "Social";
|
|
815
|
+
readonly profile: "Profile";
|
|
816
|
+
readonly other: "Other";
|
|
817
|
+
readonly free: "Free";
|
|
818
|
+
readonly claim: "Claim";
|
|
819
|
+
readonly claimAll: "Claim all";
|
|
820
|
+
readonly tokenEvent: "Event points";
|
|
821
|
+
readonly tokenSeason: "Season status";
|
|
822
|
+
readonly tokenQuest: "Quest points";
|
|
823
|
+
readonly tokenScore: "Rating points";
|
|
824
|
+
readonly cryptoTotal: "Balance";
|
|
825
|
+
readonly cryptoBacked: "Crypto";
|
|
826
|
+
readonly cryptoUnbacked: "IOU (not backed yet)";
|
|
827
|
+
readonly cryptoIouHint: "IOUs spend in the app like crypto; the developer backs them with real crypto later.";
|
|
828
|
+
};
|
|
829
|
+
type UiStringKey = keyof typeof EN;
|
|
830
|
+
/** Strings of the kit itself. */
|
|
831
|
+
declare const uiT: (key: "close" | "claim" | "error" | "events" | "other" | "back" | "confirm" | "cancel" | "youGot" | "great" | "loading" | "ok" | "loadingNamed" | "stillLoading" | "retry" | "notEnough" | "offline" | "more" | "menu" | "nothingHere" | "economy" | "social" | "profile" | "free" | "claimAll" | "tokenEvent" | "tokenSeason" | "tokenQuest" | "tokenScore" | "cryptoTotal" | "cryptoBacked" | "cryptoUnbacked" | "cryptoIouHint") => string;
|
|
832
|
+
/** Turns a server error into words the player understands; long texts are cut. */
|
|
833
|
+
declare function errorText(error: string | null | undefined): string;
|
|
834
|
+
|
|
835
|
+
/** CSS variables of a resolved config, to put on the kit root. */
|
|
836
|
+
declare function themeVars(config: UiKitConfig, reducedMotion: boolean): CSSProperties;
|
|
837
|
+
/** Shorthands for inline styles, so components never spell a variable name twice. */
|
|
838
|
+
declare const v: {
|
|
839
|
+
readonly bgTop: "var(--idos-ui-bg-top)";
|
|
840
|
+
readonly bgBottom: "var(--idos-ui-bg-bottom)";
|
|
841
|
+
readonly panel: "var(--idos-ui-panel)";
|
|
842
|
+
readonly panelDeep: "var(--idos-ui-panel-deep)";
|
|
843
|
+
readonly panelEdge: "var(--idos-ui-panel-edge)";
|
|
844
|
+
readonly text: "var(--idos-ui-text)";
|
|
845
|
+
readonly textDim: "var(--idos-ui-text-dim)";
|
|
846
|
+
readonly gold: "var(--idos-ui-gold)";
|
|
847
|
+
readonly goldDeep: "var(--idos-ui-gold-deep)";
|
|
848
|
+
readonly green: "var(--idos-ui-green)";
|
|
849
|
+
readonly greenDeep: "var(--idos-ui-green-deep)";
|
|
850
|
+
readonly blue: "var(--idos-ui-blue)";
|
|
851
|
+
readonly blueDeep: "var(--idos-ui-blue-deep)";
|
|
852
|
+
readonly red: "var(--idos-ui-red)";
|
|
853
|
+
readonly redDeep: "var(--idos-ui-red-deep)";
|
|
854
|
+
readonly shadow: "var(--idos-ui-shadow)";
|
|
855
|
+
readonly backdrop: "var(--idos-ui-backdrop)";
|
|
856
|
+
readonly onGreen: "var(--idos-ui-on-green)";
|
|
857
|
+
readonly onGold: "var(--idos-ui-on-gold)";
|
|
858
|
+
readonly onBlue: "var(--idos-ui-on-blue)";
|
|
859
|
+
readonly onRed: "var(--idos-ui-on-red)";
|
|
860
|
+
readonly onGreenOutline: "var(--idos-ui-on-green-outline)";
|
|
861
|
+
readonly onGoldOutline: "var(--idos-ui-on-gold-outline)";
|
|
862
|
+
readonly onBlueOutline: "var(--idos-ui-on-blue-outline)";
|
|
863
|
+
readonly onRedOutline: "var(--idos-ui-on-red-outline)";
|
|
864
|
+
readonly textOutline: "var(--idos-ui-text-outline)";
|
|
865
|
+
readonly line: "var(--idos-ui-line)";
|
|
866
|
+
readonly well: "var(--idos-ui-well)";
|
|
867
|
+
readonly wellSoft: "var(--idos-ui-well-soft)";
|
|
868
|
+
readonly wellShadow: "var(--idos-ui-well-shadow)";
|
|
869
|
+
readonly edge: "var(--idos-ui-edge)";
|
|
870
|
+
readonly glow: "var(--idos-ui-glow)";
|
|
871
|
+
readonly panelShadow: "var(--idos-ui-panel-shadow)";
|
|
872
|
+
readonly radius: "var(--idos-ui-radius)";
|
|
873
|
+
readonly buttonRadius: "var(--idos-ui-button-radius)";
|
|
874
|
+
readonly font: "var(--idos-ui-font)";
|
|
875
|
+
readonly fast: "var(--idos-ui-fast)";
|
|
876
|
+
readonly normal: "var(--idos-ui-normal)";
|
|
877
|
+
readonly slow: "var(--idos-ui-slow)";
|
|
878
|
+
};
|
|
879
|
+
/**
|
|
880
|
+
* Bold text in the theme's text colour with the casual "outline" for readability over art — the
|
|
881
|
+
* outline is a theme token (`textOutline`): on light text a dark outline, on dark text none, so a
|
|
882
|
+
* light theme's dark letters never get a dark double.
|
|
883
|
+
*/
|
|
884
|
+
declare const outlined: CSSProperties;
|
|
885
|
+
/** The glossy card every panel uses. */
|
|
886
|
+
declare const panel: CSSProperties;
|
|
887
|
+
/** Full-screen background of a screen. */
|
|
888
|
+
declare const screenBackground: string;
|
|
889
|
+
/** A recessed chip/slot (balances, round icon buttons). */
|
|
890
|
+
declare const well: CSSProperties;
|
|
891
|
+
/** Easing with an overshoot — the "pop" of casual games. */
|
|
892
|
+
declare const EASE_POP = "cubic-bezier(.2, .9, .3, 1.25)";
|
|
893
|
+
declare const EASE_OUT = "cubic-bezier(.2, .8, .2, 1)";
|
|
894
|
+
declare const EASE_IN = "cubic-bezier(.5, 0, .75, .2)";
|
|
895
|
+
/**
|
|
896
|
+
* Keyframes and the few class-based effects inline styles cannot express. Overshoots are written as
|
|
897
|
+
* `calc(1 + X * var(--idos-ui-k))`, so `motion.intensity` 0 flattens them and 2 doubles them.
|
|
898
|
+
*/
|
|
899
|
+
declare const KIT_CSS = "\n@keyframes idos-pop-in { 0% { transform: scale(.7); opacity: 0 } 65% { transform: scale(calc(1 + .06 * var(--idos-ui-k, 1))); opacity: 1 } 100% { transform: scale(1); opacity: 1 } }\n@keyframes idos-pop-out { 0% { transform: scale(1); opacity: 1 } 30% { transform: scale(calc(1 + .03 * var(--idos-ui-k, 1))) } 100% { transform: scale(.75); opacity: 0 } }\n@keyframes idos-fade-in { from { opacity: 0 } to { opacity: 1 } }\n@keyframes idos-fade-out { from { opacity: 1 } to { opacity: 0 } }\n@keyframes idos-rise-in { from { transform: translateY(14px); opacity: 0 } to { transform: none; opacity: 1 } }\n@keyframes idos-drop-in { 0% { transform: translateY(-16px) scale(.97); opacity: 0 } 70% { transform: translateY(calc(2px * var(--idos-ui-k, 1))); opacity: 1 } 100% { transform: none; opacity: 1 } }\n@keyframes idos-drop-out { from { transform: none; opacity: 1 } to { transform: translateY(-10px) scale(.97); opacity: 0 } }\n@keyframes idos-timer { from { transform: scaleX(1) } to { transform: scaleX(0) } }\n@keyframes idos-sheet-in { 0% { transform: translateY(100%) } 75% { transform: translateY(calc(-2% * var(--idos-ui-k, 1))) } 100% { transform: none } }\n@keyframes idos-sheet-out { from { transform: none } to { transform: translateY(100%) } }\n@keyframes idos-window-in { from { transform: translateY(24px) scale(.98); opacity: 0 } to { transform: none; opacity: 1 } }\n@keyframes idos-window-out { from { transform: none; opacity: 1 } to { transform: translateY(24px) scale(.98); opacity: 0 } }\n@keyframes idos-bounce { 0%, 100% { transform: translateY(0) rotate(0) } 50% { transform: translateY(calc(-1px * var(--idos-float-amp, 5) * var(--idos-ui-k, 1))) rotate(calc(1deg * var(--idos-float-tilt, 0) * var(--idos-ui-k, 1))) } }\n@keyframes idos-shine { 0% { transform: translateX(-120%) skewX(-20deg) } 60%, 100% { transform: translateX(220%) skewX(-20deg) } }\n@keyframes idos-spin { to { transform: rotate(360deg) } }\n@keyframes idos-glow { 0%, 100% { box-shadow: 0 0 0 0 transparent } 50% { box-shadow: 0 0 18px 4px color-mix(in srgb, var(--idos-ui-gold) 55%, transparent) } }\n@keyframes idos-pulse { 0%, 100% { transform: scale(1) } 50% { transform: scale(calc(1 + .18 * var(--idos-ui-k, 1))) } }\n@keyframes idos-bump { 0% { transform: scale(1) } 40% { transform: scale(calc(1 + .22 * var(--idos-ui-k, 1))) } 100% { transform: scale(1) } }\n@keyframes idos-shake { 0%, 100% { transform: rotate(0) } 20% { transform: rotate(calc(-9deg * var(--idos-ui-k, 1))) } 40% { transform: rotate(calc(8deg * var(--idos-ui-k, 1))) } 60% { transform: rotate(calc(-6deg * var(--idos-ui-k, 1))) } 80% { transform: rotate(calc(4deg * var(--idos-ui-k, 1))) } }\n@keyframes idos-star { 0% { transform: scale(0) rotate(-40deg) } 60% { transform: scale(calc(1 + .15 * var(--idos-ui-k, 1))) rotate(8deg) } 100% { transform: scale(1) rotate(0) } }\n@keyframes idos-rays { to { transform: rotate(360deg) } }\n.idos-press { transition: transform var(--idos-ui-fast) ease, filter var(--idos-ui-fast) ease; -webkit-tap-highlight-color: transparent; touch-action: manipulation }\n.idos-press:not(:disabled):hover { filter: brightness(1.07) }\n.idos-press:not(:disabled):active { transform: translateY(3px) scale(.96); filter: brightness(.95); transition-duration: 40ms }\n.idos-shine { position: relative; overflow: hidden }\n.idos-shine::after { content: \"\"; position: absolute; top: 0; bottom: 0; width: 40%; left: 0; pointer-events: none;\n background: linear-gradient(90deg, transparent, rgba(255,255,255,.28), transparent);\n animation: idos-shine calc(var(--idos-ui-slow) * var(--idos-shine-speed, 6)) ease-in-out calc(var(--idos-ui-slow) * var(--idos-shine-phase, 0)) infinite }\n.idos-bounce { animation: idos-bounce calc(var(--idos-ui-slow) * var(--idos-float-speed, 2.1)) ease-in-out calc(var(--idos-ui-slow) * var(--idos-float-phase, 0)) infinite }\n.idos-glow { animation: idos-glow calc(var(--idos-ui-slow) * var(--idos-float-speed, 2.1) * 1.4) ease-in-out calc(var(--idos-ui-slow) * var(--idos-float-phase, 0)) infinite }\n.idos-pulse { animation: idos-pulse calc(var(--idos-ui-slow) * var(--idos-float-speed, 2.1)) ease-in-out calc(var(--idos-ui-slow) * var(--idos-float-phase, 0)) infinite }\n.idos-bump { animation: idos-bump var(--idos-ui-normal) ease-out }\n.idos-scroll { scrollbar-width: thin; scrollbar-color: var(--idos-ui-panel-edge) transparent; overscroll-behavior: contain }\n.idos-scroll::-webkit-scrollbar { width: 6px; height: 6px }\n.idos-scroll::-webkit-scrollbar-thumb { background: var(--idos-ui-panel-edge); border-radius: 3px }\n[data-idos-motion=\"off\"] .idos-shine::after, [data-idos-motion=\"off\"] .idos-bounce, [data-idos-motion=\"off\"] .idos-glow, [data-idos-motion=\"off\"] .idos-pulse, [data-idos-motion=\"off\"] .idos-bump { animation: none }\n";
|
|
900
|
+
|
|
901
|
+
/** The layout for the element's current width, following it as it resizes. */
|
|
902
|
+
declare function useLayout(ref: {
|
|
903
|
+
current: HTMLElement | null;
|
|
904
|
+
}): Layout;
|
|
905
|
+
/** Layout of the whole game (the kit layer covers it). */
|
|
906
|
+
declare function useGameLayout(): Layout;
|
|
907
|
+
/**
|
|
908
|
+
* Keeps something on screen until its exit animation has played: `open` false → `closing` true for
|
|
909
|
+
* the exit duration, then `mounted` false. With motion off the exit is instant.
|
|
910
|
+
*/
|
|
911
|
+
declare function usePresence(open: boolean, exitMs: number): {
|
|
912
|
+
mounted: boolean;
|
|
913
|
+
closing: boolean;
|
|
914
|
+
};
|
|
915
|
+
/** Ticks a number towards its new value — balances "count" like in the Unity HUD. */
|
|
916
|
+
declare function useAnimatedNumber(target: number, durationMs?: number, onTick?: () => void): number;
|
|
917
|
+
/**
|
|
918
|
+
* The value a counter shows: frozen while reward icons fly to it (so it ticks when they LAND), then
|
|
919
|
+
* animated to the real amount with a tick sound.
|
|
920
|
+
*/
|
|
921
|
+
declare function useCounterValue(counterKey: string, amount: number): number;
|
|
922
|
+
interface Catalog {
|
|
923
|
+
items: Map<string, ItemDefinitionView>;
|
|
924
|
+
currencies: NonNullable<CurrencySection["VirtualCurrencies"]>;
|
|
925
|
+
/** The title's crypto currencies (names, icons, the trade fee). */
|
|
926
|
+
cryptoCurrencies: NonNullable<CurrencySection["CryptoCurrencies"]>;
|
|
927
|
+
/** The publisher's text through the title's localization, when it is a localization key. */
|
|
928
|
+
localize(text: string | null | undefined): string;
|
|
929
|
+
currencyName(id: string): string;
|
|
930
|
+
itemName(id: string): string;
|
|
931
|
+
/** Glyph or image for a resource line: the title's ImagePath when set, else a fitting glyph. */
|
|
932
|
+
iconOf(line: ResourceLine): Glyph | string;
|
|
933
|
+
rarityColor(rarity: string | null | undefined): string;
|
|
934
|
+
}
|
|
935
|
+
/** Names and icons of the title's currencies and items, from the configuration the client loaded. */
|
|
936
|
+
declare function useCatalog(): Catalog;
|
|
937
|
+
/** The player's currency balances (id → amount), live; only currencies the title defines. */
|
|
938
|
+
declare function useBalances(): Array<[string, number]>;
|
|
939
|
+
/** Re-renders every `ms` — for countdowns. */
|
|
940
|
+
declare function useNow(ms?: number): number;
|
|
850
941
|
|
|
851
942
|
/** Closes the popup this component is in, with its exit animation. */
|
|
852
943
|
declare function usePopupClose(): () => void;
|
|
@@ -917,4 +1008,4 @@ declare function FeatureGrid({ items, onOpen, }: {
|
|
|
917
1008
|
/** The theme tone of each level: colour of its badge, its stripe, its main button. */
|
|
918
1009
|
declare const LEVEL_TONE: Record<NotificationLevel, ButtonTone>;
|
|
919
1010
|
|
|
920
|
-
export { Badge, type Burst, Button, type ButtonProps, type ButtonTone, Card, type Catalog, type CelebrateOptions, Center, ConfirmPopup, type CurrencySection, DEFAULT_PLAYER_PREFS, DEFAULT_UI_CONFIG, DESKTOP_MIN_PX, EASE_IN, EASE_OUT, EASE_POP, EmptyState, FeatureGrid, type FeatureMenuItem, type Flight, FxStore, GLYPHS, type Glyph, Icon, IconButton, type ItemDefinitionView, type ItemSection, ItemTile, KIT_CSS, type KitNotify, type KitOverlayState, KitPortal, LEVEL_TONE, type Layout, type NotificationAction, type NotificationInput, type NotificationLevel, type NotificationSource, NotificationStore, ON_TONE, type Point, Popup, type PopupProps, ProgressBar, RARITY_ORDER, type ResolvedSound, ResourceBadge, ResourceCounter, type ResourceKind, type ResourceLine, ResourceList, SOUND_PRESETS, SectionTitle, type ShownNotification, Spinner, type SynthNoise, type SynthNote, type SynthPreset, TABLET_MIN_PX, TOAST_DURATION, type TabItem, Tabs, Timer, UI_SOUND_EVENTS, type UiKitConfig, type UiKitConfigInput, UiKitProvider, type UiKitProviderProps, type UiKitValue, type UiLanguage, type UiMotion, type UiMotionConfig, type UiPlayerPrefs, type UiSoundConfig, UiSoundEngine, type UiSoundEvent, type UiSoundSpec, type UiStringKey, type UiThemeConfig, Window, bundleLines, buttonStyle, canAfford, configSection, costLines, countdown, counterKeys, createNotificationStore, currencyGlyph, defineUiConfig, effectiveVolume, errorText, formatAmount, grantLines, grantedBy, groupBy, iconsFor, isGlyph, itemDefinitions, itemGlyph, layoutFor, makeT, mergeLines, motionDurations, outlined, panel, parsePlayerPrefs, pickLanguage, plural, rarityRank, renderKitOverlays, resolveSound, resolveUiConfig, resourceName, screenBackground, setAutoPopupsHeld, sortFeatures, themeVars, tokenGlyph, tokenName, tokenParts, toneSurface, uiT, useAnimatedNumber, useBalances, useCatalog, useCelebrate, useCounterValue, useGameLayout, useLayout, useMotion, useNotify, useNow, usePlayerPrefs, usePopupClose, usePresence, useSound, useStagger, useToast, useUiKit, v, well };
|
|
1011
|
+
export { Badge, type Burst, Button, type ButtonProps, type ButtonTone, Card, type Catalog, type CelebrateOptions, Center, ConfirmPopup, CryptoBalanceChip, type CryptoBalanceView, type CurrencySection, DEFAULT_PLAYER_PREFS, DEFAULT_UI_CONFIG, DESKTOP_MIN_PX, EASE_IN, EASE_OUT, EASE_POP, EmptyState, FeatureGrid, type FeatureMenuItem, Field, type Flight, FxStore, GLYPHS, type Glyph, Icon, IconButton, type ItemDefinitionView, type ItemSection, ItemTile, KIT_CSS, type KitNotify, type KitOverlayState, KitPortal, LEVEL_TONE, type Layout, type NotificationAction, type NotificationInput, type NotificationLevel, type NotificationSource, NotificationStore, ON_TONE, type Point, Popup, type PopupProps, ProgressBar, RARITY_ORDER, type ResolvedSound, ResourceBadge, ResourceCounter, type ResourceKind, type ResourceLine, ResourceList, SOUND_PRESETS, SectionTitle, type ShownNotification, Spinner, type SynthNoise, type SynthNote, type SynthPreset, TABLET_MIN_PX, TOAST_DURATION, type TabItem, Tabs, TextArea, TextInput, Timer, type TitleSections, UI_SOUND_EVENTS, type UiKitConfig, type UiKitConfigInput, UiKitProvider, type UiKitProviderProps, type UiKitValue, type UiLanguage, type UiMotion, type UiMotionConfig, type UiPlayerPrefs, type UiSoundConfig, UiSoundEngine, type UiSoundEvent, type UiSoundSpec, type UiStringKey, type UiThemeConfig, Window, bundleLines, buttonStyle, canAfford, configSection, costLines, countdown, counterKeys, createNotificationStore, cryptoBalance, currencyGlyph, defineUiConfig, effectiveVolume, errorText, formatAmount, formatCryptoAmount, grantLines, grantedBy, groupBy, iconsFor, iouCurrencies, iouCurrencyOf, isGlyph, itemDefinitions, itemGlyph, layoutFor, makeT, mergeLines, motionDurations, outlined, panel, parsePlayerPrefs, pickLanguage, plural, rarityRank, renderKitOverlays, resolveSound, resolveUiConfig, resourceName, screenBackground, setAutoPopupsHeld, sortFeatures, themeVars, tokenGlyph, tokenName, tokenParts, toneSurface, uiT, useAnimatedNumber, useBalances, useCatalog, useCelebrate, useCounterValue, useGameLayout, useLayout, useMotion, useNotify, useNow, usePlayerPrefs, usePopupClose, usePresence, useSound, useStagger, useToast, useUiKit, v, well };
|