addon-ui 0.4.2 → 0.5.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.
@@ -2,6 +2,7 @@ import React, { ComponentProps } from "react";
2
2
  import { ViewportMode } from "./context";
3
3
  export type ViewportProps = ComponentProps<"div"> & {
4
4
  mode?: ViewportMode;
5
+ transition?: boolean;
5
6
  };
6
7
  declare const _default: React.ForwardRefExoticComponent<Omit<React.PropsWithChildren<ViewportProps>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
8
  export default _default;
@@ -12,6 +12,7 @@ export interface ViewportContract {
12
12
  mode: ViewportMode;
13
13
  setMode(mode: ViewportMode): void;
14
14
  setSizes(sizes: ViewportSizes): void;
15
+ withTransition(transition: boolean): void;
15
16
  resetSizes(): void;
16
17
  }
17
18
  export declare const ViewportContext: import("react").Context<ViewportContract>;
@@ -20,7 +20,7 @@ export interface ComponentsProps {
20
20
  textArea?: TextAreaProps;
21
21
  textField?: TextFieldProps;
22
22
  toast?: Pick<ToastProps, "side" | "duration" | "swipeDirection" | "swipeThreshold" | "closeProps" | "closeIcon" | "fullWidth" | "sticky" | "radius" | "color">;
23
- tooltip?: TooltipProps;
23
+ tooltip?: Omit<TooltipProps, "content">;
24
24
  view?: ViewProps;
25
25
  viewDrawer?: ViewDrawerProps;
26
26
  viewModal?: ViewModalProps;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "addon-ui",
3
3
  "type": "module",
4
- "version": "0.4.2",
4
+ "version": "0.5.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",
@@ -1,4 +1,4 @@
1
- import React, {forwardRef, ForwardRefRenderFunction, memo} from "react";
1
+ import React, {forwardRef, ForwardRefRenderFunction, memo, useImperativeHandle} from "react";
2
2
  import classnames from "classnames";
3
3
  import {
4
4
  Corner,
@@ -30,16 +30,35 @@ const ScrollArea: ForwardRefRenderFunction<HTMLDivElement, ScrollAreaProps> = (p
30
30
  children,
31
31
  className,
32
32
  horizontalScroll,
33
+ onScroll,
33
34
  thumbClassName,
34
35
  cornerClassName,
35
36
  viewportClassName,
36
37
  scrollbarClassName,
37
38
  ...other
38
39
  } = {...useComponentProps("scrollArea"), ...props};
40
+ const rootRef = React.useRef<HTMLDivElement | null>(null);
41
+ const viewportRef = React.useRef<HTMLDivElement | null>(null);
39
42
 
43
+ useImperativeHandle(
44
+ ref,
45
+ () => ({
46
+ ...rootRef.current!,
47
+ scrollTo: ((optionsOrX?: ScrollToOptions | number, y?: number) => {
48
+ if (typeof optionsOrX === 'number') {
49
+ viewportRef.current?.scrollTo(optionsOrX, y!);
50
+ } else {
51
+ viewportRef.current?.scrollTo(optionsOrX);
52
+ }
53
+ }) as HTMLElement['scrollTo'],
54
+
55
+ }),
56
+ []
57
+ );
40
58
  return (
41
- <Root ref={ref} className={classnames(styles["scroll-area"], className)} {...other}>
59
+ <Root ref={rootRef} className={classnames(styles["scroll-area"], className)} {...other}>
42
60
  <Viewport
61
+ ref={viewportRef}
43
62
  className={classnames(
44
63
  styles["scroll-area__viewport"],
45
64
  {
@@ -47,6 +66,7 @@ const ScrollArea: ForwardRefRenderFunction<HTMLDivElement, ScrollAreaProps> = (p
47
66
  },
48
67
  viewportClassName
49
68
  )}
69
+ onScroll={onScroll}
50
70
  >
51
71
  {children}
52
72
  </Viewport>
@@ -56,7 +76,7 @@ const ScrollArea: ForwardRefRenderFunction<HTMLDivElement, ScrollAreaProps> = (p
56
76
  style={{padding: `0 ${xOffset}px`}}
57
77
  className={classnames(styles["scroll-area__scrollbar"], scrollbarClassName)}
58
78
  >
59
- <Thumb className={classnames(styles["scroll-area__thumb"], thumbClassName)} />
79
+ <Thumb className={classnames(styles["scroll-area__thumb"], thumbClassName)}/>
60
80
  </Scrollbar>
61
81
 
62
82
  <Scrollbar
@@ -64,10 +84,10 @@ const ScrollArea: ForwardRefRenderFunction<HTMLDivElement, ScrollAreaProps> = (p
64
84
  style={{padding: `${yOffset}px 0`}}
65
85
  className={classnames(styles["scroll-area__scrollbar"], scrollbarClassName)}
66
86
  >
67
- <Thumb className={classnames(styles["scroll-area__thumb"], thumbClassName)} />
87
+ <Thumb className={classnames(styles["scroll-area__thumb"], thumbClassName)}/>
68
88
  </Scrollbar>
69
89
 
70
- <Corner className={classnames(styles["scroll-area__corner"], cornerClassName)} />
90
+ <Corner className={classnames(styles["scroll-area__corner"], cornerClassName)}/>
71
91
  </Root>
72
92
  );
73
93
  };
@@ -19,7 +19,7 @@ $root: scroll-area;
19
19
  touch-action: none;
20
20
  padding: var(--scroll-area-scrollbar-padding, 3px);
21
21
  background: var(--scroll-area-scrollbar-bg-color, transparent);
22
- transition: background var(--transition-speed-sm) ease-in-out;
22
+ transition: background var(--transition-speed-sm);
23
23
 
24
24
  &:hover {
25
25
  background: var(--scroll-area-scrollbar-bg-color-hover, transparent);
@@ -42,6 +42,7 @@ $root: scroll-area;
42
42
  position: relative;
43
43
  background: var(--scroll-area-thumb-bg-color);
44
44
  border-radius: var(--scroll-area-thumb-border-radius, 100px);
45
+ transition: background var(--transition-speed-sm);
45
46
 
46
47
  &:hover {
47
48
  background: var(--scroll-area-thumb-bg-color-hover, var(--scroll-area-thumb-bg-color));
@@ -29,7 +29,7 @@ const Tooltip: ForwardRefRenderFunction<HTMLDivElement, TooltipProps> = (props,
29
29
  open,
30
30
  defaultOpen,
31
31
  disableHoverableContent,
32
- delayDuration,
32
+ delayDuration = 250,
33
33
  onOpenChange,
34
34
 
35
35
  arrowWidth,
@@ -17,12 +17,21 @@ import styles from "./viewport.module.scss";
17
17
 
18
18
  export type ViewportProps = ComponentProps<"div"> & {
19
19
  mode?: ViewportMode;
20
+ transition?: boolean;
20
21
  };
21
22
 
22
23
  const Provider: ForwardRefRenderFunction<HTMLDivElement, PropsWithChildren<ViewportProps>> = (
23
- {children, className, style, mode: viewportMode = ViewportMode.Adaptive, ...props},
24
+ {
25
+ children,
26
+ className,
27
+ style,
28
+ mode: viewportMode = ViewportMode.Adaptive,
29
+ transition: viewportTransition = true,
30
+ ...props
31
+ },
24
32
  ref
25
33
  ) => {
34
+ const [transition, withTransition] = useState(viewportTransition);
26
35
  const [mode, setModeState] = useState<ViewportMode>(viewportMode);
27
36
  const [sizes, setSizesState] = useState<ViewportSizes | null>(null);
28
37
 
@@ -40,6 +49,7 @@ const Provider: ForwardRefRenderFunction<HTMLDivElement, PropsWithChildren<Viewp
40
49
  setSizes,
41
50
  setMode,
42
51
  resetSizes,
52
+ withTransition
43
53
  }),
44
54
  [mode, setSizes, setMode, resetSizes]
45
55
  );
@@ -81,6 +91,7 @@ const Provider: ForwardRefRenderFunction<HTMLDivElement, PropsWithChildren<Viewp
81
91
  className={classnames(
82
92
  styles["viewport"],
83
93
  {
94
+ [styles["viewport--transition"]]: transition,
84
95
  [styles["viewport--expanded"]]: mode === ViewportMode.Expanded,
85
96
  [styles["viewport--fixed"]]: mode === ViewportMode.Fixed,
86
97
  },
@@ -20,6 +20,8 @@ export interface ViewportContract {
20
20
 
21
21
  setSizes(sizes: ViewportSizes): void;
22
22
 
23
+ withTransition(transition: boolean): void;
24
+
23
25
  resetSizes(): void;
24
26
  }
25
27
 
@@ -30,6 +32,8 @@ export const ViewportContext = createContext<ViewportContract>({
30
32
 
31
33
  setSizes() {},
32
34
 
35
+ withTransition() {},
36
+
33
37
  resetSizes() {},
34
38
  });
35
39
 
@@ -6,13 +6,15 @@
6
6
  max-width: var(--viewport-max-width);
7
7
  min-height: var(--viewport-min-height);
8
8
  max-height: var(--viewport-max-height);
9
- transition:
10
- height var(--transition-speed-md) ease-in-out,
11
- width var(--transition-speed-md) ease-in-out,
12
- min-height var(--transition-speed-md) ease-in-out,
13
- min-width var(--transition-speed-md) ease-in-out,
14
- max-height var(--transition-speed-md) ease-in-out,
15
- max-width var(--transition-speed-md) ease-in-out;
9
+
10
+ &--transition {
11
+ transition: height var(--transition-viewport, var(--transition-speed-md)) ease-in-out,
12
+ width var(--transition-viewport, var(--transition-speed-md)) ease-in-out,
13
+ min-height var(--transition-viewport, var(--transition-speed-md)) ease-in-out,
14
+ min-width var(--transition-viewport, var(--transition-speed-md)) ease-in-out,
15
+ max-height var(--transition-viewport, var(--transition-speed-md)) ease-in-out,
16
+ max-width var(--transition-viewport, var(--transition-speed-md)) ease-in-out;
17
+ }
16
18
 
17
19
  &--expanded {
18
20
  min-height: var(--viewport-max-height);
@@ -58,7 +58,7 @@ export interface ComponentsProps {
58
58
  | "radius"
59
59
  | "color"
60
60
  >;
61
- tooltip?: TooltipProps;
61
+ tooltip?: Omit<TooltipProps, "content">;
62
62
  view?: ViewProps;
63
63
  viewDrawer?: ViewDrawerProps;
64
64
  viewModal?: ViewModalProps;
@@ -123,5 +123,7 @@ body {
123
123
  will-change: background-color, color;
124
124
  transition:
125
125
  background-color var(--transition-speed-md),
126
+ border-color var(--transition-speed-md),
127
+ background var(--transition-speed-md),
126
128
  color var(--transition-speed-md);
127
129
  }
@@ -22,6 +22,12 @@
22
22
  }
23
23
  }
24
24
 
25
+ @mixin view($view) {
26
+ html[view="#{$view}"] & {
27
+ @content;
28
+ }
29
+ }
30
+
25
31
  @mixin browser($browser) {
26
32
  html[browser="#{$browser}"] & {
27
33
  @content;