@dxos/react-ui-stack 0.8.4-main.b97322e → 0.8.4-main.bc674ce

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.
Files changed (107) hide show
  1. package/dist/lib/browser/index.mjs +923 -50
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/browser/playwright/index.mjs +4 -0
  5. package/dist/lib/browser/playwright/index.mjs.map +2 -2
  6. package/dist/lib/node-esm/index.mjs +924 -50
  7. package/dist/lib/node-esm/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/meta.json +1 -1
  9. package/dist/lib/node-esm/playwright/index.mjs +4 -0
  10. package/dist/lib/node-esm/playwright/index.mjs.map +2 -2
  11. package/dist/types/src/{exemplars → components}/CardStack/CardStack.d.ts +20 -13
  12. package/dist/types/src/components/CardStack/CardStack.d.ts.map +1 -0
  13. package/dist/types/src/components/CardStack/CardStack.stories.d.ts +15 -0
  14. package/dist/types/src/components/CardStack/CardStack.stories.d.ts.map +1 -0
  15. package/dist/types/src/{exemplars → components}/CardStack/CardStackDragPreview.d.ts +1 -1
  16. package/dist/types/src/components/CardStack/CardStackDragPreview.d.ts.map +1 -0
  17. package/dist/types/src/components/CardStack/index.d.ts.map +1 -0
  18. package/dist/types/src/components/Stack/Stack.d.ts +15 -7
  19. package/dist/types/src/components/Stack/Stack.d.ts.map +1 -1
  20. package/dist/types/src/components/Stack/Stack.stories.d.ts +12 -3
  21. package/dist/types/src/components/Stack/Stack.stories.d.ts.map +1 -1
  22. package/dist/types/src/components/StackContext.d.ts +2 -1
  23. package/dist/types/src/components/StackContext.d.ts.map +1 -1
  24. package/dist/types/src/components/StackItem/StackItem.d.ts +9 -12
  25. package/dist/types/src/components/StackItem/StackItem.d.ts.map +1 -1
  26. package/dist/types/src/components/StackItem/StackItem.stories.d.ts +13 -5
  27. package/dist/types/src/components/StackItem/StackItem.stories.d.ts.map +1 -1
  28. package/dist/types/src/components/StackItem/StackItemContent.d.ts +4 -37
  29. package/dist/types/src/components/StackItem/StackItemContent.d.ts.map +1 -1
  30. package/dist/types/src/components/StackItem/StackItemHeading.d.ts +1 -1
  31. package/dist/types/src/components/StackItem/StackItemHeading.d.ts.map +1 -1
  32. package/dist/types/src/components/StackItem/StackItemResizeHandle.d.ts.map +1 -1
  33. package/dist/types/src/components/StackItem/StackItemSigil.d.ts +2 -2
  34. package/dist/types/src/components/StackItem/StackItemSigil.d.ts.map +1 -1
  35. package/dist/types/src/components/deprecated/LayoutControls.d.ts +3 -0
  36. package/dist/types/src/components/deprecated/LayoutControls.d.ts.map +1 -1
  37. package/dist/types/src/components/index.d.ts +2 -1
  38. package/dist/types/src/components/index.d.ts.map +1 -1
  39. package/dist/types/src/components/{defs.d.ts → types.d.ts} +1 -1
  40. package/dist/types/src/components/types.d.ts.map +1 -0
  41. package/dist/types/src/hooks/useStackDropForElements.d.ts +9 -7
  42. package/dist/types/src/hooks/useStackDropForElements.d.ts.map +1 -1
  43. package/dist/types/src/index.d.ts +0 -1
  44. package/dist/types/src/index.d.ts.map +1 -1
  45. package/dist/types/src/translations.d.ts +2 -2
  46. package/dist/types/src/translations.d.ts.map +1 -1
  47. package/dist/types/tsconfig.tsbuildinfo +1 -1
  48. package/package.json +41 -38
  49. package/src/{exemplars → components}/CardStack/CardStack.stories.tsx +19 -18
  50. package/src/{exemplars → components}/CardStack/CardStack.tsx +114 -54
  51. package/src/{exemplars → components}/CardStack/CardStackDragPreview.tsx +3 -3
  52. package/src/components/Stack/Stack.stories.tsx +8 -9
  53. package/src/components/Stack/Stack.tsx +225 -26
  54. package/src/components/StackContext.tsx +2 -1
  55. package/src/components/StackItem/StackItem.stories.tsx +19 -15
  56. package/src/components/StackItem/StackItem.tsx +49 -29
  57. package/src/components/StackItem/StackItemContent.tsx +18 -39
  58. package/src/components/StackItem/StackItemHeading.tsx +5 -9
  59. package/src/components/StackItem/StackItemResizeHandle.tsx +2 -1
  60. package/src/components/StackItem/StackItemSigil.tsx +5 -4
  61. package/src/components/deprecated/LayoutControls.tsx +3 -0
  62. package/src/components/index.ts +2 -1
  63. package/src/hooks/useStackDropForElements.ts +59 -45
  64. package/src/index.ts +0 -3
  65. package/src/playwright/playwright.config.ts +1 -1
  66. package/src/translations.ts +1 -1
  67. package/dist/lib/browser/chunk-P3TQV4BA.mjs +0 -1198
  68. package/dist/lib/browser/chunk-P3TQV4BA.mjs.map +0 -7
  69. package/dist/lib/browser/testing/index.mjs +0 -31
  70. package/dist/lib/browser/testing/index.mjs.map +0 -7
  71. package/dist/lib/node-esm/chunk-3WVEPAJ4.mjs +0 -1200
  72. package/dist/lib/node-esm/chunk-3WVEPAJ4.mjs.map +0 -7
  73. package/dist/lib/node-esm/testing/index.mjs +0 -32
  74. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  75. package/dist/types/src/components/defs.d.ts.map +0 -1
  76. package/dist/types/src/exemplars/Card/Card.d.ts +0 -58
  77. package/dist/types/src/exemplars/Card/Card.d.ts.map +0 -1
  78. package/dist/types/src/exemplars/Card/Card.stories.d.ts +0 -13
  79. package/dist/types/src/exemplars/Card/Card.stories.d.ts.map +0 -1
  80. package/dist/types/src/exemplars/Card/CardDragPreview.d.ts +0 -6
  81. package/dist/types/src/exemplars/Card/CardDragPreview.d.ts.map +0 -1
  82. package/dist/types/src/exemplars/Card/fragments.d.ts +0 -12
  83. package/dist/types/src/exemplars/Card/fragments.d.ts.map +0 -1
  84. package/dist/types/src/exemplars/Card/index.d.ts +0 -4
  85. package/dist/types/src/exemplars/Card/index.d.ts.map +0 -1
  86. package/dist/types/src/exemplars/CardStack/CardStack.d.ts.map +0 -1
  87. package/dist/types/src/exemplars/CardStack/CardStack.stories.d.ts +0 -9
  88. package/dist/types/src/exemplars/CardStack/CardStack.stories.d.ts.map +0 -1
  89. package/dist/types/src/exemplars/CardStack/CardStackDragPreview.d.ts.map +0 -1
  90. package/dist/types/src/exemplars/CardStack/index.d.ts.map +0 -1
  91. package/dist/types/src/exemplars/index.d.ts +0 -3
  92. package/dist/types/src/exemplars/index.d.ts.map +0 -1
  93. package/dist/types/src/testing/CardContainer.d.ts +0 -6
  94. package/dist/types/src/testing/CardContainer.d.ts.map +0 -1
  95. package/dist/types/src/testing/index.d.ts +0 -2
  96. package/dist/types/src/testing/index.d.ts.map +0 -1
  97. package/src/exemplars/Card/Card.stories.tsx +0 -78
  98. package/src/exemplars/Card/Card.tsx +0 -186
  99. package/src/exemplars/Card/CardDragPreview.tsx +0 -22
  100. package/src/exemplars/Card/fragments.ts +0 -23
  101. package/src/exemplars/Card/index.ts +0 -7
  102. package/src/exemplars/index.ts +0 -6
  103. package/src/testing/CardContainer.tsx +0 -34
  104. package/src/testing/index.ts +0 -5
  105. /package/dist/types/src/{exemplars → components}/CardStack/index.d.ts +0 -0
  106. /package/src/{exemplars → components}/CardStack/index.ts +0 -0
  107. /package/src/components/{defs.ts → types.ts} +0 -0
