addon-ui 0.10.0 → 0.11.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 (48) hide show
  1. package/README.md +3 -0
  2. package/dist-types/components/Popover/Popover.d.ts +6 -0
  3. package/dist-types/components/Popover/PopoverAnchor.d.ts +6 -0
  4. package/dist-types/components/Popover/PopoverClose.d.ts +6 -0
  5. package/dist-types/components/Popover/PopoverContent.d.ts +15 -0
  6. package/dist-types/components/Popover/PopoverTrigger.d.ts +8 -0
  7. package/dist-types/components/Popover/index.d.ts +6 -0
  8. package/dist-types/components/Select/SelectItemIndicator.d.ts +6 -0
  9. package/dist-types/components/Select/SelectItemText.d.ts +6 -0
  10. package/dist-types/components/Select/index.d.ts +2 -0
  11. package/dist-types/components/Shift/Shift.d.ts +10 -0
  12. package/dist-types/components/Shift/index.d.ts +2 -0
  13. package/dist-types/components/ToggleGroup/ToggleGroup.d.ts +7 -0
  14. package/dist-types/components/ToggleGroup/ToggleGroupIndicator.d.ts +4 -0
  15. package/dist-types/components/ToggleGroup/ToggleGroupItem.d.ts +6 -0
  16. package/dist-types/components/ToggleGroup/index.d.ts +4 -0
  17. package/dist-types/components/index.d.ts +3 -0
  18. package/dist-types/components/types.d.ts +8 -1
  19. package/package.json +8 -14
  20. package/src/components/Button/button.module.scss +0 -1
  21. package/src/components/Popover/Popover.tsx +15 -0
  22. package/src/components/Popover/PopoverAnchor.tsx +23 -0
  23. package/src/components/Popover/PopoverClose.tsx +23 -0
  24. package/src/components/Popover/PopoverContent.tsx +73 -0
  25. package/src/components/Popover/PopoverTrigger.tsx +35 -0
  26. package/src/components/Popover/index.ts +5 -0
  27. package/src/components/Popover/popover.module.scss +77 -0
  28. package/src/components/Select/SelectContent.tsx +4 -2
  29. package/src/components/Select/SelectItem.tsx +8 -9
  30. package/src/components/Select/SelectItemIndicator.tsx +17 -0
  31. package/src/components/Select/SelectItemText.tsx +17 -0
  32. package/src/components/Select/index.ts +2 -0
  33. package/src/components/Select/select.module.scss +7 -1
  34. package/src/components/Shift/Shift.tsx +98 -0
  35. package/src/components/Shift/index.ts +1 -0
  36. package/src/components/Shift/shift.module.scss +21 -0
  37. package/src/components/TextArea/text-area.module.scss +5 -0
  38. package/src/components/TextField/text-field.module.scss +1 -1
  39. package/src/components/ToggleGroup/ToggleGroup.tsx +25 -0
  40. package/src/components/ToggleGroup/ToggleGroupIndicator.tsx +17 -0
  41. package/src/components/ToggleGroup/ToggleGroupItem.tsx +28 -0
  42. package/src/components/ToggleGroup/index.ts +8 -0
  43. package/src/components/ToggleGroup/toggleGroup.module.scss +32 -0
  44. package/src/components/Tooltip/tooltip.module.scss +1 -0
  45. package/src/components/index.ts +3 -0
  46. package/src/components/types.ts +23 -9
  47. package/src/providers/ui/styles/default.scss +4 -0
  48. package/src/providers/ui/styles/reset.scss +1 -0
package/README.md CHANGED
@@ -68,8 +68,10 @@ This library now ships with dedicated documentation files for each component in
68
68
  - [List](docs/List.md) (covers List and ListItem)
69
69
  - [Modal](docs/Modal.md)
70
70
  - [Odometer](docs/Odometer.md) (component + `useOdometer` hook)
71
+ - [Popover](docs/Popover.md)
71
72
  - [ScrollArea](docs/ScrollArea.md)
72
73
  - [Select](docs/Select.md)
74
+ - [Shift](docs/Shift.md)
73
75
  - [SvgSprite](docs/SvgSprite.md)
74
76
  - [Switch](docs/Switch.md)
75
77
  - [Tabs](docs/Tabs.md) (includes `Tabs`, `TabsList`, `TabsTrigger`, `TabsContent`)
@@ -77,6 +79,7 @@ This library now ships with dedicated documentation files for each component in
77
79
  - [TextArea](docs/TextArea.md)
78
80
  - [TextField](docs/TextField.md)
79
81
  - [Toast](docs/Toast.md)
82
+ - [ToggleGroup](docs/ToggleGroup.md)
80
83
  - [Tooltip](docs/Tooltip.md)
81
84
  - [Truncate](docs/Truncate.md)
