@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
|
@@ -9,14 +9,7 @@ import { useArrowNavigationGroup } from '@fluentui/react-tabster';
|
|
|
9
9
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
10
10
|
import React, { type ReactNode, useCallback, useState } from 'react';
|
|
11
11
|
|
|
12
|
-
import {
|
|
13
|
-
getSize,
|
|
14
|
-
ghostHover,
|
|
15
|
-
ghostSelected,
|
|
16
|
-
ghostSelectedTrackingInterFromNormal,
|
|
17
|
-
mx,
|
|
18
|
-
surfaceShadow,
|
|
19
|
-
} from '@dxos/ui-theme';
|
|
12
|
+
import { getSize, ghostHover, mx, surfaceShadow } from '@dxos/ui-theme';
|
|
20
13
|
|
|
21
14
|
import { withTheme } from '../../testing';
|
|
22
15
|
import { Icon } from '../Icon';
|
|
@@ -24,9 +17,9 @@ import { Icon } from '../Icon';
|
|
|
24
17
|
import { List, ListItem, type ListScopedProps } from './List';
|
|
25
18
|
|
|
26
19
|
const meta = {
|
|
27
|
-
title: 'ui/react-ui-core/List',
|
|
20
|
+
title: 'ui/react-ui-core/components/List',
|
|
28
21
|
component: List,
|
|
29
|
-
decorators: [withTheme],
|
|
22
|
+
decorators: [withTheme()],
|
|
30
23
|
} satisfies Meta<typeof List>;
|
|
31
24
|
|
|
32
25
|
export default meta;
|
|
@@ -44,11 +37,11 @@ const UniformListItem = ({ id, text }: { id: string; text: string }) => {
|
|
|
44
37
|
style={{ transform: CSS.Transform.toString(transform) }}
|
|
45
38
|
>
|
|
46
39
|
<ListItem.Endcap>
|
|
47
|
-
<Icon icon='ph--dots-six-vertical--regular' classNames={mx(getSize(5), '
|
|
40
|
+
<Icon icon='ph--dots-six-vertical--regular' classNames={mx(getSize(5), 'mt-2.5')} />
|
|
48
41
|
</ListItem.Endcap>
|
|
49
|
-
<ListItem.Heading classNames='grow
|
|
42
|
+
<ListItem.Heading classNames='grow pt-2'>{text}</ListItem.Heading>
|
|
50
43
|
<ListItem.Endcap>
|
|
51
|
-
<Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), '
|
|
44
|
+
<Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mt-2.5')} />
|
|
52
45
|
</ListItem.Endcap>
|
|
53
46
|
</ListItem.Root>
|
|
54
47
|
);
|
|
@@ -110,13 +103,13 @@ const ManySizesDraggableListItem = ({
|
|
|
110
103
|
style={{ transform: CSS.Translate.toString(transform) }}
|
|
111
104
|
>
|
|
112
105
|
<ListItem.Endcap>
|
|
113
|
-
<Icon icon='ph--dots-six-vertical--regular' classNames={mx(getSize(5), '
|
|
106
|
+
<Icon icon='ph--dots-six-vertical--regular' classNames={mx(getSize(5), 'mt-2.5')} />
|
|
114
107
|
</ListItem.Endcap>
|
|
115
|
-
<ListItem.Heading classNames='grow
|
|
108
|
+
<ListItem.Heading classNames='grow pt-2' asChild>
|
|
116
109
|
{text}
|
|
117
110
|
</ListItem.Heading>
|
|
118
111
|
<ListItem.Endcap>
|
|
119
|
-
<Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), '
|
|
112
|
+
<Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mt-2.5')} />
|
|
120
113
|
</ListItem.Endcap>
|
|
121
114
|
</ListItem.Root>
|
|
122
115
|
);
|
|
@@ -130,9 +123,9 @@ export const ManySizesDraggable: Story = {
|
|
|
130
123
|
text: (
|
|
131
124
|
<p
|
|
132
125
|
className={mx(
|
|
133
|
-
index % 3 === 0 ? '
|
|
126
|
+
index % 3 === 0 ? 'h-20' : index % 2 === 0 ? 'h-12' : 'h-8',
|
|
134
127
|
surfaceShadow({ elevation: 'positioned' }),
|
|
135
|
-
'
|
|
128
|
+
'mb-2 p-2 bg-white dark:bg-neutral-800 rounded-sm',
|
|
136
129
|
)}
|
|
137
130
|
>{`List item ${index + 1}`}</p>
|
|
138
131
|
),
|
|
@@ -186,9 +179,9 @@ export const Collapsible: Story = {
|
|
|
186
179
|
<ListItem.Root key={id} id={id} collapsible={index !== 2} defaultOpen={index % 2 === 0}>
|
|
187
180
|
<div role='none' className='grow flex'>
|
|
188
181
|
{index !== 2 ? <ListItem.OpenTrigger /> : <ListItem.MockOpenTrigger />}
|
|
189
|
-
<ListItem.Heading classNames='grow
|
|
182
|
+
<ListItem.Heading classNames='grow pt-2'>{text}</ListItem.Heading>
|
|
190
183
|
<ListItem.Endcap>
|
|
191
|
-
<Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), '
|
|
184
|
+
<Icon icon='ph--push-pin--regular' classNames={mx(getSize(5), 'mt-2.5')} />
|
|
192
185
|
</ListItem.Endcap>
|
|
193
186
|
</div>
|
|
194
187
|
{index !== 2 && <ListItem.CollapsibleContent>{body}</ListItem.CollapsibleContent>}
|
|
@@ -229,11 +222,11 @@ export const SelectableListbox: Story = {
|
|
|
229
222
|
key={id}
|
|
230
223
|
tabIndex={0}
|
|
231
224
|
selected={selectedId === id}
|
|
232
|
-
classNames={mx(ghostHover,
|
|
225
|
+
classNames={mx(ghostHover, 'dx-selected')}
|
|
233
226
|
onClick={() => setSelectedId(id)}
|
|
234
227
|
onKeyUp={(event) => handleKeyUp(event, id)}
|
|
235
228
|
>
|
|
236
|
-
<ListItem.Heading classNames='flex
|
|
229
|
+
<ListItem.Heading classNames='flex px-1 items-center grow truncate'>{text}</ListItem.Heading>
|
|
237
230
|
</ListItem.Root>
|
|
238
231
|
))}
|
|
239
232
|
</List>
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import { Primitive } from '@radix-ui/react-primitive';
|
|
5
6
|
import { Slot } from '@radix-ui/react-slot';
|
|
6
7
|
import React, { type ComponentPropsWithoutRef, type FC, type ForwardRefExoticComponent, forwardRef } from 'react';
|
|
7
8
|
|
|
@@ -23,6 +24,7 @@ import {
|
|
|
23
24
|
useListContext,
|
|
24
25
|
useListItemContext,
|
|
25
26
|
} from '@dxos/react-list';
|
|
27
|
+
import { composable, composableProps } from '@dxos/ui-theme';
|
|
26
28
|
import { type Density } from '@dxos/ui-types';
|
|
27
29
|
|
|
28
30
|
import { useDensityContext, useThemeContext } from '../../hooks';
|
|
@@ -32,15 +34,16 @@ import { Icon } from '../Icon';
|
|
|
32
34
|
|
|
33
35
|
import { ListDropIndicator } from './ListDropIndicator';
|
|
34
36
|
|
|
35
|
-
type ListProps = ThemedClassName<ListPrimitiveProps
|
|
37
|
+
type ListProps = ThemedClassName<ListPrimitiveProps & { density?: Density }>;
|
|
36
38
|
|
|
37
|
-
const List =
|
|
39
|
+
const List = composable<HTMLOListElement, ListProps>(({ children, ...props }, forwardedRef) => {
|
|
38
40
|
const { tx } = useThemeContext();
|
|
39
41
|
const density = useDensityContext(props.density);
|
|
42
|
+
const { className, ...rest } = composableProps(props);
|
|
40
43
|
|
|
41
44
|
return (
|
|
42
45
|
<DensityProvider density={density}>
|
|
43
|
-
<ListPrimitive {...
|
|
46
|
+
<ListPrimitive {...rest} className={tx('list.root', {}, className)} ref={forwardedRef}>
|
|
44
47
|
{children}
|
|
45
48
|
</ListPrimitive>
|
|
46
49
|
</DensityProvider>
|
|
@@ -51,18 +54,18 @@ type ListItemEndcapProps = ThemedClassName<ComponentPropsWithoutRef<'div'>> & {
|
|
|
51
54
|
|
|
52
55
|
const ListItemEndcap = forwardRef<HTMLDivElement, ListItemEndcapProps>(
|
|
53
56
|
({ children, classNames, asChild, ...props }, forwardedRef) => {
|
|
54
|
-
const
|
|
57
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
55
58
|
const density = useDensityContext();
|
|
56
59
|
const { tx } = useThemeContext();
|
|
57
60
|
return (
|
|
58
|
-
<
|
|
61
|
+
<Comp
|
|
59
62
|
{...(!asChild && { role: 'none' })}
|
|
60
63
|
{...props}
|
|
61
|
-
className={tx('list.item.endcap',
|
|
64
|
+
className={tx('list.item.endcap', { density }, classNames)}
|
|
62
65
|
ref={forwardedRef}
|
|
63
66
|
>
|
|
64
67
|
{children}
|
|
65
|
-
</
|
|
68
|
+
</Comp>
|
|
66
69
|
);
|
|
67
70
|
},
|
|
68
71
|
);
|
|
@@ -73,13 +76,7 @@ const MockListItemOpenTrigger = ({
|
|
|
73
76
|
}: ThemedClassName<Omit<ComponentPropsWithoutRef<'div'>, 'children'>>) => {
|
|
74
77
|
const density = useDensityContext();
|
|
75
78
|
const { tx } = useThemeContext();
|
|
76
|
-
return (
|
|
77
|
-
<div
|
|
78
|
-
role='none'
|
|
79
|
-
{...props}
|
|
80
|
-
className={tx('list.item.openTrigger', 'list__listItem__openTrigger--mock', { density }, classNames)}
|
|
81
|
-
/>
|
|
82
|
-
);
|
|
79
|
+
return <div role='none' {...props} className={tx('list.item.openTrigger', { density }, classNames)} />;
|
|
83
80
|
};
|
|
84
81
|
|
|
85
82
|
type ListItemHeadingProps = ThemedClassName<ListPrimitiveItemHeadingProps>;
|
|
@@ -91,10 +88,10 @@ const ListItemHeading = forwardRef<HTMLParagraphElement, ListItemHeadingProps>(
|
|
|
91
88
|
return (
|
|
92
89
|
<ListPrimitiveItemHeading
|
|
93
90
|
{...props}
|
|
94
|
-
className={tx('list.item.heading',
|
|
91
|
+
className={tx('list.item.heading', { density }, classNames)}
|
|
95
92
|
ref={forwardedRef}
|
|
96
93
|
>
|
|
97
|
-
{children}
|
|
94
|
+
<span>{children}</span>
|
|
98
95
|
</ListPrimitiveItemHeading>
|
|
99
96
|
);
|
|
100
97
|
},
|
|
@@ -110,14 +107,14 @@ const ListItemOpenTrigger = forwardRef<HTMLButtonElement, ListItemOpenTriggerPro
|
|
|
110
107
|
return (
|
|
111
108
|
<ListPrimitiveItemOpenTrigger
|
|
112
109
|
{...props}
|
|
113
|
-
className={tx('list.item.openTrigger',
|
|
110
|
+
className={tx('list.item.openTrigger', { density }, classNames)}
|
|
114
111
|
ref={forwardedRef}
|
|
115
112
|
>
|
|
116
113
|
{children || (
|
|
117
114
|
<Icon
|
|
118
115
|
size={3}
|
|
119
116
|
icon={open ? 'ph--caret-down--bold' : 'ph--caret-right--bold'}
|
|
120
|
-
classNames={tx('list.item.openTriggerIcon',
|
|
117
|
+
classNames={tx('list.item.openTriggerIcon', {})}
|
|
121
118
|
/>
|
|
122
119
|
)}
|
|
123
120
|
</ListPrimitiveItemOpenTrigger>
|
|
@@ -134,7 +131,7 @@ const ListItemRoot = forwardRef<HTMLLIElement, ListItemRootProps>(
|
|
|
134
131
|
return (
|
|
135
132
|
<ListPrimitiveItem
|
|
136
133
|
{...props}
|
|
137
|
-
className={tx('list.item.root',
|
|
134
|
+
className={tx('list.item.root', { density, collapsible: props.collapsible }, classNames)}
|
|
138
135
|
ref={forwardedRef}
|
|
139
136
|
>
|
|
140
137
|
{children}
|
|
@@ -16,16 +16,16 @@ const edgeToOrientationMap: Record<Edge, Orientation> = {
|
|
|
16
16
|
|
|
17
17
|
const orientationStyles: Record<Orientation, HTMLAttributes<HTMLElement>['className']> = {
|
|
18
18
|
horizontal:
|
|
19
|
-
'h-
|
|
19
|
+
'h-(--line-thickness) left-[calc(var(--line-inset)+var(--terminal-radius))] right-(--line-inset) before:left-(--terminal-inset)',
|
|
20
20
|
vertical:
|
|
21
|
-
'
|
|
21
|
+
'w-(--line-thickness) top-[calc(var(--line-inset)+var(--terminal-radius))] bottom-(--line-inset) before:top-(--terminal-inset)',
|
|
22
22
|
};
|
|
23
23
|
|
|
24
24
|
const edgeStyles: Record<Edge, HTMLAttributes<HTMLElement>['className']> = {
|
|
25
|
-
top: 'top-
|
|
26
|
-
right: 'right-
|
|
27
|
-
bottom: 'bottom-
|
|
28
|
-
left: 'left-
|
|
25
|
+
top: 'top-(--line-offset) before:top-(--offset-terminal)',
|
|
26
|
+
right: 'right-(--line-offset) before:right-(--offset-terminal)',
|
|
27
|
+
bottom: 'bottom-(--line-offset) before:bottom-(--offset-terminal)',
|
|
28
|
+
left: 'left-(--line-offset) before:left-(--offset-terminal)',
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
const strokeSize = 2;
|
|
@@ -64,7 +64,7 @@ export const ListDropIndicator = ({
|
|
|
64
64
|
'--offset-terminal': `${offsetToAlignTerminalWithLine}px`,
|
|
65
65
|
} as CSSProperties
|
|
66
66
|
}
|
|
67
|
-
className={`absolute z-10 pointer-events-none bg-
|
|
67
|
+
className={`absolute z-10 pointer-events-none bg-accent-surface before:content-[''] before:w-(--terminal-size) before:h-(--terminal-size) box-border before:absolute before:border-[length:--line-thickness] before:border-solid before:border-accent-surface before:rounded-full ${orientationStyles[orientation]} ${edgeStyles[edge]}`}
|
|
68
68
|
/>
|
|
69
69
|
);
|
|
70
70
|
};
|
|
@@ -25,7 +25,7 @@ const createKey = (key: string, prefix?: string) => (prefix === undefined ? key
|
|
|
25
25
|
const StorybookTreeItem = ({ data, prefix }: StorybookTreeItemProps) => {
|
|
26
26
|
const keys = Array.isArray(data) ? Array.from(data.keys()) : Object.keys(data);
|
|
27
27
|
return (
|
|
28
|
-
<Tree.Root
|
|
28
|
+
<Tree.Root>
|
|
29
29
|
{keys.map((key) => {
|
|
30
30
|
const id = createKey(String(key), prefix);
|
|
31
31
|
const value = data[key as keyof typeof data];
|
|
@@ -35,10 +35,10 @@ const StorybookTreeItem = ({ data, prefix }: StorybookTreeItemProps) => {
|
|
|
35
35
|
<TreeItem.Root key={id} id={id} collapsible={!valueIsScalar} defaultOpen>
|
|
36
36
|
<div role='none' className='grow flex'>
|
|
37
37
|
{valueIsScalar ? <TreeItem.MockOpenTrigger /> : <TreeItem.OpenTrigger />}
|
|
38
|
-
<TreeItem.Heading classNames='grow
|
|
38
|
+
<TreeItem.Heading classNames='grow pt-1'>{valueIsScalar ? String(value) : key}</TreeItem.Heading>
|
|
39
39
|
</div>
|
|
40
40
|
{!valueIsScalar && (
|
|
41
|
-
<TreeItem.Body className='
|
|
41
|
+
<TreeItem.Body className='ps-2'>
|
|
42
42
|
<Tree.Branch>
|
|
43
43
|
<StorybookTreeItem data={value} prefix={id} />
|
|
44
44
|
</Tree.Branch>
|
|
@@ -56,10 +56,10 @@ const DefaultStory = ({ data }: StorybookTreeProps) => {
|
|
|
56
56
|
};
|
|
57
57
|
|
|
58
58
|
const meta = {
|
|
59
|
-
title: 'ui/react-ui-core/Tree',
|
|
59
|
+
title: 'ui/react-ui-core/components/Tree',
|
|
60
60
|
component: Tree as any,
|
|
61
61
|
render: DefaultStory,
|
|
62
|
-
decorators: [withTheme],
|
|
62
|
+
decorators: [withTheme()],
|
|
63
63
|
} satisfies Meta<typeof DefaultStory>;
|
|
64
64
|
|
|
65
65
|
export default meta;
|
|
@@ -21,14 +21,14 @@ const edgeToOrientationMap: Record<InstructionType, Orientation> = {
|
|
|
21
21
|
const orientationStyles: Record<Orientation, HTMLAttributes<HTMLElement>['className']> = {
|
|
22
22
|
// TODO(wittjosiah): Stop using left/right here.
|
|
23
23
|
sibling:
|
|
24
|
-
'
|
|
25
|
-
child: '
|
|
24
|
+
'h-(--line-thickness) left-(--horizontal-indent) right-0 bg-accent-surface before:left-(--negative-terminal-size)',
|
|
25
|
+
child: 'inset-0 border-[length:var(--line-thickness)] before:invisible',
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
const instructionStyles: Record<InstructionType, HTMLAttributes<HTMLElement>['className']> = {
|
|
29
|
-
'reorder-above': '
|
|
30
|
-
'reorder-below': '
|
|
31
|
-
'make-child': 'border-
|
|
29
|
+
'reorder-above': 'top-(--line-offset) before:top-(--offset-terminal)',
|
|
30
|
+
'reorder-below': 'bottom-(--line-offset) before:bottom-(--offset-terminal)',
|
|
31
|
+
'make-child': 'border-accent-surface',
|
|
32
32
|
// TODO(wittjosiah): This is not occurring in the current implementation.
|
|
33
33
|
reparent: '',
|
|
34
34
|
};
|
|
@@ -64,7 +64,7 @@ export const TreeDropIndicator = ({ instruction, gap = 0 }: DropIndicatorProps)
|
|
|
64
64
|
'--horizontal-indent': `${desiredInstruction.currentLevel * desiredInstruction.indentPerLevel + 4}px`,
|
|
65
65
|
} as CSSProperties
|
|
66
66
|
}
|
|
67
|
-
className={`absolute z-10 pointer-events-none before:
|
|
67
|
+
className={`absolute z-10 pointer-events-none before:w-(--terminal-size) before:h-(--terminal-size) box-border before:absolute before:border-[length:--line-thickness] before:border-solid before:border-accent-surface before:rounded-full ${orientationStyles[orientation]} ${instructionStyles[desiredInstruction.type]}`}
|
|
68
68
|
></div>
|
|
69
69
|
);
|
|
70
70
|
};
|
|
@@ -10,7 +10,7 @@ import { faker } from '@dxos/random';
|
|
|
10
10
|
import { withTheme } from '../../testing';
|
|
11
11
|
import { Icon } from '../Icon';
|
|
12
12
|
|
|
13
|
-
import { Treegrid } from './Treegrid';
|
|
13
|
+
import { Treegrid, TREEGRID_PARENT_OF_SEPARATOR, TREEGRID_PATH_SEPARATOR } from './Treegrid';
|
|
14
14
|
|
|
15
15
|
faker.seed(1234);
|
|
16
16
|
|
|
@@ -129,11 +129,11 @@ const DefaultStory = () => {
|
|
|
129
129
|
return (
|
|
130
130
|
<Treegrid.Row
|
|
131
131
|
key={node.id}
|
|
132
|
-
id={path.join(
|
|
133
|
-
{...(parentOf && { parentOf: parentOf.join(
|
|
132
|
+
id={path.join(TREEGRID_PATH_SEPARATOR)}
|
|
133
|
+
{...(parentOf && { parentOf: parentOf.join(TREEGRID_PARENT_OF_SEPARATOR) })}
|
|
134
134
|
>
|
|
135
135
|
<Treegrid.Cell indent classNames='flex items-center'>
|
|
136
|
-
{node.icon && <Icon icon={node.icon} classNames='
|
|
136
|
+
{node.icon && <Icon icon={node.icon} classNames='w-[1em] h-[1em] my-1' />}
|
|
137
137
|
{node.title}
|
|
138
138
|
</Treegrid.Cell>
|
|
139
139
|
</Treegrid.Row>
|
|
@@ -144,10 +144,10 @@ const DefaultStory = () => {
|
|
|
144
144
|
};
|
|
145
145
|
|
|
146
146
|
const meta = {
|
|
147
|
-
title: 'ui/react-ui-core/Treegrid',
|
|
147
|
+
title: 'ui/react-ui-core/components/Treegrid',
|
|
148
148
|
component: Treegrid.Root as any,
|
|
149
149
|
render: DefaultStory,
|
|
150
|
-
decorators: [withTheme],
|
|
150
|
+
decorators: [withTheme()],
|
|
151
151
|
} satisfies Meta<typeof DefaultStory>;
|
|
152
152
|
|
|
153
153
|
export default meta;
|
|
@@ -15,10 +15,12 @@ import React, {
|
|
|
15
15
|
useCallback,
|
|
16
16
|
} from 'react';
|
|
17
17
|
|
|
18
|
+
import { composable, composableProps } from '@dxos/ui-theme';
|
|
19
|
+
|
|
18
20
|
import { useThemeContext } from '../../hooks';
|
|
19
21
|
import { type ThemedClassName } from '../../util';
|
|
20
22
|
|
|
21
|
-
// TODO(thure):
|
|
23
|
+
// TODO(thure): https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/treegrid_role
|
|
22
24
|
|
|
23
25
|
const TREEGRID_ROW_NAME = 'TreegridRow';
|
|
24
26
|
|
|
@@ -34,18 +36,20 @@ type TreegridRowContextValue = {
|
|
|
34
36
|
const [TreegridRowProvider, useTreegridRowContext] =
|
|
35
37
|
createTreegridRowContext<TreegridRowContextValue>(TREEGRID_ROW_NAME);
|
|
36
38
|
|
|
37
|
-
|
|
38
|
-
const
|
|
39
|
+
// TODO(burdon): Replace with functions.
|
|
40
|
+
export const TREEGRID_PATH_SEPARATOR = '~';
|
|
41
|
+
export const TREEGRID_PARENT_OF_SEPARATOR = ' ';
|
|
39
42
|
|
|
40
43
|
type TreegridRootProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div>> & {
|
|
41
44
|
gridTemplateColumns: CSSProperties['gridTemplateColumns'];
|
|
42
45
|
asChild?: boolean;
|
|
43
46
|
};
|
|
44
47
|
|
|
45
|
-
const TreegridRoot =
|
|
46
|
-
({ asChild, classNames, children, style, gridTemplateColumns, ...props }, forwardedRef) => {
|
|
48
|
+
const TreegridRoot = composable<HTMLDivElement, TreegridRootProps>(
|
|
49
|
+
({ asChild, classNames, children, style, gridTemplateColumns, onKeyDown: onKeyDownProp, ...props }, forwardedRef) => {
|
|
47
50
|
const { tx } = useThemeContext();
|
|
48
|
-
const
|
|
51
|
+
const { className, role: _role, ...rest } = composableProps<HTMLDivElement>(props, { classNames });
|
|
52
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
49
53
|
const { findFirstFocusable } = useFocusFinders();
|
|
50
54
|
|
|
51
55
|
const handleKeyDown = useCallback(
|
|
@@ -89,22 +93,22 @@ const TreegridRoot = forwardRef<HTMLDivElement, TreegridRootProps>(
|
|
|
89
93
|
break;
|
|
90
94
|
}
|
|
91
95
|
}
|
|
92
|
-
|
|
96
|
+
onKeyDownProp?.(event);
|
|
93
97
|
},
|
|
94
|
-
[findFirstFocusable],
|
|
98
|
+
[findFirstFocusable, onKeyDownProp],
|
|
95
99
|
);
|
|
96
100
|
|
|
97
101
|
return (
|
|
98
|
-
<
|
|
102
|
+
<Comp
|
|
99
103
|
role='treegrid'
|
|
100
|
-
|
|
101
|
-
{
|
|
102
|
-
className={tx('treegrid.root', 'treegrid', {}, classNames)}
|
|
104
|
+
{...rest}
|
|
105
|
+
className={tx('treegrid.root', {}, className)}
|
|
103
106
|
style={{ ...style, gridTemplateColumns }}
|
|
107
|
+
onKeyDown={handleKeyDown}
|
|
104
108
|
ref={forwardedRef}
|
|
105
109
|
>
|
|
106
110
|
{children}
|
|
107
|
-
</
|
|
111
|
+
</Comp>
|
|
108
112
|
);
|
|
109
113
|
},
|
|
110
114
|
);
|
|
@@ -135,8 +139,8 @@ const TreegridRow = forwardRef<HTMLDivElement, TreegridRowScopedProps<TreegridRo
|
|
|
135
139
|
forwardedRef,
|
|
136
140
|
) => {
|
|
137
141
|
const { tx } = useThemeContext();
|
|
138
|
-
const
|
|
139
|
-
const pathParts = id.split(
|
|
142
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
143
|
+
const pathParts = id.split(TREEGRID_PATH_SEPARATOR);
|
|
140
144
|
const level = pathParts.length - 1;
|
|
141
145
|
const [open, onOpenChange] = useControllableState({
|
|
142
146
|
prop: propsOpen,
|
|
@@ -146,17 +150,17 @@ const TreegridRow = forwardRef<HTMLDivElement, TreegridRowScopedProps<TreegridRo
|
|
|
146
150
|
|
|
147
151
|
return (
|
|
148
152
|
<TreegridRowProvider open={open} onOpenChange={onOpenChange} scope={__treegridRowScope}>
|
|
149
|
-
<
|
|
153
|
+
<Comp
|
|
150
154
|
role='row'
|
|
151
155
|
aria-level={level}
|
|
152
|
-
className={tx('treegrid.row',
|
|
156
|
+
className={tx('treegrid.row', { level }, classNames)}
|
|
153
157
|
{...(parentOf && { 'aria-expanded': open, 'aria-owns': parentOf })}
|
|
154
158
|
{...props}
|
|
155
159
|
id={id}
|
|
156
160
|
ref={forwardedRef}
|
|
157
161
|
>
|
|
158
162
|
{children}
|
|
159
|
-
</
|
|
163
|
+
</Comp>
|
|
160
164
|
</TreegridRowProvider>
|
|
161
165
|
);
|
|
162
166
|
},
|
|
@@ -168,12 +172,7 @@ const TreegridCell = forwardRef<HTMLDivElement, TreegridCellProps>(
|
|
|
168
172
|
({ classNames, children, indent, ...props }, forwardedRef) => {
|
|
169
173
|
const { tx } = useThemeContext();
|
|
170
174
|
return (
|
|
171
|
-
<div
|
|
172
|
-
role='gridcell'
|
|
173
|
-
className={tx('treegrid.cell', 'treegrid__cell', { indent }, classNames)}
|
|
174
|
-
{...props}
|
|
175
|
-
ref={forwardedRef}
|
|
176
|
-
>
|
|
175
|
+
<div role='gridcell' className={tx('treegrid.cell', { indent }, classNames)} {...props} ref={forwardedRef}>
|
|
177
176
|
{children}
|
|
178
177
|
</div>
|
|
179
178
|
);
|
|
@@ -186,8 +185,4 @@ export const Treegrid = {
|
|
|
186
185
|
Root: TreegridRoot,
|
|
187
186
|
Row: TreegridRow,
|
|
188
187
|
Cell: TreegridCell,
|
|
189
|
-
PARENT_OF_SEPARATOR,
|
|
190
|
-
PATH_SEPARATOR,
|
|
191
|
-
createTreegridRowScope,
|
|
192
|
-
useTreegridRowContext,
|
|
193
188
|
};
|
|
@@ -7,10 +7,9 @@ import React from 'react';
|
|
|
7
7
|
|
|
8
8
|
import { withLayout, withTheme } from '../../testing';
|
|
9
9
|
import { IconButton } from '../Button';
|
|
10
|
-
import { Input } from '../Input';
|
|
11
10
|
import { Toolbar } from '../Toolbar';
|
|
12
11
|
|
|
13
|
-
import { Main,
|
|
12
|
+
import { Main, useSidebars } from './Main';
|
|
14
13
|
|
|
15
14
|
type StoryMainArgs = {};
|
|
16
15
|
|
|
@@ -38,29 +37,6 @@ const ComplementarySidebarToggle = ({ close }: { close?: boolean }) => {
|
|
|
38
37
|
);
|
|
39
38
|
};
|
|
40
39
|
|
|
41
|
-
const DrawerToggle = ({ close }: { close?: boolean }) => {
|
|
42
|
-
const { toggleDrawer } = useSidebars('StoryMain__DrawerToggle');
|
|
43
|
-
return (
|
|
44
|
-
<IconButton
|
|
45
|
-
icon={close ? 'ph--caret-down--regular' : 'ph--caret-up--regular'}
|
|
46
|
-
iconOnly
|
|
47
|
-
label='Toggle drawer'
|
|
48
|
-
onClick={toggleDrawer}
|
|
49
|
-
/>
|
|
50
|
-
);
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
const DrawerState = () => {
|
|
54
|
-
const { drawerState } = useSidebars('StoryMain__DrawerStateDisplay');
|
|
55
|
-
return (
|
|
56
|
-
<div className='flex items-center gap-2'>
|
|
57
|
-
<span>Drawer</span>
|
|
58
|
-
<span>({drawerState})</span>
|
|
59
|
-
<span>[{window.innerHeight}]</span>
|
|
60
|
-
</div>
|
|
61
|
-
);
|
|
62
|
-
};
|
|
63
|
-
|
|
64
40
|
const DefaultStory = (_args: StoryMainArgs) => {
|
|
65
41
|
return (
|
|
66
42
|
<Main.Root defaultComplementarySidebarState='closed' defaultNavigationSidebarState='closed'>
|
|
@@ -68,11 +44,11 @@ const DefaultStory = (_args: StoryMainArgs) => {
|
|
|
68
44
|
<Main.NavigationSidebar label='Navigation'>
|
|
69
45
|
<Toolbar.Root>
|
|
70
46
|
<h1>Navigation</h1>
|
|
71
|
-
<Toolbar.Separator
|
|
47
|
+
<Toolbar.Separator />
|
|
72
48
|
<NavigationSidebarToggle close />
|
|
73
49
|
</Toolbar.Root>
|
|
74
50
|
</Main.NavigationSidebar>
|
|
75
|
-
<Main.Content classNames='
|
|
51
|
+
<Main.Content classNames='w-full'>
|
|
76
52
|
<Toolbar.Root>
|
|
77
53
|
<NavigationSidebarToggle />
|
|
78
54
|
<div className='flex items-center grow justify-center'>Main</div>
|
|
@@ -82,7 +58,7 @@ const DefaultStory = (_args: StoryMainArgs) => {
|
|
|
82
58
|
<Main.ComplementarySidebar label='Complementary'>
|
|
83
59
|
<Toolbar.Root>
|
|
84
60
|
<ComplementarySidebarToggle close />
|
|
85
|
-
<Toolbar.Separator
|
|
61
|
+
<Toolbar.Separator />
|
|
86
62
|
<h1>Complementary</h1>
|
|
87
63
|
</Toolbar.Root>
|
|
88
64
|
</Main.ComplementarySidebar>
|
|
@@ -91,15 +67,12 @@ const DefaultStory = (_args: StoryMainArgs) => {
|
|
|
91
67
|
};
|
|
92
68
|
|
|
93
69
|
const meta = {
|
|
94
|
-
title: 'ui/react-ui-core/Main',
|
|
70
|
+
title: 'ui/react-ui-core/components/Main',
|
|
95
71
|
component: Main.Root,
|
|
96
72
|
render: DefaultStory,
|
|
97
|
-
decorators: [withTheme, withLayout({ layout: 'fullscreen' })],
|
|
73
|
+
decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
|
|
98
74
|
parameters: {
|
|
99
75
|
layout: 'fullscreen',
|
|
100
|
-
chromatic: {
|
|
101
|
-
disableSnapshot: false,
|
|
102
|
-
},
|
|
103
76
|
},
|
|
104
77
|
} satisfies Meta<typeof DefaultStory>;
|
|
105
78
|
|
|
@@ -110,65 +83,3 @@ type Story = StoryObj<typeof meta>;
|
|
|
110
83
|
export const Default: Story = {
|
|
111
84
|
args: {},
|
|
112
85
|
};
|
|
113
|
-
|
|
114
|
-
const DrawerStory = (_args: StoryMainArgs) => {
|
|
115
|
-
return (
|
|
116
|
-
<Main.Root>
|
|
117
|
-
<Main.Overlay />
|
|
118
|
-
<DrawerStoryInner />
|
|
119
|
-
</Main.Root>
|
|
120
|
-
);
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
const DrawerStoryInner = () => {
|
|
124
|
-
useDynamicDrawer('DrawerStoryInner');
|
|
125
|
-
|
|
126
|
-
return (
|
|
127
|
-
<>
|
|
128
|
-
<Main.Content classNames='flex flex-col is-full overflow-hidden'>
|
|
129
|
-
<Toolbar.Root classNames='pli-2'>
|
|
130
|
-
<h1>Main Content</h1>
|
|
131
|
-
<Toolbar.Separator variant='gap' classNames='grow' />
|
|
132
|
-
<DrawerToggle />
|
|
133
|
-
</Toolbar.Root>
|
|
134
|
-
<div className='flex flex-col bs-full overflow-y-auto p-2'>
|
|
135
|
-
<p className='text-sm text-description'>
|
|
136
|
-
The drawer is mutually exclusive with sidebars and is intended for mobile apps.
|
|
137
|
-
</p>
|
|
138
|
-
<div className='plb-2 space-y-2'>
|
|
139
|
-
{Array.from({ length: 50 }).map((_, i) => (
|
|
140
|
-
<p key={i}>Line {i + 1}</p>
|
|
141
|
-
))}
|
|
142
|
-
</div>
|
|
143
|
-
</div>
|
|
144
|
-
</Main.Content>
|
|
145
|
-
<Main.Drawer label='Drawer' classNames='grid grid-rows-[min-content_1fr_min-content]'>
|
|
146
|
-
<Toolbar.Root classNames='pli-2'>
|
|
147
|
-
<DrawerState />
|
|
148
|
-
<Toolbar.Separator variant='gap' classNames='grow' />
|
|
149
|
-
<DrawerToggle close />
|
|
150
|
-
</Toolbar.Root>
|
|
151
|
-
<div className='p-2 overflow-y-auto'>
|
|
152
|
-
<p className='text-sm text-description'>
|
|
153
|
-
On mobile devices, the drawer automatically switches to fullscreenwhen the keyboard appears.
|
|
154
|
-
</p>
|
|
155
|
-
<div className='plb-2 space-y-2'>
|
|
156
|
-
{Array.from({ length: 50 }).map((_, i) => (
|
|
157
|
-
<p key={i}>Line {i + 1}</p>
|
|
158
|
-
))}
|
|
159
|
-
</div>
|
|
160
|
-
</div>
|
|
161
|
-
<div className='p-2 border-bs border-separator'>
|
|
162
|
-
<Input.Root>
|
|
163
|
-
<Input.TextInput autoFocus placeholder='Search' />
|
|
164
|
-
</Input.Root>
|
|
165
|
-
</div>
|
|
166
|
-
</Main.Drawer>
|
|
167
|
-
</>
|
|
168
|
-
);
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
export const WithDrawer: Story = {
|
|
172
|
-
render: DrawerStory,
|
|
173
|
-
args: {},
|
|
174
|
-
};
|