package/package.json CHANGED
@@ -1,12 +1,16 @@
1
1
  {
2
2
  "name": "@dxos/react-ui-stack",
3
- "version": "0.8.4-main.b97322e",
3
+ "version": "0.8.4-main.bc674ce",
4
4
  "description": "A stack component.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/dxos/dxos"
10
+ },
7
11
  "license": "MIT",
8
12
  "author": "DXOS.org",
9
- "sideEffects": true,
13
+ "sideEffects": false,
10
14
  "type": "module",
11
15
  "exports": {
12
16
  ".": {
@@ -18,11 +22,6 @@
18
22
  "types": "./dist/types/src/playwright/index.d.ts",
19
23
  "browser": "./dist/lib/browser/playwright/index.mjs",
20
24
  "node": "./dist/lib/node-esm/playwright/index.mjs"
21
- },
22
- "./testing": {
23
- "types": "./dist/types/src/testing/index.d.ts",
24
- "browser": "./dist/lib/browser/testing/index.mjs",
25
- "node": "./dist/lib/node-esm/testing/index.mjs"
26
25
  }
27
26
  },
28
27
  "types": "dist/types/src/index.d.ts",
@@ -41,11 +40,11 @@
41
40
  "src"
42
41
  ],
43
42
  "dependencies": {
44
- "@atlaskit/pragmatic-drag-and-drop": "^1.4.0",
45
- "@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.0",
46
- "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.0.3",
47
- "@fluentui/react-tabster": "^9.24.2",
48
- "@preact-signals/safe-react": "^0.9.0",
43
+ "@atlaskit/pragmatic-drag-and-drop": "1.7.7",
44
+ "@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.2",
45
+ "@atlaskit/pragmatic-drag-and-drop-hitbox": "1.1.0",
46
+ "@atlaskit/pragmatic-drag-and-drop-react-drop-indicator": "3.2.10",
47
+ "@fluentui/react-tabster": "9.26.11",
49
48
  "@radix-ui/primitive": "1.1.1",
50
49
  "@radix-ui/react-compose-refs": "1.1.1",
51
50
  "@radix-ui/react-context": "1.1.1",
@@ -54,36 +53,40 @@
54
53
  "@radix-ui/react-slot": "1.1.2",
55
54
  "@radix-ui/react-use-controllable-state": "1.1.0",
56
55
  "react-resize-detector": "^11.0.1",
57
- "@dxos/echo-schema": "0.8.4-main.b97322e",
58
- "@dxos/keyboard": "0.8.4-main.b97322e",
59
- "@dxos/live-object": "0.8.4-main.b97322e",
60
- "@dxos/storybook-utils": "0.8.4-main.b97322e",
61
- "@dxos/react-ui-dnd": "0.8.4-main.b97322e",
62
- "@dxos/util": "0.8.4-main.b97322e",
63
- "@dxos/react-ui-attention": "0.8.4-main.b97322e"
56
+ "@dxos/keyboard": "0.8.4-main.bc674ce",
57
+ "@dxos/echo": "0.8.4-main.bc674ce",
58
+ "@dxos/react-ui-attention": "0.8.4-main.bc674ce",
59
+ "@dxos/react-ui-dnd": "0.8.4-main.bc674ce",
60
+ "@dxos/react-ui-mosaic": "0.8.4-main.bc674ce",
61
+ "@dxos/util": "0.8.4-main.bc674ce"
64
62
  },
