@dxos/react-ui 0.8.4-main.bc674ce → 0.8.4-main.bcb3aa67d6
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-CEKVHJ27.mjs → chunk-LUPEFGHJ.mjs} +119 -117
- package/dist/lib/browser/chunk-LUPEFGHJ.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +3084 -2081
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +59 -36
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/node-esm/{chunk-2NHEX4AD.mjs → chunk-EQOBFLZC.mjs} +119 -117
- package/dist/lib/node-esm/chunk-EQOBFLZC.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +3084 -2081
- 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 +59 -36
- package/dist/lib/node-esm/testing/index.mjs.map +4 -4
- 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/Breadcrumb/Breadcrumb.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/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/ToggleGroup.d.ts +6 -6
- package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
- package/dist/types/src/components/Card/Card.d.ts +150 -0
- package/dist/types/src/components/Card/Card.d.ts.map +1 -0
- package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
- package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
- package/dist/types/src/components/Card/index.d.ts +2 -0
- package/dist/types/src/components/Card/index.d.ts.map +1 -0
- 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/Dialog/AlertDialog.d.ts +41 -19
- 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 +48 -22
- package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/Dialog.stories.d.ts +6 -8
- package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
- package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
- package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
- package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
- package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +8 -0
- package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
- package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
- package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
- package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
- package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
- package/dist/types/src/components/Focus/Focus.d.ts +44 -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 +14 -0
- package/dist/types/src/components/Image/Image.d.ts.map +1 -0
- package/dist/types/src/components/Image/Image.stories.d.ts +33 -0
- package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
- package/dist/types/src/components/Image/index.d.ts +2 -0
- package/dist/types/src/components/Image/index.d.ts.map +1 -0
- package/dist/types/src/components/Input/Input.d.ts +4 -7
- package/dist/types/src/components/Input/Input.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.stories.d.ts +7 -7
- package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/List.d.ts +9 -3
- package/dist/types/src/components/List/List.d.ts.map +1 -1
- package/dist/types/src/components/List/List.stories.d.ts +8 -2
- package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/Treegrid.d.ts +9 -9
- package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.d.ts +6 -32
- package/dist/types/src/components/Main/Main.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.stories.d.ts +1 -5
- package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
- package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
- package/dist/types/src/components/Menu/DropdownMenu.d.ts +51 -50
- 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 +4 -5
- package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.d.ts +32 -23
- package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +31 -25
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +62 -9
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +45 -12
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +9 -5
- 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.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 +37 -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/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 +4 -2
- package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
- package/dist/types/src/components/Tag/Tag.stories.d.ts +0 -5
- package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +2 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +12 -0
- package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
- package/dist/types/src/components/Toast/Toast.d.ts +15 -15
- package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +37 -11
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.d.ts +9 -9
- 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 +9 -4
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/exemplars/generics.stories.d.ts +23 -0
- package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
- package/dist/types/src/exemplars/slot.stories.d.ts +15 -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/exemplars/virtualizer.stories.d.ts +11 -0
- package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
- 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/index.d.ts +1 -0
- 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/playground/Custom.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Column/Column.d.ts +51 -0
- package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
- package/dist/types/src/primitives/Column/Column.stories.d.ts +25 -0
- package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
- package/dist/types/src/primitives/Column/index.d.ts +2 -0
- package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
- package/dist/types/src/primitives/Container/Container.d.ts +11 -0
- package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
- package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
- package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
- package/dist/types/src/primitives/Container/index.d.ts +2 -0
- package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
- package/dist/types/src/primitives/Flex/Flex.d.ts +15 -0
- package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
- package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
- package/dist/types/src/primitives/Flex/Flex.stories.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/Grid/Grid.d.ts +14 -0
- package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
- package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
- package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
- package/dist/types/src/primitives/Grid/index.d.ts +2 -0
- package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
- package/dist/types/src/primitives/Panel/Panel.d.ts +46 -0
- package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
- package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
- package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
- package/dist/types/src/primitives/Panel/index.d.ts +2 -0
- package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
- package/dist/types/src/primitives/index.d.ts +6 -0
- package/dist/types/src/primitives/index.d.ts.map +1 -0
- package/dist/types/src/testing/Loading.d.ts +9 -0
- package/dist/types/src/testing/Loading.d.ts.map +1 -0
- package/dist/types/src/testing/decorators/withLayout.d.ts +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 +3 -2
- package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +11 -0
- package/dist/types/src/translations.d.ts.map +1 -0
- package/dist/types/src/util/usePx.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +27 -22
- package/src/components/Avatars/Avatar.stories.tsx +7 -8
- package/src/components/Avatars/Avatar.tsx +5 -12
- package/src/components/Avatars/AvatarGroup.stories.tsx +2 -2
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +3 -3
- package/src/components/Breadcrumb/Breadcrumb.tsx +11 -37
- package/src/components/Button/Button.stories.tsx +3 -3
- package/src/components/Button/Button.tsx +11 -25
- package/src/components/Button/IconButton.stories.tsx +8 -5
- package/src/components/Button/IconButton.tsx +2 -3
- package/src/components/Button/Toggle.stories.tsx +2 -2
- package/src/components/Button/Toggle.tsx +4 -4
- package/src/components/Button/ToggleGroup.stories.tsx +2 -2
- package/src/components/Button/ToggleGroup.tsx +12 -16
- package/src/components/Card/Card.stories.tsx +151 -0
- package/src/components/Card/Card.tsx +492 -0
- package/src/components/Card/index.ts +5 -0
- package/src/components/Clipboard/CopyButton.tsx +4 -4
- package/src/components/Dialog/AlertDialog.stories.tsx +16 -16
- package/src/components/Dialog/AlertDialog.tsx +124 -82
- package/src/components/Dialog/Dialog.stories.tsx +98 -17
- package/src/components/Dialog/Dialog.tsx +113 -87
- package/src/components/ErrorFallback/ErrorFallback.stories.tsx +50 -0
- package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
- package/src/components/ErrorFallback/ErrorStack.tsx +80 -0
- package/src/components/ErrorFallback/ThrowError.tsx +37 -0
- package/src/components/ErrorFallback/index.ts +9 -0
- 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 +45 -14
- package/src/components/Icon/Icon.tsx +6 -2
- package/src/components/Image/Image.stories.tsx +86 -0
- package/src/components/Image/Image.tsx +223 -0
- package/src/components/Image/index.ts +5 -0
- package/src/components/Input/Input.stories.tsx +20 -39
- package/src/components/Input/Input.tsx +24 -69
- package/src/components/Link/Link.stories.tsx +2 -2
- package/src/components/Link/Link.tsx +2 -2
- package/src/components/List/List.stories.tsx +15 -22
- package/src/components/List/List.tsx +16 -19
- package/src/components/List/ListDropIndicator.tsx +7 -7
- package/src/components/List/Tree.stories.tsx +5 -5
- package/src/components/List/TreeDropIndicator.tsx +6 -6
- package/src/components/List/Treegrid.stories.tsx +6 -6
- package/src/components/List/Treegrid.tsx +23 -28
- package/src/components/Main/Main.stories.tsx +6 -95
- package/src/components/Main/Main.tsx +61 -211
- package/src/components/Menu/ContextMenu.stories.tsx +2 -2
- package/src/components/Menu/ContextMenu.tsx +9 -33
- package/src/components/Menu/DropdownMenu.stories.tsx +2 -2
- package/src/components/Menu/DropdownMenu.tsx +58 -52
- package/src/components/Message/Message.stories.tsx +27 -12
- package/src/components/Message/Message.tsx +14 -30
- package/src/components/Popover/Popover.stories.tsx +4 -4
- package/src/components/Popover/Popover.tsx +62 -59
- package/src/components/ScrollArea/ScrollArea.stories.tsx +213 -73
- package/src/components/ScrollArea/ScrollArea.tsx +85 -113
- package/src/components/ScrollArea/index.ts +1 -1
- package/src/components/ScrollContainer/ScrollContainer.stories.tsx +45 -23
- package/src/components/ScrollContainer/ScrollContainer.tsx +206 -92
- package/src/components/Select/Select.stories.tsx +4 -4
- package/src/components/Select/Select.tsx +11 -27
- package/src/components/Separator/Separator.tsx +5 -8
- 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 +83 -0
- package/src/components/Splitter/Splitter.tsx +139 -0
- package/src/components/Splitter/index.ts +5 -0
- package/src/components/Status/Status.stories.tsx +21 -17
- package/src/components/Status/Status.tsx +10 -7
- package/src/components/Tag/Tag.stories.tsx +4 -9
- package/src/components/Tag/Tag.tsx +2 -7
- package/src/components/ThemeProvider/ThemeProvider.stories.tsx +32 -0
- package/src/components/ThemeProvider/ThemeProvider.tsx +9 -6
- package/src/components/Toast/Toast.stories.tsx +2 -2
- package/src/components/Toast/Toast.tsx +22 -41
- package/src/components/Toolbar/Toolbar.stories.tsx +2 -2
- package/src/components/Toolbar/Toolbar.tsx +174 -26
- package/src/components/Tooltip/Tooltip.stories.tsx +16 -14
- package/src/components/Tooltip/Tooltip.tsx +18 -18
- package/src/components/index.ts +10 -5
- package/src/exemplars/generics.stories.tsx +41 -0
- package/src/exemplars/slot.stories.tsx +117 -0
- package/src/exemplars/tabster.stories.tsx +127 -0
- package/src/exemplars/virtualizer.stories.tsx +137 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useDensityContext.ts +2 -2
- package/src/index.ts +1 -0
- package/src/playground/Controls.stories.tsx +3 -10
- package/src/playground/Custom.stories.tsx +11 -21
- package/src/playground/Typography.stories.tsx +3 -3
- package/src/primitives/Column/AUDIT.md +354 -0
- package/src/primitives/Column/Column.stories.tsx +183 -0
- package/src/primitives/Column/Column.tsx +169 -0
- package/src/primitives/Column/index.ts +5 -0
- package/src/primitives/Container/Container.stories.tsx +30 -0
- package/src/primitives/Container/Container.tsx +19 -0
- package/src/primitives/Container/index.ts +5 -0
- package/src/primitives/Flex/Flex.stories.tsx +58 -0
- package/src/primitives/Flex/Flex.tsx +27 -0
- package/src/primitives/Flex/index.ts +5 -0
- package/src/primitives/Grid/Grid.stories.tsx +57 -0
- package/src/primitives/Grid/Grid.tsx +30 -0
- package/src/primitives/Grid/index.ts +5 -0
- package/src/primitives/Panel/Panel.stories.tsx +69 -0
- package/src/primitives/Panel/Panel.tsx +114 -0
- package/src/primitives/Panel/index.ts +5 -0
- package/src/primitives/index.ts +9 -0
- package/src/testing/Loading.tsx +26 -0
- package/src/testing/decorators/withLayout.tsx +21 -7
- package/src/testing/decorators/withLayoutVariants.tsx +18 -21
- package/src/testing/decorators/withTheme.tsx +24 -19
- package/src/testing/index.ts +2 -0
- package/src/translations.ts +19 -0
- package/src/util/usePx.ts +1 -0
- package/dist/lib/browser/chunk-CEKVHJ27.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2NHEX4AD.mjs.map +0 -7
- package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
- package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
- package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
- package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
- package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
- package/src/components/AnchoredOverflow/index.ts +0 -5
|
@@ -2,12 +2,19 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import { Primitive } from '@radix-ui/react-primitive';
|
|
6
|
+
import { Slot } from '@radix-ui/react-slot';
|
|
5
7
|
import type { ToggleGroupItemProps as ToggleGroupItemPrimitiveProps } from '@radix-ui/react-toggle-group';
|
|
6
8
|
import * as ToolbarPrimitive from '@radix-ui/react-toolbar';
|
|
7
|
-
import React, {
|
|
9
|
+
import React, { forwardRef } from 'react';
|
|
10
|
+
import { useTranslation } from 'react-i18next';
|
|
11
|
+
|
|
12
|
+
import { composable, composableProps, slottable, type ToolbarStyleProps } from '@dxos/ui-theme';
|
|
13
|
+
import { type SlottableProps } from '@dxos/ui-types';
|
|
8
14
|
|
|
9
15
|
import { useThemeContext } from '../../hooks';
|
|
10
|
-
import {
|
|
16
|
+
import { translationKey } from '../../translations';
|
|
17
|
+
|
|
11
18
|
import {
|
|
12
19
|
Button,
|
|
13
20
|
ButtonGroup,
|
|
@@ -20,41 +27,57 @@ import {
|
|
|
20
27
|
type ToggleProps,
|
|
21
28
|
} from '../Button';
|
|
22
29
|
import { Link, type LinkProps } from '../Link';
|
|
30
|
+
import { DropdownMenu } from '../Menu';
|
|
23
31
|
import { Separator, type SeparatorProps } from '../Separator';
|
|
24
32
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const ToolbarRoot = forwardRef<HTMLDivElement, ToolbarRootProps>(
|
|
35
|
-
({ classNames, children, disabled, layoutManaged, textBlockWidth: textBlockWidthProp, ...props }, forwardedRef) => {
|
|
33
|
+
//
|
|
34
|
+
// Root
|
|
35
|
+
//
|
|
36
|
+
|
|
37
|
+
type ToolbarRootProps = ToolbarPrimitive.ToolbarProps & ToolbarStyleProps;
|
|
38
|
+
|
|
39
|
+
const ToolbarRoot = composable<HTMLDivElement, ToolbarRootProps>(
|
|
40
|
+
({ children, density, disabled, layoutManaged, orientation, ...props }, forwardedRef) => {
|
|
41
|
+
const { className, role, ...rest } = composableProps(props);
|
|
36
42
|
const { tx } = useThemeContext();
|
|
37
|
-
const InnerRoot = textBlockWidthProp ? 'div' : Fragment;
|
|
38
|
-
const innerRootProps = textBlockWidthProp
|
|
39
|
-
? {
|
|
40
|
-
role: 'none',
|
|
41
|
-
className: tx('toolbar.inner', 'toolbar', { layoutManaged }, classNames),
|
|
42
|
-
}
|
|
43
|
-
: {};
|
|
44
43
|
|
|
45
44
|
return (
|
|
46
45
|
<ToolbarPrimitive.Root
|
|
47
|
-
{...
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
{...rest}
|
|
47
|
+
// Only pass role when explicitly set; radix provides role="toolbar" by default.
|
|
48
|
+
{...(role !== 'none' && { role })}
|
|
49
|
+
orientation={orientation}
|
|
50
|
+
data-arrow-keys={orientation === 'vertical' ? 'up down' : 'left right'}
|
|
51
|
+
className={tx('toolbar.root', { density, disabled, layoutManaged }, className)}
|
|
50
52
|
ref={forwardedRef}
|
|
51
53
|
>
|
|
52
|
-
|
|
54
|
+
{children}
|
|
53
55
|
</ToolbarPrimitive.Root>
|
|
54
56
|
);
|
|
55
57
|
},
|
|
56
58
|
);
|
|
57
59
|
|
|
60
|
+
//
|
|
61
|
+
// Text
|
|
62
|
+
//
|
|
63
|
+
|
|
64
|
+
type ToolbarTextProps = SlottableProps;
|
|
65
|
+
|
|
66
|
+
const ToolbarText = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
|
|
67
|
+
const { className, ...rest } = composableProps(props);
|
|
68
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
69
|
+
const { tx } = useThemeContext();
|
|
70
|
+
return (
|
|
71
|
+
<Comp {...rest} className={tx('toolbar.text', {}, className)} ref={forwardedRef}>
|
|
72
|
+
{children}
|
|
73
|
+
</Comp>
|
|
74
|
+
);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
//
|
|
78
|
+
// Button
|
|
79
|
+
//
|
|
80
|
+
|
|
58
81
|
type ToolbarButtonProps = ButtonProps;
|
|
59
82
|
|
|
60
83
|
const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>((props, forwardedRef) => {
|
|
@@ -65,6 +88,10 @@ const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>((props,
|
|
|
65
88
|
);
|
|
66
89
|
});
|
|
67
90
|
|
|
91
|
+
//
|
|
92
|
+
// IconButton
|
|
93
|
+
//
|
|
94
|
+
|
|
68
95
|
type ToolbarIconButtonProps = IconButtonProps;
|
|
69
96
|
|
|
70
97
|
const ToolbarIconButton = forwardRef<HTMLButtonElement, ToolbarIconButtonProps>((props, forwardedRef) => {
|
|
@@ -85,6 +112,10 @@ const ToolbarToggle = forwardRef<HTMLButtonElement, ToolbarToggleProps>((props,
|
|
|
85
112
|
);
|
|
86
113
|
});
|
|
87
114
|
|
|
115
|
+
//
|
|
116
|
+
// Link
|
|
117
|
+
//
|
|
118
|
+
|
|
88
119
|
type ToolbarLinkProps = LinkProps;
|
|
89
120
|
|
|
90
121
|
const ToolbarLink = forwardRef<HTMLAnchorElement, ToolbarLinkProps>((props, forwardedRef) => {
|
|
@@ -101,6 +132,10 @@ type ToolbarToggleGroupProps = (
|
|
|
101
132
|
) &
|
|
102
133
|
ButtonGroupProps;
|
|
103
134
|
|
|
135
|
+
//
|
|
136
|
+
// ToggleGroup
|
|
137
|
+
//
|
|
138
|
+
|
|
104
139
|
const ToolbarToggleGroup = forwardRef<HTMLDivElement, ToolbarToggleGroupProps>(
|
|
105
140
|
({ classNames, children, elevation, ...props }, forwardedRef) => {
|
|
106
141
|
return (
|
|
@@ -146,13 +181,17 @@ const ToolbarToggleGroupIconItem = forwardRef<HTMLButtonElement, ToolbarToggleGr
|
|
|
146
181
|
},
|
|
147
182
|
);
|
|
148
183
|
|
|
184
|
+
//
|
|
185
|
+
// Separator
|
|
186
|
+
//
|
|
187
|
+
|
|
149
188
|
type ToolbarSeparatorProps = SeparatorProps & { variant?: 'gap' | 'line' };
|
|
150
189
|
|
|
151
190
|
const ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(
|
|
152
|
-
({ variant = '
|
|
191
|
+
({ variant = 'gap', ...props }, forwardedRef) => {
|
|
153
192
|
return variant === 'line' ? (
|
|
154
193
|
<ToolbarPrimitive.Separator asChild>
|
|
155
|
-
<Separator {...props} ref={forwardedRef} />
|
|
194
|
+
<Separator orientation='vertical' {...props} ref={forwardedRef} />
|
|
156
195
|
</ToolbarPrimitive.Separator>
|
|
157
196
|
) : (
|
|
158
197
|
<ToolbarPrimitive.Separator className='grow' ref={forwardedRef} />
|
|
@@ -160,8 +199,109 @@ const ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(
|
|
|
160
199
|
},
|
|
161
200
|
);
|
|
162
201
|
|
|
202
|
+
//
|
|
203
|
+
// DragHandle
|
|
204
|
+
//
|
|
205
|
+
|
|
206
|
+
type ToolbarDragHandleProps = { testId?: string; label?: string };
|
|
207
|
+
|
|
208
|
+
const ToolbarDragHandle = forwardRef<HTMLButtonElement, ToolbarDragHandleProps>(
|
|
209
|
+
({ testId = 'drag-handle', label }, forwardedRef) => {
|
|
210
|
+
const { t } = useTranslation(translationKey);
|
|
211
|
+
return (
|
|
212
|
+
<ToolbarIconButton
|
|
213
|
+
data-testid={testId}
|
|
214
|
+
tabIndex={-1}
|
|
215
|
+
noTooltip
|
|
216
|
+
iconOnly
|
|
217
|
+
icon='ph--dots-six-vertical--regular'
|
|
218
|
+
variant='ghost'
|
|
219
|
+
label={label ?? t('toolbar-drag-handle.label')}
|
|
220
|
+
classNames='dx-focus-ring-none cursor-pointer'
|
|
221
|
+
disabled={!forwardedRef}
|
|
222
|
+
ref={forwardedRef}
|
|
223
|
+
/>
|
|
224
|
+
);
|
|
225
|
+
},
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
//
|
|
229
|
+
// CloseIconButton
|
|
230
|
+
//
|
|
231
|
+
|
|
232
|
+
type ToolbarCloseIconButtonProps = { onClick?: () => void; label?: string };
|
|
233
|
+
|
|
234
|
+
const ToolbarCloseIconButton = forwardRef<HTMLButtonElement, ToolbarCloseIconButtonProps>(
|
|
235
|
+
({ onClick, label }, forwardedRef) => {
|
|
236
|
+
const { t } = useTranslation(translationKey);
|
|
237
|
+
|
|
238
|
+
return (
|
|
239
|
+
<ToolbarIconButton
|
|
240
|
+
iconOnly
|
|
241
|
+
icon='ph--x--regular'
|
|
242
|
+
variant='ghost'
|
|
243
|
+
label={label ?? t('toolbar-close.label')}
|
|
244
|
+
classNames='cursor-pointer'
|
|
245
|
+
onClick={onClick}
|
|
246
|
+
ref={forwardedRef}
|
|
247
|
+
/>
|
|
248
|
+
);
|
|
249
|
+
},
|
|
250
|
+
);
|
|
251
|
+
|
|
252
|
+
//
|
|
253
|
+
// Menu
|
|
254
|
+
//
|
|
255
|
+
|
|
256
|
+
type ToolbarMenuItem<T extends any | void = void> = {
|
|
257
|
+
label: string;
|
|
258
|
+
onClick: (context: T) => void;
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
type ToolbarMenuProps<T extends any | void = void> = {
|
|
262
|
+
context?: T;
|
|
263
|
+
items?: ToolbarMenuItem<T>[];
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
// TODO(burdon): Make slottable.
|
|
267
|
+
const ToolbarMenu = <T extends any | void = void>({ context, items }: ToolbarMenuProps<T>) => {
|
|
268
|
+
const { t } = useTranslation(translationKey);
|
|
269
|
+
|
|
270
|
+
return (
|
|
271
|
+
<DropdownMenu.Root>
|
|
272
|
+
<DropdownMenu.Trigger disabled={!items?.length} asChild>
|
|
273
|
+
<ToolbarIconButton
|
|
274
|
+
iconOnly
|
|
275
|
+
variant='ghost'
|
|
276
|
+
icon='ph--dots-three-vertical--regular'
|
|
277
|
+
label={t('toolbar-menu.label')}
|
|
278
|
+
/>
|
|
279
|
+
</DropdownMenu.Trigger>
|
|
280
|
+
{(items?.length ?? 0) > 0 && (
|
|
281
|
+
<DropdownMenu.Portal>
|
|
282
|
+
<DropdownMenu.Content>
|
|
283
|
+
<DropdownMenu.Viewport>
|
|
284
|
+
{items?.map(({ label, onClick: onSelect }, index) => (
|
|
285
|
+
<DropdownMenu.Item key={index} onSelect={() => onSelect(context as T)}>
|
|
286
|
+
{label}
|
|
287
|
+
</DropdownMenu.Item>
|
|
288
|
+
))}
|
|
289
|
+
</DropdownMenu.Viewport>
|
|
290
|
+
<DropdownMenu.Arrow />
|
|
291
|
+
</DropdownMenu.Content>
|
|
292
|
+
</DropdownMenu.Portal>
|
|
293
|
+
)}
|
|
294
|
+
</DropdownMenu.Root>
|
|
295
|
+
);
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
//
|
|
299
|
+
// Toolbar
|
|
300
|
+
//
|
|
301
|
+
|
|
163
302
|
export const Toolbar = {
|
|
164
303
|
Root: ToolbarRoot,
|
|
304
|
+
Text: ToolbarText,
|
|
165
305
|
Button: ToolbarButton,
|
|
166
306
|
IconButton: ToolbarIconButton,
|
|
167
307
|
Link: ToolbarLink,
|
|
@@ -170,10 +310,14 @@ export const Toolbar = {
|
|
|
170
310
|
ToggleGroupItem: ToolbarToggleGroupItem,
|
|
171
311
|
ToggleGroupIconItem: ToolbarToggleGroupIconItem,
|
|
172
312
|
Separator: ToolbarSeparator,
|
|
313
|
+
DragHandle: ToolbarDragHandle,
|
|
314
|
+
CloseIconButton: ToolbarCloseIconButton,
|
|
315
|
+
Menu: ToolbarMenu,
|
|
173
316
|
};
|
|
174
317
|
|
|
175
318
|
export type {
|
|
176
319
|
ToolbarRootProps,
|
|
320
|
+
ToolbarTextProps,
|
|
177
321
|
ToolbarButtonProps,
|
|
178
322
|
ToolbarIconButtonProps,
|
|
179
323
|
ToolbarLinkProps,
|
|
@@ -182,4 +326,8 @@ export type {
|
|
|
182
326
|
ToolbarToggleGroupItemProps,
|
|
183
327
|
ToolbarToggleGroupIconItemProps,
|
|
184
328
|
ToolbarSeparatorProps,
|
|
329
|
+
ToolbarDragHandleProps,
|
|
330
|
+
ToolbarCloseIconButtonProps,
|
|
331
|
+
ToolbarMenuItem,
|
|
332
|
+
ToolbarMenuProps,
|
|
185
333
|
};
|
|
@@ -12,28 +12,30 @@ import { Button } from '../Button';
|
|
|
12
12
|
|
|
13
13
|
import { Tooltip } from './Tooltip';
|
|
14
14
|
|
|
15
|
-
type
|
|
15
|
+
type DefaultStoryProps = {
|
|
16
16
|
tooltips: { label: string; content: string }[];
|
|
17
17
|
defaultOpen?: boolean;
|
|
18
18
|
};
|
|
19
19
|
|
|
20
|
-
const DefaultStory = ({ tooltips, defaultOpen }:
|
|
21
|
-
|
|
22
|
-
<
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
20
|
+
const DefaultStory = ({ tooltips, defaultOpen }: DefaultStoryProps) => {
|
|
21
|
+
return (
|
|
22
|
+
<Tooltip.Provider defaultOpen={defaultOpen}>
|
|
23
|
+
<div role='none' className='w-32'>
|
|
24
|
+
{tooltips.map(({ label, content }, i) => (
|
|
25
|
+
<Tooltip.Trigger asChild key={i} content={content} side='right'>
|
|
26
|
+
<Button classNames='block w-full'>{label}</Button>
|
|
27
|
+
</Tooltip.Trigger>
|
|
28
|
+
))}
|
|
29
|
+
</div>
|
|
30
|
+
</Tooltip.Provider>
|
|
31
|
+
);
|
|
32
|
+
};
|
|
31
33
|
|
|
32
34
|
const meta = {
|
|
33
|
-
title: 'ui/react-ui-core/Tooltip',
|
|
35
|
+
title: 'ui/react-ui-core/components/Tooltip',
|
|
34
36
|
component: Tooltip as any,
|
|
35
37
|
render: DefaultStory,
|
|
36
|
-
decorators: [withTheme],
|
|
38
|
+
decorators: [withTheme()],
|
|
37
39
|
} satisfies Meta<typeof DefaultStory>;
|
|
38
40
|
|
|
39
41
|
export default meta;
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
// This is based upon `@radix-ui/react-tooltip` fetched 17 March 2025 at https://github.com/radix-ui/primitives at commit 6e75e11.
|
|
6
|
+
// TODO(burdon): Replace with https://ui.shadcn.com/docs/components/radix/tooltip
|
|
6
7
|
|
|
7
8
|
import { composeEventHandlers } from '@radix-ui/primitive';
|
|
8
9
|
import { useComposedRefs } from '@radix-ui/react-compose-refs';
|
|
@@ -21,9 +22,8 @@ import { useControllableState } from '@radix-ui/react-use-controllable-state';
|
|
|
21
22
|
import * as VisuallyHiddenPrimitive from '@radix-ui/react-visually-hidden';
|
|
22
23
|
import React, {
|
|
23
24
|
type ComponentPropsWithoutRef,
|
|
24
|
-
type
|
|
25
|
+
type ComponentRef,
|
|
25
26
|
type FC,
|
|
26
|
-
type MutableRefObject,
|
|
27
27
|
type ReactNode,
|
|
28
28
|
type RefObject,
|
|
29
29
|
type SyntheticEvent,
|
|
@@ -60,13 +60,13 @@ type TooltipContextValue = {
|
|
|
60
60
|
onOpen(): void;
|
|
61
61
|
onClose(): void;
|
|
62
62
|
onPointerInTransitChange(inTransit: boolean): void;
|
|
63
|
-
isPointerInTransitRef:
|
|
63
|
+
isPointerInTransitRef: RefObject<boolean>;
|
|
64
64
|
disableHoverableContent: boolean;
|
|
65
65
|
};
|
|
66
66
|
|
|
67
67
|
const [TooltipContextProvider, useTooltipContext] = createTooltipContext<TooltipContextValue>(TOOLTIP_NAME);
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
type TooltipProviderProps = {
|
|
70
70
|
children?: ReactNode;
|
|
71
71
|
open?: boolean;
|
|
72
72
|
defaultOpen?: boolean;
|
|
@@ -87,7 +87,7 @@ interface TooltipProviderProps {
|
|
|
87
87
|
* @defaultValue 300
|
|
88
88
|
*/
|
|
89
89
|
skipDelayDuration?: number;
|
|
90
|
-
}
|
|
90
|
+
};
|
|
91
91
|
|
|
92
92
|
const TooltipProvider: FC<TooltipProviderProps> = (props: TooltipScopedProps<TooltipProviderProps>) => {
|
|
93
93
|
const {
|
|
@@ -215,9 +215,9 @@ const TooltipProvider: FC<TooltipProviderProps> = (props: TooltipScopedProps<Too
|
|
|
215
215
|
isPointerInTransitRef.current = inTransit;
|
|
216
216
|
}, [])}
|
|
217
217
|
>
|
|
218
|
-
<TooltipContent side={side} className={tx('tooltip.content',
|
|
218
|
+
<TooltipContent side={side} className={tx('tooltip.content', { elevation })}>
|
|
219
219
|
{content}
|
|
220
|
-
<TooltipArrow className={tx('tooltip.arrow'
|
|
220
|
+
<TooltipArrow className={tx('tooltip.arrow')} />
|
|
221
221
|
</TooltipContent>
|
|
222
222
|
<TooltipVirtualTrigger virtualRef={triggerRef as RefObject<HTMLButtonElement>} />
|
|
223
223
|
{children}
|
|
@@ -246,7 +246,7 @@ const TooltipVirtualTrigger = ({
|
|
|
246
246
|
|
|
247
247
|
const TRIGGER_NAME = 'TooltipTrigger';
|
|
248
248
|
|
|
249
|
-
type TooltipTriggerElement =
|
|
249
|
+
type TooltipTriggerElement = ComponentRef<typeof Primitive.button>;
|
|
250
250
|
type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;
|
|
251
251
|
type TooltipTriggerProps = PrimitiveButtonProps &
|
|
252
252
|
Pick<TooltipProps, 'delayDuration'> & {
|
|
@@ -334,7 +334,7 @@ const [PortalProvider, usePortalContext] = createTooltipContext<PortalContextVal
|
|
|
334
334
|
});
|
|
335
335
|
|
|
336
336
|
type PortalProps = ComponentPropsWithoutRef<typeof PortalPrimitive>;
|
|
337
|
-
|
|
337
|
+
type TooltipPortalProps = {
|
|
338
338
|
children?: ReactNode;
|
|
339
339
|
/**
|
|
340
340
|
* Specify a container element to portal the content into.
|
|
@@ -345,7 +345,7 @@ interface TooltipPortalProps {
|
|
|
345
345
|
* controlling animation with React animation libraries.
|
|
346
346
|
*/
|
|
347
347
|
forceMount?: true;
|
|
348
|
-
}
|
|
348
|
+
};
|
|
349
349
|
|
|
350
350
|
const TooltipPortal: FC<TooltipPortalProps> = (props: TooltipScopedProps<TooltipPortalProps>) => {
|
|
351
351
|
const { __scopeTooltip, forceMount, children, container } = props;
|
|
@@ -370,13 +370,13 @@ TooltipPortal.displayName = PORTAL_NAME;
|
|
|
370
370
|
const CONTENT_NAME = 'TooltipContent';
|
|
371
371
|
|
|
372
372
|
type TooltipContentElement = TooltipContentImplElement;
|
|
373
|
-
|
|
373
|
+
type TooltipContentProps = TooltipContentImplProps & {
|
|
374
374
|
/**
|
|
375
375
|
* Used to force mounting when more control is needed. Useful when
|
|
376
376
|
* controlling animation with React animation libraries.
|
|
377
377
|
*/
|
|
378
378
|
forceMount?: true;
|
|
379
|
-
}
|
|
379
|
+
};
|
|
380
380
|
|
|
381
381
|
const TooltipContent = forwardRef<TooltipContentElement, TooltipContentProps>(
|
|
382
382
|
(props: TooltipScopedProps<TooltipContentProps>, forwardedRef) => {
|
|
@@ -400,7 +400,7 @@ type Point = { x: number; y: number };
|
|
|
400
400
|
type Polygon = Point[];
|
|
401
401
|
|
|
402
402
|
type TooltipContentHoverableElement = TooltipContentImplElement;
|
|
403
|
-
|
|
403
|
+
type TooltipContentHoverableProps = TooltipContentImplProps;
|
|
404
404
|
|
|
405
405
|
const TooltipContentHoverable = forwardRef<TooltipContentHoverableElement, TooltipContentHoverableProps>(
|
|
406
406
|
(props: TooltipScopedProps<TooltipContentHoverableProps>, forwardedRef) => {
|
|
@@ -479,10 +479,10 @@ const [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] =
|
|
|
479
479
|
isInside: false,
|
|
480
480
|
});
|
|
481
481
|
|
|
482
|
-
type TooltipContentImplElement =
|
|
482
|
+
type TooltipContentImplElement = ComponentRef<typeof PopperPrimitive.Content>;
|
|
483
483
|
type DismissableLayerProps = ComponentPropsWithoutRef<typeof DismissableLayer>;
|
|
484
484
|
type PopperContentProps = ComponentPropsWithoutRef<typeof PopperPrimitive.Content>;
|
|
485
|
-
|
|
485
|
+
type TooltipContentImplProps = Omit<PopperContentProps, 'onPlaced'> & {
|
|
486
486
|
/**
|
|
487
487
|
* A more descriptive label for accessibility purpose
|
|
488
488
|
*/
|
|
@@ -498,7 +498,7 @@ interface TooltipContentImplProps extends Omit<PopperContentProps, 'onPlaced'> {
|
|
|
498
498
|
* Can be prevented.
|
|
499
499
|
*/
|
|
500
500
|
onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];
|
|
501
|
-
}
|
|
501
|
+
};
|
|
502
502
|
|
|
503
503
|
const TooltipContentImpl = forwardRef<TooltipContentImplElement, TooltipContentImplProps>(
|
|
504
504
|
(props: TooltipScopedProps<TooltipContentImplProps>, forwardedRef) => {
|
|
@@ -580,9 +580,9 @@ TooltipContent.displayName = CONTENT_NAME;
|
|
|
580
580
|
|
|
581
581
|
const ARROW_NAME = 'TooltipArrow';
|
|
582
582
|
|
|
583
|
-
type TooltipArrowElement =
|
|
583
|
+
type TooltipArrowElement = ComponentRef<typeof PopperPrimitive.Arrow>;
|
|
584
584
|
type PopperArrowProps = ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>;
|
|
585
|
-
|
|
585
|
+
type TooltipArrowProps = PopperArrowProps;
|
|
586
586
|
|
|
587
587
|
const TooltipArrow = forwardRef<TooltipArrowElement, TooltipArrowProps>(
|
|
588
588
|
(props: TooltipScopedProps<TooltipArrowProps>, forwardedRef) => {
|
package/src/components/index.ts
CHANGED
|
@@ -2,13 +2,20 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
export * from './
|
|
5
|
+
export * from './DensityProvider';
|
|
6
|
+
export * from './ElevationProvider';
|
|
7
|
+
export * from './ThemeProvider';
|
|
8
|
+
|
|
6
9
|
export * from './Avatars';
|
|
7
10
|
export * from './Breadcrumb';
|
|
8
11
|
export * from './Button';
|
|
12
|
+
export * from './Card';
|
|
9
13
|
export * from './Clipboard';
|
|
10
14
|
export * from './Dialog';
|
|
15
|
+
export * from './ErrorFallback';
|
|
16
|
+
export * from './Focus';
|
|
11
17
|
export * from './Icon';
|
|
18
|
+
export * from './Image';
|
|
12
19
|
export * from './Input';
|
|
13
20
|
export * from './Link';
|
|
14
21
|
export * from './List';
|
|
@@ -21,11 +28,9 @@ export * from './ScrollArea';
|
|
|
21
28
|
export * from './ScrollContainer';
|
|
22
29
|
export * from './Select';
|
|
23
30
|
export * from './Separator';
|
|
31
|
+
export * from './Skeleton';
|
|
32
|
+
export * from './Splitter';
|
|
24
33
|
export * from './Tag';
|
|
25
34
|
export * from './Toast';
|
|
26
35
|
export * from './Toolbar';
|
|
27
36
|
export * from './Tooltip';
|
|
28
|
-
|
|
29
|
-
export * from './DensityProvider';
|
|
30
|
-
export * from './ElevationProvider';
|
|
31
|
-
export * from './ThemeProvider';
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
|
+
import React from 'react';
|
|
7
|
+
|
|
8
|
+
import { slottable } from '@dxos/ui-theme';
|
|
9
|
+
|
|
10
|
+
import { withTheme } from '../testing';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Generic component pattern using the slottable factory.
|
|
14
|
+
*/
|
|
15
|
+
const Component = slottable<HTMLDivElement>(({ children, ...props }, forwardedRef) => {
|
|
16
|
+
return (
|
|
17
|
+
<div {...props} ref={forwardedRef}>
|
|
18
|
+
{children}
|
|
19
|
+
</div>
|
|
20
|
+
);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const meta = {
|
|
24
|
+
title: 'ui/react-ui-core/exemplars/generics',
|
|
25
|
+
component: Component,
|
|
26
|
+
render: (props) => <Component {...props} />,
|
|
27
|
+
decorators: [withTheme()],
|
|
28
|
+
parameters: {
|
|
29
|
+
layout: 'centered',
|
|
30
|
+
},
|
|
31
|
+
} satisfies Meta;
|
|
32
|
+
|
|
33
|
+
export default meta;
|
|
34
|
+
|
|
35
|
+
type Story = StoryObj<typeof meta>;
|
|
36
|
+
|
|
37
|
+
export const Default: Story = {
|
|
38
|
+
args: {
|
|
39
|
+
children: 'Hello',
|
|
40
|
+
},
|
|
41
|
+
};
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { Primitive } from '@radix-ui/react-primitive';
|
|
6
|
+
import { Slot } from '@radix-ui/react-slot';
|
|
7
|
+
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
8
|
+
import React, { PropsWithChildren } from 'react';
|
|
9
|
+
|
|
10
|
+
import { composable, composableProps, mx, slottable } from '@dxos/ui-theme';
|
|
11
|
+
|
|
12
|
+
import { withTheme } from '../testing';
|
|
13
|
+
import { ThemedClassName } from '../util';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Radix-style composition.
|
|
17
|
+
* All Radix primitive parts that render a DOM element accept an asChild prop.
|
|
18
|
+
* When asChild is set to true, Radix will not render a default DOM element,
|
|
19
|
+
* instead cloning the part's child and passing it the props and behavior required to make it functional.
|
|
20
|
+
* https://www.radix-ui.com/primitives/docs/guides/composition
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
const Outer = slottable<HTMLDivElement, { priority?: number }>(
|
|
24
|
+
({ children, asChild, priority, ...props }, forwardedRef) => {
|
|
25
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
26
|
+
return (
|
|
27
|
+
<Comp
|
|
28
|
+
{...composableProps<HTMLDivElement>(props, { classNames: 'p-2 border border-red-500 rounded' })}
|
|
29
|
+
ref={forwardedRef}
|
|
30
|
+
>
|
|
31
|
+
{children}
|
|
32
|
+
</Comp>
|
|
33
|
+
);
|
|
34
|
+
},
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
const Middle = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
|
|
38
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
39
|
+
return (
|
|
40
|
+
<Comp
|
|
41
|
+
{...composableProps<HTMLDivElement>(props, { classNames: 'p-2 border border-red-500 rounded' })}
|
|
42
|
+
ref={forwardedRef}
|
|
43
|
+
>
|
|
44
|
+
{children}
|
|
45
|
+
</Comp>
|
|
46
|
+
);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
const Leaf = composable<HTMLButtonElement>(({ children, ...props }, forwardedRef) => {
|
|
50
|
+
return (
|
|
51
|
+
<button
|
|
52
|
+
{...composableProps<HTMLButtonElement>(props, { classNames: 'p-2 border border-red-500 rounded' })}
|
|
53
|
+
ref={forwardedRef}
|
|
54
|
+
>
|
|
55
|
+
{children}
|
|
56
|
+
</button>
|
|
57
|
+
);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
/** This isn't a valid child for a `slottable` component. */
|
|
61
|
+
const Simple = ({ children, classNames }: ThemedClassName<PropsWithChildren>) => (
|
|
62
|
+
<div role='none' className={mx(classNames)}>
|
|
63
|
+
{children}
|
|
64
|
+
</div>
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
const meta = {
|
|
68
|
+
title: 'ui/react-ui-core/exemplars/slot',
|
|
69
|
+
decorators: [withTheme()],
|
|
70
|
+
parameters: {
|
|
71
|
+
layout: 'centered',
|
|
72
|
+
},
|
|
73
|
+
} satisfies Meta;
|
|
74
|
+
|
|
75
|
+
export default meta;
|
|
76
|
+
|
|
77
|
+
type Story = StoryObj<typeof meta>;
|
|
78
|
+
|
|
79
|
+
export const Single: Story = {
|
|
80
|
+
render: () => (
|
|
81
|
+
<Outer asChild role='article' classNames='border-green-500' priority={1}>
|
|
82
|
+
<Leaf>Single asChild (non-compliant — see console)</Leaf>
|
|
83
|
+
</Outer>
|
|
84
|
+
),
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const Nested: Story = {
|
|
88
|
+
render: () => (
|
|
89
|
+
<Outer asChild role='article' classNames='border-blue-500'>
|
|
90
|
+
<Middle asChild>
|
|
91
|
+
<Leaf>Nested asChild</Leaf>
|
|
92
|
+
</Middle>
|
|
93
|
+
</Outer>
|
|
94
|
+
),
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export const Inner: Story = {
|
|
98
|
+
render: () => (
|
|
99
|
+
<Outer asChild role='article' classNames='border-orange-500'>
|
|
100
|
+
<Middle asChild>
|
|
101
|
+
<Leaf>
|
|
102
|
+
<div role='none'>Leaf</div>
|
|
103
|
+
</Leaf>
|
|
104
|
+
</Middle>
|
|
105
|
+
</Outer>
|
|
106
|
+
),
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export const Error: Story = {
|
|
110
|
+
render: () => (
|
|
111
|
+
<Outer asChild role='none' classNames='p-2 border border-green-500 rounded'>
|
|
112
|
+
<Middle asChild>
|
|
113
|
+
<Simple>Simple</Simple>
|
|
114
|
+
</Middle>
|
|
115
|
+
</Outer>
|
|
116
|
+
),
|
|
117
|
+
};
|