@endfield-ui/react 1.0.1 → 1.2.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.
Files changed (54) hide show
  1. package/NOTICE.md +33 -2
  2. package/README.md +60 -3
  3. package/dist/game/LICENSE.lucide +43 -0
  4. package/dist/game/assets/alert_banner_bg_left.png +0 -0
  5. package/dist/game/assets/alert_banner_bg_right.png +0 -0
  6. package/dist/game/assets/alert_bg.png +0 -0
  7. package/dist/game/assets/deco_common_logo_bg.png +0 -0
  8. package/dist/game/assets/detail.png +0 -0
  9. package/dist/game/assets/enemies_background.webp +0 -0
  10. package/dist/game/assets/enemies_background_dark.webp +0 -0
  11. package/dist/game/assets/header.webp +0 -0
  12. package/dist/game/assets/icon_card_rarity_1_bottom_edge.webp +0 -0
  13. package/dist/game/assets/icon_card_rarity_2_bottom_edge.webp +0 -0
  14. package/dist/game/assets/icon_card_rarity_3_bottom_edge.webp +0 -0
  15. package/dist/game/assets/icon_card_rarity_4_bottom_edge.webp +0 -0
  16. package/dist/game/assets/icon_card_rarity_5_bottom_edge.webp +0 -0
  17. package/dist/game/assets/icon_card_rarity_6_bottom_edge.webp +0 -0
  18. package/dist/game/assets/items_background.webp +0 -0
  19. package/dist/game/assets/items_background_dark.webp +0 -0
  20. package/dist/game/assets/link.webp +0 -0
  21. package/dist/game/assets/pag-button-texture.png +0 -0
  22. package/dist/game/assets/splash_bg.jpg +0 -0
  23. package/dist/game/assets/splash_bg_portrait.jpg +0 -0
  24. package/dist/game/assets/splash_deco.svg +4 -0
  25. package/dist/game/assets/splash_logo.svg +1 -0
  26. package/dist/game/assets/splash_triangles.svg +4 -0
  27. package/dist/game/assets/weapons_background.webp +0 -0
  28. package/dist/game/assets/weapons_background_dark.webp +0 -0
  29. package/dist/game/resource-provenance.json +453 -0
  30. package/dist/game/styles.css +2 -0
  31. package/dist/game.d.ts +384 -0
  32. package/dist/game.js +2069 -0
  33. package/dist/index.d.ts +42 -1
  34. package/dist/index.js +253 -30
  35. package/dist/styles.css +1 -1
  36. package/package.json +9 -2
  37. package/src/components/README.md +3 -0
  38. package/src/components/alert/Alert.tsx +1 -1
  39. package/src/components/date-picker/DateField.tsx +0 -2
  40. package/src/components/dropdown-menu/menu-style.ts +6 -1
  41. package/src/components/file-upload/FileUpload.tsx +5 -2
  42. package/src/components/input/control-box.ts +30 -10
  43. package/src/components/otp-input/OtpInput.tsx +35 -43
  44. package/src/components/segmented-control/SegmentedControl.tsx +2 -2
  45. package/src/components/select/Select.tsx +0 -2
  46. package/src/components/splash-screen/SplashScreen.tsx +340 -0
  47. package/src/components/splash-screen/index.ts +1 -0
  48. package/src/components/tag-input/TagInput.tsx +5 -2
  49. package/src/components/toast/Toast.tsx +4 -3
  50. package/src/index.ts +1 -0
  51. package/src/styles/README.md +9 -2
  52. package/src/styles/index.css +5 -0
  53. package/src/styles/theme.css +33 -0
  54. package/src/styles/utilities.css +8 -0