65
63
  "devDependencies": {
66
- "@types/react": "~18.2.0",
67
- "@types/react-dom": "~18.2.0",
68
- "react": "~18.2.0",
69
- "react-dom": "~18.2.0",
70
- "vite": "5.4.7",
71
- "@dxos/app-graph": "0.8.4-main.b97322e",
72
- "@dxos/client": "0.8.4-main.b97322e",
73
- "@dxos/echo-schema": "0.8.4-main.b97322e",
74
- "@dxos/random": "0.8.4-main.b97322e",
75
- "@dxos/react-ui": "0.8.4-main.b97322e",
76
- "@dxos/storybook-utils": "0.8.4-main.b97322e",
77
- "@dxos/react-ui-theme": "0.8.4-main.b97322e",
78
- "@dxos/test-utils": "0.8.4-main.b97322e"
64
+ "@types/react": "~19.2.7",
65
+ "@types/react-dom": "~19.2.3",
66
+ "react": "~19.2.3",
67
+ "react-dom": "~19.2.3",
68
+ "vite": "7.1.9",
69
+ "@dxos/app-framework": "0.8.4-main.bc674ce",
70
+ "@dxos/app-graph": "0.8.4-main.bc674ce",
71
+ "@dxos/client": "0.8.4-main.bc674ce",
72
+ "@dxos/echo": "0.8.4-main.bc674ce",
73
+ "@dxos/echo-db": "0.8.4-main.bc674ce",
74
+ "@dxos/random": "0.8.4-main.bc674ce",
75
+ "@dxos/react-ui": "0.8.4-main.bc674ce",
76
+ "@dxos/schema": "0.8.4-main.bc674ce",
77
+ "@dxos/test-utils": "0.8.4-main.bc674ce",
78
+ "@dxos/react-client": "0.8.4-main.bc674ce",
79
+ "@dxos/types": "0.8.4-main.bc674ce",
80
+ "@dxos/ui-theme": "0.8.4-main.bc674ce",
81
+ "@dxos/storybook-utils": "0.8.4-main.bc674ce"
79
82
  },