82
85
  - [TruncateList](docs/TruncateList.md)
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ import { PopoverProps } from "@radix-ui/react-popover";
3
+ export { type PopoverProps };
4
+ declare const _default: React.NamedExoticComponent<PopoverProps>;
5
+ export default _default;
6
+ //# sourceMappingURL=Popover.d.ts.map
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ import { PopoverAnchorProps } from "@radix-ui/react-popover";
3
+ export type { PopoverAnchorProps };
4
+ declare const _default: React.NamedExoticComponent<PopoverAnchorProps & React.RefAttributes<HTMLDivElement>>;
5
+ export default _default;
6
+ //# sourceMappingURL=PopoverAnchor.d.ts.map
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ import { PopoverCloseProps } from "@radix-ui/react-popover";
3
+ export type { PopoverCloseProps };
4
+ declare const _default: React.NamedExoticComponent<PopoverCloseProps & React.RefAttributes<HTMLButtonElement>>;
5
+ export default _default;
6
+ //# sourceMappingURL=PopoverClose.d.ts.map
@@ -0,0 +1,15 @@
1
+ import React from "react";
2
+ import { PopoverContentProps as PopoverContentRadixProps, PopoverPortalProps } from "@radix-ui/react-popover";
3
+ export interface PopoverContentProps extends PopoverContentRadixProps, PopoverPortalProps {
4
+ maxWidth?: number;
5
+ minWidth?: number;
6
+ fullWidth?: boolean;
7
+ arrow?: boolean;
8
+ arrowWidth?: number;
9
+ arrowHeight?: number;
10
+ overlay?: boolean;
11
+ overlayClassname?: string;
12
+ }
13
+ declare const _default: React.NamedExoticComponent<PopoverContentProps & React.RefAttributes<HTMLDivElement>>;
14
+ export default _default;
15
+ //# sourceMappingURL=PopoverContent.d.ts.map
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { PopoverTriggerProps as PopoverTriggerRadixProps } from "@radix-ui/react-popover";
3
+ export interface PopoverTriggerProps extends PopoverTriggerRadixProps {
4
+ center?: boolean;
5
+ }
6
+ declare const _default: React.NamedExoticComponent<PopoverTriggerProps & React.RefAttributes<HTMLButtonElement>>;
7
+ export default _default;
8
+ //# sourceMappingURL=PopoverTrigger.d.ts.map
@@ -0,0 +1,6 @@
1
+ export { default as Popover, type PopoverProps } from "./Popover";
2
+ export { default as PopoverClose, type PopoverCloseProps } from "./PopoverClose";
3
+ export { default as PopoverAnchor, type PopoverAnchorProps } from "./PopoverAnchor";
4
+ export { default as PopoverTrigger, type PopoverTriggerProps } from "./PopoverTrigger";
5
+ export { default as PopoverContent, type PopoverContentProps } from "./PopoverContent";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ import { SelectItemIndicatorProps } from "@radix-ui/react-select";
3
+ export { type SelectItemIndicatorProps };
4
+ declare const _default: React.NamedExoticComponent<SelectItemIndicatorProps & React.RefAttributes<HTMLSpanElement>>;
5
+ export default _default;
6
+ //# sourceMappingURL=SelectItemIndicator.d.ts.map
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ import { SelectItemTextProps } from "@radix-ui/react-select";
3
+ export { type SelectItemTextProps };
4
+ declare const _default: React.NamedExoticComponent<SelectItemTextProps & React.RefAttributes<HTMLSpanElement>>;
5
+ export default _default;
6
+ //# sourceMappingURL=SelectItemText.d.ts.map
@@ -1,5 +1,7 @@
1
1
  export { default as Select, type SelectProps } from "./Select";
2
2
  export { default as SelectItem, type SelectItemProps } from "./SelectItem";
3
+ export { default as SelectItemText, type SelectItemTextProps } from "./SelectItemText";
4
+ export { default as SelectItemIndicator, type SelectItemIndicatorProps } from "./SelectItemIndicator";
3
5
  export { default as SelectIcon, type SelectIconProps } from "./SelectIcon";
4
6
  export { default as SelectValue, type SelectValueProps } from "./SelectValue";
5
7
  export { default as SelectTrigger, type SelectTriggerProps } from "./SelectTrigger";
@@ -0,0 +1,10 @@
1
+ import React, { ComponentProps } from "react";
2
+ export interface ShiftProps extends ComponentProps<"div"> {
3
+ active?: number;
4
+ height?: number;
5
+ adaptiveHeight?: boolean;
6
+ itemClassName?: string;
7
+ }
8
+ declare const _default: React.NamedExoticComponent<Omit<ShiftProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
9
+ export default _default;
10
+ //# sourceMappingURL=Shift.d.ts.map
@@ -0,0 +1,2 @@
1
+ export { default as Shift, type ShiftProps } from "./Shift";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ import { Root, ToggleGroupMultipleProps, ToggleGroupSingleProps } from "@radix-ui/react-toggle-group";
3
+ export type { ToggleGroupSingleProps, ToggleGroupMultipleProps };
4
+ export type ToggleGroupProps = React.ComponentProps<typeof Root>;
5
+ declare const _default: React.NamedExoticComponent<(Omit<ToggleGroupSingleProps & React.RefAttributes<HTMLDivElement>, "ref"> | Omit<ToggleGroupMultipleProps & React.RefAttributes<HTMLDivElement>, "ref">) & React.RefAttributes<HTMLDivElement>>;
6
+ export default _default;
7
+ //# sourceMappingURL=ToggleGroup.d.ts.map
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ declare const _default: React.NamedExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
3
+ export default _default;
4
+ //# sourceMappingURL=ToggleGroupIndicator.d.ts.map
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ import { ToggleGroupItemProps } from "@radix-ui/react-toggle-group";
3
+ export type { ToggleGroupItemProps };
4
+ declare const _default: React.NamedExoticComponent<ToggleGroupItemProps & React.RefAttributes<HTMLButtonElement>>;
5
+ export default _default;
6
+ //# sourceMappingURL=ToggleGroupItem.d.ts.map
@@ -0,0 +1,4 @@
1
+ export { default as ToggleGroup, type ToggleGroupProps, type ToggleGroupSingleProps, type ToggleGroupMultipleProps, } from "./ToggleGroup";
2
+ export { default as ToggleGroupItem, type ToggleGroupItemProps } from "./ToggleGroupItem";
3
+ export { default as ToggleGroupIndicator } from "./ToggleGroupIndicator";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -14,8 +14,10 @@ export * from "./List";
14
14
  export * from "./ListItem";
15
15
  export * from "./Modal";
16
16
  export * from "./Odometer";
17
+ export * from "./Popover";
17
18
  export * from "./ScrollArea";
18
19
  export * from "./Select";
20
+ export * from "./Shift";
19
21
  export * from "./SvgSprite";
20
22
  export * from "./Switch";
21
23
  export * from "./Tabs";
@@ -23,6 +25,7 @@ export * from "./Tag";
23
25
  export * from "./TextArea";
24
26
  export * from "./TextField";
25
27
  export * from "./Toast";
28
+ export * from "./ToggleGroup";
26
29
  export * from "./Tooltip";
27
30
  export * from "./Truncate";
28
31
  export * from "./TruncateList";