package/dist/game.d.ts ADDED
@@ -0,0 +1,384 @@
1
+
2
+ import { Dialog } from "@base-ui/react/dialog";
3
+ import { CSSProperties, ComponentProps, HTMLAttributes, ReactElement, ReactNode, Ref, RefObject } from "react";
4
+ import { SplashScreenProps } from "./index.js";
5
+ //#region src/game/animated-dialog/AnimatedDialog.d.ts
6
+ type PopupProps$1 = ComponentProps<typeof Dialog.Popup>;
7
+ type PortalProps$1 = ComponentProps<typeof Dialog.Portal>;
8
+ type CloseAction = () => boolean | void | PromiseLike<boolean | void>;
9
+ type SlotClassName = string | ((open: boolean) => string);
10
+ type AnimatedDialogClassNames = {
11
+ backdrop?: SlotClassName;
12
+ alert?: SlotClassName;
13
+ contentContainer?: SlotClassName;
14
+ header?: SlotClassName;
15
+ title?: SlotClassName;
16
+ footer?: SlotClassName;
17
+ close?: SlotClassName;
18
+ };
19
+ type AnimatedDialogProps = Omit<ComponentProps<"div">, "title" | "children" | "onClose" | "className" | "style"> & {
20
+ trigger?: ReactElement<Record<string, unknown>>;
21
+ open?: boolean;
22
+ defaultOpen?: boolean;
23
+ onOpenChange?: (open: boolean) => void;
24
+ title: ReactNode;
25
+ description?: ReactNode;
26
+ icon?: ReactNode;
27
+ width?: CSSProperties["width"];
28
+ height?: CSSProperties["height"];
29
+ className?: string;
30
+ classNames?: AnimatedDialogClassNames;
31
+ /** 点遮罩是否请求关闭。默认允许。 */
32
+ dismissible?: boolean;
33
+ /** Esc 是否请求关闭。未传时跟随 dismissible。 */
34
+ keyboardCloseable?: boolean;
35
+ /** 所有内部关闭请求都会执行;返回 false 或失败时保持打开。 */
36
+ onClose?: CloseAction;
37
+ /** 遮罩与 Esc 请求先执行此回调,再执行 onClose。 */
38
+ onDismiss?: CloseAction;
39
+ closeLabel?: string;
40
+ initialFocus?: PopupProps$1["initialFocus"];
41
+ finalFocus?: PopupProps$1["finalFocus"];
42
+ keepMounted?: boolean;
43
+ /**
44
+ * 是不是模态。默认是。传 `false` 时不锁焦点、不锁页面滚动,页面的其余部分照常能用——
45
+ * 配上 `container` 可以把弹窗嵌在页面的一块区域里展示。
46
+ */
47
+ modal?: boolean;
48
+ /** 弹层挂到哪个元素里。默认挂在 `<body>` 下 */
49
+ container?: PortalProps$1["container"];
50
+ children?: ReactNode;
51
+ };
52
+ export declare function AnimatedDialog({ trigger, open: controlledOpen, defaultOpen, onOpenChange, title, description, icon, width, height, className, classNames, dismissible, keyboardCloseable, onClose, onDismiss, closeLabel, initialFocus, finalFocus, keepMounted, modal, container, children, ...popupProps }: AnimatedDialogProps): import("react").JSX.Element;
53
+ //#endregion
54
+ //#region src/game/banner-alert/types.d.ts
55
+ type PopupProps = ComponentProps<typeof Dialog.Popup>;
56
+ type PortalProps = ComponentProps<typeof Dialog.Portal>;
57
+ type AlertAction = () => boolean | void | PromiseLike<boolean | void>;
58
+ type AlertClassName = string | ((open: boolean) => string);
59
+ type AlertClassNames = {
60
+ backdrop?: AlertClassName;
61
+ alert?: AlertClassName;
62
+ content?: AlertClassName;
63
+ };
64
+ type AlertModalProps = Omit<ComponentProps<"div">, "title" | "children" | "onClose" | "onCancel" | "style"> & {
65
+ trigger?: ReactElement<Record<string, unknown>>;
66
+ open?: boolean;
67
+ defaultOpen?: boolean;
68
+ onOpenChange?: (open: boolean) => void;
69
+ title: ReactNode;
70
+ description?: ReactNode;
71
+ dismissible?: boolean;
72
+ keyboardCloseable?: boolean;
73
+ hideCancel?: boolean;
74
+ cancelText?: string;
75
+ confirmText?: string;
76
+ loading?: boolean;
77
+ showIcon?: boolean;
78
+ width?: CSSProperties["width"];
79
+ height?: CSSProperties["height"];
80
+ classNames?: AlertClassNames;
81
+ onConfirm?: AlertAction;
82
+ onCancel?: AlertAction;
83
+ onDismiss?: AlertAction;
84
+ onClose?: AlertAction;
85
+ initialFocus?: PopupProps["initialFocus"];
86
+ finalFocus?: PopupProps["finalFocus"];
87
+ keepMounted?: boolean;
88
+ /**
89
+ * 是不是模态。默认是。传 `false` 时不锁焦点、不锁页面滚动,页面的其余部分照常能用——
90
+ * 配上 `container` 可以把弹窗嵌在页面的一块区域里展示。
91
+ */
92
+ modal?: boolean;
93
+ /** 弹层挂到哪个元素里。默认挂在 `<body>` 下 */
94
+ container?: PortalProps["container"];
95
+ children?: ReactNode;
96
+ };
97
+ //#endregion
98
+ //#region src/game/banner-alert/BannerAlert.d.ts
99
+ type BannerAlertProps = AlertModalProps;
100
+ export declare function BannerAlert({ children, width, hideCancel, cancelText, confirmText, showIcon, classNames, ...props }: BannerAlertProps): import("react").JSX.Element;
101
+ //#endregion
102
+ //#region src/game/full-width-alert/FullWidthAlert.d.ts
103
+ type FullWidthAlertProps = Omit<AlertModalProps, "width">;
104
+ /** 横贯视口的确认面板,底部按钮突出于面板下沿。 */
105
+ export declare function FullWidthAlert({ hideCancel, cancelText, confirmText, showIcon, height, classNames, children, ...props }: FullWidthAlertProps): import("react").JSX.Element;
106
+ //#endregion
107
+ //#region src/game/item-icon/types.d.ts
108
+ type ItemIconTrans = "" | "formula" | "bigGem";
109
+ interface ItemIconLayers {
110
+ iconUrl: string;
111
+ iconBgUrl?: string;
112
+ iconMarkUrl?: string;
113
+ iconOverlayUrl?: string;
114
+ iconContentUrl?: string;
115
+ iconTrans?: ItemIconTrans;
116
+ iconShowRarity?: boolean;
117
+ }
118
+ interface ItemIconImageProps {
119
+ src: string;
120
+ alt: string;
121
+ className?: string;
122
+ style?: CSSProperties;
123
+ fallback?: ReactNode;
124
+ loading?: "lazy" | "eager";
125
+ }
126
+ type ItemIconImageRenderer = (props: ItemIconImageProps) => ReactNode;
127
+ interface ItemIconProps {
128
+ layers: ItemIconLayers;
129
+ alt: string;
130
+ className?: string;
131
+ style?: CSSProperties;
132
+ fallback?: ReactNode;
133
+ loading?: "lazy" | "eager";
134
+ renderImage?: ItemIconImageRenderer;
135
+ }
136
+ //#endregion
137
+ //#region src/game/item-icon/ItemIcon.d.ts
138
+ export declare function ItemIcon({ layers, alt, className, style, fallback, loading, renderImage }: ItemIconProps): import("react").JSX.Element;
139
+ //#endregion
140
+ //#region src/game/item-icon/helpers.d.ts
141
+ export declare const EMPTY_ITEM_ICON_LAYERS: Readonly<Required<ItemIconLayers>>;
142
+ export declare const ITEM_ICON_TRANSFORMS: {
143
+ readonly formula: {
144
+ readonly scale: 0.72;
145
+ readonly pivotX: 1;
146
+ readonly pivotY: 0.5;
147
+ };
148
+ readonly bigGem: {
149
+ readonly scale: 1;
150
+ readonly offsetX: 3;
151
+ readonly offsetY: 4;
152
+ };
153
+ };
154
+ type ItemIconTransformKey = keyof typeof ITEM_ICON_TRANSFORMS;
155
+ export declare function itemIconTransformStyle(key: ItemIconTransformKey): CSSProperties;
156
+ export declare function coerceItemIconTrans(value: unknown): ItemIconTrans;
157
+ export declare function pickItemIconLayers(source: object | null | undefined, prefix?: string): Required<ItemIconLayers>;
158
+ //#endregion
159
+ //#region src/game/item-card/ItemCard.d.ts
160
+ type ItemCardKind = "weapon" | "item" | "enemy" | "";
161
+ type ItemCardVariant = "banner" | "inventory";
162
+ type ItemCardSelectionAction = {
163
+ onSelect: () => void;
164
+ ariaLabel?: string;
165
+ selected?: boolean;
166
+ disabled?: boolean;
167
+ disabledReason?: string;
168
+ };
169
+ type ItemCardLinkProps = {
170
+ href: string;
171
+ children: ReactNode;
172
+ className: string;
173
+ "aria-label": string;
174
+ "data-item-tooltip-id"?: string;
175
+ };
176
+ type ItemCardLinkRenderer = (props: ItemCardLinkProps) => ReactNode;
177
+ type ItemCardProps = {
178
+ kind: ItemCardKind;
179
+ name: string;
180
+ imageUrl: string;
181
+ rarity: number;
182
+ itemId?: string;
183
+ /** 实际链接地址;组件不转换 Wiki 文章标题。 */
184
+ href?: string;
185
+ variant?: ItemCardVariant;
186
+ count?: number;
187
+ showName?: boolean;
188
+ className?: string;
189
+ style?: CSSProperties;
190
+ icon?: ItemIconLayers;
191
+ action?: ItemCardSelectionAction;
192
+ badges?: ReactNode;
193
+ ariaLabel?: string;
194
+ fallback?: ReactNode;
195
+ renderImage?: ItemIconImageRenderer;
196
+ renderLink?: ItemCardLinkRenderer;
197
+ renderName?: (name: string) => ReactNode;
198
+ renderCount?: (count: number) => ReactNode;
199
+ };
200
+ /** Wiki 物品卡片:名称横条或库存数量横条,共用完整图层图标。 */
201
+ export declare const ItemCard: import("react").MemoExoticComponent<({ kind, name, imageUrl, rarity, itemId, href, variant, count, showName, className, style, icon, action, badges, ariaLabel, fallback, renderImage, renderLink, renderName, renderCount }: ItemCardProps) => string | number | bigint | boolean | import("react").JSX.Element | Iterable<ReactNode> | Promise<string | number | bigint | boolean | Iterable<ReactNode> | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | import("react").ReactPortal | null | undefined> | null | undefined>;
202
+ //#endregion
203
+ //#region src/game/item-tooltip-card/types.d.ts
204
+ type ItemTooltipObtainWay = {
205
+ id?: string;
206
+ name: string;
207
+ iconUrl?: string;
208
+ href?: string;
209
+ };
210
+ type ItemTooltipItem = ItemIconLayers & {
211
+ name: string;
212
+ rarity: number;
213
+ category?: string;
214
+ usage?: string;
215
+ description?: string;
216
+ /** 实际 URL,由使用方转换自己的文章或路由地址。 */
217
+ href?: string;
218
+ obtainWays?: readonly ItemTooltipObtainWay[];
219
+ noObtainWayHint?: string;
220
+ };
221
+ type ItemTooltipLinkProps = {
222
+ href: string;
223
+ className: string;
224
+ children: ReactNode;
225
+ "aria-label"?: string;
226
+ };
227
+ type ItemTooltipLinkRenderer = (props: ItemTooltipLinkProps) => ReactNode;
228
+ type ItemTooltipCardProps = {
229
+ item: ItemTooltipItem;
230
+ className?: string;
231
+ style?: CSSProperties;
232
+ fontFamily?: string;
233
+ obtainLabel?: string;
234
+ renderText?: (text: string) => ReactNode;
235
+ renderImage?: ItemIconImageRenderer;
236
+ renderLink?: ItemTooltipLinkRenderer;
237
+ };
238
+ //#endregion
239
+ //#region src/game/item-tooltip-card/ItemTooltipCard.d.ts
240
+ /** 固定灰色游戏皮肤的物品详情;文章路由与富文本由使用方接入。 */
241
+ export declare function ItemTooltipCard({ item, className, style, fontFamily, obtainLabel, renderText, renderImage, renderLink }: ItemTooltipCardProps): import("react").JSX.Element;
242
+ //#endregion
243
+ //#region src/game/item-hover-card/ItemHoverCard.d.ts
244
+ type ItemHoverCardLayerProps = {
245
+ /** 由使用方的本地数据或缓存解析;组件不发请求。 */
246
+ resolveItem: (itemId: string, host: HTMLElement) => ItemTooltipItem | null | undefined;
247
+ root?: HTMLElement | Document;
248
+ rootRef?: RefObject<HTMLElement | null>;
249
+ disabled?: boolean;
250
+ /** 默认只在 768px 以上、支持精细指针悬停的设备启用。 */
251
+ disableOnMobile?: boolean;
252
+ openDelay?: number;
253
+ closeDelay?: number;
254
+ gap?: number;
255
+ width?: CSSProperties["width"];
256
+ className?: string;
257
+ style?: CSSProperties;
258
+ cardProps?: Omit<ItemTooltipCardProps, "item">;
259
+ onOpenChange?: (open: boolean, itemId: string | null) => void;
260
+ };
261
+ /** 一个监听层为网格内所有 data-item-tooltip-id 提供物品预览。 */
262
+ export declare function ItemHoverCardLayer({ resolveItem, root, rootRef, disabled, disableOnMobile, openDelay, closeDelay, gap, width, className, style, cardProps, onOpenChange }: ItemHoverCardLayerProps): import("react").JSX.Element | null;
263
+ type ItemHoverCardProps = Omit<ItemHoverCardLayerProps, "resolveItem" | "root" | "rootRef"> & {
264
+ item: ItemTooltipItem;
265
+ children: ReactNode;
266
+ triggerProps?: Omit<HTMLAttributes<HTMLSpanElement>, "children">;
267
+ };
268
+ export declare function ItemHoverCard({ item, children, triggerProps, ...layerProps }: ItemHoverCardProps): import("react").JSX.Element;
269
+ //#endregion
270
+ //#region src/game/rounded-button/RoundedButton.d.ts
271
+ type RoundedButtonVariant = "primary" | "default";
272
+ type RoundedButtonSlotClass = string | ((isPrimary: boolean) => string);
273
+ type RoundedButtonProps = ComponentProps<"button"> & {
274
+ variant?: RoundedButtonVariant;
275
+ text?: string;
276
+ icon?: ReactNode;
277
+ showIcon?: boolean;
278
+ iconPosition?: "left" | "right";
279
+ loading?: boolean;
280
+ classNames?: {
281
+ button?: RoundedButtonSlotClass;
282
+ text?: RoundedButtonSlotClass;
283
+ icon?: RoundedButtonSlotClass;
284
+ };
285
+ };
286
+ /** 原灰色圆角按钮;悬停闪动由浏览器动画执行。 */
287
+ export declare function RoundedButton({ variant, type, text, children, icon, showIcon, iconPosition, loading, disabled, className, classNames, onClick, onPointerEnter, onPointerLeave, ...props }: RoundedButtonProps): import("react").JSX.Element;
288
+ //#endregion
289
+ //#region src/game/rounded-button/RoundedIconButton.d.ts
290
+ type RoundedIconButtonProps = ComponentProps<"button"> & {
291
+ "aria-label": string;
292
+ children: ReactNode;
293
+ };
294
+ /** 24px 圆形图标按钮;纹理与双边线只作装饰。 */
295
+ export declare function RoundedIconButton({ type, disabled, children, className, ...props }: RoundedIconButtonProps): import("react").JSX.Element;
296
+ //#endregion
297
+ //#region src/game/rounded-select/RoundedSelect.d.ts
298
+ type RoundedSelectOption<T extends string = string> = {
299
+ value: T;
300
+ label: ReactNode;
301
+ disabled?: boolean;
302
+ hidden?: boolean;
303
+ left?: ReactNode | ((selected: boolean) => ReactNode);
304
+ right?: ReactNode | ((selected: boolean) => ReactNode);
305
+ /** 自定义标签的键盘文字匹配名称。 */
306
+ textValue?: string;
307
+ };
308
+ type RoundedSelectProps<T extends string = string> = {
309
+ options: readonly RoundedSelectOption<T>[];
310
+ value?: T | null;
311
+ defaultValue?: T | null;
312
+ onValueChange?: (value: T) => void;
313
+ placeholder?: ReactNode;
314
+ name?: string;
315
+ form?: string;
316
+ required?: boolean;
317
+ disabled?: boolean;
318
+ invalid?: boolean;
319
+ open?: boolean;
320
+ defaultOpen?: boolean;
321
+ onOpenChange?: (open: boolean) => void;
322
+ id?: string;
323
+ "aria-label"?: string;
324
+ "aria-describedby"?: string;
325
+ className?: string;
326
+ classNames?: {
327
+ container?: string;
328
+ trigger?: string;
329
+ option?: string;
330
+ optionContainer?: string;
331
+ optionScrollArea?: string;
332
+ };
333
+ ref?: Ref<HTMLButtonElement>;
334
+ };
335
+ /** 圆角触发器与半覆盖面板;隐藏项不进入列表,禁用项不能选择。 */
336
+ export declare function RoundedSelect<T extends string = string>({ options, value, defaultValue, onValueChange, placeholder, name, form, required: requiredProp, disabled: disabledProp, invalid: invalidProp, open, defaultOpen, onOpenChange, id: idProp, "aria-label": ariaLabel, "aria-describedby": describedByProp, className, classNames, ref }: RoundedSelectProps<T>): import("react").JSX.Element;
337
+ //#endregion
338
+ //#region src/game/rounded-switch/RoundedSwitch.d.ts
339
+ type RoundedSwitchProps = Omit<ComponentProps<"div">, "defaultChecked" | "defaultValue" | "onChange" | "children"> & {
340
+ checked?: boolean;
341
+ defaultChecked?: boolean;
342
+ onCheckedChange?: (checked: boolean) => void;
343
+ onText?: ReactNode;
344
+ offText?: ReactNode;
345
+ name?: string;
346
+ form?: string;
347
+ disabled?: boolean;
348
+ required?: boolean;
349
+ };
350
+ export declare function RoundedSwitch({ checked, defaultChecked, onCheckedChange, onText, offText, name, form, disabled: disabledProp, required: requiredProp, className, onKeyDown, ...props }: RoundedSwitchProps): import("react").JSX.Element;
351
+ //#endregion
352
+ //#region src/game/rounded-toggle/RoundedToggle.d.ts
353
+ type RoundedToggleOption = {
354
+ value: string;
355
+ label: ReactNode;
356
+ icon?: ReactNode;
357
+ disabled?: boolean;
358
+ "aria-label"?: string;
359
+ };
360
+ type RoundedToggleProps = Omit<ComponentProps<"div">, "defaultValue" | "onChange" | "children"> & {
361
+ options: readonly RoundedToggleOption[];
362
+ value?: string;
363
+ defaultValue?: string;
364
+ onValueChange?: (value: string) => void;
365
+ label?: string;
366
+ name?: string;
367
+ form?: string;
368
+ required?: boolean;
369
+ disabled?: boolean;
370
+ };
371
+ export declare function RoundedToggle({ options, value, defaultValue, onValueChange, label, name, form, required: requiredProp, disabled: disabledProp, className, onKeyDown, "aria-label": ariaLabel, ...props }: RoundedToggleProps): import("react").JSX.Element;
372
+ //#endregion
373
+ //#region src/game/splash-screen/EndfieldSplashScreen.d.ts
374
+ type EndfieldSplashScreenProps = Omit<SplashScreenProps, "backdrop" | "caption" | "decor">;
375
+ /**
376
+ * 官网的开屏页:主入口的 `SplashScreen` 填上官方的标志、底图和微标。
377
+ * 排法、动画、属性都是 `SplashScreen` 的,这里只管把图放进它的插槽。
378
+ *
379
+ * 标志、标语、状态字可以换(`logo`、`tagline`、`status`);底图和微标经变量换,
380
+ * 或者用 `data-ef-game-images="off"` 整类关掉,见 docs/design/game/splash-screen.md
381
+ */
382
+ export declare function EndfieldSplashScreen({ logo, tagline, status, className, ...props }: EndfieldSplashScreenProps): import("react").JSX.Element;
383
+ //#endregion
384
+ export type { AnimatedDialogClassNames, AnimatedDialogProps, BannerAlertProps, EndfieldSplashScreenProps, FullWidthAlertProps, ItemCardKind, ItemCardLinkProps, ItemCardLinkRenderer, ItemCardProps, ItemCardSelectionAction, ItemCardVariant, ItemHoverCardLayerProps, ItemHoverCardProps, ItemIconImageProps, ItemIconImageRenderer, ItemIconLayers, ItemIconProps, ItemIconTrans, ItemIconTransformKey, ItemTooltipCardProps, ItemTooltipItem, ItemTooltipLinkProps, ItemTooltipLinkRenderer, ItemTooltipObtainWay, RoundedButtonProps, RoundedButtonVariant, RoundedIconButtonProps, RoundedSelectOption, RoundedSelectProps, RoundedSwitchProps, RoundedToggleOption, RoundedToggleProps };