@dxos/react-ui 0.8.4-main.d05673bc65 → 0.8.4-main.e00bdcdb52
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-2FKSMWNY.mjs → chunk-BDBC6H6V.mjs} +79 -5
- package/dist/lib/browser/chunk-BDBC6H6V.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +921 -736
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +30 -18
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/browser/translations.mjs +18 -0
- package/dist/lib/browser/translations.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-ZNBLTSHI.mjs → chunk-3JSJK2ZY.mjs} +79 -5
- package/dist/lib/node-esm/chunk-3JSJK2ZY.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +921 -736
- 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 +30 -18
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/lib/node-esm/translations.mjs +20 -0
- package/dist/lib/node-esm/translations.mjs.map +7 -0
- package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
- package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
- package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
- package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/Button.d.ts +2 -2
- package/dist/types/src/components/Button/Button.d.ts.map +1 -1
- package/dist/types/src/components/Button/Button.stories.d.ts +1 -1
- package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/IconButton.d.ts +1 -0
- package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
- package/dist/types/src/components/Button/IconButton.stories.d.ts +3 -0
- package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/Toggle.d.ts +2 -2
- package/dist/types/src/components/Button/Toggle.d.ts.map +1 -1
- package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/ToggleGroup.d.ts +6 -6
- package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
- package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +2 -2
- package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
- package/dist/types/src/components/Card/Card.d.ts +70 -50
- package/dist/types/src/components/Card/Card.d.ts.map +1 -1
- package/dist/types/src/components/Card/Card.stories.d.ts +2 -2
- package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
- package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
- package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
- package/dist/types/src/components/Clipboard/index.d.ts +10 -1
- package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
- package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/AlertDialog.d.ts +42 -31
- package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/Dialog.d.ts +47 -30
- package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/Dialog.stories.d.ts +3 -2
- package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
- package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
- package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -1
- package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +14 -3
- package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
- package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -1
- package/dist/types/src/components/Focus/Focus.d.ts +36 -0
- package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
- package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
- package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
- package/dist/types/src/components/Focus/index.d.ts +2 -0
- package/dist/types/src/components/Focus/index.d.ts.map +1 -0
- package/dist/types/src/components/Icon/Icon.d.ts +3 -0
- package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
- package/dist/types/src/components/Icon/Icon.stories.d.ts +11 -3
- package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
- package/dist/types/src/components/Image/Image.d.ts +2 -1
- package/dist/types/src/components/Image/Image.d.ts.map +1 -1
- package/dist/types/src/components/Image/Image.stories.d.ts +3 -2
- package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.d.ts +14 -17
- package/dist/types/src/components/Input/Input.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.stories.d.ts +3 -3
- package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
- package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/List.d.ts +5 -3
- package/dist/types/src/components/List/List.d.ts.map +1 -1
- package/dist/types/src/components/List/List.stories.d.ts +3 -1
- package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -1
- package/dist/types/src/components/List/Tree.d.ts +2 -2
- package/dist/types/src/components/List/Tree.d.ts.map +1 -1
- package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -1
- package/dist/types/src/components/List/Treegrid.d.ts +5 -9
- package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
- package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.d.ts +7 -3
- 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/Main/useSwipeToDismiss.d.ts.map +1 -1
- package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
- package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
- package/dist/types/src/components/Menu/DropdownMenu.d.ts +58 -49
- package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
- package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +14 -1
- package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
- package/dist/types/src/components/Message/Message.d.ts.map +1 -1
- package/dist/types/src/components/Message/Message.stories.d.ts +2 -2
- package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.d.ts +38 -22
- package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +12 -9
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +18 -5
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +42 -13
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +5 -6
- package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Select/Select.d.ts.map +1 -1
- package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
- package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
- package/dist/types/src/components/Separator/Separator.d.ts +3 -3
- package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
- package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -1
- package/dist/types/src/components/Splitter/Splitter.d.ts +19 -17
- package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
- package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
- package/dist/types/src/components/Status/Status.d.ts +3 -4
- package/dist/types/src/components/Status/Status.d.ts.map +1 -1
- package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +1 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +1 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +54 -55
- package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/index.d.ts +1 -1
- package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
- package/dist/types/src/components/Toast/Toast.d.ts +16 -16
- package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
- package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +11 -19
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.d.ts +10 -10
- package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
- package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/exemplars/generics.stories.d.ts +6 -5
- package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
- package/dist/types/src/exemplars/slot.stories.d.ts +1 -0
- package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
- package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -1
- package/dist/types/src/exemplars/virtualizer.stories.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/useDensityContext.d.ts +1 -1
- package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
- package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
- package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
- package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
- package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
- package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
- package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
- package/dist/types/src/playground/Custom.stories.d.ts +1 -1
- package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
- package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Column/Column.d.ts +21 -14
- package/dist/types/src/primitives/Column/Column.d.ts.map +1 -1
- package/dist/types/src/primitives/Column/Column.stories.d.ts +19 -0
- package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Container/Container.d.ts +4 -5
- package/dist/types/src/primitives/Container/Container.d.ts.map +1 -1
- package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Flex/Flex.d.ts +5 -7
- package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
- package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Grid/Grid.d.ts +3 -8
- package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
- package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Panel/Panel.d.ts +24 -15
- package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -1
- package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -1
- package/dist/types/src/testing/Loading.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withTheme.d.ts +1 -1
- package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +3 -3
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/util/usePx.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +28 -25
- package/src/components/Avatars/Avatar.stories.tsx +2 -3
- package/src/components/Avatars/Avatar.tsx +1 -2
- package/src/components/Avatars/AvatarGroup.stories.tsx +0 -1
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -2
- package/src/components/Button/Button.stories.tsx +0 -1
- package/src/components/Button/Button.tsx +5 -13
- package/src/components/Button/IconButton.stories.tsx +6 -4
- package/src/components/Button/IconButton.tsx +3 -4
- package/src/components/Button/Toggle.stories.tsx +0 -1
- package/src/components/Button/Toggle.tsx +4 -4
- package/src/components/Button/ToggleGroup.stories.tsx +0 -1
- package/src/components/Button/ToggleGroup.tsx +12 -16
- package/src/components/Card/Card.stories.tsx +12 -12
- package/src/components/Card/Card.tsx +266 -108
- package/src/components/Clipboard/CopyButton.tsx +3 -4
- package/src/components/Dialog/AlertDialog.stories.tsx +5 -6
- package/src/components/Dialog/AlertDialog.tsx +67 -126
- package/src/components/Dialog/Dialog.stories.tsx +64 -9
- package/src/components/Dialog/Dialog.tsx +84 -88
- package/src/components/ErrorFallback/ErrorFallback.stories.tsx +3 -8
- package/src/components/ErrorFallback/ErrorStack.tsx +36 -2
- package/src/components/Focus/AUDIT.md +43 -0
- package/src/components/Focus/Focus.stories.tsx +230 -0
- package/src/components/Focus/Focus.tsx +201 -0
- package/src/components/Focus/index.ts +5 -0
- package/src/components/Icon/Icon.stories.tsx +43 -13
- package/src/components/Icon/Icon.tsx +5 -1
- package/src/components/Image/Image.stories.tsx +3 -3
- package/src/components/Image/Image.tsx +31 -8
- package/src/components/Input/Input.stories.tsx +3 -4
- package/src/components/Input/Input.tsx +7 -7
- package/src/components/Link/Link.stories.tsx +0 -1
- package/src/components/List/List.stories.tsx +0 -1
- package/src/components/List/List.tsx +6 -5
- package/src/components/List/Tree.stories.tsx +1 -2
- package/src/components/List/Tree.tsx +0 -1
- package/src/components/List/Treegrid.stories.tsx +26 -27
- package/src/components/List/Treegrid.tsx +14 -14
- package/src/components/Main/Main.stories.tsx +0 -1
- package/src/components/Main/Main.tsx +1 -2
- package/src/components/Menu/ContextMenu.stories.tsx +0 -1
- package/src/components/Menu/DropdownMenu.stories.tsx +0 -1
- package/src/components/Menu/DropdownMenu.tsx +48 -42
- package/src/components/Message/Message.stories.tsx +6 -7
- package/src/components/Message/Message.tsx +1 -5
- package/src/components/Popover/Popover.stories.tsx +4 -5
- package/src/components/Popover/Popover.tsx +42 -42
- package/src/components/ScrollArea/ScrollArea.stories.tsx +93 -30
- package/src/components/ScrollArea/ScrollArea.tsx +39 -23
- package/src/components/ScrollContainer/ScrollContainer.stories.tsx +20 -18
- package/src/components/ScrollContainer/ScrollContainer.tsx +200 -91
- package/src/components/Select/Select.stories.tsx +5 -6
- package/src/components/Separator/Separator.tsx +4 -7
- package/src/components/Skeleton/Skeleton.stories.tsx +0 -1
- package/src/components/Splitter/Splitter.stories.tsx +29 -29
- package/src/components/Splitter/Splitter.tsx +35 -34
- package/src/components/Status/Status.stories.tsx +0 -1
- package/src/components/Status/Status.tsx +8 -5
- package/src/components/Tag/Tag.stories.tsx +0 -1
- package/src/components/ThemeProvider/ThemeProvider.stories.tsx +0 -1
- package/src/components/ThemeProvider/ThemeProvider.tsx +5 -4
- package/src/components/ThemeProvider/index.ts +1 -1
- package/src/components/Toast/Toast.stories.tsx +0 -1
- package/src/components/Toast/Toast.tsx +16 -31
- package/src/components/Toolbar/Toolbar.stories.tsx +0 -1
- package/src/components/Toolbar/Toolbar.tsx +21 -35
- package/src/components/Tooltip/Tooltip.stories.tsx +6 -7
- package/src/components/Tooltip/Tooltip.tsx +15 -16
- package/src/components/index.ts +1 -0
- package/src/exemplars/generics.stories.tsx +7 -15
- package/src/exemplars/slot.stories.tsx +67 -57
- package/src/exemplars/tabster.stories.tsx +1 -1
- package/src/exemplars/virtualizer.stories.tsx +4 -4
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useDensityContext.ts +2 -2
- package/src/playground/Custom.stories.tsx +6 -9
- package/src/primitives/Column/AUDIT.md +148 -0
- package/src/primitives/Column/Column.stories.tsx +122 -19
- package/src/primitives/Column/Column.tsx +73 -42
- package/src/primitives/Container/Container.stories.tsx +0 -1
- package/src/primitives/Container/Container.tsx +5 -8
- package/src/primitives/Flex/Flex.stories.tsx +0 -1
- package/src/primitives/Flex/Flex.tsx +10 -12
- package/src/primitives/Grid/Grid.stories.tsx +0 -1
- package/src/primitives/Grid/Grid.tsx +4 -9
- package/src/primitives/Panel/Panel.stories.tsx +9 -8
- package/src/primitives/Panel/Panel.tsx +64 -63
- package/src/testing/Loading.tsx +25 -4
- package/src/testing/decorators/withLayout.tsx +6 -6
- package/src/testing/decorators/withTheme.tsx +10 -7
- package/src/translations.ts +3 -3
- package/src/util/usePx.ts +1 -0
- package/dist/lib/browser/chunk-2FKSMWNY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs.map +0 -7
|
@@ -4,10 +4,19 @@
|
|
|
4
4
|
|
|
5
5
|
import { Primitive } from '@radix-ui/react-primitive';
|
|
6
6
|
import { Slot } from '@radix-ui/react-slot';
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
import DOMPurify from 'dompurify';
|
|
8
|
+
import React, {
|
|
9
|
+
CSSProperties,
|
|
10
|
+
MouseEventHandler,
|
|
11
|
+
type PropsWithChildren,
|
|
12
|
+
createContext,
|
|
13
|
+
forwardRef,
|
|
14
|
+
useContext,
|
|
15
|
+
useMemo,
|
|
16
|
+
} from 'react';
|
|
17
|
+
|
|
18
|
+
import { composable, composableProps, iconSize, mx, slottable } from '@dxos/ui-theme';
|
|
19
|
+
import { type Density } from '@dxos/ui-types';
|
|
11
20
|
|
|
12
21
|
import { useThemeContext } from '../../hooks';
|
|
13
22
|
import { Column } from '../../primitives';
|
|
@@ -15,12 +24,21 @@ import { type ThemedClassName } from '../../util';
|
|
|
15
24
|
import { Button } from '../Button';
|
|
16
25
|
import { Icon, type IconProps } from '../Icon';
|
|
17
26
|
import { Image } from '../Image';
|
|
18
|
-
import {
|
|
27
|
+
import {
|
|
28
|
+
Toolbar,
|
|
29
|
+
ToolbarCloseIconButtonProps,
|
|
30
|
+
ToolbarDragHandleProps,
|
|
31
|
+
type ToolbarMenuItem,
|
|
32
|
+
type ToolbarMenuProps,
|
|
33
|
+
type ToolbarRootProps,
|
|
34
|
+
} from '../Toolbar';
|
|
19
35
|
|
|
20
36
|
//
|
|
21
37
|
// Context
|
|
22
38
|
//
|
|
23
39
|
|
|
40
|
+
const CARD_NAME = 'Card';
|
|
41
|
+
|
|
24
42
|
type CardContextValue = {
|
|
25
43
|
menuItems?: CardMenuItem<any>[];
|
|
26
44
|
};
|
|
@@ -32,17 +50,24 @@ const CardContext = createContext<CardContextValue>({});
|
|
|
32
50
|
// Root
|
|
33
51
|
//
|
|
34
52
|
|
|
35
|
-
|
|
36
|
-
HTMLDivElement,
|
|
37
|
-
{
|
|
38
|
-
id?: string;
|
|
39
|
-
border?: boolean;
|
|
40
|
-
fullWidth?: boolean;
|
|
41
|
-
}
|
|
42
|
-
>;
|
|
53
|
+
const CARD_ROOT_NAME = 'Card.Root';
|
|
43
54
|
|
|
44
|
-
|
|
45
|
-
|
|
55
|
+
type CardRootOwnProps = {
|
|
56
|
+
id?: string;
|
|
57
|
+
border?: boolean;
|
|
58
|
+
fullWidth?: boolean;
|
|
59
|
+
density?: Density;
|
|
60
|
+
style?: CSSProperties;
|
|
61
|
+
tabIndex?: number;
|
|
62
|
+
onClick?: MouseEventHandler<HTMLDivElement>;
|
|
63
|
+
'data-selected'?: boolean;
|
|
64
|
+
'data-testid'?: string;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
type CardRootProps = CardRootOwnProps;
|
|
68
|
+
|
|
69
|
+
const CardRoot = slottable<HTMLDivElement, CardRootOwnProps>(
|
|
70
|
+
({ children, id, asChild, role, border = true, fullWidth, density, ...props }, forwardedRef) => {
|
|
46
71
|
const { className, ...rest } = composableProps(props);
|
|
47
72
|
const Comp = asChild ? Slot : Primitive.div;
|
|
48
73
|
const { tx } = useThemeContext();
|
|
@@ -55,131 +80,226 @@ const CardRoot = forwardRef<HTMLDivElement, CardRootProps>(
|
|
|
55
80
|
className={tx('card.root', { border, fullWidth }, className)}
|
|
56
81
|
ref={forwardedRef}
|
|
57
82
|
>
|
|
58
|
-
<Column.Root gutter='
|
|
83
|
+
<Column.Root gutter={density === 'coarse' ? 'lg' : 'md'}>{children}</Column.Root>
|
|
59
84
|
</Comp>
|
|
60
85
|
);
|
|
61
86
|
},
|
|
62
87
|
);
|
|
63
88
|
|
|
89
|
+
CardRoot.displayName = CARD_ROOT_NAME;
|
|
90
|
+
|
|
64
91
|
//
|
|
65
92
|
// Toolbar
|
|
66
93
|
//
|
|
67
94
|
|
|
68
|
-
|
|
69
|
-
density?: Density;
|
|
70
|
-
};
|
|
95
|
+
const CARD_TOOLBAR_NAME = 'Card.Toolbar';
|
|
71
96
|
|
|
72
|
-
|
|
73
|
-
const CardToolbar = forwardRef<HTMLDivElement, CardToolbarProps>(
|
|
74
|
-
({ children, classNames, density = 'fine', ...props }, forwardedRef) => {
|
|
75
|
-
const { tx } = useThemeContext();
|
|
97
|
+
type CardToolbarProps = ToolbarRootProps;
|
|
76
98
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
99
|
+
const CardToolbar = composable<HTMLDivElement, CardToolbarProps>(({ children, classNames, ...props }, forwardedRef) => {
|
|
100
|
+
const { tx } = useThemeContext();
|
|
101
|
+
|
|
102
|
+
return (
|
|
103
|
+
<Toolbar.Root {...props} style={iconSize(5)} classNames={[tx('card.toolbar', {}), classNames]} ref={forwardedRef}>
|
|
104
|
+
{children}
|
|
105
|
+
</Toolbar.Root>
|
|
106
|
+
);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
CardToolbar.displayName = CARD_TOOLBAR_NAME;
|
|
110
|
+
|
|
111
|
+
//
|
|
112
|
+
// DragHandle
|
|
113
|
+
//
|
|
114
|
+
|
|
115
|
+
const CARD_DRAG_HANDLE_NAME = 'Card.DragHandle';
|
|
116
|
+
|
|
117
|
+
type CardDragHandleProps = ToolbarDragHandleProps;
|
|
118
|
+
|
|
119
|
+
const CardDragHandle = forwardRef<HTMLButtonElement, CardDragHandleProps>((props, forwardedRef) => {
|
|
120
|
+
return (
|
|
121
|
+
<CardIconBlock padding>
|
|
122
|
+
<Toolbar.DragHandle {...props} ref={forwardedRef} />
|
|
123
|
+
</CardIconBlock>
|
|
124
|
+
);
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
CardDragHandle.displayName = CARD_DRAG_HANDLE_NAME;
|
|
128
|
+
|
|
129
|
+
//
|
|
130
|
+
// CloseIconButton
|
|
131
|
+
//
|
|
132
|
+
|
|
133
|
+
const CARD_CLOSE_ICON_BUTTON_NAME = 'Card.CloseIconButton';
|
|
134
|
+
|
|
135
|
+
type CloseIconButtonProps = ToolbarCloseIconButtonProps;
|
|
136
|
+
|
|
137
|
+
const CloseIconButton = forwardRef<HTMLButtonElement, CloseIconButtonProps>((props, forwardedRef) => {
|
|
138
|
+
return (
|
|
139
|
+
<CardIconBlock padding>
|
|
140
|
+
<Toolbar.CloseIconButton {...props} ref={forwardedRef} />
|
|
141
|
+
</CardIconBlock>
|
|
142
|
+
);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
CloseIconButton.displayName = CARD_CLOSE_ICON_BUTTON_NAME;
|
|
88
146
|
|
|
89
147
|
//
|
|
90
|
-
// Menu
|
|
148
|
+
// Menu
|
|
91
149
|
//
|
|
92
150
|
|
|
151
|
+
const CARD_MENU_NAME = 'Card.Menu';
|
|
152
|
+
|
|
93
153
|
type CardMenuItem<T extends any | void = void> = ToolbarMenuItem<T>;
|
|
154
|
+
|
|
94
155
|
type CardMenuProps<T extends any | void = void> = ToolbarMenuProps<T>;
|
|
95
156
|
|
|
96
|
-
const CardMenu = <T extends any | void = void>({ context, items }: CardMenuProps<T>) => {
|
|
157
|
+
const CardMenu = <T extends any | void = void>({ context, items, ...props }: CardMenuProps<T>) => {
|
|
97
158
|
const { menuItems } = useContext(CardContext) ?? {};
|
|
98
159
|
const combinedItems = [...(items ?? []), ...((menuItems as CardMenuItem<T>[]) ?? [])];
|
|
99
160
|
|
|
100
|
-
return
|
|
161
|
+
return (
|
|
162
|
+
<CardIconBlock padding>
|
|
163
|
+
<Toolbar.Menu {...props} context={context} items={combinedItems} />
|
|
164
|
+
</CardIconBlock>
|
|
165
|
+
);
|
|
101
166
|
};
|
|
102
167
|
|
|
168
|
+
(CardMenu as any).displayName = CARD_MENU_NAME;
|
|
169
|
+
|
|
170
|
+
//
|
|
171
|
+
// Icon
|
|
172
|
+
//
|
|
173
|
+
|
|
174
|
+
const CARD_ICON_NAME = 'Card.Icon';
|
|
175
|
+
|
|
176
|
+
const CardIcon = (props: IconProps) => {
|
|
177
|
+
return (
|
|
178
|
+
<CardIconBlock>
|
|
179
|
+
<Icon {...props} />
|
|
180
|
+
</CardIconBlock>
|
|
181
|
+
);
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
(CardIcon as any).displayName = CARD_ICON_NAME;
|
|
185
|
+
|
|
186
|
+
//
|
|
187
|
+
// IconBlock
|
|
188
|
+
//
|
|
189
|
+
|
|
190
|
+
const CARD_ICON_BLOCK_NAME = 'Card.IconBlock';
|
|
191
|
+
|
|
192
|
+
const CardIconBlock = forwardRef<HTMLDivElement, ThemedClassName<PropsWithChildren<{ padding?: boolean }>>>(
|
|
193
|
+
({ classNames, children, padding, ...props }, forwardedRef) => {
|
|
194
|
+
const { tx } = useThemeContext();
|
|
195
|
+
|
|
196
|
+
return (
|
|
197
|
+
<div {...props} role='none' className={tx('card.icon-block', { padding }, classNames)} ref={forwardedRef}>
|
|
198
|
+
{children}
|
|
199
|
+
</div>
|
|
200
|
+
);
|
|
201
|
+
},
|
|
202
|
+
);
|
|
203
|
+
|
|
204
|
+
CardIconBlock.displayName = CARD_ICON_BLOCK_NAME;
|
|
205
|
+
|
|
103
206
|
//
|
|
104
207
|
// Title
|
|
105
208
|
//
|
|
106
209
|
|
|
107
|
-
|
|
210
|
+
const CARD_TITLE_NAME = 'Card.Title';
|
|
108
211
|
|
|
109
|
-
const CardTitle =
|
|
110
|
-
const { className, ...rest } = composableProps(props);
|
|
111
|
-
const Comp = asChild ? Slot : Primitive.div;
|
|
212
|
+
const CardTitle = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
|
|
112
213
|
const { tx } = useThemeContext();
|
|
214
|
+
const { className, ...rest } = composableProps(props, { role: 'heading' });
|
|
215
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
113
216
|
|
|
114
217
|
return (
|
|
115
|
-
<Comp {...rest}
|
|
218
|
+
<Comp {...rest} className={tx('card.title', {}, className)} ref={forwardedRef}>
|
|
116
219
|
{children}
|
|
117
220
|
</Comp>
|
|
118
221
|
);
|
|
119
222
|
});
|
|
120
223
|
|
|
224
|
+
CardTitle.displayName = CARD_TITLE_NAME;
|
|
225
|
+
|
|
121
226
|
//
|
|
122
227
|
// Content
|
|
123
228
|
//
|
|
124
229
|
|
|
125
|
-
|
|
230
|
+
const CARD_CONTENT_NAME = 'Card.Content';
|
|
126
231
|
|
|
127
|
-
const CardContent =
|
|
232
|
+
const CardContent = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
|
|
233
|
+
const { className, ...rest } = composableProps(props);
|
|
234
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
128
235
|
const { tx } = useThemeContext();
|
|
129
236
|
|
|
130
237
|
return (
|
|
131
|
-
<
|
|
238
|
+
<Comp {...rest} className={tx('card.content', {}, className)} ref={forwardedRef}>
|
|
132
239
|
{children}
|
|
133
|
-
</
|
|
240
|
+
</Comp>
|
|
134
241
|
);
|
|
135
242
|
});
|
|
136
243
|
|
|
244
|
+
CardContent.displayName = CARD_CONTENT_NAME;
|
|
245
|
+
|
|
137
246
|
//
|
|
138
247
|
// Row
|
|
139
248
|
//
|
|
140
249
|
|
|
141
|
-
|
|
250
|
+
const CARD_ROW_NAME = 'Card.Row';
|
|
251
|
+
|
|
252
|
+
type CardRowProps = { icon?: string; fullWidth?: boolean };
|
|
142
253
|
|
|
143
|
-
const CardRow =
|
|
254
|
+
const CardRow = slottable<HTMLDivElement, CardRowProps>(({ children, asChild, icon, ...props }, forwardedRef) => {
|
|
144
255
|
const { className, ...rest } = composableProps(props);
|
|
256
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
257
|
+
const { tx } = useThemeContext();
|
|
258
|
+
|
|
145
259
|
return (
|
|
146
|
-
<
|
|
147
|
-
{(icon && <CardIcon classNames='text-subdued' icon={icon} />) || <div />}
|
|
260
|
+
<Comp {...rest} className={tx('card.row', {}, className)} ref={forwardedRef}>
|
|
261
|
+
{(icon && <CardIcon classNames='text-subdued' icon={icon} size={4} />) || <div />}
|
|
148
262
|
{children}
|
|
149
|
-
|
|
150
|
-
</Column.Row>
|
|
263
|
+
</Comp>
|
|
151
264
|
);
|
|
152
265
|
});
|
|
153
266
|
|
|
267
|
+
CardRow.displayName = CARD_ROW_NAME;
|
|
268
|
+
|
|
154
269
|
//
|
|
155
270
|
// Section
|
|
156
271
|
//
|
|
157
272
|
|
|
158
|
-
|
|
273
|
+
const CARD_SECTION_NAME = 'Card.Section';
|
|
159
274
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
275
|
+
/**
|
|
276
|
+
* @deprecated Merge with Card.Row fullWidth
|
|
277
|
+
*/
|
|
278
|
+
const CardSection = slottable<HTMLDivElement>(({ children, asChild, role, ...props }, forwardedRef) => {
|
|
279
|
+
const { className, ...rest } = composableProps(props);
|
|
280
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
164
281
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
282
|
+
return (
|
|
283
|
+
<Comp {...rest} role={role ?? 'none'} className={mx('col-span-full', className)} ref={forwardedRef}>
|
|
284
|
+
{children}
|
|
285
|
+
</Comp>
|
|
286
|
+
);
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
CardSection.displayName = CARD_SECTION_NAME;
|
|
172
290
|
|
|
173
291
|
//
|
|
174
292
|
// Heading
|
|
175
293
|
//
|
|
176
294
|
|
|
177
|
-
|
|
295
|
+
const CARD_HEADING_NAME = 'Card.Heading';
|
|
296
|
+
|
|
297
|
+
type CardHeadingProps = { variant?: 'default' | 'subtitle' };
|
|
178
298
|
|
|
179
299
|
/**
|
|
180
300
|
* @deprecated Use typography.
|
|
181
301
|
*/
|
|
182
|
-
const CardHeading =
|
|
302
|
+
const CardHeading = slottable<HTMLDivElement, CardHeadingProps>(
|
|
183
303
|
({ children, asChild, role, variant = 'default', ...props }, forwardedRef) => {
|
|
184
304
|
const { className, ...rest } = composableProps(props);
|
|
185
305
|
const Comp = asChild ? Slot : Primitive.div;
|
|
@@ -198,13 +318,17 @@ const CardHeading = forwardRef<HTMLDivElement, CardHeadingProps>(
|
|
|
198
318
|
},
|
|
199
319
|
);
|
|
200
320
|
|
|
321
|
+
CardHeading.displayName = CARD_HEADING_NAME;
|
|
322
|
+
|
|
201
323
|
//
|
|
202
324
|
// Text
|
|
203
325
|
//
|
|
204
326
|
|
|
205
|
-
|
|
327
|
+
const CARD_TEXT_NAME = 'Card.Text';
|
|
206
328
|
|
|
207
|
-
|
|
329
|
+
type CardTextProps = { truncate?: boolean; variant?: 'default' | 'description' };
|
|
330
|
+
|
|
331
|
+
const CardText = slottable<HTMLDivElement, CardTextProps>(
|
|
208
332
|
({ children, asChild, role, truncate, variant = 'default', ...props }, forwardedRef) => {
|
|
209
333
|
const { className, ...rest } = composableProps(props);
|
|
210
334
|
const Comp = asChild ? Slot : Primitive.div;
|
|
@@ -218,24 +342,70 @@ const CardText = forwardRef<HTMLDivElement, CardTextProps>(
|
|
|
218
342
|
},
|
|
219
343
|
);
|
|
220
344
|
|
|
345
|
+
CardText.displayName = CARD_TEXT_NAME;
|
|
346
|
+
|
|
347
|
+
//
|
|
348
|
+
// Html
|
|
349
|
+
//
|
|
350
|
+
|
|
351
|
+
const CARD_HTML_NAME = 'Card.Html';
|
|
352
|
+
|
|
353
|
+
type CardHtmlProps = { html: string; variant?: 'default' | 'description' };
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* Renders sanitized HTML content inside a card text slot.
|
|
357
|
+
* Uses DOMPurify to prevent XSS from untrusted markup (e.g. RSS feed content).
|
|
358
|
+
*/
|
|
359
|
+
const CardHtml = ({ html, variant = 'default', ...props }: CardHtmlProps & ThemedClassName<object>) => {
|
|
360
|
+
const { tx } = useThemeContext();
|
|
361
|
+
const sanitized = useMemo(() => DOMPurify.sanitize(html), [html]);
|
|
362
|
+
|
|
363
|
+
return (
|
|
364
|
+
<div
|
|
365
|
+
{...props}
|
|
366
|
+
role='none'
|
|
367
|
+
className={tx('card.text', { variant })}
|
|
368
|
+
// eslint-disable-next-line react/no-danger
|
|
369
|
+
dangerouslySetInnerHTML={{ __html: sanitized }}
|
|
370
|
+
/>
|
|
371
|
+
);
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
(CardHtml as any).displayName = CARD_HTML_NAME;
|
|
375
|
+
|
|
221
376
|
//
|
|
222
377
|
// Poster
|
|
223
378
|
//
|
|
224
379
|
|
|
380
|
+
const CARD_POSTER_NAME = 'Card.Poster';
|
|
381
|
+
|
|
225
382
|
type CardPosterProps = ThemedClassName<
|
|
226
383
|
{
|
|
227
384
|
alt: string;
|
|
228
385
|
aspect?: 'video' | 'auto';
|
|
386
|
+
/**
|
|
387
|
+
* How the image fills the poster box. `'contain'` (default) preserves
|
|
388
|
+
* aspect ratio and may letterbox; `'cover'` fills the box edge-to-edge,
|
|
389
|
+
* cropping as needed. Forwarded to the underlying `Image`'s
|
|
390
|
+
* `object-fit`.
|
|
391
|
+
*/
|
|
392
|
+
fit?: 'contain' | 'cover';
|
|
229
393
|
} & Partial<{ image: string; icon: string }>
|
|
230
394
|
>;
|
|
231
395
|
|
|
232
396
|
const CardPoster = (props: CardPosterProps) => {
|
|
233
397
|
const { tx } = useThemeContext();
|
|
234
398
|
const aspect = props.aspect === 'auto' ? 'aspect-auto' : 'aspect-video';
|
|
399
|
+
|
|
235
400
|
if (props.image) {
|
|
236
401
|
return (
|
|
237
|
-
<div role='none' className='col-span-full
|
|
238
|
-
<Image
|
|
402
|
+
<div role='none' className='col-span-full'>
|
|
403
|
+
<Image
|
|
404
|
+
classNames={[tx('card.poster', {}), aspect, props.classNames]}
|
|
405
|
+
src={props.image}
|
|
406
|
+
alt={props.alt}
|
|
407
|
+
fit={props.fit}
|
|
408
|
+
/>
|
|
239
409
|
</div>
|
|
240
410
|
);
|
|
241
411
|
}
|
|
@@ -249,27 +419,35 @@ const CardPoster = (props: CardPosterProps) => {
|
|
|
249
419
|
}
|
|
250
420
|
};
|
|
251
421
|
|
|
422
|
+
(CardPoster as any).displayName = CARD_POSTER_NAME;
|
|
423
|
+
|
|
252
424
|
//
|
|
253
425
|
// Action
|
|
254
426
|
//
|
|
255
427
|
|
|
428
|
+
const CARD_ACTION_NAME = 'Card.Action';
|
|
429
|
+
|
|
256
430
|
type CardActionProps = { icon?: string; label: string; actionIcon?: string; onClick?: () => void };
|
|
257
431
|
|
|
258
432
|
const CardAction = ({ icon, actionIcon = 'ph--arrow-right--regular', label, onClick }: CardActionProps) => {
|
|
259
433
|
const { tx } = useThemeContext();
|
|
260
434
|
return (
|
|
261
435
|
<Button variant='ghost' classNames={tx('card.action', {})} onClick={onClick}>
|
|
262
|
-
{icon ? <CardIcon classNames='text-subdued' icon={icon} /> : <div />}
|
|
436
|
+
{icon ? <CardIcon classNames='text-subdued' icon={icon} size={4} /> : <div />}
|
|
263
437
|
<span className={tx('card.action-label', {}, !actionIcon ? 'col-span-2' : undefined)}>{label}</span>
|
|
264
|
-
{actionIcon && <CardIcon icon={actionIcon} />}
|
|
438
|
+
{actionIcon && <CardIcon icon={actionIcon} size={4} />}
|
|
265
439
|
</Button>
|
|
266
440
|
);
|
|
267
441
|
};
|
|
268
442
|
|
|
443
|
+
(CardAction as any).displayName = CARD_ACTION_NAME;
|
|
444
|
+
|
|
269
445
|
//
|
|
270
446
|
// Link
|
|
271
447
|
//
|
|
272
448
|
|
|
449
|
+
const CARD_LINK_NAME = 'Card.Link';
|
|
450
|
+
|
|
273
451
|
type CardLinkProps = { label: string; href: string };
|
|
274
452
|
|
|
275
453
|
const CardLink = ({ label, href }: CardLinkProps) => {
|
|
@@ -283,35 +461,7 @@ const CardLink = ({ label, href }: CardLinkProps) => {
|
|
|
283
461
|
);
|
|
284
462
|
};
|
|
285
463
|
|
|
286
|
-
|
|
287
|
-
// Icon
|
|
288
|
-
//
|
|
289
|
-
|
|
290
|
-
const CardIcon = ({ toolbar, ...props }: IconProps & { toolbar?: boolean }) => {
|
|
291
|
-
return (
|
|
292
|
-
<CardIconBlock>
|
|
293
|
-
<Icon {...props} size={toolbar ? 5 : 4} />
|
|
294
|
-
</CardIconBlock>
|
|
295
|
-
);
|
|
296
|
-
};
|
|
297
|
-
|
|
298
|
-
//
|
|
299
|
-
// IconBlock
|
|
300
|
-
//
|
|
301
|
-
|
|
302
|
-
const CardIconBlock = ({
|
|
303
|
-
classNames,
|
|
304
|
-
children,
|
|
305
|
-
role,
|
|
306
|
-
...props
|
|
307
|
-
}: ThemedClassName<PropsWithChildren<HTMLAttributes<HTMLDivElement>>>) => {
|
|
308
|
-
const { tx } = useThemeContext();
|
|
309
|
-
return (
|
|
310
|
-
<div {...props} role={role ?? 'none'} className={tx('card.icon-block', {}, classNames)}>
|
|
311
|
-
{children}
|
|
312
|
-
</div>
|
|
313
|
-
);
|
|
314
|
-
};
|
|
464
|
+
(CardLink as any).displayName = CARD_LINK_NAME;
|
|
315
465
|
|
|
316
466
|
//
|
|
317
467
|
// Card
|
|
@@ -324,14 +474,14 @@ export const Card = {
|
|
|
324
474
|
Toolbar: CardToolbar,
|
|
325
475
|
ToolbarIconButton: Toolbar.IconButton,
|
|
326
476
|
ToolbarSeparator: Toolbar.Separator,
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
477
|
+
|
|
478
|
+
// Toolbar blocks
|
|
479
|
+
IconBlock: CardIconBlock,
|
|
480
|
+
DragHandle: CardDragHandle,
|
|
481
|
+
CloseIconButton: CloseIconButton,
|
|
332
482
|
Menu: CardMenu,
|
|
333
483
|
Icon: CardIcon,
|
|
334
|
-
|
|
484
|
+
Title: CardTitle,
|
|
335
485
|
|
|
336
486
|
// Content
|
|
337
487
|
Content: CardContent,
|
|
@@ -339,9 +489,17 @@ export const Card = {
|
|
|
339
489
|
Section: CardSection,
|
|
340
490
|
Heading: CardHeading,
|
|
341
491
|
Text: CardText,
|
|
492
|
+
Html: CardHtml,
|
|
342
493
|
Poster: CardPoster,
|
|
343
494
|
Action: CardAction,
|
|
344
495
|
Link: CardLink,
|
|
345
496
|
};
|
|
346
497
|
|
|
347
|
-
export type {
|
|
498
|
+
export type {
|
|
499
|
+
CardContextValue,
|
|
500
|
+
CardRootProps,
|
|
501
|
+
CardToolbarProps,
|
|
502
|
+
CardDragHandleProps,
|
|
503
|
+
CloseIconButtonProps,
|
|
504
|
+
CardMenuProps,
|
|
505
|
+
};
|
|
@@ -10,7 +10,6 @@ import { Button, type ButtonProps, IconButton } from '../Button';
|
|
|
10
10
|
import { Icon, type IconProps } from '../Icon';
|
|
11
11
|
import { useTranslation } from '../ThemeProvider';
|
|
12
12
|
import { type TooltipScopedProps, useTooltipContext } from '../Tooltip';
|
|
13
|
-
|
|
14
13
|
import { useClipboard } from './ClipboardProvider';
|
|
15
14
|
|
|
16
15
|
export type CopyButtonProps = ButtonProps &
|
|
@@ -32,11 +31,11 @@ export const CopyButton = ({ classNames, value, size = 5, ...props }: CopyButton
|
|
|
32
31
|
data-testid='copy-invitation'
|
|
33
32
|
>
|
|
34
33
|
<div role='none' className={mx('flex gap-1 items-center', isCopied && inactiveLabelStyles)}>
|
|
35
|
-
<span className='px-1'>{t('copy
|
|
34
|
+
<span className='px-1'>{t('copy.label')}</span>
|
|
36
35
|
<Icon icon='ph--copy--regular' size={size} />
|
|
37
36
|
</div>
|
|
38
37
|
<div role='none' className={mx('flex gap-1 items-center', !isCopied && inactiveLabelStyles)}>
|
|
39
|
-
<span className='px-1'>{t('copy
|
|
38
|
+
<span className='px-1'>{t('copy-success.label')}</span>
|
|
40
39
|
<Icon icon='ph--check--regular' size={size} />
|
|
41
40
|
</div>
|
|
42
41
|
</Button>
|
|
@@ -58,7 +57,7 @@ export const CopyButtonIconOnly = ({
|
|
|
58
57
|
const { t } = useTranslation(osTranslations);
|
|
59
58
|
const { textValue, setTextValue } = useClipboard();
|
|
60
59
|
const isCopied = textValue === value;
|
|
61
|
-
const label = isCopied ? t('copy
|
|
60
|
+
const label = isCopied ? t('copy-success.label') : (props.label ?? t('copy.label'));
|
|
62
61
|
const { onOpen } = useTooltipContext('CopyButton', __scopeTooltip);
|
|
63
62
|
return (
|
|
64
63
|
<IconButton
|
|
@@ -5,14 +5,13 @@
|
|
|
5
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { random } from '@dxos/random';
|
|
9
9
|
|
|
10
10
|
import { withTheme } from '../../testing';
|
|
11
11
|
import { Button } from '../Button';
|
|
12
|
-
|
|
13
12
|
import { AlertDialog } from './AlertDialog';
|
|
14
13
|
|
|
15
|
-
type
|
|
14
|
+
type DefaultStoryProps = Partial<{
|
|
16
15
|
title: string;
|
|
17
16
|
description: string;
|
|
18
17
|
openTrigger: string;
|
|
@@ -20,7 +19,7 @@ type StoryProps = Partial<{
|
|
|
20
19
|
actionTrigger: string;
|
|
21
20
|
}>;
|
|
22
21
|
|
|
23
|
-
const DefaultStory = ({ title, description, openTrigger, cancelTrigger, actionTrigger }:
|
|
22
|
+
const DefaultStory = ({ title, description, openTrigger, cancelTrigger, actionTrigger }: DefaultStoryProps) => {
|
|
24
23
|
return (
|
|
25
24
|
<AlertDialog.Root defaultOpen>
|
|
26
25
|
<AlertDialog.Trigger asChild>
|
|
@@ -60,8 +59,8 @@ type Story = StoryObj<typeof meta>;
|
|
|
60
59
|
|
|
61
60
|
export const Default: Story = {
|
|
62
61
|
args: {
|
|
63
|
-
title:
|
|
64
|
-
description:
|
|
62
|
+
title: random.lorem.sentence(3),
|
|
63
|
+
description: random.lorem.paragraph(1),
|
|
65
64
|
openTrigger: 'Open AlertDialog',
|
|
66
65
|
cancelTrigger: 'Cancel',
|
|
67
66
|
actionTrigger: 'Action',
|