@@ -1,4 +1,4 @@
1
- import type { AvatarProps, ButtonProps, CheckboxProps, DialogProps, DrawerProps, FooterProps, HeaderProps, HighlightProps, IconProps, IconButtonProps, ListProps, ListItemProps, ModalProps, OdometerProps, ScrollAreaProps, SelectProps, SelectItemProps, SelectIconProps, SelectValueProps, SelectContentProps, SelectTriggerProps, SwitchProps, TabsProps, TabsContentProps, TabsListProps, TabsTriggerProps, TagProps, TextAreaProps, TextFieldProps, ToastProps, TooltipProps, TruncateProps, TruncateListProps, ViewProps, ViewDrawerProps, ViewModalProps } from "../components";
1
+ import type { AvatarProps, ButtonProps, CheckboxProps, DialogProps, DrawerProps, FooterProps, HeaderProps, HighlightProps, IconButtonProps, IconProps, ListItemProps, ListProps, ModalProps, OdometerProps, PopoverAnchorProps, PopoverCloseProps, PopoverContentProps, PopoverProps, PopoverTriggerProps, ScrollAreaProps, SelectContentProps, SelectIconProps, SelectItemProps, SelectProps, SelectTriggerProps, SelectValueProps, SwitchProps, TabsContentProps, TabsListProps, TabsProps, TabsTriggerProps, TagProps, TextAreaProps, TextFieldProps, ToastProps, ToggleGroupItemProps, ToggleGroupProps, TooltipProps, TruncateListProps, TruncateProps, ViewDrawerProps, ViewModalProps, ViewProps } from "../components";
2
2
  export interface ComponentsProps {
3
3
  avatar?: Pick<AvatarProps, "size" | "radius" | "cursorPointer" | "delayMs">;
4
4
  button?: Pick<ButtonProps, "variant" | "color" | "size" | "radius">;
@@ -14,6 +14,11 @@ export interface ComponentsProps {
14
14
  listItem?: ListItemProps;
15
15
  modal?: ModalProps;
16
16
  odometer?: Pick<OdometerProps, "auto" | "format" | "duration">;
17
+ popover?: PopoverProps;
18
+ popoverClose?: PopoverCloseProps;
19
+ popoverAnchor?: PopoverAnchorProps;
20
+ popoverTrigger?: PopoverTriggerProps;
21
+ popoverContent?: PopoverContentProps;
17
22
  scrollArea?: ScrollAreaProps;
18
23
  select?: SelectProps;
19
24
  selectItem?: SelectItemProps;
@@ -30,6 +35,8 @@ export interface ComponentsProps {
30
35
  textArea?: TextAreaProps;
31
36
  textField?: TextFieldProps;
32
37
  toast?: Pick<ToastProps, "side" | "duration" | "swipeDirection" | "swipeThreshold" | "closeProps" | "closeIcon" | "fullWidth" | "sticky" | "radius" | "color">;
38
+ toggleGroup?: Omit<ToggleGroupProps, "type" | "value" | "defaultValue" | "onValueChange">;
39
+ toggleGroupItem?: Omit<ToggleGroupItemProps, "value">;
33
40
  tooltip?: Omit<TooltipProps, "content">;
34
41
  truncate?: TruncateProps;
35
42
  truncateList?: TruncateListProps;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "addon-ui",
3
3
  "type": "module",
4
- "version": "0.10.0",
4
+ "version": "0.11.0",
5
5
  "description": "A comprehensive React UI component library designed exclusively for the AddonBone browser extension framework with customizable theming and consistent design patterns",
6
6
  "keywords": [
7
7
  "react",
@@ -15,10 +15,7 @@
15
15
  "typescript",
16
16
  "design-system"
17
17
  ],
18
- "author": "Addon Stack <addonbonedev@gmail.com>",
19
- "contributors": [
20
- "Anjey Tsibylskij (https://github.com/atldays)"
21
- ],
18
+ "author": "Anjey Tsibylskij (https://github.com/atldays)",
22
19
  "license": "MIT",
23
20
  "repository": {
24
21
  "type": "git",
@@ -98,8 +95,9 @@
98
95
  "@commitlint/config-conventional": "^20.0.0",
99
96
  "@eslint/js": "^9.21.0",
100
97
  "@release-it/conventional-changelog": "^10.0.4",
101
- "@rsbuild/plugin-sass": "^1.4.0",
102
- "@storybook/react": "^9.1.3",
98
+ "@rsbuild/core": "^1.7.3",
99
+ "@rsbuild/plugin-sass": "^1.5.1",
100
+ "@storybook/react": "^10.2.18",
103
101
  "@types/chrome": "^0.1.12",
104
102
  "@types/jest": "^30.0.0",
105
103
  "@types/lodash": "^4.17.20",
@@ -111,6 +109,7 @@
111
109
  "eslint": "^9.21.0",
112
110
  "eslint-plugin-react-hooks": "^5.1.0",
113
111
  "eslint-plugin-react-refresh": "^0.4.19",
112
+ "eslint-plugin-storybook": "10.2.18",
114
113
  "globals": "^15.15.0",
115
114
  "husky": "^9.1.7",
116
115
  "jest": "^30.1.3",
@@ -119,8 +118,8 @@
119
118
  "react-dom": "^19.1.0",
120
119
  "release-it": "^19.2.3",
121
120
  "rspack-plugin-virtual-module": "^1.0.0",
122
- "storybook": "^9.1.3",
123
- "storybook-react-rsbuild": "^2.1.0",
121
+ "storybook": "^10.2.18",
122
+ "storybook-react-rsbuild": "^3.3.2",
124
123
  "typescript": "~5.7.2",
125
124
  "typescript-eslint": "^8.24.1"
126
125
  },
@@ -142,10 +141,5 @@
142
141
  "overrides": {
143
142
  "flat-cache": "^6.1.18",
144
143
  "glob": "^13.0.0"
145
- },
146
- "eslintConfig": {
147
- "extends": [
148
- "plugin:storybook/recommended"
149
- ]
150
144
  }
151
145
  }
@@ -9,7 +9,6 @@ $root: button;
9
9
  height: var(--button-height, 34px);
10
10
  border-radius: var(--button-border-radius, 10px);
11
11
  padding: var(--button-padding, 0 16px);
12
- will-change: background, color, transform;
13
12
  transition:
14
13
  color var(--button-speed-color, var(--speed-color)),
15
14
  background var(--button-speed-bg, var(--speed-color)),
@@ -0,0 +1,15 @@
1
+ import React, {FC, memo} from "react";
2
+
3
+ import {PopoverProps, Root} from "@radix-ui/react-popover";
4
+
5
+ import {useComponentProps} from "../../providers";
6
+
7
+ export {type PopoverProps};
8
+
9
+ const Popover: FC<PopoverProps> = props => {
10
+ const mergedProps = {...useComponentProps("popover"), ...props};
11
+
12
+ return <Root {...mergedProps} />;
13
+ };
14
+
15
+ export default memo(Popover);
@@ -0,0 +1,23 @@
1
+ import React, {forwardRef, ForwardRefRenderFunction, memo} from "react";
2
+
3
+ import classnames from "classnames";
4
+
5
+ import {Anchor, PopoverAnchorProps} from "@radix-ui/react-popover";
6
+
7
+ import {useComponentProps} from "../../providers";
8
+
9
+ import styles from "./popover.module.scss";
10
+
11
+ export type {PopoverAnchorProps};
12
+
13
+ const PopoverAnchor: ForwardRefRenderFunction<HTMLDivElement, PopoverAnchorProps> = (props, ref) => {
14
+ const {className, children, ...other} = {...useComponentProps("popoverAnchor"), ...props};
15
+
16
+ return (
17
+ <Anchor ref={ref} className={classnames(styles["popover__anchor"], className)} {...other}>
18
+ {children}
19
+ </Anchor>
20
+ );
21
+ };
22
+
23
+ export default memo(forwardRef(PopoverAnchor));
@@ -0,0 +1,23 @@
1
+ import React, {forwardRef, ForwardRefRenderFunction, memo} from "react";
2
+
3
+ import classnames from "classnames";
4
+
5
+ import {Close, PopoverCloseProps} from "@radix-ui/react-popover";
6
+
7
+ import {useComponentProps} from "../../providers";
8
+
9
+ import styles from "./popover.module.scss";
10
+
11
+ export type {PopoverCloseProps};
12
+
13
+ const PopoverClose: ForwardRefRenderFunction<HTMLButtonElement, PopoverCloseProps> = (props, ref) => {
14
+ const {className, children, ...other} = {...useComponentProps("popoverClose"), ...props};
15
+
16
+ return (
17
+ <Close ref={ref} className={classnames(styles["popover__close"], className)} {...other}>
18
+ {children}
19
+ </Close>
20
+ );
21
+ };
22
+
23
+ export default memo(forwardRef(PopoverClose));
@@ -0,0 +1,73 @@
1
+ import React, {forwardRef, ForwardRefRenderFunction, memo} from "react";
2
+
3
+ import classnames from "classnames";
4
+
5
+ import {
6
+ Arrow,
7
+ Content,
8
+ PopoverContentProps as PopoverContentRadixProps,
9
+ PopoverPortalProps,
10
+ Portal,
11
+ } from "@radix-ui/react-popover";
12
+
13
+ import {useComponentProps} from "../../providers";
14
+
15
+ import styles from "./popover.module.scss";
16
+
17
+ export interface PopoverContentProps extends PopoverContentRadixProps, PopoverPortalProps {
18
+ maxWidth?: number;
19
+ minWidth?: number;
20
+ fullWidth?: boolean;
21
+ arrow?: boolean;
22
+ arrowWidth?: number;
23
+ arrowHeight?: number;
24
+ overlay?: boolean;
25
+ overlayClassname?: string;
26
+ }
27
+
28
+ const PopoverContent: ForwardRefRenderFunction<HTMLDivElement, PopoverContentProps> = (props, ref) => {
29
+ const {
30
+ maxWidth,
31
+ minWidth,
32
+ arrow,
33
+ arrowWidth,
34
+ arrowHeight,
35
+ fullWidth,
36
+ overlay,
37
+ overlayClassname,
38
+ container,
39
+ className,
40
+ style,
41
+ children,
42
+ ...other
43
+ } = {...useComponentProps("popoverContent"), ...props};
44
+
45
+ return (
46
+ <Portal container={container}>
47
+ <>
48
+ {overlay && <div className={classnames(styles["popover__overlay"], overlayClassname)} />}
49
+ <Content
50
+ ref={ref}
51
+ className={classnames(
52
+ styles["popover__content"],
53
+ {
54
+ [styles["popover__content--full-width"]]: fullWidth,
55
+ },
56
+ className
57
+ )}
58
+ {...other}
59
+ style={{
60
+ minWidth: minWidth ? minWidth : undefined,
61
+ maxWidth: maxWidth ? maxWidth : undefined,
62
+ ...style,
63
+ }}
64
+ >
65
+ {children}
66
+ {arrow && <Arrow className={styles["popover__arrow"]} width={arrowWidth} height={arrowHeight} />}
67
+ </Content>
68
+ </>
69
+ </Portal>
70
+ );
71
+ };
72
+
73
+ export default memo(forwardRef(PopoverContent));
@@ -0,0 +1,35 @@
1
+ import React, {forwardRef, ForwardRefRenderFunction, memo} from "react";
2
+
3
+ import classnames from "classnames";
4
+
5
+ import {PopoverTriggerProps as PopoverTriggerRadixProps, Trigger} from "@radix-ui/react-popover";
6
+
7
+ import {useComponentProps} from "../../providers";
8
+
9
+ import styles from "./popover.module.scss";
10
+
11
+ export interface PopoverTriggerProps extends PopoverTriggerRadixProps {
12
+ center?: boolean;
13
+ }
14
+
15
+ const PopoverTrigger: ForwardRefRenderFunction<HTMLButtonElement, PopoverTriggerProps> = (props, ref) => {
16
+ const {center, className, children, ...other} = {...useComponentProps("popoverTrigger"), ...props};
17
+
18
+ return (
19
+ <Trigger
20
+ ref={ref}
21
+ className={classnames(
22
+ styles["popover__trigger"],
23
+ {
24
+ [styles["popover__trigger--center"]]: center,
25
+ },
26
+ className
27
+ )}
28
+ {...other}
29
+ >
30
+ {children}
31
+ </Trigger>
32
+ );
33
+ };
34
+
35
+ export default memo(forwardRef(PopoverTrigger));
@@ -0,0 +1,5 @@
1
+ export {default as Popover, type PopoverProps} from "./Popover";
2
+ export {default as PopoverClose, type PopoverCloseProps} from "./PopoverClose";
3
+ export {default as PopoverAnchor, type PopoverAnchorProps} from "./PopoverAnchor";
4
+ export {default as PopoverTrigger, type PopoverTriggerProps} from "./PopoverTrigger";
5
+ export {default as PopoverContent, type PopoverContentProps} from "./PopoverContent";
@@ -0,0 +1,77 @@
1
+ $root: popover;
2
+
3
+ .#{$root} {
4
+ &__overlay {
5
+ width: 100vw;
6
+ height: 100vh;
7
+ position: fixed;
8
+ top: 0;
9
+ left: 0;
10
+ background: var(--popover-overlay-bg, var(--overlay-bg, rgba(0, 0, 0, 0.5)));
11
+ }
12
+
13
+ &__anchor {
14
+ height: 100%;
15
+ }
16
+
17
+ &__trigger {
18
+ all: unset;
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: space-between;
22
+ cursor: pointer;
23
+ box-sizing: border-box;
24
+ color: var(--popover-trigger-color);
25
+ background: var(--popover-trigger-bg-color, var(--bg-secondary-color));
26
+ box-shadow: var(--popover-trigger-shadow-offset) var(--popover-trigger-shadow-color);
27
+
28
+ border-width: var(--popover-trigger-border-width, 1px);
29
+ border-style: var(--popover-trigger-border-style, solid);
30
+ border-color: var(--popover-trigger-border-color, var(--border-color));
31
+ border-radius: var(--popover-trigger-border-radius, 10px);
32
+
33
+ font-size: var(--popover-trigger-font-size, var(--popover-font-size, 14px));
34
+ font-weight: var(--popover-trigger-font-weight, 500);
35
+ padding: var(--popover-trigger-padding, 8px 12px);
36
+ height: var(--popover-trigger-height);
37
+ gap: var(--popover-trigger-gap, 5px);
38
+ transition:
39
+ color var(--popover-speed-color, var(--speed-color)),
40
+ background var(--popover-speed-background, var(--speed-color)),
41
+ box-shadow var(--popover-speed-shadow, var(--speed-color)),
42
+ border-color var(--popover-speed-border-color, var(--speed-color));
43
+
44
+ &--center {
45
+ justify-content: center;
46
+ }
47
+
48
+ &:hover {
49
+ box-shadow: var(--popover-trigger-shadow-offset-hover) var(--popover-trigger-shadow-color);
50
+ border-width: var(--popover-trigger-border-width-hover, var(--popover-trigger-border-width, 1px));
51
+ border-color: var(--popover-trigger-border-color-hover, var(--popover-trigger-border-color, var(--border-color)));
52
+ }
53
+ }
54
+
55
+ &__content {
56
+ overflow: hidden;
57
+ padding: var(--popover-content-padding, 16px);
58
+ background: var(--popover-content-bg-color, var(--bg-primary-color));
59
+ border-radius: var(--popover-content-border-radius, 8px);
60
+ box-shadow: var(--popover-content-shadow-offset, 0 0 5px 0) var(--popover-content-shadow-color, rgba(0, 0, 0, 0.25));
61
+ height: var(--popover-content-height);
62
+ max-height: var(--popover-content-max-height, var(--radix-popover-content-available-height));
63
+ transition:
64
+ background var(--popover-speed-background, var(--speed-color)),
65
+ box-shadow var(--popover-speed-shadow, var(--speed-color));
66
+
67
+ &--full-width {
68
+ width: var(--popover-content-full-width, var(--radix-popover-content-available-width));
69
+ }
70
+ }
71
+
72
+ &__arrow {
73
+ & > polygon {
74
+ fill: var(--popover-arrow-bg-color, var(--popover-content-bg-color, var(--bg-primary-color)));
75
+ }
76
+ }
77
+ }
@@ -33,7 +33,8 @@ const SelectContent: ForwardRefRenderFunction<HTMLDivElement, SelectContentProps
33
33
  arrow,
34
34
  arrowWidth,
35
35
  arrowHeight,
36
- fullWidth,
36
+ fullWidth = true,
37
+ position = "popper",
37
38
  container,
38
39
  viewportProps,
39
40
  scrollUpButton,
@@ -54,6 +55,7 @@ const SelectContent: ForwardRefRenderFunction<HTMLDivElement, SelectContentProps
54
55
  },
