@dxos/react-ui 0.8.4-main.e8ec1fe → 0.8.4-main.ef1bc66f44
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/chunk-EJYV4HAH.mjs +774 -0
- package/dist/lib/browser/chunk-EJYV4HAH.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +3197 -66
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +34 -45
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node-esm/chunk-YTLZCZ2M.mjs +776 -0
- package/dist/lib/node-esm/chunk-YTLZCZ2M.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +3197 -66
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +34 -45
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +7 -0
- package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +1 -1
- package/dist/types/src/components/Button/Button.d.ts +1 -1
- package/dist/types/src/components/Button/Button.d.ts.map +1 -1
- package/dist/types/src/components/Button/IconButton.d.ts +2 -1
- package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
- package/dist/types/src/components/Button/ToggleGroup.d.ts +4 -4
- package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +4 -4
- package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
- package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/Dialog.d.ts +24 -9
- package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/Dialog.stories.d.ts +7 -5
- package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
- package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
- package/dist/types/src/components/Icon/Icon.d.ts +1 -1
- package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.d.ts +5 -2
- package/dist/types/src/components/Input/Input.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.stories.d.ts +2 -2
- package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/List.d.ts +1 -1
- package/dist/types/src/components/List/List.d.ts.map +1 -1
- package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.d.ts +8 -9
- package/dist/types/src/components/Main/Main.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
- package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
- package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
- package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
- package/dist/types/src/components/{Menus → Menu}/DropdownMenu.d.ts +3 -4
- package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
- package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
- package/dist/types/src/components/Menu/index.d.ts.map +1 -0
- package/dist/types/src/components/Message/Message.d.ts +1 -1
- package/dist/types/src/components/Message/Message.d.ts.map +1 -1
- package/dist/types/src/components/Message/Message.stories.d.ts +1 -1
- package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.d.ts +1 -1
- package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +25 -26
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +46 -8
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +4 -2
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +2 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Select/Select.d.ts +9 -9
- package/dist/types/src/components/Separator/Separator.d.ts +1 -1
- package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
- package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
- package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
- package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
- package/dist/types/src/components/Skeleton/index.d.ts +2 -0
- package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
- package/dist/types/src/components/Splitter/Splitter.d.ts +26 -0
- package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
- package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
- package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
- package/dist/types/src/components/Splitter/index.d.ts +2 -0
- package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
- package/dist/types/src/components/Tag/Tag.d.ts +1 -1
- package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +2 -2
- package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
- package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
- package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
- package/dist/types/src/components/Toast/Toast.d.ts +4 -4
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +13 -12
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +3 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/exemplars/generics.stories.d.ts +17 -0
- package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
- package/dist/types/src/exemplars/slot.stories.d.ts +14 -0
- package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
- package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
- package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
- package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
- package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
- package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
- package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +2 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Container/Container.d.ts +23 -0
- package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
- package/dist/types/src/primitives/Container/Container.stories.d.ts +11 -0
- package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
- package/dist/types/src/primitives/Container/Layout.d.ts +18 -0
- package/dist/types/src/primitives/Container/Layout.d.ts.map +1 -0
- package/dist/types/src/primitives/Container/Layout.stories.d.ts +10 -0
- package/dist/types/src/primitives/Container/Layout.stories.d.ts.map +1 -0
- package/dist/types/src/primitives/Container/index.d.ts +3 -0
- package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
- package/dist/types/src/primitives/Flex/Flex.d.ts +8 -0
- package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
- package/dist/types/src/primitives/Flex/index.d.ts +2 -0
- package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
- package/dist/types/src/primitives/index.d.ts +3 -0
- package/dist/types/src/primitives/index.d.ts.map +1 -0
- package/dist/types/src/testing/decorators/withLayout.d.ts +3 -3
- package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +1 -1
- package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withTheme.d.ts +3 -2
- package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
- package/dist/types/src/util/index.d.ts +1 -2
- package/dist/types/src/util/index.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +37 -32
- package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +8 -0
- package/src/components/Avatars/Avatar.stories.tsx +4 -4
- package/src/components/Avatars/Avatar.tsx +1 -1
- package/src/components/Avatars/AvatarGroup.stories.tsx +2 -2
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +2 -2
- package/src/components/Button/Button.stories.tsx +2 -2
- package/src/components/Button/Button.tsx +1 -1
- package/src/components/Button/IconButton.stories.tsx +2 -2
- package/src/components/Button/IconButton.tsx +8 -3
- package/src/components/Button/Toggle.stories.tsx +2 -2
- package/src/components/Button/ToggleGroup.stories.tsx +2 -2
- package/src/components/Clipboard/CopyButton.tsx +3 -3
- package/src/components/DensityProvider/DensityProvider.tsx +1 -1
- package/src/components/Dialog/AlertDialog.stories.tsx +2 -2
- package/src/components/Dialog/Dialog.stories.tsx +57 -23
- package/src/components/Dialog/Dialog.tsx +181 -40
- package/src/components/ElevationProvider/ElevationProvider.tsx +1 -1
- package/src/components/Icon/Icon.stories.tsx +3 -3
- package/src/components/Icon/Icon.tsx +1 -1
- package/src/components/Input/Input.stories.tsx +12 -11
- package/src/components/Input/Input.tsx +13 -5
- package/src/components/Link/Link.stories.tsx +2 -2
- package/src/components/List/List.stories.tsx +18 -14
- package/src/components/List/List.tsx +1 -1
- package/src/components/List/Tree.stories.tsx +2 -2
- package/src/components/List/Treegrid.stories.tsx +2 -2
- package/src/components/List/Treegrid.tsx +1 -1
- package/src/components/Main/Main.stories.tsx +41 -20
- package/src/components/Main/Main.tsx +92 -45
- package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +2 -2
- package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +2 -2
- package/src/components/{Menus → Menu}/DropdownMenu.tsx +61 -57
- package/src/components/Message/Message.stories.tsx +3 -3
- package/src/components/Message/Message.tsx +30 -5
- package/src/components/Popover/Popover.stories.tsx +2 -2
- package/src/components/Popover/Popover.tsx +35 -33
- package/src/components/ScrollArea/ScrollArea.stories.tsx +166 -40
- package/src/components/ScrollArea/ScrollArea.tsx +86 -80
- package/src/components/ScrollArea/index.ts +1 -1
- package/src/components/ScrollContainer/ScrollContainer.stories.tsx +3 -2
- package/src/components/ScrollContainer/ScrollContainer.tsx +99 -92
- package/src/components/Select/Select.stories.tsx +2 -2
- package/src/components/Skeleton/Skeleton.stories.tsx +52 -0
- package/src/components/Skeleton/Skeleton.tsx +26 -0
- package/src/components/Skeleton/index.ts +5 -0
- package/src/components/Splitter/Splitter.stories.tsx +73 -0
- package/src/components/Splitter/Splitter.tsx +123 -0
- package/src/components/Splitter/index.ts +5 -0
- package/src/components/Status/Status.stories.tsx +2 -2
- package/src/components/Tag/Tag.stories.tsx +4 -4
- package/src/components/Tag/Tag.tsx +1 -1
- package/src/components/ThemeProvider/ThemeProvider.tsx +2 -3
- package/src/components/ThemeProvider/TranslationsProvider.tsx +1 -16
- package/src/components/ThemeProvider/index.ts +3 -3
- package/src/components/Toast/Toast.stories.tsx +2 -2
- package/src/components/Toolbar/Toolbar.stories.tsx +2 -2
- package/src/components/Toolbar/Toolbar.tsx +31 -12
- package/src/components/Tooltip/Tooltip.stories.tsx +2 -2
- package/src/components/Tooltip/Tooltip.tsx +22 -20
- package/src/components/index.ts +3 -1
- package/src/exemplars/generics.stories.tsx +44 -0
- package/src/exemplars/slot.stories.tsx +108 -0
- package/src/exemplars/tabster.stories.tsx +127 -0
- package/src/hooks/useDensityContext.ts +1 -1
- package/src/hooks/useElevationContext.ts +1 -1
- package/src/index.ts +2 -1
- package/src/playground/Controls.stories.tsx +3 -4
- package/src/playground/Custom.stories.tsx +2 -2
- package/src/playground/Typography.stories.tsx +2 -2
- package/src/primitives/Container/Container.stories.tsx +67 -0
- package/src/primitives/Container/Container.tsx +82 -0
- package/src/primitives/Container/Layout.stories.tsx +57 -0
- package/src/primitives/Container/Layout.tsx +61 -0
- package/src/primitives/Container/index.ts +6 -0
- package/src/primitives/Flex/Flex.tsx +26 -0
- package/src/primitives/Flex/index.ts +5 -0
- package/src/primitives/index.ts +6 -0
- package/src/testing/decorators/withLayout.tsx +22 -15
- package/src/testing/decorators/withLayoutVariants.tsx +3 -3
- package/src/testing/decorators/withTheme.tsx +21 -18
- package/src/util/index.ts +2 -2
- package/dist/lib/browser/chunk-53MI2QCM.mjs +0 -4707
- package/dist/lib/browser/chunk-53MI2QCM.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ID67AFFF.mjs +0 -4709
- package/dist/lib/node-esm/chunk-ID67AFFF.mjs.map +0 -7
- package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
- package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
- package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
- package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
- package/dist/types/src/components/Menus/index.d.ts.map +0 -1
- package/dist/types/src/util/ThemedClassName.d.ts +0 -5
- package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
- package/dist/types/src/util/domino.d.ts +0 -18
- package/dist/types/src/util/domino.d.ts.map +0 -1
- package/src/util/ThemedClassName.ts +0 -7
- package/src/util/domino.ts +0 -53
- /package/dist/types/src/components/{Menus → Menu}/ContextMenu.stories.d.ts +0 -0
- /package/dist/types/src/components/{Menus → Menu}/DropdownMenu.stories.d.ts +0 -0
- /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
- /package/src/components/{Menus → Menu}/ContextMenu.tsx +0 -0
- /package/src/components/{Menus → Menu}/index.ts +0 -0
|
@@ -8,7 +8,7 @@ import { Slot } from '@radix-ui/react-slot';
|
|
|
8
8
|
import React, { type ComponentPropsWithRef, forwardRef } from 'react';
|
|
9
9
|
|
|
10
10
|
import { useId } from '@dxos/react-hooks';
|
|
11
|
-
import { type Elevation, type MessageValence } from '@dxos/
|
|
11
|
+
import { type Elevation, type MessageValence } from '@dxos/ui-types';
|
|
12
12
|
|
|
13
13
|
import { useElevationContext, useThemeContext } from '../../hooks';
|
|
14
14
|
import { type ThemedClassName } from '../../util';
|
|
@@ -31,9 +31,15 @@ type MessageRootProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.d
|
|
|
31
31
|
};
|
|
32
32
|
|
|
33
33
|
type MessageContextValue = { titleId?: string; descriptionId: string; valence: MessageValence };
|
|
34
|
+
|
|
34
35
|
const MESSAGE_NAME = 'Message';
|
|
36
|
+
|
|
35
37
|
const [MessageProvider, useMessageContext] = createContext<MessageContextValue>(MESSAGE_NAME);
|
|
36
38
|
|
|
39
|
+
//
|
|
40
|
+
// Root
|
|
41
|
+
//
|
|
42
|
+
|
|
37
43
|
const MessageRoot = forwardRef<HTMLDivElement, MessageRootProps>(
|
|
38
44
|
(
|
|
39
45
|
{
|
|
@@ -53,6 +59,7 @@ const MessageRoot = forwardRef<HTMLDivElement, MessageRootProps>(
|
|
|
53
59
|
const descriptionId = useId('message__description', propsDescriptionId);
|
|
54
60
|
const elevation = useElevationContext(propsElevation);
|
|
55
61
|
const Root = asChild ? Slot : Primitive.div;
|
|
62
|
+
|
|
56
63
|
return (
|
|
57
64
|
<MessageProvider {...{ titleId, descriptionId, valence }}>
|
|
58
65
|
<Root
|
|
@@ -72,6 +79,10 @@ const MessageRoot = forwardRef<HTMLDivElement, MessageRootProps>(
|
|
|
72
79
|
|
|
73
80
|
MessageRoot.displayName = MESSAGE_NAME;
|
|
74
81
|
|
|
82
|
+
//
|
|
83
|
+
// Title
|
|
84
|
+
//
|
|
85
|
+
|
|
75
86
|
type MessageTitleProps = Omit<ThemedClassName<ComponentPropsWithRef<typeof Primitive.h2>>, 'id'> & {
|
|
76
87
|
asChild?: boolean;
|
|
77
88
|
icon?: string;
|
|
@@ -84,6 +95,7 @@ const MessageTitle = forwardRef<HTMLHeadingElement, MessageTitleProps>(
|
|
|
84
95
|
const { tx } = useThemeContext();
|
|
85
96
|
const { titleId, valence } = useMessageContext(MESSAGE_TITLE_NAME);
|
|
86
97
|
const Root = asChild ? Slot : Primitive.h2;
|
|
98
|
+
|
|
87
99
|
return (
|
|
88
100
|
<Root
|
|
89
101
|
{...props}
|
|
@@ -106,16 +118,20 @@ const MessageTitle = forwardRef<HTMLHeadingElement, MessageTitleProps>(
|
|
|
106
118
|
|
|
107
119
|
MessageTitle.displayName = MESSAGE_TITLE_NAME;
|
|
108
120
|
|
|
121
|
+
//
|
|
122
|
+
// Content
|
|
123
|
+
//
|
|
124
|
+
|
|
109
125
|
type MessageContentProps = Omit<ThemedClassName<ComponentPropsWithRef<typeof Primitive.h2>>, 'id'> & {
|
|
110
126
|
asChild?: boolean;
|
|
111
127
|
};
|
|
112
128
|
|
|
113
|
-
const
|
|
129
|
+
const MESSAGE_CONTENT_NAME = 'MessageContent';
|
|
114
130
|
|
|
115
131
|
const MessageContent = forwardRef<HTMLParagraphElement, MessageContentProps>(
|
|
116
132
|
({ asChild, classNames, children, ...props }, forwardedRef) => {
|
|
117
133
|
const { tx } = useThemeContext();
|
|
118
|
-
const { descriptionId } = useMessageContext(
|
|
134
|
+
const { descriptionId } = useMessageContext(MESSAGE_CONTENT_NAME);
|
|
119
135
|
const Root = asChild ? Slot : Primitive.p;
|
|
120
136
|
return (
|
|
121
137
|
<Root
|
|
@@ -130,9 +146,18 @@ const MessageContent = forwardRef<HTMLParagraphElement, MessageContentProps>(
|
|
|
130
146
|
},
|
|
131
147
|
);
|
|
132
148
|
|
|
133
|
-
MessageContent.displayName =
|
|
149
|
+
MessageContent.displayName = MESSAGE_CONTENT_NAME;
|
|
150
|
+
|
|
151
|
+
//
|
|
152
|
+
// Message
|
|
153
|
+
//
|
|
154
|
+
|
|
155
|
+
export const Message = {
|
|
156
|
+
Root: MessageRoot,
|
|
157
|
+
Title: MessageTitle,
|
|
158
|
+
Content: MessageContent,
|
|
159
|
+
};
|
|
134
160
|
|
|
135
|
-
export const Message = { Root: MessageRoot, Title: MessageTitle, Content: MessageContent };
|
|
136
161
|
export const Callout = Message;
|
|
137
162
|
|
|
138
163
|
export type { MessageRootProps, MessageTitleProps, MessageContentProps };
|
|
@@ -29,10 +29,10 @@ const DefaultStory = ({ openTrigger, children }: PropsWithChildren<{ openTrigger
|
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
const meta = {
|
|
32
|
-
title: 'ui/react-ui-core/Popover',
|
|
32
|
+
title: 'ui/react-ui-core/components/Popover',
|
|
33
33
|
component: Popover.Root,
|
|
34
34
|
render: DefaultStory,
|
|
35
|
-
decorators: [withTheme],
|
|
35
|
+
decorators: [withTheme()],
|
|
36
36
|
} satisfies Meta<typeof DefaultStory>;
|
|
37
37
|
|
|
38
38
|
export default meta;
|
|
@@ -41,9 +41,9 @@ import { useElevationContext, useThemeContext } from '../../hooks';
|
|
|
41
41
|
import { useSafeCollisionPadding } from '../../hooks/useSafeCollisionPadding';
|
|
42
42
|
import { type ThemedClassName } from '../../util';
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
//
|
|
45
|
+
// Context
|
|
46
|
+
//
|
|
47
47
|
|
|
48
48
|
const POPOVER_NAME = 'Popover';
|
|
49
49
|
|
|
@@ -65,6 +65,10 @@ type PopoverContextValue = {
|
|
|
65
65
|
|
|
66
66
|
const [PopoverProvider, usePopoverContext] = createPopoverContext<PopoverContextValue>(POPOVER_NAME);
|
|
67
67
|
|
|
68
|
+
//
|
|
69
|
+
// PopoverRoot
|
|
70
|
+
//
|
|
71
|
+
|
|
68
72
|
interface PopoverRootProps {
|
|
69
73
|
children?: ReactNode;
|
|
70
74
|
open?: boolean;
|
|
@@ -106,9 +110,9 @@ const PopoverRoot: FC<PopoverRootProps> = (props: ScopedProps<PopoverRootProps>)
|
|
|
106
110
|
|
|
107
111
|
PopoverRoot.displayName = POPOVER_NAME;
|
|
108
112
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
113
|
+
//
|
|
114
|
+
// PopoverAnchor
|
|
115
|
+
//
|
|
112
116
|
|
|
113
117
|
const ANCHOR_NAME = 'PopoverAnchor';
|
|
114
118
|
|
|
@@ -134,9 +138,9 @@ const PopoverAnchor = forwardRef<PopoverAnchorElement, PopoverAnchorProps>(
|
|
|
134
138
|
|
|
135
139
|
PopoverAnchor.displayName = ANCHOR_NAME;
|
|
136
140
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
141
|
+
//
|
|
142
|
+
// PopoverTrigger
|
|
143
|
+
//
|
|
140
144
|
|
|
141
145
|
const TRIGGER_NAME = 'PopoverTrigger';
|
|
142
146
|
|
|
@@ -176,9 +180,9 @@ const PopoverTrigger = forwardRef<PopoverTriggerElement, PopoverTriggerProps>(
|
|
|
176
180
|
|
|
177
181
|
PopoverTrigger.displayName = TRIGGER_NAME;
|
|
178
182
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
183
|
+
//
|
|
184
|
+
// PopoverVirtualTrigger
|
|
185
|
+
//
|
|
182
186
|
|
|
183
187
|
const VIRTUAL_TRIGGER_NAME = 'PopoverVirtualTrigger';
|
|
184
188
|
|
|
@@ -200,9 +204,9 @@ const PopoverVirtualTrigger = (props: ScopedProps<PopoverVirtualTriggerProps>) =
|
|
|
200
204
|
|
|
201
205
|
PopoverVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
|
|
202
206
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
207
|
+
//
|
|
208
|
+
// PopoverPortal
|
|
209
|
+
//
|
|
206
210
|
|
|
207
211
|
const PORTAL_NAME = 'PopoverPortal';
|
|
208
212
|
|
|
@@ -241,9 +245,9 @@ const PopoverPortal: FC<PopoverPortalProps> = (props: ScopedProps<PopoverPortalP
|
|
|
241
245
|
|
|
242
246
|
PopoverPortal.displayName = PORTAL_NAME;
|
|
243
247
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
248
|
+
//
|
|
249
|
+
// PopoverContent
|
|
250
|
+
//
|
|
247
251
|
|
|
248
252
|
const CONTENT_NAME = 'PopoverContent';
|
|
249
253
|
|
|
@@ -275,8 +279,6 @@ const PopoverContent = forwardRef<PopoverContentTypeElement, PopoverContentProps
|
|
|
275
279
|
|
|
276
280
|
PopoverContent.displayName = CONTENT_NAME;
|
|
277
281
|
|
|
278
|
-
/* ----------------------------------------------------------------------------------------------- */
|
|
279
|
-
|
|
280
282
|
type PopoverContentTypeElement = PopoverContentImplElement;
|
|
281
283
|
export interface PopoverContentTypeProps
|
|
282
284
|
extends Omit<PopoverContentImplProps, 'trapFocus' | 'disableOutsidePointerEvents'> {}
|
|
@@ -391,8 +393,6 @@ const PopoverContentNonModal = forwardRef<PopoverContentTypeElement, PopoverCont
|
|
|
391
393
|
},
|
|
392
394
|
);
|
|
393
395
|
|
|
394
|
-
/* ----------------------------------------------------------------------------------------------- */
|
|
395
|
-
|
|
396
396
|
type PopoverContentImplElement = ElementRef<typeof PopperPrimitive.Content>;
|
|
397
397
|
type FocusScopeProps = ComponentPropsWithoutRef<typeof FocusScope>;
|
|
398
398
|
type DismissableLayerProps = ComponentPropsWithoutRef<typeof DismissableLayer>;
|
|
@@ -505,9 +505,9 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
|
|
|
505
505
|
},
|
|
506
506
|
);
|
|
507
507
|
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
508
|
+
//
|
|
509
|
+
// PopoverClose
|
|
510
|
+
//
|
|
511
511
|
|
|
512
512
|
const CLOSE_NAME = 'PopoverClose';
|
|
513
513
|
|
|
@@ -531,9 +531,9 @@ const PopoverClose = forwardRef<PopoverCloseElement, PopoverCloseProps>(
|
|
|
531
531
|
|
|
532
532
|
PopoverClose.displayName = CLOSE_NAME;
|
|
533
533
|
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
534
|
+
//
|
|
535
|
+
// PopoverArrow
|
|
536
|
+
//
|
|
537
537
|
|
|
538
538
|
const ARROW_NAME = 'PopoverArrow';
|
|
539
539
|
|
|
@@ -559,9 +559,9 @@ const PopoverArrow = forwardRef<PopoverArrowElement, PopoverArrowProps>(
|
|
|
559
559
|
|
|
560
560
|
PopoverArrow.displayName = ARROW_NAME;
|
|
561
561
|
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
562
|
+
//
|
|
563
|
+
// PopoverViewport
|
|
564
|
+
//
|
|
565
565
|
|
|
566
566
|
type PopoverViewportProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div>> & {
|
|
567
567
|
asChild?: boolean;
|
|
@@ -585,12 +585,14 @@ const PopoverViewport = forwardRef<HTMLDivElement, PopoverViewportProps>(
|
|
|
585
585
|
},
|
|
586
586
|
);
|
|
587
587
|
|
|
588
|
-
/* ----------------------------------------------------------------------------------------------- */
|
|
589
|
-
|
|
590
588
|
const getState = (open: boolean) => (open ? 'open' : 'closed');
|
|
591
589
|
|
|
592
590
|
type PopoverContentInteractOutsideEvent = Parameters<NonNullable<PopoverContentProps['onInteractOutside']>>[0];
|
|
593
591
|
|
|
592
|
+
//
|
|
593
|
+
// Popver
|
|
594
|
+
//
|
|
595
|
+
|
|
594
596
|
export const Popover = {
|
|
595
597
|
Root: PopoverRoot,
|
|
596
598
|
Anchor: PopoverAnchor,
|
|
@@ -1,51 +1,177 @@
|
|
|
1
1
|
//
|
|
2
|
-
// Copyright
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
6
|
-
import React, { type PropsWithChildren } from 'react';
|
|
5
|
+
import React, { useMemo } from 'react';
|
|
7
6
|
|
|
8
7
|
import { faker } from '@dxos/random';
|
|
9
|
-
import {
|
|
8
|
+
import { mx } from '@dxos/ui-theme';
|
|
10
9
|
|
|
11
|
-
import { withTheme } from '../../testing';
|
|
10
|
+
import { withLayout, withTheme } from '../../testing';
|
|
12
11
|
|
|
13
12
|
import { ScrollArea } from './ScrollArea';
|
|
14
13
|
|
|
15
|
-
faker.seed(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
<p>{children}</p>
|
|
24
|
-
</ScrollArea.Viewport>
|
|
25
|
-
<ScrollArea.Scrollbar orientation='horizontal'>
|
|
26
|
-
<ScrollArea.Thumb />
|
|
27
|
-
</ScrollArea.Scrollbar>
|
|
28
|
-
<ScrollArea.Scrollbar orientation='vertical'>
|
|
29
|
-
<ScrollArea.Thumb />
|
|
30
|
-
</ScrollArea.Scrollbar>
|
|
31
|
-
<ScrollArea.Corner />
|
|
32
|
-
</ScrollArea.Root>
|
|
33
|
-
);
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const meta = {
|
|
37
|
-
title: 'ui/react-ui-core/ScrollArea',
|
|
38
|
-
component: ScrollArea as any,
|
|
39
|
-
render: DefaultStory,
|
|
40
|
-
decorators: [withTheme],
|
|
41
|
-
} satisfies Meta<typeof DefaultStory>;
|
|
42
|
-
|
|
43
|
-
export default meta;
|
|
44
|
-
|
|
45
|
-
type Story = StoryObj<typeof meta>;
|
|
46
|
-
|
|
47
|
-
export const Default: Story = {
|
|
48
|
-
args: {
|
|
49
|
-
children: faker.lorem.paragraphs(5),
|
|
14
|
+
faker.seed(123);
|
|
15
|
+
|
|
16
|
+
export default {
|
|
17
|
+
title: 'ui/react-ui-core/components/ScrollArea',
|
|
18
|
+
component: ScrollArea,
|
|
19
|
+
decorators: [withTheme()],
|
|
20
|
+
parameters: {
|
|
21
|
+
layout: 'centered',
|
|
50
22
|
},
|
|
51
23
|
};
|
|
24
|
+
|
|
25
|
+
const Column = () => (
|
|
26
|
+
<div>
|
|
27
|
+
{Array.from({ length: 50 }).map((_, index) => (
|
|
28
|
+
<div key={index} className='text-sm'>
|
|
29
|
+
Item {index + 1}
|
|
30
|
+
</div>
|
|
31
|
+
))}
|
|
32
|
+
</div>
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
const Row = () => (
|
|
36
|
+
<div className='flex gap-2 is-max'>
|
|
37
|
+
{Array.from({ length: 50 }).map((_, index) => (
|
|
38
|
+
<div
|
|
39
|
+
key={index}
|
|
40
|
+
className='shrink-0 bs-20 is-20 border border-separator rounded-md flex items-center justify-center text-sm'
|
|
41
|
+
>
|
|
42
|
+
{index + 1}
|
|
43
|
+
</div>
|
|
44
|
+
))}
|
|
45
|
+
</div>
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
export const Vertical = {
|
|
49
|
+
render: () => (
|
|
50
|
+
<div className='bs-72 is-48 p-2 border border-separator rounded-md'>
|
|
51
|
+
<ScrollArea.Root orientation='vertical'>
|
|
52
|
+
<ScrollArea.Viewport>
|
|
53
|
+
<Column />
|
|
54
|
+
</ScrollArea.Viewport>
|
|
55
|
+
</ScrollArea.Root>
|
|
56
|
+
</div>
|
|
57
|
+
),
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const VerticalThin = {
|
|
61
|
+
render: () => (
|
|
62
|
+
<div className='bs-72 is-48 p-2 border border-separator rounded-md'>
|
|
63
|
+
<ScrollArea.Root orientation='vertical' thin>
|
|
64
|
+
<ScrollArea.Viewport>
|
|
65
|
+
<Column />
|
|
66
|
+
</ScrollArea.Viewport>
|
|
67
|
+
</ScrollArea.Root>
|
|
68
|
+
</div>
|
|
69
|
+
),
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export const Horizontal = {
|
|
73
|
+
render: () => (
|
|
74
|
+
<div className='is-96 p-2 border border-separator rounded-md'>
|
|
75
|
+
<ScrollArea.Root orientation='horizontal'>
|
|
76
|
+
<ScrollArea.Viewport>
|
|
77
|
+
<Row />
|
|
78
|
+
</ScrollArea.Viewport>
|
|
79
|
+
</ScrollArea.Root>
|
|
80
|
+
</div>
|
|
81
|
+
),
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export const HorizontalThin = {
|
|
85
|
+
render: () => (
|
|
86
|
+
<div className='is-96 p-2 border border-separator rounded-md'>
|
|
87
|
+
<ScrollArea.Root orientation='horizontal' thin>
|
|
88
|
+
<ScrollArea.Viewport>
|
|
89
|
+
<Row />
|
|
90
|
+
</ScrollArea.Viewport>
|
|
91
|
+
</ScrollArea.Root>
|
|
92
|
+
</div>
|
|
93
|
+
),
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
export const Both = {
|
|
97
|
+
render: () => (
|
|
98
|
+
<div className='bs-72 is-96 p-2 border border-separator rounded-md'>
|
|
99
|
+
<ScrollArea.Root thin orientation='all'>
|
|
100
|
+
<ScrollArea.Viewport>
|
|
101
|
+
<div className='flex flex-col gap-2'>
|
|
102
|
+
{Array.from({ length: 50 }).map((_, rowIndex) => (
|
|
103
|
+
<div key={rowIndex} className='flex gap-2'>
|
|
104
|
+
{Array.from({ length: 50 }).map((_, colIndex) => (
|
|
105
|
+
<div
|
|
106
|
+
key={colIndex}
|
|
107
|
+
className='shrink-0 bs-20 is-20 flex items-center justify-center text-sm border border-separator font-mono'
|
|
108
|
+
>
|
|
109
|
+
[{colIndex}:{rowIndex}]
|
|
110
|
+
</div>
|
|
111
|
+
))}
|
|
112
|
+
</div>
|
|
113
|
+
))}
|
|
114
|
+
</div>
|
|
115
|
+
</ScrollArea.Viewport>
|
|
116
|
+
</ScrollArea.Root>
|
|
117
|
+
</div>
|
|
118
|
+
),
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export const NestedScrollAreas = {
|
|
122
|
+
decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
|
|
123
|
+
render: () => {
|
|
124
|
+
const columns = useMemo(
|
|
125
|
+
() =>
|
|
126
|
+
Array.from({ length: 8 }).map((_, index) => ({
|
|
127
|
+
id: String(index),
|
|
128
|
+
count: faker.number.int({ min: 5, max: 20 }),
|
|
129
|
+
})),
|
|
130
|
+
[],
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
return (
|
|
134
|
+
<ScrollArea.Root thin orientation='horizontal'>
|
|
135
|
+
<ScrollArea.Viewport classNames='gap-4'>
|
|
136
|
+
{columns.map((column) => (
|
|
137
|
+
<section
|
|
138
|
+
key={column.id}
|
|
139
|
+
className='shrink-0 bs-full is-[16rem] grid grid-rows-[min-content_1fr_min-content] border border-separator'
|
|
140
|
+
>
|
|
141
|
+
<header className='flex shrink-0 p-2 border-be border-separator'>Column {column.id}</header>
|
|
142
|
+
<ScrollArea.Root thin orientation='vertical'>
|
|
143
|
+
<ScrollArea.Viewport classNames='plb-2 pli-2 gap-2'>
|
|
144
|
+
{Array.from({ length: column.count }, (_, i) => (
|
|
145
|
+
<div key={i} role='listitem' className={`shrink-0 p-2 text-sm border border-separator rounded-sm`}>
|
|
146
|
+
Item {i + 1}
|
|
147
|
+
</div>
|
|
148
|
+
))}
|
|
149
|
+
</ScrollArea.Viewport>
|
|
150
|
+
</ScrollArea.Root>
|
|
151
|
+
<footer className={`p-2 text-subdued border-bs border-separator`}>{column.count}</footer>
|
|
152
|
+
</section>
|
|
153
|
+
))}
|
|
154
|
+
</ScrollArea.Viewport>
|
|
155
|
+
</ScrollArea.Root>
|
|
156
|
+
);
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
export const NativeScroll = {
|
|
161
|
+
render: () => (
|
|
162
|
+
<div className='group bs-48 is-48 border border-separator'>
|
|
163
|
+
<div
|
|
164
|
+
className={mx(
|
|
165
|
+
'group bs-full is-full overflow-y-scroll',
|
|
166
|
+
'[&::-webkit-scrollbar]:is-3',
|
|
167
|
+
'[&::-webkit-scrollbar-thumb]:rounded-none',
|
|
168
|
+
'[&::-webkit-scrollbar-track]:bg-scrollbarTrack',
|
|
169
|
+
'[&::-webkit-scrollbar-thumb]:bg-scrollbarThumbSubdued',
|
|
170
|
+
'group-hover:[&::-webkit-scrollbar-thumb]:bg-scrollbarThumb',
|
|
171
|
+
)}
|
|
172
|
+
>
|
|
173
|
+
<Column />
|
|
174
|
+
</div>
|
|
175
|
+
</div>
|
|
176
|
+
),
|
|
177
|
+
};
|
|
@@ -1,111 +1,117 @@
|
|
|
1
1
|
//
|
|
2
|
-
// Copyright
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
type ScrollAreaProps as ScrollAreaPrimitiveRootProps,
|
|
10
|
-
Scrollbar as ScrollAreaPrimitiveScrollbar,
|
|
11
|
-
type ScrollAreaScrollbarProps as ScrollAreaPrimitiveScrollbarProps,
|
|
12
|
-
Thumb as ScrollAreaPrimitiveThumb,
|
|
13
|
-
type ScrollAreaThumbProps as ScrollAreaPrimitiveThumbProps,
|
|
14
|
-
Viewport as ScrollAreaPrimitiveViewport,
|
|
15
|
-
type ScrollAreaViewportProps as ScrollAreaPrimitiveViewportProps,
|
|
16
|
-
} from '@radix-ui/react-scroll-area';
|
|
17
|
-
import React, { forwardRef } from 'react';
|
|
5
|
+
import { createContext } from '@radix-ui/react-context';
|
|
6
|
+
import React, { type HTMLAttributes, forwardRef } from 'react';
|
|
7
|
+
|
|
8
|
+
import { type AllowedAxis, type SlottableProps, type ThemedClassName } from '@dxos/ui-types';
|
|
18
9
|
|
|
19
10
|
import { useThemeContext } from '../../hooks';
|
|
20
|
-
import { type ThemedClassName } from '../../util';
|
|
21
11
|
|
|
22
|
-
|
|
12
|
+
//
|
|
13
|
+
// Context
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
const SCROLLAREA_NAME = 'ScrollArea';
|
|
17
|
+
|
|
18
|
+
type ScrollAreaContextType = {
|
|
19
|
+
/** Orientation of scrollbars. */
|
|
20
|
+
orientation: AllowedAxis;
|
|
21
|
+
/** Hide scrollbars when not scrolling. */
|
|
22
|
+
autoHide: boolean;
|
|
23
|
+
/** Apply padding to opposite side of scrollbar. */
|
|
24
|
+
margin?: boolean;
|
|
25
|
+
/** Apply padding. */
|
|
26
|
+
padding: boolean;
|
|
27
|
+
/** Use thin scrollbars. */
|
|
28
|
+
thin: boolean;
|
|
29
|
+
/** Enable snap scrolling. */
|
|
30
|
+
snap: boolean;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const [ScrollAreaProvider, useScrollAreaContext] = createContext<ScrollAreaContextType>(SCROLLAREA_NAME);
|
|
23
34
|
|
|
24
|
-
|
|
35
|
+
//
|
|
36
|
+
// Root
|
|
37
|
+
//
|
|
38
|
+
|
|
39
|
+
const SCROLLAREA_ROOT_NAME = 'ScrollArea.Root';
|
|
40
|
+
|
|
41
|
+
type ScrollAreaRootProps = SlottableProps<HTMLDivElement> & Partial<ScrollAreaContextType>;
|
|
25
42
|
|
|
26
43
|
/**
|
|
27
|
-
*
|
|
44
|
+
* ScrollArea provides native scrollbars with custom styling.
|
|
28
45
|
*/
|
|
29
|
-
const ScrollAreaRoot = forwardRef<HTMLDivElement, ScrollAreaRootProps>(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
46
|
+
const ScrollAreaRoot = forwardRef<HTMLDivElement, ScrollAreaRootProps>(
|
|
47
|
+
(
|
|
48
|
+
{
|
|
49
|
+
className,
|
|
50
|
+
classNames,
|
|
51
|
+
children,
|
|
52
|
+
orientation = 'vertical',
|
|
53
|
+
autoHide = true,
|
|
54
|
+
margin = false,
|
|
55
|
+
padding = false,
|
|
56
|
+
thin = false,
|
|
57
|
+
snap = false,
|
|
58
|
+
...props
|
|
59
|
+
},
|
|
60
|
+
forwardedRef,
|
|
61
|
+
) => {
|
|
44
62
|
const { tx } = useThemeContext();
|
|
63
|
+
const options = { orientation, autoHide, margin, padding, thin, snap };
|
|
64
|
+
|
|
45
65
|
return (
|
|
46
|
-
<
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
66
|
+
<ScrollAreaProvider {...options}>
|
|
67
|
+
<div
|
|
68
|
+
{...props}
|
|
69
|
+
className={tx('scrollArea.root', 'scroll-area', options, [className, classNames])}
|
|
70
|
+
ref={forwardedRef}
|
|
71
|
+
>
|
|
72
|
+
{children}
|
|
73
|
+
</div>
|
|
74
|
+
</ScrollAreaProvider>
|
|
51
75
|
);
|
|
52
76
|
},
|
|
53
77
|
);
|
|
54
78
|
|
|
55
|
-
|
|
79
|
+
ScrollAreaRoot.displayName = SCROLLAREA_ROOT_NAME;
|
|
80
|
+
|
|
81
|
+
//
|
|
82
|
+
// Viewport
|
|
83
|
+
//
|
|
84
|
+
|
|
85
|
+
const SCROLLAREA_VIEWPORT_NAME = 'ScrollArea.Viewport';
|
|
86
|
+
|
|
87
|
+
type ScrollAreaViewportProps = ThemedClassName<HTMLAttributes<HTMLDivElement>>;
|
|
56
88
|
|
|
57
|
-
const
|
|
58
|
-
({ classNames,
|
|
89
|
+
const ScrollAreaViewport = forwardRef<HTMLDivElement, ScrollAreaViewportProps>(
|
|
90
|
+
({ classNames, children, ...props }, forwardedRef) => {
|
|
59
91
|
const { tx } = useThemeContext();
|
|
92
|
+
const options = useScrollAreaContext(SCROLLAREA_VIEWPORT_NAME);
|
|
93
|
+
|
|
60
94
|
return (
|
|
61
|
-
<
|
|
62
|
-
data-variant={variant}
|
|
95
|
+
<div
|
|
63
96
|
{...props}
|
|
64
|
-
className={tx('scrollArea.
|
|
97
|
+
className={tx('scrollArea.viewport', 'scroll-area__viewport', options, classNames)}
|
|
65
98
|
ref={forwardedRef}
|
|
66
|
-
|
|
99
|
+
>
|
|
100
|
+
{children}
|
|
101
|
+
</div>
|
|
67
102
|
);
|
|
68
103
|
},
|
|
69
104
|
);
|
|
70
105
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
<ScrollAreaPrimitiveThumb
|
|
77
|
-
{...props}
|
|
78
|
-
className={tx('scrollArea.thumb', 'scroll-area__thumb', {}, classNames)}
|
|
79
|
-
ref={forwardedRef}
|
|
80
|
-
/>
|
|
81
|
-
);
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
type ScrollAreaCornerProps = ThemedClassName<ScrollAreaPrimitiveCornerProps>;
|
|
85
|
-
|
|
86
|
-
const ScrollAreaCorner = forwardRef<HTMLDivElement, ScrollAreaCornerProps>(({ classNames, ...props }, forwardedRef) => {
|
|
87
|
-
const { tx } = useThemeContext();
|
|
88
|
-
return (
|
|
89
|
-
<ScrollAreaPrimitiveCorner
|
|
90
|
-
{...props}
|
|
91
|
-
className={tx('scrollArea.corner', 'scroll-area__corner', {}, classNames)}
|
|
92
|
-
ref={forwardedRef}
|
|
93
|
-
/>
|
|
94
|
-
);
|
|
95
|
-
});
|
|
106
|
+
ScrollAreaViewport.displayName = SCROLLAREA_VIEWPORT_NAME;
|
|
107
|
+
|
|
108
|
+
//
|
|
109
|
+
// ScrollArea
|
|
110
|
+
//
|
|
96
111
|
|
|
97
112
|
export const ScrollArea = {
|
|
98
113
|
Root: ScrollAreaRoot,
|
|
99
114
|
Viewport: ScrollAreaViewport,
|
|
100
|
-
Scrollbar: ScrollAreaScrollbar,
|
|
101
|
-
Thumb: ScrollAreaThumb,
|
|
102
|
-
Corner: ScrollAreaCorner,
|
|
103
115
|
};
|
|
104
116
|
|
|
105
|
-
export type {
|
|
106
|
-
ScrollAreaRootProps,
|
|
107
|
-
ScrollAreaViewportProps,
|
|
108
|
-
ScrollAreaScrollbarProps,
|
|
109
|
-
ScrollAreaThumbProps,
|
|
110
|
-
ScrollAreaCornerProps,
|
|
111
|
-
};
|
|
117
|
+
export type { ScrollAreaRootProps, ScrollAreaViewportProps };
|