80
83
  "peerDependencies": {
81
- "react": "~18.2.0",
82
- "react-dom": "~18.2.0",
83
- "@dxos/client": "0.8.4-main.b97322e",
84
- "@dxos/random": "0.8.4-main.b97322e",
85
- "@dxos/react-ui": "0.8.4-main.b97322e",
86
- "@dxos/react-ui-theme": "0.8.4-main.b97322e"
84
+ "react": "~19.2.3",
85
+ "react-dom": "~19.2.3",
86
+ "@dxos/random": "0.8.4-main.bc674ce",
87
+ "@dxos/client": "0.8.4-main.bc674ce",
88
+ "@dxos/react-ui": "0.8.4-main.bc674ce",
89
+ "@dxos/ui-theme": "0.8.4-main.bc674ce"
87
90
  },
88
91
  "publishConfig": {
89
92
  "access": "public"
@@ -2,21 +2,19 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Edge } from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';
8
6
  import { type Meta, type StoryObj } from '@storybook/react-vite';
9
- import React, { useState, useCallback } from 'react';
7
+ import React, { useCallback, useState } from 'react';
10
8
 
11
9
  import { faker } from '@dxos/random';
12
10
  import { IconButton } from '@dxos/react-ui';
13
- import { withLayout, withTheme } from '@dxos/storybook-utils';
11
+ import { withTheme } from '@dxos/react-ui/testing';
12
+ import { Card, CardDragPreview } from '@dxos/react-ui-mosaic';
13
+
14
+ import { StackItem } from '../StackItem';
14
15
 
15
16
  import { CardStack } from './CardStack';
16
- import { StackItem } from '../../components';
17
- import { Card, CardDragPreview } from '../Card';
18
17
 
19
- // Set a seed for reproducible random values
20
18
  faker.seed(0);
21
19
 