55
56
  className
56
57
  )}
58
+ position={position}
57
59
  {...other}
58
60
  >
59
61
  {scrollUpButton && (
@@ -75,7 +77,7 @@ const SelectContent: ForwardRefRenderFunction<HTMLDivElement, SelectContentProps
75
77
  </SelectScrollDownButton>
76
78
  )}
77
79
 
78
- {arrow && <Arrow width={arrowWidth} height={arrowHeight} />}
80
+ {arrow && <Arrow className={styles["select__arrow"]} width={arrowWidth} height={arrowHeight} />}
79
81
  </Content>
80
82
  </Portal>
81
83
  );
@@ -2,10 +2,13 @@ import React, {forwardRef, ForwardRefRenderFunction, memo} from "react";
2
2
 
3
3
  import classnames from "classnames";
4
4
 
5
- import {Item, ItemIndicator, ItemText, SelectItemProps as SelectItemRadixProps} from "@radix-ui/react-select";
5
+ import {Item, SelectItemProps as SelectItemRadixProps} from "@radix-ui/react-select";
6
6
 
7
7
  import {useComponentProps} from "../../providers";
8
8
 
9
+ import SelectItemIndicator from "./SelectItemIndicator";
10
+ import SelectItemText from "./SelectItemText";
11
+
9
12
  import styles from "./select.module.scss";
