@idosgames/react 0.5.2 → 0.6.1
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/FONT-LICENSE.txt +93 -0
- package/dist/ui/index.cjs +28 -6
- package/dist/ui/index.d.cts +289 -45
- package/dist/ui/index.d.ts +289 -45
- package/dist/ui/index.js +28 -6
- package/package.json +4 -3
package/dist/ui/index.d.ts
CHANGED
|
@@ -62,16 +62,30 @@ interface UiThemeConfig {
|
|
|
62
62
|
blueDeep: string;
|
|
63
63
|
red: string;
|
|
64
64
|
redDeep: string;
|
|
65
|
+
purple: string;
|
|
66
|
+
purpleDeep: string;
|
|
67
|
+
orange: string;
|
|
68
|
+
orangeDeep: string;
|
|
69
|
+
teal: string;
|
|
70
|
+
tealDeep: string;
|
|
65
71
|
shadow: string;
|
|
66
72
|
/** Dim of the screen behind a popup. */
|
|
67
73
|
backdrop: string;
|
|
74
|
+
/** The dark outline drawn around everything — buttons, panels, counters, the letters. */
|
|
75
|
+
ink: string;
|
|
76
|
+
/** The bottom menu bar. */
|
|
77
|
+
nav: string;
|
|
78
|
+
/** Thickness of that outline around buttons and panels, px. */
|
|
79
|
+
outline: number;
|
|
68
80
|
/** Text colour on a filled button of each tone. */
|
|
69
81
|
onGreen: string;
|
|
70
82
|
onGold: string;
|
|
71
83
|
onBlue: string;
|
|
72
84
|
onRed: string;
|
|
73
|
-
/** `text-shadow` of text on screens and panels: the casual dark
|
|
85
|
+
/** `text-shadow` of text on screens and panels: the casual dark drop on light text, none on dark. */
|
|
74
86
|
textOutline: string;
|
|
87
|
+
/** `-webkit-text-stroke` of that text: the ink outline of the letters on light text, none on dark. */
|
|
88
|
+
textStroke: string;
|
|
75
89
|
/** Thin line/border on a panel (dividers, outlines of chips). */
|
|
76
90
|
line: string;
|
|
77
91
|
/** Recessed background of counters, round icon buttons. */
|
|
@@ -134,7 +148,10 @@ type UiKitConfigInput = {
|
|
|
134
148
|
};
|
|
135
149
|
/** Typed helper for `src/ui.config.ts`: `export default defineUiConfig({ … })`. */
|
|
136
150
|
declare function defineUiConfig(config: UiKitConfigInput): UiKitConfigInput;
|
|
137
|
-
/** The default
|
|
151
|
+
/** The default ink: the near-black navy outline of the casual look. */
|
|
152
|
+
declare const INK = "#17193a";
|
|
153
|
+
/** The default look: Layer Lab "Vertical Casual" — bright blue-violet screens, chunky glossy plates
|
|
154
|
+
* with a heavy ink outline and a darker bottom lip, white letters outlined in ink (owner, 2026-10-22). */
|
|
138
155
|
declare const DEFAULT_UI_CONFIG: UiKitConfig;
|
|
139
156
|
/**
|
|
140
157
|
* Defaults ← project config, field by field. Out-of-range numbers are clamped (speed 0.1..5,
|
|
@@ -336,6 +353,8 @@ declare function canAfford(price: ResourceLine[], balances: Record<string, {
|
|
|
336
353
|
cryptoBalances?: Record<string, {
|
|
337
354
|
Amount?: number | string;
|
|
338
355
|
} | null | undefined> | null): boolean;
|
|
356
|
+
/** Amount of a resource line as text: "$5" for a crypto price in USD, else {@link formatAmount}. */
|
|
357
|
+
declare function formatLineAmount(line: ResourceLine): string;
|
|
339
358
|
/** 1234 → "1 234", 1_250_000 → "1.25M" — balances must fit a chip. */
|
|
340
359
|
declare function formatAmount(value: number): string;
|
|
341
360
|
/**
|
|
@@ -606,10 +625,13 @@ declare function UiKitProvider({ config: input, children, overlays, notification
|
|
|
606
625
|
|
|
607
626
|
declare function renderKitOverlays(state: KitOverlayState): ReactNode;
|
|
608
627
|
|
|
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"];
|
|
628
|
+
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", "home", "mail", "megaphone", "rune", "clapper", "info", "settings"];
|
|
610
629
|
type Glyph = (typeof GLYPHS)[number];
|
|
611
630
|
declare function isGlyph(value: string): value is Glyph;
|
|
612
|
-
/**
|
|
631
|
+
/**
|
|
632
|
+
* Glyph for a currency id: gems for "premium-looking" ids, energy for dice/energy, a potion for
|
|
633
|
+
* potions, a ticket for tickets and keys, a star for experience, coins for the rest.
|
|
634
|
+
*/
|
|
613
635
|
declare function currencyGlyph(currencyID: string): Glyph;
|
|
614
636
|
/** Glyph for an item by its tags or class (first known wins), else a box. */
|
|
615
637
|
declare function itemGlyph(tags: readonly string[] | null | undefined, itemClass?: string | null,
|
|
@@ -624,11 +646,18 @@ declare function Icon({ glyph: requested, size, color, fallback, }: {
|
|
|
624
646
|
fallback?: Glyph;
|
|
625
647
|
}): ReactNode;
|
|
626
648
|
|
|
627
|
-
|
|
649
|
+
/**
|
|
650
|
+
* The colours of buttons and filled surfaces — the eleven plates of the casual sheet. `grey` is the
|
|
651
|
+
* violet-grey of "Cancel" and of a disabled button, `silver` the neutral grey, `slate` the dark plate
|
|
652
|
+
* of close / back / menu buttons, `white` the white plate with blue letters.
|
|
653
|
+
*/
|
|
654
|
+
type ButtonTone = "green" | "gold" | "blue" | "red" | "grey" | "purple" | "orange" | "teal" | "white" | "silver" | "slate";
|
|
655
|
+
declare const TONES: Record<ButtonTone, [string, string]>;
|
|
628
656
|
/** Text colour and its outline on a filled surface of each tone (theme tokens `onGreen`, …). */
|
|
629
657
|
declare const ON_TONE: Record<ButtonTone, {
|
|
630
658
|
color: string;
|
|
631
659
|
textShadow: string;
|
|
660
|
+
WebkitTextStroke: string;
|
|
632
661
|
}>;
|
|
633
662
|
/**
|
|
634
663
|
* A surface filled with a tone of the theme (a hero banner, "your row", a highlighted day). Inside it
|
|
@@ -637,6 +666,8 @@ declare const ON_TONE: Record<ButtonTone, {
|
|
|
637
666
|
* saturated tone, dark ink on a pastel one. Never hard-code a banner colour in a module: pick a tone.
|
|
638
667
|
*/
|
|
639
668
|
declare function toneSurface(tone: ButtonTone): CSSProperties;
|
|
669
|
+
/** The glossy plate of a tone with the ink frame — a button, a coloured card, a chip. */
|
|
670
|
+
declare function tonePlate(tone: ButtonTone): CSSProperties;
|
|
640
671
|
declare function buttonStyle(tone: ButtonTone, disabled?: boolean, size?: "sm" | "md" | "lg"): CSSProperties;
|
|
641
672
|
interface ButtonProps {
|
|
642
673
|
children: ReactNode;
|
|
@@ -655,7 +686,7 @@ interface ButtonProps {
|
|
|
655
686
|
"data-tutorial-anchor"?: string;
|
|
656
687
|
}
|
|
657
688
|
declare function Button({ children, onClick, tone, size, disabled, busy, attract, style, className, sound, title, ...rest }: ButtonProps): ReactNode;
|
|
658
|
-
/**
|
|
689
|
+
/** Square icon button with rounded corners (close, back, menu) — the dark slate plate by default. */
|
|
659
690
|
declare function IconButton({ glyph, onClick, label, size, tone, style, badge, }: {
|
|
660
691
|
glyph: Glyph | string;
|
|
661
692
|
onClick: () => void;
|
|
@@ -668,7 +699,7 @@ declare function IconButton({ glyph, onClick, label, size, tone, style, badge, }
|
|
|
668
699
|
declare function Spinner({ size }: {
|
|
669
700
|
size?: number;
|
|
670
701
|
}): ReactNode;
|
|
671
|
-
/** Red "N" on a button — something to claim
|
|
702
|
+
/** Red "N" square on a button — something to claim. Hidden at 0. */
|
|
672
703
|
declare function Badge({ count, dot, style, }: {
|
|
673
704
|
count: number;
|
|
674
705
|
dot?: boolean;
|
|
@@ -704,7 +735,9 @@ declare function ResourceCounter({ currencyID, amount, size, onClick, }: {
|
|
|
704
735
|
size?: number;
|
|
705
736
|
onClick?: () => void;
|
|
706
737
|
}): ReactNode;
|
|
707
|
-
/**
|
|
738
|
+
/** The card of a rarity colour: a glossy plate of that colour in the ink frame (shop and reward cards). */
|
|
739
|
+
declare function rarityPlate(color: string): CSSProperties;
|
|
740
|
+
/** Item tile: a plate of its rarity colour, icon, count, optional level. */
|
|
708
741
|
declare function ItemTile({ itemID, count, level, onClick, size, selected, dim, }: {
|
|
709
742
|
itemID: string;
|
|
710
743
|
count?: number;
|
|
@@ -714,17 +747,22 @@ declare function ItemTile({ itemID, count, level, onClick, size, selected, dim,
|
|
|
714
747
|
selected?: boolean;
|
|
715
748
|
dim?: boolean;
|
|
716
749
|
}): ReactNode;
|
|
717
|
-
/**
|
|
750
|
+
/**
|
|
751
|
+
* The casual bar: a dark track in the ink frame, a glossy fill of the tone, the value written over
|
|
752
|
+
* it in outlined letters; the fill slides when the value changes.
|
|
753
|
+
*/
|
|
718
754
|
declare function ProgressBar({ value, max, tone, label, height, }: {
|
|
719
755
|
value: number;
|
|
720
756
|
max: number;
|
|
721
|
-
tone?:
|
|
757
|
+
tone?: ButtonTone;
|
|
722
758
|
label?: string;
|
|
723
759
|
height?: number;
|
|
724
760
|
}): ReactNode;
|
|
725
|
-
|
|
761
|
+
/** A section's banner — a ribbon of the tone with a swallowtail end — and actions on its right. */
|
|
762
|
+
declare function SectionTitle({ children, right, tone, }: {
|
|
726
763
|
children: ReactNode;
|
|
727
764
|
right?: ReactNode;
|
|
765
|
+
tone?: ButtonTone;
|
|
728
766
|
}): ReactNode;
|
|
729
767
|
declare function EmptyState({ glyph, text, action, }: {
|
|
730
768
|
glyph: Glyph | string;
|
|
@@ -747,7 +785,11 @@ interface TabItem<T extends string> {
|
|
|
747
785
|
glyph?: Glyph | string;
|
|
748
786
|
badge?: number;
|
|
749
787
|
}
|
|
750
|
-
/**
|
|
788
|
+
/**
|
|
789
|
+
* Segmented tabs (sections of one screen), as the sheet's "Daily | Challenge": one strip in the ink
|
|
790
|
+
* frame, the active segment white with blue letters and a light-blue underline, the rest blue.
|
|
791
|
+
* Up to four share the width equally and wrap a long name; more scroll sideways.
|
|
792
|
+
*/
|
|
751
793
|
declare function Tabs<T extends string>({ tabs, value, onChange, style, }: {
|
|
752
794
|
tabs: TabItem<T>[];
|
|
753
795
|
value: T;
|
|
@@ -849,10 +891,17 @@ declare const EN: {
|
|
|
849
891
|
readonly cryptoBacked: "Crypto";
|
|
850
892
|
readonly cryptoUnbacked: "IOU (not backed yet)";
|
|
851
893
|
readonly cryptoIouHint: "IOUs spend in the app like crypto; the developer backs them with real crypto later.";
|
|
894
|
+
readonly soldOut: "Sold out";
|
|
895
|
+
readonly on: "On";
|
|
896
|
+
readonly off: "Off";
|
|
897
|
+
readonly level: "Level";
|
|
898
|
+
readonly info: "Info";
|
|
899
|
+
readonly locked: "Locked";
|
|
900
|
+
readonly skip: "Skip";
|
|
852
901
|
};
|
|
853
902
|
type UiStringKey = keyof typeof EN;
|
|
854
903
|
/** Strings of the kit itself. */
|
|
855
|
-
declare const uiT: (key: "close" | "claim" | "error" | "events" | "cancel" | "offline" | "other" | "back" | "confirm" | "youGot" | "great" | "loading" | "ok" | "loadingNamed" | "stillLoading" | "retry" | "notEnough" | "dailyLimitReached" | "more" | "menu" | "nothingHere" | "economy" | "social" | "profile" | "free" | "claimAll" | "rewards" | "premium" | "tokenEvent" | "tokenSeason" | "tokenQuest" | "tokenScore" | "cryptoTotal" | "cryptoBacked" | "cryptoUnbacked" | "cryptoIouHint") => string;
|
|
904
|
+
declare const uiT: (key: "close" | "claim" | "error" | "events" | "on" | "info" | "cancel" | "offline" | "other" | "back" | "confirm" | "youGot" | "great" | "loading" | "ok" | "loadingNamed" | "stillLoading" | "retry" | "notEnough" | "dailyLimitReached" | "more" | "menu" | "nothingHere" | "economy" | "social" | "profile" | "free" | "claimAll" | "rewards" | "premium" | "tokenEvent" | "tokenSeason" | "tokenQuest" | "tokenScore" | "cryptoTotal" | "cryptoBacked" | "cryptoUnbacked" | "cryptoIouHint" | "soldOut" | "off" | "level" | "locked" | "skip") => string;
|
|
856
905
|
/** Turns a server error into words the player understands; long texts are cut. */
|
|
857
906
|
declare function errorText(error: string | null | undefined): string;
|
|
858
907
|
|
|
@@ -882,8 +931,18 @@ declare const v: {
|
|
|
882
931
|
readonly blueDeep: "var(--idos-ui-blue-deep)";
|
|
883
932
|
readonly red: "var(--idos-ui-red)";
|
|
884
933
|
readonly redDeep: "var(--idos-ui-red-deep)";
|
|
934
|
+
readonly purple: "var(--idos-ui-purple)";
|
|
935
|
+
readonly purpleDeep: "var(--idos-ui-purple-deep)";
|
|
936
|
+
readonly orange: "var(--idos-ui-orange)";
|
|
937
|
+
readonly orangeDeep: "var(--idos-ui-orange-deep)";
|
|
938
|
+
readonly teal: "var(--idos-ui-teal)";
|
|
939
|
+
readonly tealDeep: "var(--idos-ui-teal-deep)";
|
|
885
940
|
readonly shadow: "var(--idos-ui-shadow)";
|
|
886
941
|
readonly backdrop: "var(--idos-ui-backdrop)";
|
|
942
|
+
readonly ink: "var(--idos-ui-ink)";
|
|
943
|
+
readonly nav: "var(--idos-ui-nav)";
|
|
944
|
+
/** Thickness of the ink outline, as a CSS length. */
|
|
945
|
+
readonly outline: "var(--idos-ui-outline)";
|
|
887
946
|
readonly onGreen: "var(--idos-ui-on-green)";
|
|
888
947
|
readonly onGold: "var(--idos-ui-on-gold)";
|
|
889
948
|
readonly onBlue: "var(--idos-ui-on-blue)";
|
|
@@ -892,7 +951,15 @@ declare const v: {
|
|
|
892
951
|
readonly onGoldOutline: "var(--idos-ui-on-gold-outline)";
|
|
893
952
|
readonly onBlueOutline: "var(--idos-ui-on-blue-outline)";
|
|
894
953
|
readonly onRedOutline: "var(--idos-ui-on-red-outline)";
|
|
954
|
+
readonly onGreenStroke: "var(--idos-ui-on-green-stroke)";
|
|
955
|
+
readonly onGoldStroke: "var(--idos-ui-on-gold-stroke)";
|
|
956
|
+
readonly onBlueStroke: "var(--idos-ui-on-blue-stroke)";
|
|
957
|
+
readonly onRedStroke: "var(--idos-ui-on-red-stroke)";
|
|
958
|
+
/** The ink drop and stroke of white letters, whatever the theme's text is. */
|
|
959
|
+
readonly inkOutline: "var(--idos-ui-ink-outline)";
|
|
960
|
+
readonly inkStroke: "var(--idos-ui-ink-stroke)";
|
|
895
961
|
readonly textOutline: "var(--idos-ui-text-outline)";
|
|
962
|
+
readonly textStroke: "var(--idos-ui-text-stroke)";
|
|
896
963
|
readonly line: "var(--idos-ui-line)";
|
|
897
964
|
readonly well: "var(--idos-ui-well)";
|
|
898
965
|
readonly wellSoft: "var(--idos-ui-well-soft)";
|
|
@@ -913,11 +980,34 @@ declare const v: {
|
|
|
913
980
|
* light theme's dark letters never get a dark double.
|
|
914
981
|
*/
|
|
915
982
|
declare const outlined: CSSProperties;
|
|
916
|
-
/**
|
|
983
|
+
/** White letters with the ink outline on ANY background (a coloured plate, art) — whatever the theme's text. */
|
|
984
|
+
declare const inked: CSSProperties;
|
|
985
|
+
/** The heavy ink frame of buttons, plates and counters. */
|
|
986
|
+
declare const inkFrame: string;
|
|
987
|
+
/**
|
|
988
|
+
* A glossy plate of one colour, the look of every button and coloured card: a lighter top, the colour,
|
|
989
|
+
* the deep shade at the bottom with a darker inner lip, the ink frame, a short drop.
|
|
990
|
+
*/
|
|
991
|
+
declare function plate(top: string, deep: string): CSSProperties;
|
|
992
|
+
/** The card every panel uses: the theme's blue body, the ink frame, a lighter top edge. */
|
|
917
993
|
declare const panel: CSSProperties;
|
|
918
|
-
/**
|
|
994
|
+
/**
|
|
995
|
+
* A row of a list on a panel (letters, friends, ranks): a strip a shade deeper than the panel with a
|
|
996
|
+
* soft top light and a bottom shade — no frame of its own, the panel's frame holds the list.
|
|
997
|
+
*/
|
|
998
|
+
declare const listRow: CSSProperties;
|
|
999
|
+
/**
|
|
1000
|
+
* The casual background pattern as one background layer: semi-transparent white gear (swords,
|
|
1001
|
+
* shields, potions, gems, crowns…) on a 240px square tile, so moving it by whole tiles loops without
|
|
1002
|
+
* a seam (`idos-screen` / `.idos-pattern` move it by one).
|
|
1003
|
+
*/
|
|
1004
|
+
declare const GEAR_PATTERN: string;
|
|
1005
|
+
/**
|
|
1006
|
+
* Full-screen background of a screen: the gear pattern over the theme's glow and gradient. Give the
|
|
1007
|
+
* element `className="idos-screen"` and the pattern drifts (it stays still when motion is off).
|
|
1008
|
+
*/
|
|
919
1009
|
declare const screenBackground: string;
|
|
920
|
-
/** A recessed
|
|
1010
|
+
/** A recessed dark plate (balances, counters, bar tracks). */
|
|
921
1011
|
declare const well: CSSProperties;
|
|
922
1012
|
/** Easing with an overshoot — the "pop" of casual games. */
|
|
923
1013
|
declare const EASE_POP = "cubic-bezier(.2, .9, .3, 1.25)";
|
|
@@ -927,7 +1017,7 @@ declare const EASE_IN = "cubic-bezier(.5, 0, .75, .2)";
|
|
|
927
1017
|
* Keyframes and the few class-based effects inline styles cannot express. Overshoots are written as
|
|
928
1018
|
* `calc(1 + X * var(--idos-ui-k))`, so `motion.intensity` 0 flattens them and 2 doubles them.
|
|
929
1019
|
*/
|
|
930
|
-
declare const KIT_CSS
|
|
1020
|
+
declare const KIT_CSS: string;
|
|
931
1021
|
|
|
932
1022
|
/** The layout for the element's current width, following it as it resizes. */
|
|
933
1023
|
declare function useLayout(ref: {
|
|
@@ -970,6 +1060,159 @@ declare function useBalances(): Array<[string, number]>;
|
|
|
970
1060
|
/** Re-renders every `ms` — for countdowns. */
|
|
971
1061
|
declare function useNow(ms?: number): number;
|
|
972
1062
|
|
|
1063
|
+
/** The ink outline of a clipped shape (a clip-path cuts any border off): four hard drops around it. */
|
|
1064
|
+
declare function inkShadow(width?: number): string;
|
|
1065
|
+
/** The slanted dark "◀" tab at the left edge of a screen's header. */
|
|
1066
|
+
declare function BackButton({ onClick, label, style, }: {
|
|
1067
|
+
onClick: () => void;
|
|
1068
|
+
label?: string;
|
|
1069
|
+
style?: CSSProperties;
|
|
1070
|
+
}): ReactNode;
|
|
1071
|
+
/** A screen's header: the back tab, the title, whatever goes on the right (balances, a timer, "i"). */
|
|
1072
|
+
declare function ScreenHeader({ title, icon, onBack, right, style, }: {
|
|
1073
|
+
title: ReactNode;
|
|
1074
|
+
icon?: Glyph | string;
|
|
1075
|
+
onBack?: () => void;
|
|
1076
|
+
right?: ReactNode;
|
|
1077
|
+
style?: CSSProperties;
|
|
1078
|
+
}): ReactNode;
|
|
1079
|
+
/** A square light-blue tile in the ink frame holding an icon, a picture or a face (letters, friends). */
|
|
1080
|
+
declare function IconTile({ children, glyph, size, tone, style, }: {
|
|
1081
|
+
children?: ReactNode;
|
|
1082
|
+
glyph?: Glyph | string;
|
|
1083
|
+
size?: number;
|
|
1084
|
+
/** A tone instead of the light blue (a rarity, a highlight). */
|
|
1085
|
+
tone?: ButtonTone;
|
|
1086
|
+
style?: CSSProperties;
|
|
1087
|
+
}): ReactNode;
|
|
1088
|
+
/** A ribbon banner: the band of the tone, its folded tails behind, faint stars at both ends. */
|
|
1089
|
+
declare function Ribbon({ children, tone, stars, size, style, }: {
|
|
1090
|
+
children: ReactNode;
|
|
1091
|
+
tone?: ButtonTone;
|
|
1092
|
+
stars?: boolean;
|
|
1093
|
+
/** Font size; the ribbon scales with it. */
|
|
1094
|
+
size?: number;
|
|
1095
|
+
style?: CSSProperties;
|
|
1096
|
+
}): ReactNode;
|
|
1097
|
+
/** A slanted rarity tag ("Common", "Epic", "Mythic") in the rarity's colour. */
|
|
1098
|
+
declare function RarityTag({ label, color, size, }: {
|
|
1099
|
+
label: ReactNode;
|
|
1100
|
+
color: string;
|
|
1101
|
+
size?: number;
|
|
1102
|
+
}): ReactNode;
|
|
1103
|
+
/** The tilted "SOLD OUT" stamp over a card. */
|
|
1104
|
+
declare function SoldOutStamp({ size }: {
|
|
1105
|
+
size?: number;
|
|
1106
|
+
}): ReactNode;
|
|
1107
|
+
/** The ON / OFF switch: a blue track with "ON" and the white knob on the right, a dark one with "OFF". */
|
|
1108
|
+
declare function Toggle({ value, onChange, label, }: {
|
|
1109
|
+
value: boolean;
|
|
1110
|
+
onChange: (next: boolean) => void;
|
|
1111
|
+
/** For screen readers. */
|
|
1112
|
+
label?: string;
|
|
1113
|
+
}): ReactNode;
|
|
1114
|
+
/** A white speech bubble in the ink frame, the tail at one corner (hints, tutorials, tooltips). */
|
|
1115
|
+
declare function SpeechBubble({ children, tail, style, }: {
|
|
1116
|
+
children: ReactNode;
|
|
1117
|
+
tail?: "bottom-left" | "bottom-right" | "top-left" | "top-right" | "none";
|
|
1118
|
+
style?: CSSProperties;
|
|
1119
|
+
}): ReactNode;
|
|
1120
|
+
/** A hexagon of a tone in the ink frame — a reward slot of a level road, a level number. */
|
|
1121
|
+
declare function HexBadge({ children, tone, size, glow, style, }: {
|
|
1122
|
+
children?: ReactNode;
|
|
1123
|
+
tone?: ButtonTone;
|
|
1124
|
+
size?: number;
|
|
1125
|
+
/** The golden sparkle of the current step. */
|
|
1126
|
+
glow?: boolean;
|
|
1127
|
+
style?: CSSProperties;
|
|
1128
|
+
}): ReactNode;
|
|
1129
|
+
/** The level shield (the "3" before a bar): a shield of the tone with the number in it. */
|
|
1130
|
+
declare function LevelShield({ level, tone, size, }: {
|
|
1131
|
+
level: ReactNode;
|
|
1132
|
+
tone?: ButtonTone;
|
|
1133
|
+
size?: number;
|
|
1134
|
+
}): ReactNode;
|
|
1135
|
+
/** A level and the bar to the next one: the shield overlapping the bar's left end. */
|
|
1136
|
+
declare function LevelBar({ level, value, max, label, tone, height, style, }: {
|
|
1137
|
+
level: ReactNode;
|
|
1138
|
+
value: number;
|
|
1139
|
+
max: number;
|
|
1140
|
+
label?: string;
|
|
1141
|
+
tone?: ButtonTone;
|
|
1142
|
+
height?: number;
|
|
1143
|
+
style?: CSSProperties;
|
|
1144
|
+
}): ReactNode;
|
|
1145
|
+
/** "29 / 100 +": a count against its limit on a dark plate, a blue "+" to raise the limit. */
|
|
1146
|
+
declare function StepperCounter({ value, max, onPlus, }: {
|
|
1147
|
+
value: number;
|
|
1148
|
+
max: number;
|
|
1149
|
+
onPlus?: () => void;
|
|
1150
|
+
}): ReactNode;
|
|
1151
|
+
/** The round blue "i" — opens an explanation. */
|
|
1152
|
+
declare function InfoButton({ onClick, label, size, tone, }: {
|
|
1153
|
+
onClick: () => void;
|
|
1154
|
+
label?: string;
|
|
1155
|
+
size?: number;
|
|
1156
|
+
tone?: ButtonTone;
|
|
1157
|
+
}): ReactNode;
|
|
1158
|
+
/** A big square menu tile — an icon over its name on a dark-blue plate ("Ranking", "Mission", "Menu"). */
|
|
1159
|
+
declare function MenuTile({ glyph, label, onClick, badge, size, }: {
|
|
1160
|
+
glyph: Glyph | string;
|
|
1161
|
+
label?: ReactNode;
|
|
1162
|
+
onClick: () => void;
|
|
1163
|
+
badge?: number;
|
|
1164
|
+
size?: number;
|
|
1165
|
+
}): ReactNode;
|
|
1166
|
+
type RoadState = "done" | "current" | "next" | "locked";
|
|
1167
|
+
/**
|
|
1168
|
+
* One step of a level road ("25 Level" + its reward in a hexagon on the right): white for the next
|
|
1169
|
+
* one, gold and sparkling for the current, faded blue with a tick when taken, dim when far ahead.
|
|
1170
|
+
*/
|
|
1171
|
+
declare function LevelRoadRow({ level, label, reward, rewardLabel, state, tag, onClick, }: {
|
|
1172
|
+
level: ReactNode;
|
|
1173
|
+
label?: ReactNode;
|
|
1174
|
+
/** What is in the hexagon: an icon, a hero, a number. */
|
|
1175
|
+
reward?: ReactNode;
|
|
1176
|
+
/** The amount under it ("10,000", "x3"). */
|
|
1177
|
+
rewardLabel?: ReactNode;
|
|
1178
|
+
state: RoadState;
|
|
1179
|
+
/** A small red tag on the corner ("Next"). */
|
|
1180
|
+
tag?: ReactNode;
|
|
1181
|
+
onClick?: () => void;
|
|
1182
|
+
}): ReactNode;
|
|
1183
|
+
/**
|
|
1184
|
+
* The slowly drifting background pattern (semi-transparent white gear: swords, shields, potions…),
|
|
1185
|
+
* filling its positioned parent — put it as the first child of a screen's or a stage's backdrop. The
|
|
1186
|
+
* loop is seamless: the pattern is a 240px tile moved by exactly one tile a cycle. Stops when motion
|
|
1187
|
+
* is off.
|
|
1188
|
+
*/
|
|
1189
|
+
declare function MovingPattern({ style }: {
|
|
1190
|
+
style?: CSSProperties;
|
|
1191
|
+
}): ReactNode;
|
|
1192
|
+
/**
|
|
1193
|
+
* A list laid out for the width it gets — one column on a phone, two or three side by side on a
|
|
1194
|
+
* tablet or a PC — so a screen of rows or cards never stretches one line across a wide window.
|
|
1195
|
+
*
|
|
1196
|
+
* - `kind="cards"` (default): cards (offers, VIP passes, sets, players) in as many columns of at
|
|
1197
|
+
* least `min` px as fit, row after row.
|
|
1198
|
+
* - `kind="strips"`: edge-to-edge strips (quests, letters, market lots): one column — the strips
|
|
1199
|
+
* as they are; two or more — each strip becomes a framed card with a gap around it.
|
|
1200
|
+
* - `kind="ranked"`: an ordered list (a leaderboard): the order runs DOWN the first column, then
|
|
1201
|
+
* the next — 1…N on the left, N+1… on the right, never 1 | 2 across.
|
|
1202
|
+
*
|
|
1203
|
+
* Pure CSS (a container query on its own width), so it fits the area it is in — a page, a window,
|
|
1204
|
+
* a side panel — not the viewport.
|
|
1205
|
+
*/
|
|
1206
|
+
declare function Columns({ kind, min, gap, children, style, }: {
|
|
1207
|
+
kind?: "cards" | "strips" | "ranked";
|
|
1208
|
+
/** The narrowest a column gets, px (`cards` only; strips use 340, ranked lists 460). */
|
|
1209
|
+
min?: number;
|
|
1210
|
+
/** The space between items, px (`cards` — 10 by default; `ranked` — none by default). */
|
|
1211
|
+
gap?: number;
|
|
1212
|
+
children: ReactNode;
|
|
1213
|
+
style?: CSSProperties;
|
|
1214
|
+
}): ReactNode;
|
|
1215
|
+
|
|
973
1216
|
/** Closes the popup this component is in, with its exit animation. */
|
|
974
1217
|
declare function usePopupClose(): () => void;
|
|
975
1218
|
/** Renders into the kit layer; in place when there is no provider. */
|
|
@@ -987,7 +1230,7 @@ interface PopupProps {
|
|
|
987
1230
|
title?: ReactNode;
|
|
988
1231
|
/** Max width on tablet/desktop, px (default 400). */
|
|
989
1232
|
width?: number;
|
|
990
|
-
/** "auto" — a
|
|
1233
|
+
/** "auto" / "center" — a centred popup on every screen (default); "sheet" — a panel sliding up from the bottom. */
|
|
991
1234
|
variant?: "auto" | "center" | "sheet";
|
|
992
1235
|
/** Backdrop and Escape close it (default true when onClose is set). */
|
|
993
1236
|
dismissible?: boolean;
|
|
@@ -1040,38 +1283,39 @@ declare function FeatureGrid({ items, onOpen, }: {
|
|
|
1040
1283
|
declare const LEVEL_TONE: Record<NotificationLevel, ButtonTone>;
|
|
1041
1284
|
|
|
1042
1285
|
declare const U: {
|
|
1043
|
-
readonly ink: "
|
|
1044
|
-
readonly navy: "
|
|
1045
|
-
readonly navyDeep: "
|
|
1046
|
-
readonly blue: "
|
|
1047
|
-
readonly blueBody: "
|
|
1048
|
-
readonly sky: "
|
|
1049
|
-
readonly topbar: "
|
|
1050
|
-
readonly tabOn: "
|
|
1051
|
-
readonly tabOff: "#
|
|
1052
|
-
readonly bg: "
|
|
1053
|
-
readonly bgDeep: "
|
|
1054
|
-
readonly gold: "
|
|
1055
|
-
readonly listLight: "#
|
|
1056
|
-
readonly listBlue: "
|
|
1057
|
-
readonly listBlueInner: "#
|
|
1058
|
-
readonly listYellow: "#
|
|
1059
|
-
readonly listYellowInner: "
|
|
1060
|
-
readonly sliderBg: "
|
|
1061
|
-
readonly fillGreen: "
|
|
1062
|
-
readonly fillOrange: "
|
|
1286
|
+
readonly ink: "var(--idos-ui-ink)";
|
|
1287
|
+
readonly navy: "var(--idos-ui-panel-deep)";
|
|
1288
|
+
readonly navyDeep: "color-mix(in srgb, var(--idos-ui-panel-deep) 70%, var(--idos-ui-ink))";
|
|
1289
|
+
readonly blue: "var(--idos-ui-blue)";
|
|
1290
|
+
readonly blueBody: "var(--idos-ui-panel)";
|
|
1291
|
+
readonly sky: "var(--idos-ui-blue)";
|
|
1292
|
+
readonly topbar: "var(--idos-ui-bg-top)";
|
|
1293
|
+
readonly tabOn: "var(--idos-ui-blue)";
|
|
1294
|
+
readonly tabOff: "#45475f";
|
|
1295
|
+
readonly bg: "var(--idos-ui-bg-top)";
|
|
1296
|
+
readonly bgDeep: "var(--idos-ui-bg-bottom)";
|
|
1297
|
+
readonly gold: "var(--idos-ui-gold)";
|
|
1298
|
+
readonly listLight: "#ffffff";
|
|
1299
|
+
readonly listBlue: "var(--idos-ui-panel)";
|
|
1300
|
+
readonly listBlueInner: "color-mix(in srgb, var(--idos-ui-panel) 70%, #fff)";
|
|
1301
|
+
readonly listYellow: "color-mix(in srgb, var(--idos-ui-gold) 45%, #fff)";
|
|
1302
|
+
readonly listYellowInner: "var(--idos-ui-gold)";
|
|
1303
|
+
readonly sliderBg: "var(--idos-ui-well)";
|
|
1304
|
+
readonly fillGreen: "var(--idos-ui-green)";
|
|
1305
|
+
readonly fillOrange: "var(--idos-ui-orange)";
|
|
1063
1306
|
};
|
|
1064
1307
|
/** The reference's outlined game text (TMP with outline + a drop shadow). */
|
|
1065
1308
|
declare function uText(size: number, color?: string, stroke?: string): CSSProperties;
|
|
1066
|
-
/** The
|
|
1067
|
-
declare const U_PATTERN
|
|
1309
|
+
/** The soft glow laid over the screen backgrounds (the casual look has no stripes). */
|
|
1310
|
+
declare const U_PATTERN: string;
|
|
1068
1311
|
/** Gradient_Panel01 tinted: a radial glow over a solid, with the pattern on top. */
|
|
1069
1312
|
declare function uBackdrop(color?: string, glow?: string): CSSProperties;
|
|
1070
1313
|
/**
|
|
1071
|
-
* A lobby screen in the reference's look
|
|
1072
|
-
*
|
|
1073
|
-
*
|
|
1074
|
-
*
|
|
1314
|
+
* A lobby screen in the reference's look, from edge to edge of the lobby's scroll box and at least
|
|
1315
|
+
* as tall as it, with `footer` pinned to the bottom of the box (Unity's bottom tabs / my row). The
|
|
1316
|
+
* edges are read from the box's own padding — whatever the lobby's spacing at this width — so no
|
|
1317
|
+
* strip is left at the sides on a tablet or a monitor. On the default background the screen is see-
|
|
1318
|
+
* through: the lobby's own background (its moving gear pattern) shows, one pattern for the whole app.
|
|
1075
1319
|
*/
|
|
1076
1320
|
declare function UScreen({ children, footer, background, }: {
|
|
1077
1321
|
children: ReactNode;
|
|
@@ -1238,4 +1482,4 @@ declare const U_CSS = "\n@keyframes idos-u-spin { to { transform: rotate(360deg)
|
|
|
1238
1482
|
/** Renders U_CSS once per page (each U screen calls it; the tag is shared by id). */
|
|
1239
1483
|
declare function UStyles(): ReactNode;
|
|
1240
1484
|
|
|
1241
|
-
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, LANGUAGE_EVENT, LANGUAGE_KEY, LEVEL_TONE, LanguageSwitch, 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, Select, type ShownNotification, Spinner, type SynthNoise, type SynthNote, type SynthPreset, TABLET_MIN_PX, TOAST_DURATION, type TabItem, Tabs, TextArea, TextInput, Timer, type TitleSections, U, UAvatar, UButton, UCloseCircle, UDivider, UFlag, UHexRank, UI_SOUND_EVENTS, UIconSlider, UItemFrame, UMedal, type UMilestone, type UMilestoneState, UMilestonesPopup, UPopup, URankRow, type URankTone, URays, URibbon, URow, type URowTone, UScreen, USlider, UStyles, UTabs, UTimer, type UTone, UTopBar, U_CSS, U_PATTERN, 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, onLanguageChange, outlined, panel, parsePlayerPrefs, pickLanguage, plural, rarityRank, renderKitOverlays, resolveSound, resolveUiConfig, resourceName, screenBackground, setAutoPopupsHeld, setLanguage, sortFeatures, themeVars, tokenGlyph, tokenName, tokenParts, toneSurface, uBackdrop, uText, uiT, useAnimatedNumber, useBalances, useCatalog, useCelebrate, useCounterValue, useGameLayout, useLanguage, useLayout, useMotion, useNotify, useNow, usePlayerPrefs, usePopupClose, usePresence, useSound, useStagger, useToast, useUiKit, v, well };
|
|
1485
|
+
export { BackButton, Badge, type Burst, Button, type ButtonProps, type ButtonTone, Card, type Catalog, type CelebrateOptions, Center, Columns, 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, GEAR_PATTERN, GLYPHS, type Glyph, HexBadge, INK, Icon, IconButton, IconTile, InfoButton, type ItemDefinitionView, type ItemSection, ItemTile, KIT_CSS, type KitNotify, type KitOverlayState, KitPortal, LANGUAGE_EVENT, LANGUAGE_KEY, LEVEL_TONE, LanguageSwitch, type Layout, LevelBar, LevelRoadRow, LevelShield, MenuTile, MovingPattern, type NotificationAction, type NotificationInput, type NotificationLevel, type NotificationSource, NotificationStore, ON_TONE, type Point, Popup, type PopupProps, ProgressBar, RARITY_ORDER, RarityTag, type ResolvedSound, ResourceBadge, ResourceCounter, type ResourceKind, type ResourceLine, ResourceList, Ribbon, type RoadState, SOUND_PRESETS, ScreenHeader, SectionTitle, Select, type ShownNotification, SoldOutStamp, SpeechBubble, Spinner, StepperCounter, type SynthNoise, type SynthNote, type SynthPreset, TABLET_MIN_PX, TOAST_DURATION, TONES, type TabItem, Tabs, TextArea, TextInput, Timer, type TitleSections, Toggle, U, UAvatar, UButton, UCloseCircle, UDivider, UFlag, UHexRank, UI_SOUND_EVENTS, UIconSlider, UItemFrame, UMedal, type UMilestone, type UMilestoneState, UMilestonesPopup, UPopup, URankRow, type URankTone, URays, URibbon, URow, type URowTone, UScreen, USlider, UStyles, UTabs, UTimer, type UTone, UTopBar, U_CSS, U_PATTERN, 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, formatLineAmount, grantLines, grantedBy, groupBy, iconsFor, inkFrame, inkShadow, inked, iouCurrencies, iouCurrencyOf, isGlyph, itemDefinitions, itemGlyph, layoutFor, listRow, makeT, mergeLines, motionDurations, onLanguageChange, outlined, panel, parsePlayerPrefs, pickLanguage, plate, plural, rarityPlate, rarityRank, renderKitOverlays, resolveSound, resolveUiConfig, resourceName, screenBackground, setAutoPopupsHeld, setLanguage, sortFeatures, themeVars, tokenGlyph, tokenName, tokenParts, tonePlate, toneSurface, uBackdrop, uText, uiT, useAnimatedNumber, useBalances, useCatalog, useCelebrate, useCounterValue, useGameLayout, useLanguage, useLayout, useMotion, useNotify, useNow, usePlayerPrefs, usePopupClose, usePresence, useSound, useStagger, useToast, useUiKit, v, well };
|