22
20
  type CardItem = {
@@ -96,7 +94,7 @@ const CardStackStory = () => {
96
94
 
97
95
  return (
98
96
  <CardStack.Root classNames='is-96'>
99
- <CardStack.Content>
97
+ <CardStack.Content footer>
100
98
  <CardStack.Stack id='story column' onRearrange={handleRearrange} itemsCount={column.length}>
101
99
  {column.map((card, cardIndex, cardsArray) => {
102
100
  const cardItem = { id: card.id, type: 'card' as const };
@@ -111,10 +109,10 @@ const CardStackStory = () => {
111
109
  prevSiblingId={prevCardId}
112
110
  nextSiblingId={nextCardId}
113
111
  >
114
- <Card.StaticRoot>
112
+ <Card.Root>
115
113
  <Card.Toolbar>
116
114
  <StackItem.DragHandle asChild>
117
- <Card.DragHandle toolbarItem />
115
+ <Card.DragHandle />
118
116
  </StackItem.DragHandle>
119
117
  <Card.ToolbarSeparator variant='gap' />
120
118
  <Card.ToolbarIconButton
@@ -127,18 +125,18 @@ const CardStackStory = () => {
127
125
  </Card.Toolbar>
128
126
  <Card.Poster alt={card.title} image={card.image} />
129
127
  <Card.Heading>{card.title}</Card.Heading>
130
- <Card.Text classNames='line-clamp-2'>{card.description}</Card.Text>
131
- </Card.StaticRoot>
128
+ <Card.Text variant='description'>{card.description}</Card.Text>
129
+ </Card.Root>
132
130
  <StackItem.DragPreview>
133
- {({ item }) => (
131
+ {() => (
134
132
  <CardDragPreview.Root>
135
133
  <CardDragPreview.Content>
136
134
  <Card.Toolbar>
137
- <Card.DragHandle toolbarItem />
135
+ <Card.DragHandle />
138
136
  </Card.Toolbar>
139
137
  <Card.Poster alt={card.title} image={card.image} />
140
138
  <Card.Heading>{card.title}</Card.Heading>
141
- <Card.Text classNames='line-clamp-2'>{card.description}</Card.Text>
139
+ <Card.Text variant='description'>{card.description}</Card.Text>
142
140
  </CardDragPreview.Content>
143
141
  </CardDragPreview.Root>
144
142
  )}
@@ -159,11 +157,14 @@ const CardStackStory = () => {
159
157
  );
160
158
  };
161
159
 
162
- const meta: Meta<typeof CardStackStory> = {
160
+ const meta = {
163
161
  title: 'ui/react-ui-stack/CardStack',
164
162
  component: CardStackStory,
165
- decorators: [withTheme, withLayout({ fullscreen: true })],
166
- };
163
+ decorators: [withTheme],
164
+ parameters: {
165
+ layout: 'fullscreen',
166
+ },
167
+ } satisfies Meta<typeof CardStackStory>;
167
168
 
168
169
  export default meta;
169
170
 
@@ -6,17 +6,79 @@ import { Slot } from '@radix-ui/react-slot';
6
6
  import React, { type ComponentPropsWithoutRef, forwardRef } from 'react';
7
7
 
8
8
  import type { ThemedClassName } from '@dxos/react-ui';
9
- import { mx } from '@dxos/react-ui-theme';
9
+ import { Card } from '@dxos/react-ui-mosaic';
10
+ import { cardDefaultInlineSize, mx } from '@dxos/ui-theme';
10
11
 
11
- import { railGridHorizontalContainFitContent, Stack, type StackProps } from '../../components';
12
- import { Card } from '../Card';
12
+ import { Stack, type StackProps, railGridHorizontalContainFitContent } from '../Stack';
13
13
 
14
- type SharedCardStackProps = ThemedClassName<ComponentPropsWithoutRef<'div'>> & { asChild?: boolean };
14
+ /**
15
+ * This is `cardDefaultInlineSize` plus 2 times the sum of the inner and outer spacing applied by CardStack on the inline axis.
16
+ */
17
+ const cardStackDefaultInlineSizeRem = cardDefaultInlineSize + 2.125;
18
+
19
+ //
20
+ // Root
21
+ //
22
+
23
+ const cardStackRoot = 'flex flex-col';
24
+
25
+ // TODO(burdon): Root should be headless.
26
+ const CardStackRoot = forwardRef<HTMLDivElement, SharedCardStackProps>(
27
+ ({ children, classNames, asChild, role = 'none', ...props }, forwardedRef) => {
28
+ const Root = asChild ? Slot : 'div';
29
+ const rootProps = asChild
30
+ ? { classNames: [cardStackRoot, classNames] }
31
+ : { className: mx(cardStackRoot, classNames), role };
32
+
33
+ return (
34
+ <Root {...props} {...rootProps} ref={forwardedRef}>
35
+ {children}
36
+ </Root>
37
+ );
38
+ },
39
+ );
40
+
41
+ //
42
+ // Content
43
+ // TODO(burdon): Rename Viewport (should be the component that scrolls).
44
+ //
45
+
46
+ const cardStackContent = 'shrink min-bs-0 grid dx-focus-ring-group-x-indicator bg-baseSurface';
47
+
48
+ type CardStackContentProps = SharedCardStackProps & {
49
+ footer?: boolean;
50
+ };
51
+
52
+ const CardStackContent = forwardRef<HTMLDivElement, CardStackContentProps>(
53
+ ({ children, classNames, asChild, role = 'none', footer, ...props }, forwardedRef) => {
54
+ const Root = asChild ? Slot : 'div';
55
+ const baseClassNames = footer ? [cardStackContent, railGridHorizontalContainFitContent] : [cardStackContent];
56
+ const rootProps = asChild
57
+ ? { classNames: [...baseClassNames, classNames] }
58
+ : { className: mx(...baseClassNames, classNames), role };
59
+
60
+ return (
61
+ <Root {...props} {...rootProps} data-scroll-separator='false' ref={forwardedRef}>
62
+ {children}
63
+ </Root>
64
+ );
65
+ },
66
+ );
67
+
68
+ //
69
+ // Stack
70
+ // TODO(burdon): Rename Content.
71
+ //
72
+
73
+ type SharedCardStackProps = ThemedClassName<ComponentPropsWithoutRef<'div'>> & {
74
+ asChild?: boolean;
75
+ };
15
76
 
16
77
  const CardStackStack = forwardRef<
17
78
  HTMLDivElement,
18
79
  Omit<StackProps, 'orientation' | 'size' | 'rail' | 'separatorOnScroll'>
19
80
  >(({ children, classNames, itemsCount = 0, ...props }, forwardedRef) => {
81
+ // NOTE: Should not have horizontal padding since separatorOnScroll should be full width.
20
82
  return (
21
83
  <Stack
22
84
  orientation='vertical'
@@ -24,7 +86,7 @@ const CardStackStack = forwardRef<
24
86
  rail={false}
25
87
  classNames={
26
88
  /* NOTE(thure): Do not let this element have zero intrinsic size, otherwise the drop indicator will not display. See #9035. */
27
- ['plb-1', itemsCount > 0 && 'plb-2', classNames]
89
+ ['plb-2', classNames]
28
90
  }
29
91
  itemsCount={itemsCount}
30
92
  separatorOnScroll={9}
@@ -37,16 +99,19 @@ const CardStackStack = forwardRef<
37
99
  );
38
100
  });
39
101
 
40
- const CardStackDragHandle = Card.DragHandle;
102
+ //
103
+ // Item
104
+ //
41
105
 
42
- const cardStackHeading = 'mli-2 order-first bg-transparent rounded-bs-md flex items-center';
106
+ const cardStackItem = 'contain-layout pli-2 plb-1 first-of-type:pbs-0 last-of-type:pbe-0';
43
107
 
44
- const CardStackHeading = forwardRef<HTMLDivElement, SharedCardStackProps>(
45
- ({ children, classNames, asChild, role = 'heading', ...props }, forwardedRef) => {
108
+ const CardStackItem = forwardRef<HTMLDivElement, SharedCardStackProps>(
109
+ ({ children, classNames, asChild, role = 'none', ...props }, forwardedRef) => {
46
110
  const Root = asChild ? Slot : 'div';
47
111
  const rootProps = asChild
48
- ? { classNames: [cardStackHeading, classNames] }
49
- : { className: mx(cardStackHeading, classNames), role };
112
+ ? { classNames: [cardStackItem, classNames] }
113
+ : { className: mx(cardStackItem, classNames), role };
114
+
50
115
  return (
51
116
  <Root {...props} {...rootProps} ref={forwardedRef}>
52
117
  {children}
@@ -55,15 +120,19 @@ const CardStackHeading = forwardRef<HTMLDivElement, SharedCardStackProps>(
55
120
  },
56
121
  );
57
122
 
58
- const cardStackFooter =
59
- 'plb-2 mli-2 border-bs border-transparent [[data-scroll-separator-end="true"]_&]:border-subduedSeparator';
123
+ //
124
+ // Heading
125
+ //
60
126
 
61
- const CardStackFooter = forwardRef<HTMLDivElement, SharedCardStackProps>(
62
- ({ children, classNames, asChild, role = 'none', ...props }, forwardedRef) => {
127
+ const cardStackHeading = 'mli-2 order-first bg-transparent rounded-bs-md flex items-center';
128
+
129
+ const CardStackHeading = forwardRef<HTMLDivElement, SharedCardStackProps>(
130
+ ({ children, classNames, asChild, role = 'heading', ...props }, forwardedRef) => {
63
131
  const Root = asChild ? Slot : 'div';
64
132
  const rootProps = asChild
65
- ? { classNames: [cardStackFooter, classNames] }
66
- : { className: mx(cardStackFooter, classNames), role };
133
+ ? { classNames: [cardStackHeading, classNames] }
134
+ : { className: mx(cardStackHeading, classNames), role };
135
+
67
136
  return (
68
137
  <Root {...props} {...rootProps} ref={forwardedRef}>
69
138
  {children}
@@ -72,33 +141,20 @@ const CardStackFooter = forwardRef<HTMLDivElement, SharedCardStackProps>(
72
141
  },
73
142
  );
74
143
 
75
- const cardStackContent = [
76
- 'shrink min-bs-0 bg-baseSurface border border-separator rounded-md grid dx-focus-ring-group-x-indicator kanban-drop',
77
- railGridHorizontalContainFitContent,
78
- ];
79
-
80
- const CardStackContent = forwardRef<HTMLDivElement, SharedCardStackProps>(
81
- ({ children, classNames, asChild, role = 'none', ...props }, forwardedRef) => {
82
- const Root = asChild ? Slot : 'div';
83
- const rootProps = asChild
84
- ? { classNames: [...cardStackContent, classNames] }
85
- : { className: mx(...cardStackContent, classNames), role };
86
- return (
87
- <Root {...props} {...rootProps} data-scroll-separator='false' ref={forwardedRef}>
88
- {children}
89
- </Root>
90
- );
91
- },
92
- );
144
+ //
145
+ // Footer
146
+ //
93
147
 
94
- const cardStackRoot = 'flex flex-col pli-2 plb-2';
148
+ const cardStackFooter =
149
+ 'plb-2 mli-2 border-bs border-transparent [[data-scroll-separator-end="true"]_&]:border-subduedSeparator';
95
150
 
96
- const CardStackRoot = forwardRef<HTMLDivElement, SharedCardStackProps>(
151
+ const CardStackFooter = forwardRef<HTMLDivElement, SharedCardStackProps>(
97
152
  ({ children, classNames, asChild, role = 'none', ...props }, forwardedRef) => {
98
153
  const Root = asChild ? Slot : 'div';
99
154
  const rootProps = asChild
100
- ? { classNames: [cardStackRoot, classNames] }
101
- : { className: mx(cardStackRoot, classNames), role };
155
+ ? { classNames: [cardStackFooter, classNames] }
156
+ : { className: mx(cardStackFooter, classNames), role };
157
+
102
158
  return (
103
159
  <Root {...props} {...rootProps} ref={forwardedRef}>
104
160
  {children}
@@ -107,22 +163,19 @@ const CardStackRoot = forwardRef<HTMLDivElement, SharedCardStackProps>(
107
163
  },
108
164
  );
109
165
 
110
- const cardStackItem = 'contain-layout pli-2 plb-1 first-of-type:pbs-0 last-of-type:pbe-0';
166
+ //
167
+ // DragHandle
168
+ //
111
169
 
112
- const CardStackItem = forwardRef<HTMLDivElement, SharedCardStackProps>(
113
- ({ children, classNames, asChild, role = 'none', ...props }, forwardedRef) => {
114
- const Root = asChild ? Slot : 'div';
115
- const rootProps = asChild
116
- ? { classNames: [cardStackItem, classNames] }
117
- : { className: mx(cardStackItem, classNames), role };
118
- return (
119
- <Root {...props} {...rootProps} ref={forwardedRef}>
120
- {children}
121
- </Root>
122
- );
123
- },
124
- );
170
+ const CardStackDragHandle = Card.DragHandle;
125
171
 
172
+ //
173
+ // CardStack
174
+ //
175
+
176
+ /**
177
+ * @deprecated Replace with Mosaic.Stack.
178
+ */
126
179
  export const CardStack = {
127
180
  Root: CardStackRoot,
128
181
  Content: CardStackContent,
@@ -133,4 +186,11 @@ export const CardStack = {
133
186
  Item: CardStackItem,
134
187
  };
135
188
 
136
- export { cardStackRoot, cardStackFooter, cardStackHeading, cardStackContent, cardStackItem };
189
+ export {
190
+ cardStackRoot,
191
+ cardStackFooter,
192
+ cardStackHeading,
193
+ cardStackContent,
194
+ cardStackItem,
195
+ cardStackDefaultInlineSizeRem,
196
+ };
@@ -5,10 +5,10 @@
5
5
  import React, { type PropsWithChildren } from 'react';
6
6
 
7
7
  import { IconButton, useTranslation } from '@dxos/react-ui';
8
- import { mx } from '@dxos/react-ui-theme';
8
+ import { mx } from '@dxos/ui-theme';
9
9
 
10
- import { type StackProps } from '../../components';
11
10
  import { translationKey } from '../../translations';
11
+ import { type StackProps } from '../Stack';
12
12
 
13
13
  const CardStackDragPreviewRoot = ({ children }: PropsWithChildren<{}>) => {
14
14
  return (
@@ -50,7 +50,7 @@ const CardStackDragPreviewContent = ({
50
50
  };
51
51
 
52
52
  const CardStackDragPreviewFooter = ({ children }: PropsWithChildren<{}>) => {
53
- return <div className='p-2 border-t border-separator'>{children}</div>;
53
+ return <div className='p-2 border-bs border-separator'>{children}</div>;
54
54
  };
55
55
 
56
56
  export const CardStackDragPreview = {
@@ -2,18 +2,17 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Edge } from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';
8
6
  import { type Meta, type StoryObj } from '@storybook/react-vite';
9
- import React, { useState, useCallback } from 'react';
7
+ import React, { useCallback, useState } from 'react';
10
8
 
11
9
  import { faker } from '@dxos/random';
12
- import { withTheme } from '@dxos/storybook-utils';
10
+ import { withTheme } from '@dxos/react-ui/testing';
13
11
 
14
- import { Stack } from './Stack';
15
12
  import { StackItem } from '../StackItem';
16
- import { type StackItemData } from '../defs';
13
+ import { type StackItemData } from '../types';
14
+
15
+ import { Stack } from './Stack';
17
16
 
18
17
  type StoryStackItem = {
19
18
  id: string;
@@ -129,12 +128,12 @@ const DefaultStory = () => {
129
128
  );
130
129
  };
131
130
 
132
- const meta: Meta<typeof DefaultStory> = {
131
+ const meta = {
133
132
  title: 'ui/react-ui-stack/Stack',
134
133
  component: DefaultStory,
135
- decorators: [withTheme],
136
134
  argTypes: { orientation: { control: 'radio', options: ['horizontal', 'vertical'] } },
137
- };
135
+ decorators: [withTheme],
136
+ } satisfies Meta<typeof DefaultStory>;
138
137
 
139
138
  export default meta;
140
139