10
13
 
11
14
  export interface SelectItemProps extends SelectItemRadixProps {
@@ -14,24 +17,20 @@ export interface SelectItemProps extends SelectItemRadixProps {
14
17
  }
15
18
 
16
19
  const SelectItem: ForwardRefRenderFunction<HTMLDivElement, SelectItemProps> = (props, ref) => {
17
- const {indicator, textValue, className, indicatorClassname, children, ...other} = {
20
+ const {textValue, indicator, indicatorClassname, className, children, ...other} = {
18
21
  ...useComponentProps("selectItem"),
19
22
  ...props,
20
23
  };
21
24
 
22
25
  return (
23
- <Item ref={ref} className={classnames(styles["select__item"], className)} textValue={textValue} {...other}>
26
+ <Item ref={ref} textValue={textValue} className={classnames(styles["select__item"], className)} {...other}>
24
27
  {children && children}
25
28
 
26
29
  {!children && (
27
30
  <>
28
- {indicator && (
29
- <ItemIndicator className={classnames(styles["select__item__indicator"], indicatorClassname)}>
30
- {indicator}
31
- </ItemIndicator>
32
- )}
31
+ {indicator && <SelectItemIndicator className={indicatorClassname}>{indicator}</SelectItemIndicator>}
33
32
 
34
- {textValue && <ItemText className={classnames(styles["select__item__text"])}>{textValue}</ItemText>}
33
+ {textValue && <SelectItemText>{textValue}</SelectItemText>}
35
34
  </>
36
35
  )}
37
36
  </Item>
@@ -0,0 +1,17 @@
1
+ import React, {forwardRef, ForwardRefRenderFunction, memo} from "react";
2
+
3
+ import classnames from "classnames";
4
+
5
+ import {ItemIndicator, SelectItemIndicatorProps} from "@radix-ui/react-select";
6
+
7
+ import styles from "./select.module.scss";
8
+
9
+ export {type SelectItemIndicatorProps};
10
+
11
+ const SelectItemIndicator: ForwardRefRenderFunction<HTMLSpanElement, SelectItemIndicatorProps> = (props, ref) => {
12
+ const {className, ...other} = props;
13
+
14
+ return <ItemIndicator ref={ref} className={classnames(styles["select__item__indicator"], className)} {...other} />;
15
+ };
16
+
17
+ export default memo(forwardRef(SelectItemIndicator));
@@ -0,0 +1,17 @@
1
+ import React, {forwardRef, ForwardRefRenderFunction, memo} from "react";
2
+
3
+ import classnames from "classnames";
4
+
5
+ import {ItemText, SelectItemTextProps} from "@radix-ui/react-select";
6
+
7
+ import styles from "./select.module.scss";
8
+
9
+ export {type SelectItemTextProps};
10
+
11
+ const SelectItemText: ForwardRefRenderFunction<HTMLSpanElement, SelectItemTextProps> = (props, ref) => {
12
+ const {className, ...other} = props;
13
+
14
+ return <ItemText ref={ref} className={classnames(styles["select__item__text"], className)} {...other} />;
15
+ };
16
+
17
+ export default memo(forwardRef(SelectItemText));
@@ -1,5 +1,7 @@
1
1
  export {default as Select, type SelectProps} from "./Select";
2
2
  export {default as SelectItem, type SelectItemProps} from "./SelectItem";
3
+ export {default as SelectItemText, type SelectItemTextProps} from "./SelectItemText";
4
+ export {default as SelectItemIndicator, type SelectItemIndicatorProps} from "./SelectItemIndicator";
3
5
  export {default as SelectIcon, type SelectIconProps} from "./SelectIcon";
4
6
  export {default as SelectValue, type SelectValueProps} from "./SelectValue";
5
7
  export {default as SelectTrigger, type SelectTriggerProps} from "./SelectTrigger";
@@ -46,7 +46,7 @@ $root: select;
46
46
  }
47
47
 
48
48
  &[data-placeholder] {
49
- color: var(--text-disabled-color);
49
+ color: var(--select-placeholder-color, var(--placeholder-color));
50
50
  }
51
51
 
52
52
  @include theme.rtl {
@@ -147,4 +147,10 @@ $root: select;
147
147
  background-color: var(--select-scroll-btn-hover-bg-color, var(--bg-secondary-color));
148
148
  }
149
149
  }
150
+
151
+ &__arrow {
152
+ & > polygon {
153
+ fill: var(--select-arrow-bg-color, var(--select-content-bg-color, var(--bg-primary-color)));
154
+ }
155
+ }
150
156
  }
@@ -0,0 +1,98 @@
1
+ import React, {
2
+ Children,
3
+ cloneElement,
4
+ ComponentProps,
5
+ createElement,
6
+ CSSProperties,
7
+ forwardRef,
8
+ ForwardRefRenderFunction,
9
+ isValidElement,
10
+ memo,
11
+ useImperativeHandle,
12
+ useLayoutEffect,
13
+ useRef,
14
+ useState,
15
+ } from "react";
16
+
17
+ import classnames from "classnames";
18
+
19
+ import styles from "./shift.module.scss";
20
+
21
+ export interface ShiftProps extends ComponentProps<"div"> {
22
+ active?: number;
23
+ height?: number;
24
+ adaptiveHeight?: boolean;
25
+ itemClassName?: string;
26
+ }
27
+
28
+ const Shift: ForwardRefRenderFunction<HTMLDivElement, ShiftProps> = (props, ref) => {
29
+ const {
30
+ active = 1,
31
+ height,
32
+ adaptiveHeight = true,
33
+ itemClassName,
34
+ className,
35
+ style,
36
+ children: childrenProps,
37
+ ...other
38
+ } = props;
39
+
40
+ const [currentHeight, setCurrentHeight] = useState<number>();
41
+
42
+ const containerRef = useRef<HTMLDivElement>(null);
43
+
44
+ const children = Children.map(childrenProps, (child, index) => {
45
+ const item = index + 1;
46
+
47
+ const className = classnames(styles["shift-item"], itemClassName);
48
+
49
+ const style: CSSProperties = {
50
+ opacity: 0,
51
+ };
52
+
53
+ if (item > active) {
54
+ style.transform = `translate3d(0, ${(item - active) * 100}%, 0)`;
55
+ } else if (item < active) {
56
+ style.transform = `translate3d(0, -${(active - item) * 100}%, 0)`;
57
+ } else {
58
+ style.opacity = 1;
59
+ style.transform = "translate3d(0, 0, 0)";
60
+ }
61
+
62
+ if (!isValidElement<React.HTMLAttributes<HTMLElement>>(child)) {
63
+ return createElement("span", {className, style}, child);
64
+ }
65
+
66
+ return cloneElement(child, {
67
+ style: {...(child.props?.style ?? {}), ...style},
68
+ className: classnames(className, child.props.className),
69
+ });
70
+ });
71
+
72
+ useImperativeHandle(ref, () => containerRef.current as HTMLDivElement);
73
+
74
+ useLayoutEffect(() => {
75
+ const el = containerRef.current?.children[active - 1] as HTMLElement;
76
+
77
+ if (el) {
78
+ setCurrentHeight(el.offsetHeight);
79
+ }
80
+ }, [active]);
81
+
82
+ return (
83
+ <div
84
+ ref={containerRef}
85
+ className={classnames(styles["shift"], className)}
86
+ style={{
87
+ ...style,
88
+ ...(adaptiveHeight ? {height: currentHeight} : {}),
89
+ ...(height ? {height} : {}),
90
+ }}
91
+ {...other}
92
+ >
93
+ {children}
94
+ </div>
95
+ );
96
+ };
97
+
98
+ export default memo(forwardRef(Shift));
@@ -0,0 +1 @@
1
+ export {default as Shift, type ShiftProps} from "./Shift";
@@ -0,0 +1,21 @@
1
+ .shift {
2
+ position: relative;
3
+ overflow: hidden;
4
+ display: flex;
5
+ flex-direction: column;
6
+ justify-content: center;
7
+ align-items: center;
8
+ width: 100%;
9
+ transition: height var(--shift-speed-height, var(--speed-sm));
10
+
11
+ &-item {
12
+ position: absolute;
13
+ width: 100%;
14
+ box-sizing: border-box;
15
+ left: 0;
16
+ top: 0;
17
+ transition:
18
+ transform var(--shift-speed-transform, var(--speed-sm)),
19
+ opacity var(--shift-speed-opacity, var(--speed-sm));
20
+ }
21
+ }
@@ -26,6 +26,11 @@ $root: text-area;
26
26
  cursor: not-allowed;
27
27
  }
