@dxos/react-ui 0.7.5-main.9cb18ac → 0.7.5-main.9d2a38b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/index.mjs +213 -140
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +589 -520
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +213 -140
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/components/Buttons/IconButton.d.ts +4 -2
- package/dist/types/src/components/Buttons/IconButton.d.ts.map +1 -1
- package/dist/types/src/components/Dialogs/Dialog.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.d.ts +0 -2
- package/dist/types/src/components/Main/Main.d.ts.map +1 -1
- package/dist/types/src/components/Menus/ContextMenu.d.ts.map +1 -1
- package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
- package/dist/types/src/components/Select/Select.d.ts.map +1 -1
- package/dist/types/src/components/Separator/Separator.d.ts +3 -1
- package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +3 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +15 -5
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +7 -2
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +1 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useSafeArea.d.ts +9 -0
- package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -0
- package/dist/types/src/hooks/useSafeCollisionPadding.d.ts +10 -0
- package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -0
- package/dist/types/src/hooks/useVisualViewport.d.ts +1 -1
- package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -12
- package/src/components/Buttons/IconButton.tsx +22 -5
- package/src/components/Dialogs/Dialog.tsx +1 -9
- package/src/components/Main/Main.tsx +0 -36
- package/src/components/Menus/ContextMenu.tsx +4 -2
- package/src/components/Menus/DropdownMenu.tsx +4 -2
- package/src/components/Popover/Popover.tsx +4 -0
- package/src/components/Select/Select.tsx +4 -1
- package/src/components/Separator/Separator.tsx +14 -11
- package/src/components/ThemeProvider/ThemeProvider.tsx +12 -3
- package/src/components/Toolbar/Toolbar.tsx +40 -10
- package/src/components/Tooltip/Tooltip.tsx +17 -13
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useSafeArea.ts +25 -0
- package/src/hooks/useSafeCollisionPadding.ts +39 -0
- package/src/hooks/useVisualViewport.ts +11 -12
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
import React, { forwardRef, type FunctionComponent } from 'react';
|
|
20
20
|
|
|
21
21
|
import { useElevationContext, useThemeContext } from '../../hooks';
|
|
22
|
+
import { useSafeCollisionPadding } from '../../hooks/useSafeCollisionPadding';
|
|
22
23
|
import { type ThemedClassName } from '../../util';
|
|
23
24
|
|
|
24
25
|
type TooltipProviderProps = TooltipProviderPrimitiveProps;
|
|
@@ -52,19 +53,22 @@ const TooltipArrow = forwardRef<SVGSVGElement, TooltipArrowProps>(({ classNames,
|
|
|
52
53
|
|
|
53
54
|
type TooltipContentProps = ThemedClassName<TooltipContentPrimitiveProps>;
|
|
54
55
|
|
|
55
|
-
const TooltipContent = forwardRef<HTMLDivElement, TooltipContentProps>(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
56
|
+
const TooltipContent = forwardRef<HTMLDivElement, TooltipContentProps>(
|
|
57
|
+
({ classNames, collisionPadding = 8, ...props }, forwardedRef) => {
|
|
58
|
+
const { tx } = useThemeContext();
|
|
59
|
+
const elevation = useElevationContext();
|
|
60
|
+
const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
|
|
61
|
+
return (
|
|
62
|
+
<TooltipContentPrimitive
|
|
63
|
+
sideOffset={4}
|
|
64
|
+
{...props}
|
|
65
|
+
collisionPadding={safeCollisionPadding}
|
|
66
|
+
className={tx('tooltip.content', 'tooltip', { elevation }, classNames)}
|
|
67
|
+
ref={forwardedRef}
|
|
68
|
+
/>
|
|
69
|
+
);
|
|
70
|
+
},
|
|
71
|
+
);
|
|
68
72
|
|
|
69
73
|
export const Tooltip = {
|
|
70
74
|
Provider: TooltipProvider,
|
package/src/hooks/index.ts
CHANGED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { useCallback, useState } from 'react';
|
|
6
|
+
|
|
7
|
+
import { useResize } from '@dxos/react-hooks';
|
|
8
|
+
|
|
9
|
+
export type SafeAreaPadding = Record<'top' | 'right' | 'bottom' | 'left', number>;
|
|
10
|
+
|
|
11
|
+
export const initialSafeArea = { top: NaN, right: NaN, bottom: NaN, left: NaN };
|
|
12
|
+
|
|
13
|
+
export const useSafeArea = (): SafeAreaPadding => {
|
|
14
|
+
const [padding, setPadding] = useState<SafeAreaPadding>(initialSafeArea);
|
|
15
|
+
const handleResize = useCallback(() => {
|
|
16
|
+
setPadding({
|
|
17
|
+
top: parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--safe-area-top')),
|
|
18
|
+
right: parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--safe-area-right')),
|
|
19
|
+
bottom: parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--safe-area-bottom')),
|
|
20
|
+
left: parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--safe-area-left')),
|
|
21
|
+
});
|
|
22
|
+
}, []);
|
|
23
|
+
useResize(handleResize);
|
|
24
|
+
return padding;
|
|
25
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type TooltipContentProps } from '@radix-ui/react-tooltip';
|
|
6
|
+
import { useMemo } from 'react';
|
|
7
|
+
|
|
8
|
+
import { type SafeAreaPadding } from './useSafeArea';
|
|
9
|
+
import { useThemeContext } from './useThemeContext';
|
|
10
|
+
|
|
11
|
+
type PaddingProp = TooltipContentProps['collisionPadding'];
|
|
12
|
+
type PaddingRecord = Exclude<PaddingProp, number | undefined>;
|
|
13
|
+
|
|
14
|
+
const propIsNumber = (prop: PaddingProp): prop is number => Number.isFinite(prop);
|
|
15
|
+
const propsIsRecord = (prop: PaddingProp): prop is PaddingRecord => !!(prop && typeof prop === 'object');
|
|
16
|
+
|
|
17
|
+
const safePadding = (
|
|
18
|
+
propsPadding: TooltipContentProps['collisionPadding'],
|
|
19
|
+
safePadding: SafeAreaPadding,
|
|
20
|
+
side: keyof SafeAreaPadding,
|
|
21
|
+
) => {
|
|
22
|
+
return (
|
|
23
|
+
(propIsNumber(safePadding[side]) ? safePadding[side] : 0) +
|
|
24
|
+
(propIsNumber(propsPadding) ? propsPadding : propsIsRecord(propsPadding) ? propsPadding[side] ?? 0 : 0)
|
|
25
|
+
);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export const useSafeCollisionPadding = (collisionPadding?: PaddingProp) => {
|
|
29
|
+
const { safeAreaPadding } = useThemeContext();
|
|
30
|
+
return useMemo(
|
|
31
|
+
() => ({
|
|
32
|
+
top: safePadding(collisionPadding, safeAreaPadding!, 'top'),
|
|
33
|
+
right: safePadding(collisionPadding, safeAreaPadding!, 'right'),
|
|
34
|
+
bottom: safePadding(collisionPadding, safeAreaPadding!, 'bottom'),
|
|
35
|
+
left: safePadding(collisionPadding, safeAreaPadding!, 'left'),
|
|
36
|
+
}),
|
|
37
|
+
[collisionPadding, safeAreaPadding],
|
|
38
|
+
);
|
|
39
|
+
};
|
|
@@ -2,23 +2,22 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { useEffect, useState } from 'react';
|
|
5
|
+
import { useCallback, type useEffect, useState } from 'react';
|
|
6
|
+
|
|
7
|
+
import { useResize } from '@dxos/react-hooks';
|
|
6
8
|
|
|
7
9
|
export const useVisualViewport = (deps?: Parameters<typeof useEffect>[1]) => {
|
|
8
10
|
const [width, setWidth] = useState<number | null>(null);
|
|
9
11
|
const [height, setHeight] = useState<number | null>(null);
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
handleResize();
|
|
20
|
-
return () => window.visualViewport?.removeEventListener('resize', handleResize);
|
|
21
|
-
}, deps ?? []);
|
|
13
|
+
const handleResize = useCallback(() => {
|
|
14
|
+
if (window.visualViewport) {
|
|
15
|
+
setWidth(window.visualViewport.width);
|
|
16
|
+
setHeight(window.visualViewport.height);
|
|
17
|
+
}
|
|
18
|
+
}, []);
|
|
19
|
+
|
|
20
|
+
useResize(handleResize);
|
|
22
21
|
|
|
23
22
|
return { width, height };
|
|
24
23
|
};
|