@dxos/react-ui 0.8.4-main.bc674ce → 0.8.4-main.bd9b33e6c8
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 +3021 -2087
- 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 +3021 -2087
- 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/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 +145 -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.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 +23 -7
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +6 -2
- 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 +25 -21
- 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 +4 -4
- 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 +394 -0
- package/src/components/Card/index.ts +5 -0
- package/src/components/Clipboard/CopyButton.tsx +3 -3
- package/src/components/Dialog/AlertDialog.stories.tsx +16 -16
- package/src/components/Dialog/AlertDialog.tsx +121 -82
- package/src/components/Dialog/Dialog.stories.tsx +98 -17
- package/src/components/Dialog/Dialog.tsx +108 -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 +15 -18
- 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 +3 -3
- package/src/components/List/Treegrid.tsx +10 -15
- 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 +43 -23
- package/src/components/ScrollContainer/ScrollContainer.tsx +174 -87
- 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 +140 -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 +171 -25
- 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 +24 -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 +67 -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,55 @@ 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, ...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
|
+
orientation={orientation}
|
|
48
|
+
data-arrow-keys={orientation === 'vertical' ? 'up down' : 'left right'}
|
|
49
|
+
className={tx('toolbar.root', { density, disabled, layoutManaged }, className)}
|
|
50
50
|
ref={forwardedRef}
|
|
51
51
|
>
|
|
52
|
-
|
|
52
|
+
{children}
|
|
53
53
|
</ToolbarPrimitive.Root>
|
|
54
54
|
);
|
|
55
55
|
},
|
|
56
56
|
);
|
|
57
57
|
|
|
58
|
+
//
|
|
59
|
+
// Text
|
|
60
|
+
//
|
|
61
|
+
|
|
62
|
+
type ToolbarTextProps = SlottableProps;
|
|
63
|
+
|
|
64
|
+
const ToolbarText = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
|
|
65
|
+
const { className, ...rest } = composableProps(props);
|
|
66
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
67
|
+
const { tx } = useThemeContext();
|
|
68
|
+
return (
|
|
69
|
+
<Comp {...rest} className={tx('toolbar.text', {}, className)} ref={forwardedRef}>
|
|
70
|
+
{children}
|
|
71
|
+
</Comp>
|
|
72
|
+
);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
//
|
|
76
|
+
// Button
|
|
77
|
+
//
|
|
78
|
+
|
|
58
79
|
type ToolbarButtonProps = ButtonProps;
|
|
59
80
|
|
|
60
81
|
const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>((props, forwardedRef) => {
|
|
@@ -65,6 +86,10 @@ const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>((props,
|
|
|
65
86
|
);
|
|
66
87
|
});
|
|
67
88
|
|
|
89
|
+
//
|
|
90
|
+
// IconButton
|
|
91
|
+
//
|
|
92
|
+
|
|
68
93
|
type ToolbarIconButtonProps = IconButtonProps;
|
|
69
94
|
|
|
70
95
|
const ToolbarIconButton = forwardRef<HTMLButtonElement, ToolbarIconButtonProps>((props, forwardedRef) => {
|
|
@@ -85,6 +110,10 @@ const ToolbarToggle = forwardRef<HTMLButtonElement, ToolbarToggleProps>((props,
|
|
|
85
110
|
);
|
|
86
111
|
});
|
|
87
112
|
|
|
113
|
+
//
|
|
114
|
+
// Link
|
|
115
|
+
//
|
|
116
|
+
|
|
88
117
|
type ToolbarLinkProps = LinkProps;
|
|
89
118
|
|
|
90
119
|
const ToolbarLink = forwardRef<HTMLAnchorElement, ToolbarLinkProps>((props, forwardedRef) => {
|
|
@@ -101,6 +130,10 @@ type ToolbarToggleGroupProps = (
|
|
|
101
130
|
) &
|
|
102
131
|
ButtonGroupProps;
|
|
103
132
|
|
|
133
|
+
//
|
|
134
|
+
// ToggleGroup
|
|
135
|
+
//
|
|
136
|
+
|
|
104
137
|
const ToolbarToggleGroup = forwardRef<HTMLDivElement, ToolbarToggleGroupProps>(
|
|
105
138
|
({ classNames, children, elevation, ...props }, forwardedRef) => {
|
|
106
139
|
return (
|
|
@@ -146,10 +179,14 @@ const ToolbarToggleGroupIconItem = forwardRef<HTMLButtonElement, ToolbarToggleGr
|
|
|
146
179
|
},
|
|
147
180
|
);
|
|
148
181
|
|
|
182
|
+
//
|
|
183
|
+
// Separator
|
|
184
|
+
//
|
|
185
|
+
|
|
149
186
|
type ToolbarSeparatorProps = SeparatorProps & { variant?: 'gap' | 'line' };
|
|
150
187
|
|
|
151
188
|
const ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(
|
|
152
|
-
({ variant = '
|
|
189
|
+
({ variant = 'gap', ...props }, forwardedRef) => {
|
|
153
190
|
return variant === 'line' ? (
|
|
154
191
|
<ToolbarPrimitive.Separator asChild>
|
|
155
192
|
<Separator {...props} ref={forwardedRef} />
|
|
@@ -160,8 +197,109 @@ const ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(
|
|
|
160
197
|
},
|
|
161
198
|
);
|
|
162
199
|
|
|
200
|
+
//
|
|
201
|
+
// DragHandle
|
|
202
|
+
//
|
|
203
|
+
|
|
204
|
+
type ToolbarDragHandleProps = { testId?: string; label?: string };
|
|
205
|
+
|
|
206
|
+
const ToolbarDragHandle = forwardRef<HTMLButtonElement, ToolbarDragHandleProps>(
|
|
207
|
+
({ testId = 'drag-handle', label }, forwardedRef) => {
|
|
208
|
+
const { t } = useTranslation(translationKey);
|
|
209
|
+
return (
|
|
210
|
+
<ToolbarIconButton
|
|
211
|
+
data-testid={testId}
|
|
212
|
+
tabIndex={-1}
|
|
213
|
+
noTooltip
|
|
214
|
+
iconOnly
|
|
215
|
+
icon='ph--dots-six-vertical--regular'
|
|
216
|
+
variant='ghost'
|
|
217
|
+
label={label ?? t('toolbar drag handle label')}
|
|
218
|
+
classNames='dx-focus-ring-none cursor-pointer'
|
|
219
|
+
disabled={!forwardedRef}
|
|
220
|
+
ref={forwardedRef}
|
|
221
|
+
/>
|
|
222
|
+
);
|
|
223
|
+
},
|
|
224
|
+
);
|
|
225
|
+
|
|
226
|
+
//
|
|
227
|
+
// CloseIconButton
|
|
228
|
+
//
|
|
229
|
+
|
|
230
|
+
type ToolbarCloseIconButtonProps = { onClick?: () => void; label?: string };
|
|
231
|
+
|
|
232
|
+
const ToolbarCloseIconButton = forwardRef<HTMLButtonElement, ToolbarCloseIconButtonProps>(
|
|
233
|
+
({ onClick, label }, forwardedRef) => {
|
|
234
|
+
const { t } = useTranslation(translationKey);
|
|
235
|
+
|
|
236
|
+
return (
|
|
237
|
+
<ToolbarIconButton
|
|
238
|
+
iconOnly
|
|
239
|
+
icon='ph--x--regular'
|
|
240
|
+
variant='ghost'
|
|
241
|
+
label={label ?? t('toolbar close label')}
|
|
242
|
+
classNames='cursor-pointer'
|
|
243
|
+
onClick={onClick}
|
|
244
|
+
ref={forwardedRef}
|
|
245
|
+
/>
|
|
246
|
+
);
|
|
247
|
+
},
|
|
248
|
+
);
|
|
249
|
+
|
|
250
|
+
//
|
|
251
|
+
// Menu
|
|
252
|
+
//
|
|
253
|
+
|
|
254
|
+
type ToolbarMenuItem<T extends any | void = void> = {
|
|
255
|
+
label: string;
|
|
256
|
+
onClick: (context: T) => void;
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
type ToolbarMenuProps<T extends any | void = void> = {
|
|
260
|
+
context?: T;
|
|
261
|
+
items?: ToolbarMenuItem<T>[];
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
// TODO(burdon): Make slottable.
|
|
265
|
+
const ToolbarMenu = <T extends any | void = void>({ context, items }: ToolbarMenuProps<T>) => {
|
|
266
|
+
const { t } = useTranslation(translationKey);
|
|
267
|
+
|
|
268
|
+
return (
|
|
269
|
+
<DropdownMenu.Root>
|
|
270
|
+
<DropdownMenu.Trigger disabled={!items?.length} asChild>
|
|
271
|
+
<ToolbarIconButton
|
|
272
|
+
iconOnly
|
|
273
|
+
variant='ghost'
|
|
274
|
+
icon='ph--dots-three-vertical--regular'
|
|
275
|
+
label={t('toolbar menu label')}
|
|
276
|
+
/>
|
|
277
|
+
</DropdownMenu.Trigger>
|
|
278
|
+
{(items?.length ?? 0) > 0 && (
|
|
279
|
+
<DropdownMenu.Portal>
|
|
280
|
+
<DropdownMenu.Content>
|
|
281
|
+
<DropdownMenu.Viewport>
|
|
282
|
+
{items?.map(({ label, onClick: onSelect }, index) => (
|
|
283
|
+
<DropdownMenu.Item key={index} onSelect={() => onSelect(context as T)}>
|
|
284
|
+
{label}
|
|
285
|
+
</DropdownMenu.Item>
|
|
286
|
+
))}
|
|
287
|
+
</DropdownMenu.Viewport>
|
|
288
|
+
<DropdownMenu.Arrow />
|
|
289
|
+
</DropdownMenu.Content>
|
|
290
|
+
</DropdownMenu.Portal>
|
|
291
|
+
)}
|
|
292
|
+
</DropdownMenu.Root>
|
|
293
|
+
);
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
//
|
|
297
|
+
// Toolbar
|
|
298
|
+
//
|
|
299
|
+
|
|
163
300
|
export const Toolbar = {
|
|
164
301
|
Root: ToolbarRoot,
|
|
302
|
+
Text: ToolbarText,
|
|
165
303
|
Button: ToolbarButton,
|
|
166
304
|
IconButton: ToolbarIconButton,
|
|
167
305
|
Link: ToolbarLink,
|
|
@@ -170,10 +308,14 @@ export const Toolbar = {
|
|
|
170
308
|
ToggleGroupItem: ToolbarToggleGroupItem,
|
|
171
309
|
ToggleGroupIconItem: ToolbarToggleGroupIconItem,
|
|
172
310
|
Separator: ToolbarSeparator,
|
|
311
|
+
DragHandle: ToolbarDragHandle,
|
|
312
|
+
CloseIconButton: ToolbarCloseIconButton,
|
|
313
|
+
Menu: ToolbarMenu,
|
|
173
314
|
};
|
|
174
315
|
|
|
175
316
|
export type {
|
|
176
317
|
ToolbarRootProps,
|
|
318
|
+
ToolbarTextProps,
|
|
177
319
|
ToolbarButtonProps,
|
|
178
320
|
ToolbarIconButtonProps,
|
|
179
321
|
ToolbarLinkProps,
|
|
@@ -182,4 +324,8 @@ export type {
|
|
|
182
324
|
ToolbarToggleGroupItemProps,
|
|
183
325
|
ToolbarToggleGroupIconItemProps,
|
|
184
326
|
ToolbarSeparatorProps,
|
|
327
|
+
ToolbarDragHandleProps,
|
|
328
|
+
ToolbarCloseIconButtonProps,
|
|
329
|
+
ToolbarMenuItem,
|
|
330
|
+
ToolbarMenuProps,
|
|
185
331
|
};
|
|
@@ -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, { role: 'none', 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, { role: 'none', 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, { role: 'none', 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
|
+
};
|