28
28
 
29
+ &::placeholder {
30
+ color: var(--text-area-placeholder-color, var(--placeholder-color));
31
+ transition: color var(--text-area-speed-color, var(--speed-color));
32
+ }
33
+
29
34
  &--full-width {
30
35
  width: 100% !important;
31
36
  }
@@ -54,7 +54,7 @@ $root: text-field;
54
54
  }
55
55
 
56
56
  &::placeholder {
57
- color: var(--text-field-placeholder-color, var(--text-secondary-color));
57
+ color: var(--text-field-placeholder-color, var(--placeholder-color));
58
58
  transition: color var(--text-field-speed-color, var(--speed-color));
59
59
  }
60
60
 
@@ -0,0 +1,25 @@
1
+ import React, {forwardRef, ForwardRefRenderFunction, memo} from "react";
2
+
3
+ import classnames from "classnames";
4
+
5
+ import {Root, ToggleGroupMultipleProps, ToggleGroupSingleProps} from "@radix-ui/react-toggle-group";
6
+
7
+ import {useComponentProps} from "../../providers";
8
+
9
+ import styles from "./toggleGroup.module.scss";
10
+
11
+ export type {ToggleGroupSingleProps, ToggleGroupMultipleProps};
12
+
13
+ export type ToggleGroupProps = React.ComponentProps<typeof Root>;
14
+
15
+ const ToggleGroup: ForwardRefRenderFunction<HTMLDivElement, ToggleGroupProps> = (props, ref) => {
16
+ const {className, children, ...other} = {...useComponentProps("toggleGroup"), ...props};
17
+
18
+ return (
19
+ <Root ref={ref} className={classnames(styles["toggle-group"], className)} {...other}>
20
+ {children}
21
+ </Root>
22
+ );
23
+ };
24
+
25
+ export default memo(forwardRef(ToggleGroup));
@@ -0,0 +1,17 @@
1
+ import React, {forwardRef, ForwardRefRenderFunction, memo, ComponentProps} from "react";
2
+
3
+ import classnames from "classnames";
4
+
5
+ import styles from "./toggleGroup.module.scss";
6
+
7
+ const ToggleGroupIndicator: ForwardRefRenderFunction<HTMLDivElement, ComponentProps<"div">> = (props, ref) => {
8
+ const {children, className, ...other} = props;
9
+
10
+ return (
11
+ <div ref={ref} className={classnames(styles["toggle-group__indicator"], className)} {...other}>
12
+ {children}
13
+ </div>
14
+ );
15
+ };
16
+
17
+ export default memo(forwardRef(ToggleGroupIndicator));
@@ -0,0 +1,28 @@
1
+ import React, {forwardRef, ForwardRefRenderFunction, memo} from "react";
2
+
3
+ import classnames from "classnames";
4
+
5
+ import {ToggleGroupItem as ToggleGroupItemRadix, ToggleGroupItemProps} from "@radix-ui/react-toggle-group";
6
+
7
+ import {useComponentProps} from "../../providers";
8
+
9
+ export type {ToggleGroupItemProps};
10
+
11
+ import styles from "./toggleGroup.module.scss";
12
+
13
+ const ToggleGroupItem: ForwardRefRenderFunction<HTMLButtonElement, ToggleGroupItemProps> = (props, ref) => {
14
+ const {asChild = true, children, className, ...other} = {...useComponentProps("toggleGroupItem"), ...props};
15
+
16
+ return (
17
+ <ToggleGroupItemRadix
18
+ {...other}
19
+ ref={ref}
20
+ asChild={asChild}
21
+ className={classnames(styles["toggle-group__item"], className)}
22
+ >
23
+ {children}
24
+ </ToggleGroupItemRadix>
25
+ );
26
+ };
27
+
28
+ export default memo(forwardRef(ToggleGroupItem));
@@ -0,0 +1,8 @@
1
+ export {
2
+ default as ToggleGroup,
3
+ type ToggleGroupProps,
4
+ type ToggleGroupSingleProps,
5
+ type ToggleGroupMultipleProps,
6
+ } from "./ToggleGroup";
7
+ export {default as ToggleGroupItem, type ToggleGroupItemProps} from "./ToggleGroupItem";
8
+ export {default as ToggleGroupIndicator} from "./ToggleGroupIndicator";
@@ -0,0 +1,32 @@
1
+ $root: toggle-group;
2
+
3
+ .#{$root} {
4
+ display: flex;
5
+ gap: var(--toggle-group-gap, 10px);
6
+ padding: var(--toggle-group-padding, 0);
7
+ transition: background var(--toggle-group-speed-bg, var(--speed-color));
8
+
9
+ &[data-orientation="vertical"] {
10
+ flex-direction: column;
11
+ }
12
+
13
+ &__item {
14
+ color: var(--text-primary-color);
15
+ transition:
16
+ background var(--toggle-group-item-speed-bg, var(--speed-color)),
17
+ color var(--toggle-group-item-speed-color, var(--speed-color));
18
+
19
+ &[data-state="on"] {
20
+ background: var(--toggle-group-item-checked-bg, var(--primary-color));
21
+ color: var(--toggle-group-item-checked-color);
22
+ }
23
+ }
24
+
25
+ &__indicator {
26
+ display: none;
27
+
28
+ .#{$root}__item[data-state="on"] & {
29
+ display: inline-flex;
30
+ }
31
+ }
32
+ }
@@ -20,6 +20,7 @@ $root: tooltip;
20
20
  animation-duration: var(--tooltip-speed-animation, var(--speed-md));
21
21
  will-change: transform, opacity;
22
22
  box-shadow: var(--tooltip-box-shadow-offset, 0 0 5px 0) var(--tooltip-box-shadow-color, rgba(210, 208, 208, 0.47));
23
+ z-index: var(--tooltip-z-index, 10000);
23
24
  transition:
24
25
  border-color var(--tooltip-speed-border-color, var(--speed-color)),
25
26
  box-shadow var(--tooltip-speed-box-shadow, var(--speed-color)),
@@ -14,8 +14,10 @@ export * from "./List";
14
14
  export * from "./ListItem";
15
15
  export * from "./Modal";
16
16
  export * from "./Odometer";
17
+ export * from "./Popover";
17
18
  export * from "./ScrollArea";
18
19
  export * from "./Select";
20
+ export * from "./Shift";
19
21
  export * from "./SvgSprite";
20
22
  export * from "./Switch";
21
23
  export * from "./Tabs";
@@ -23,6 +25,7 @@ export * from "./Tag";
23
25
  export * from "./TextArea";
24
26
  export * from "./TextField";
25
27
  export * from "./Toast";
28
+ export * from "./ToggleGroup";
26
29
  export * from "./Tooltip";
27
30
  export * from "./Truncate";
28
31
  export * from "./TruncateList";
@@ -7,34 +7,41 @@ import type {
7
7
  FooterProps,
8
8
  HeaderProps,
9
9
  HighlightProps,
10
- IconProps,
11
10
  IconButtonProps,
12
- ListProps,
11
+ IconProps,
13
12
  ListItemProps,
13
+ ListProps,
14
14
  ModalProps,
15
15
  OdometerProps,
16
+ PopoverAnchorProps,
17
+ PopoverCloseProps,
18
+ PopoverContentProps,
19
+ PopoverProps,
20
+ PopoverTriggerProps,
16
21
  ScrollAreaProps,
17
- SelectProps,
18
- SelectItemProps,
19
- SelectIconProps,
20
- SelectValueProps,
21
22
  SelectContentProps,
23
+ SelectIconProps,
24
+ SelectItemProps,
25
+ SelectProps,
22
26
  SelectTriggerProps,
27
+ SelectValueProps,
23
28
  SwitchProps,
24
- TabsProps,
25
29
  TabsContentProps,
26
30
  TabsListProps,
31
+ TabsProps,
27
32
  TabsTriggerProps,
28
33
  TagProps,
29
34
  TextAreaProps,
30
35
  TextFieldProps,
31
36
  ToastProps,
37
+ ToggleGroupItemProps,
38
+ ToggleGroupProps,
32
39
  TooltipProps,
33
- TruncateProps,
34
40
  TruncateListProps,
35
- ViewProps,
41
+ TruncateProps,
36
42
  ViewDrawerProps,
37
43
  ViewModalProps,
44
+ ViewProps,
38
45
  } from "../components";
39
46
 
40
47
  export interface ComponentsProps {
@@ -52,6 +59,11 @@ export interface ComponentsProps {
52
59
  listItem?: ListItemProps;
53
60
  modal?: ModalProps;
54
61
  odometer?: Pick<OdometerProps, "auto" | "format" | "duration">;
62
+ popover?: PopoverProps;
63
+ popoverClose?: PopoverCloseProps;
64
+ popoverAnchor?: PopoverAnchorProps;
65
+ popoverTrigger?: PopoverTriggerProps;
66
+ popoverContent?: PopoverContentProps;
55
67
  scrollArea?: ScrollAreaProps;
56
68
  select?: SelectProps;
57
69
  selectItem?: SelectItemProps;
@@ -80,6 +92,8 @@ export interface ComponentsProps {
80
92
  | "radius"
81
93
  | "color"
82
94
  >;
95
+ toggleGroup?: Omit<ToggleGroupProps, "type" | "value" | "defaultValue" | "onValueChange">;
96
+ toggleGroupItem?: Omit<ToggleGroupItemProps, "value">;
83
97
  tooltip?: Omit<TooltipProps, "content">;
84
98
  truncate?: TruncateProps;
85
99
  truncateList?: TruncateListProps;
@@ -44,11 +44,14 @@
44
44
  --bg-secondary-color: #e9ecef;
45
45
 
46
46
  --text-default-color: #000;
47
+ --text-revers-color: #fff;
47
48
  --text-primary-color: #2e4453;
48
49
  --text-secondary-color: #25282b;
49
50
  --text-accent-color: var(--accent-color);
50
51
  --text-disabled-color: #333337;
51
52
 
53
+ --placeholder-color: #a3a3a3;
54
+
52
55
  --separator-color: #ccc;
53
56
 
54
57
  /* Components colors */
@@ -76,6 +79,7 @@
76
79
  --bg-secondary-color: #3f404b;
77
80
 
78
81
  --text-default-color: #fff;
82
+ --text-revers-color: #000;
79
83
  --text-primary-color: #ededed;
80
84
  --text-secondary-color: #fbfbfb;
81
85
  --text-accent-color: var(--accent-color);
@@ -111,6 +111,7 @@ button:focus {
111
111
  }
112
112
 
113
113
  body {
114
+ overflow: hidden;
114
115
  background-color: var(--bg-primary-color);
115
116
  color: var(--text-primary-color);
116
117
  font-family: var(--font-family), "sans-serif";