@dxos/react-ui-stack 0.8.3 → 0.8.4-main.1f223c7

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 (108) hide show
  1. package/dist/lib/browser/chunk-3V2YUQK5.mjs +1375 -0
  2. package/dist/lib/browser/chunk-3V2YUQK5.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +44 -1160
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/{node/testing/index.cjs → browser/playwright/index.mjs} +26 -33
  7. package/dist/lib/{node/testing/index.cjs.map → browser/playwright/index.mjs.map} +3 -3
  8. package/dist/lib/browser/testing/index.mjs +25 -51
  9. package/dist/lib/browser/testing/index.mjs.map +4 -4
  10. package/dist/lib/node-esm/chunk-HE3BRF7A.mjs +1377 -0
  11. package/dist/lib/node-esm/chunk-HE3BRF7A.mjs.map +7 -0
  12. package/dist/lib/node-esm/index.mjs +44 -1161
  13. package/dist/lib/node-esm/index.mjs.map +4 -4
  14. package/dist/lib/node-esm/meta.json +1 -1
  15. package/dist/lib/node-esm/playwright/index.mjs +76 -0
  16. package/dist/lib/node-esm/playwright/index.mjs.map +7 -0
  17. package/dist/lib/node-esm/testing/index.mjs +24 -51
  18. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  19. package/dist/types/src/components/Image/Image.d.ts +11 -0
  20. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  21. package/dist/types/src/components/Image/Image.stories.d.ts +31 -0
  22. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  23. package/dist/types/src/components/Image/index.d.ts +2 -0
  24. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  25. package/dist/types/src/components/Stack/Stack.d.ts +9 -2
  26. package/dist/types/src/components/Stack/Stack.d.ts.map +1 -1
  27. package/dist/types/src/components/Stack/Stack.stories.d.ts +12 -2
  28. package/dist/types/src/components/Stack/Stack.stories.d.ts.map +1 -1
  29. package/dist/types/src/components/StackContext.d.ts +2 -1
  30. package/dist/types/src/components/StackContext.d.ts.map +1 -1
  31. package/dist/types/src/components/StackItem/StackItem.d.ts +4 -4
  32. package/dist/types/src/components/StackItem/StackItem.d.ts.map +1 -1
  33. package/dist/types/src/components/StackItem/StackItem.stories.d.ts +13 -4
  34. package/dist/types/src/components/StackItem/StackItem.stories.d.ts.map +1 -1
  35. package/dist/types/src/components/StackItem/StackItemContent.d.ts +2 -2
  36. package/dist/types/src/components/StackItem/StackItemContent.d.ts.map +1 -1
  37. package/dist/types/src/components/StackItem/StackItemHeading.d.ts +1 -1
  38. package/dist/types/src/components/StackItem/StackItemHeading.d.ts.map +1 -1
  39. package/dist/types/src/components/StackItem/StackItemResizeHandle.d.ts.map +1 -1
  40. package/dist/types/src/components/StackItem/StackItemSigil.d.ts.map +1 -1
  41. package/dist/types/src/components/index.d.ts +2 -1
  42. package/dist/types/src/components/index.d.ts.map +1 -1
  43. package/dist/types/src/exemplars/Card/Card.d.ts +7 -11
  44. package/dist/types/src/exemplars/Card/Card.d.ts.map +1 -1
  45. package/dist/types/src/exemplars/Card/Card.stories.d.ts +44 -0
  46. package/dist/types/src/exemplars/Card/Card.stories.d.ts.map +1 -0
  47. package/dist/types/src/exemplars/Card/fragments.d.ts +3 -3
  48. package/dist/types/src/exemplars/Card/fragments.d.ts.map +1 -1
  49. package/dist/types/src/exemplars/CardStack/CardStack.d.ts +7 -1
  50. package/dist/types/src/exemplars/CardStack/CardStack.d.ts.map +1 -1
  51. package/dist/types/src/exemplars/CardStack/CardStack.stories.d.ts +13 -0
  52. package/dist/types/src/exemplars/CardStack/CardStack.stories.d.ts.map +1 -0
  53. package/dist/types/src/hooks/useStackDropForElements.d.ts +1 -1
  54. package/dist/types/src/hooks/useStackDropForElements.d.ts.map +1 -1
  55. package/dist/types/src/index.d.ts +1 -1
  56. package/dist/types/src/index.d.ts.map +1 -1
  57. package/dist/types/src/playwright/index.d.ts +2 -0
  58. package/dist/types/src/playwright/index.d.ts.map +1 -0
  59. package/dist/types/src/playwright/playwright.config.d.ts +3 -0
  60. package/dist/types/src/playwright/playwright.config.d.ts.map +1 -0
  61. package/dist/types/src/playwright/stack-manager.d.ts.map +1 -0
  62. package/dist/types/src/testing/CardContainer.d.ts +6 -0
  63. package/dist/types/src/testing/CardContainer.d.ts.map +1 -0
  64. package/dist/types/src/testing/index.d.ts +1 -1
  65. package/dist/types/src/translations.d.ts +13 -14
  66. package/dist/types/src/translations.d.ts.map +1 -1
  67. package/dist/types/tsconfig.tsbuildinfo +1 -1
  68. package/package.json +30 -26
  69. package/src/components/Image/Image.stories.tsx +58 -0
  70. package/src/components/Image/Image.tsx +137 -0
  71. package/src/components/Image/index.ts +5 -0
  72. package/src/components/Stack/Stack.stories.tsx +7 -6
  73. package/src/components/Stack/Stack.tsx +160 -18
  74. package/src/components/StackContext.tsx +2 -1
  75. package/src/components/StackItem/StackItem.stories.tsx +15 -11
  76. package/src/components/StackItem/StackItem.tsx +15 -14
  77. package/src/components/StackItem/StackItemContent.tsx +4 -3
  78. package/src/components/StackItem/StackItemHeading.tsx +3 -3
  79. package/src/components/StackItem/StackItemResizeHandle.tsx +2 -1
  80. package/src/components/StackItem/StackItemSigil.tsx +2 -1
  81. package/src/components/index.ts +2 -1
  82. package/src/exemplars/Card/Card.stories.tsx +88 -0
  83. package/src/exemplars/Card/Card.tsx +42 -38
  84. package/src/exemplars/Card/CardDragPreview.tsx +2 -2
  85. package/src/exemplars/Card/fragments.ts +3 -4
  86. package/src/exemplars/CardStack/CardStack.stories.tsx +172 -0
  87. package/src/exemplars/CardStack/CardStack.tsx +19 -2
  88. package/src/hooks/useStackDropForElements.ts +5 -2
  89. package/src/index.ts +3 -4
  90. package/src/playwright/index.ts +5 -0
  91. package/src/playwright/playwright.config.ts +17 -0
  92. package/src/playwright/smoke.spec.ts +7 -5
  93. package/src/testing/CardContainer.tsx +37 -0
  94. package/src/testing/index.ts +1 -1
  95. package/src/translations.ts +5 -3
  96. package/dist/lib/node/index.cjs +0 -1220
  97. package/dist/lib/node/index.cjs.map +0 -7
  98. package/dist/lib/node/meta.json +0 -1
  99. package/dist/types/src/exemplars/Card/Card.stories-todo.d.ts +0 -1
  100. package/dist/types/src/exemplars/Card/Card.stories-todo.d.ts.map +0 -1
  101. package/dist/types/src/exemplars/CardStack/CardStack.stories-todo.d.ts +0 -1
  102. package/dist/types/src/exemplars/CardStack/CardStack.stories-todo.d.ts.map +0 -1
  103. package/dist/types/src/testing/stack-manager.d.ts.map +0 -1
  104. package/src/exemplars/Card/Card.stories-todo.tsx +0 -135
  105. package/src/exemplars/CardStack/CardStack.stories-todo.tsx +0 -80
  106. package/src/playwright/playwright.config.cts +0 -18
  107. /package/dist/types/src/{testing → playwright}/stack-manager.d.ts +0 -0
  108. /package/src/{testing → playwright}/stack-manager.ts +0 -0
@@ -1,1188 +1,70 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
-
3
- // packages/ui/react-ui-stack/src/components/Stack/Stack.tsx
4
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
5
- import { useArrowNavigationGroup } from "@fluentui/react-tabster";
6
- import { composeRefs } from "@radix-ui/react-compose-refs";
7
- import React, { Children, forwardRef, useState as useState2, useMemo, useCallback, useEffect } from "react";
8
- import { ListItem } from "@dxos/react-ui";
9
- import { mx } from "@dxos/react-ui-theme";
10
-
11
- // packages/ui/react-ui-stack/src/hooks/useStackDropForElements.ts
12
- import { combine } from "@atlaskit/pragmatic-drag-and-drop/combine";
13
- import { dropTargetForElements } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
14
- import { autoScrollForElements } from "@atlaskit/pragmatic-drag-and-drop-auto-scroll/element";
15
- import { attachClosestEdge, extractClosestEdge } from "@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge";
16
- import { useLayoutEffect, useState } from "react";
17
- var useStackDropForElements = ({ id, element, scrollElement = element, selfDroppable, orientation, onRearrange }) => {
18
- const [dropping, setDropping] = useState(false);
19
- useLayoutEffect(() => {
20
- if (!element || !selfDroppable) {
21
- return;
22
- }
23
- const acceptSourceType = orientation === "horizontal" ? "column" : "card";
24
- return combine(dropTargetForElements({
25
- element,
26
- getData: ({ input, element: element2 }) => {
27
- return attachClosestEdge({
28
- id,
29
- type: orientation === "horizontal" ? "card" : "column"
30
- }, {
31
- input,
32
- element: element2,
33
- allowedEdges: [
34
- orientation === "horizontal" ? "left" : "top"
35
- ]
36
- });
37
- },
38
- onDragEnter: ({ source }) => {
39
- if (source.data.type === acceptSourceType) {
40
- setDropping(true);
41
- }
42
- },
43
- onDrag: ({ source }) => {
44
- if (source.data.type === acceptSourceType) {
45
- setDropping(true);
46
- }
47
- },
48
- onDragLeave: () => {
49
- return setDropping(false);
50
- },
51
- onDrop: ({ self, source }) => {
52
- setDropping(false);
53
- if (source.data.type === acceptSourceType && selfDroppable && onRearrange) {
54
- onRearrange(source.data, self.data, extractClosestEdge(self.data));
55
- }
56
- }
57
- }), autoScrollForElements({
58
- element: scrollElement,
59
- getAllowedAxis: () => orientation
60
- }));
61
- }, [
62
- element,
63
- scrollElement,
64
- selfDroppable,
65
- orientation,
66
- id,
67
- onRearrange
68
- ]);
69
- return {
70
- dropping
71
- };
72
- };
73
-
74
- // packages/ui/react-ui-stack/src/components/StackContext.tsx
75
- import { createContext, useContext } from "react";
76
- var StackContext = /* @__PURE__ */ createContext({
77
- orientation: "vertical",
78
- rail: true,
79
- size: "intrinsic"
80
- });
81
- var useStack = () => useContext(StackContext);
82
- var idle = {
83
- type: "idle"
84
- };
85
- var StackItemContext = /* @__PURE__ */ createContext({
86
- selfDragHandleRef: () => {
87
- },
88
- size: "min-content",
89
- setSize: () => {
90
- },
91
- state: idle,
92
- setState: () => {
93
- }
94
- });
95
- var useStackItem = () => useContext(StackItemContext);
96
-
97
- // packages/ui/react-ui-stack/src/components/Stack/Stack.tsx
98
- var railGridHorizontal = "grid-rows-[[rail-start]_var(--rail-size)_[content-start]_1fr_[content-end]]";
99
- var railGridVertical = "grid-cols-[[rail-start]_var(--rail-size)_[content-start]_1fr_[content-end]]";
100
- var railGridHorizontalContainFitContent = "grid-rows-[[rail-start]_var(--rail-size)_[content-start]_fit-content(calc(100%-var(--rail-size)*2+2px))_[content-end]]";
101
- var railGridVerticalContainFitContent = "grid-cols-[[rail-start]_var(--rail-size)_[content-start]_fit-content(calc(100%-var(--rail-size)*2+2px))_[content-end]]";
102
- var autoScrollRootAttributes = {
103
- "data-drag-autoscroll": "idle"
104
- };
105
- var Stack = /* @__PURE__ */ forwardRef(({ children, classNames, style, orientation = "vertical", rail = true, size = "intrinsic", onRearrange, itemsCount = Children.count(children), getDropElement, separatorOnScroll, ...props }, forwardedRef) => {
106
- var _effect = _useSignals();
107
- try {
108
- const [stackElement, stackRef] = useState2(null);
109
- const composedItemRef = composeRefs(stackRef, forwardedRef);
110
- const arrowNavigationAttrs = useArrowNavigationGroup({
111
- axis: orientation
112
- });
113
- const styles = {
114
- [orientation === "horizontal" ? "gridTemplateColumns" : "gridTemplateRows"]: `repeat(${itemsCount}, min-content) [tabster-dummies] 0`,
115
- ...style
116
- };
117
- const selfDroppable = !!(itemsCount < 1 && onRearrange && props.id);
118
- const { dropping } = useStackDropForElements({
119
- id: props.id,
120
- element: getDropElement && stackElement ? getDropElement(stackElement) : stackElement,
121
- scrollElement: stackElement,
122
- selfDroppable,
123
- orientation,
124
- onRearrange
125
- });
126
- const handleScroll = useCallback(() => {
127
- if (stackElement && Number.isFinite(separatorOnScroll)) {
128
- const scrollPosition = orientation === "horizontal" ? stackElement.scrollLeft : stackElement.scrollTop;
129
- const scrollSize = orientation === "horizontal" ? stackElement.scrollWidth : stackElement.scrollHeight;
130
- const clientSize = orientation === "horizontal" ? stackElement.clientWidth : stackElement.clientHeight;
131
- const separatorHost = stackElement.closest("[data-scroll-separator]");
132
- if (separatorHost) {
133
- separatorHost.setAttribute("data-scroll-separator", String(scrollPosition > separatorOnScroll));
134
- separatorHost.setAttribute("data-scroll-separator-end", String(scrollSize - (scrollPosition + clientSize) > separatorOnScroll));
135
- }
136
- }
137
- }, [
138
- stackElement,
139
- separatorOnScroll,
140
- orientation
141
- ]);
142
- const gridClasses = useMemo(() => {
143
- if (!rail) {
144
- return orientation === "horizontal" ? "grid-rows-1 pli-1" : "grid-cols-1 plb-1";
145
- }
146
- if (orientation === "horizontal") {
147
- return size === "contain-fit-content" ? railGridHorizontalContainFitContent : railGridHorizontal;
148
- } else {
149
- return size === "contain-fit-content" ? railGridVerticalContainFitContent : railGridVertical;
150
- }
151
- }, [
152
- rail,
153
- orientation,
154
- size
155
- ]);
156
- useEffect(() => {
157
- if (!(stackElement && Number.isFinite(separatorOnScroll))) {
158
- return;
159
- }
160
- const observer = new MutationObserver(() => {
161
- handleScroll();
162
- });
163
- observer.observe(stackElement, {
164
- childList: true,
165
- subtree: true
166
- });
167
- return () => {
168
- observer.disconnect();
169
- };
170
- }, [
171
- stackElement,
172
- handleScroll
173
- ]);
174
- return /* @__PURE__ */ React.createElement(StackContext.Provider, {
175
- value: {
176
- orientation,
177
- rail,
178
- size,
179
- onRearrange
180
- }
181
- }, /* @__PURE__ */ React.createElement("div", {
182
- ...props,
183
- ...arrowNavigationAttrs,
184
- className: mx("grid relative", gridClasses, (size === "contain" || size === "contain-fit-content") && (orientation === "horizontal" ? "overflow-x-auto min-bs-0 max-bs-full bs-full" : "overflow-y-auto min-is-0 max-is-full is-full"), classNames),
185
- "data-rail": rail,
186
- "aria-orientation": orientation,
187
- style: styles,
188
- ref: composedItemRef,
189
- ...Number.isFinite(separatorOnScroll) && {
190
- onScroll: handleScroll
191
- }
192
- }, children, selfDroppable && dropping && /* @__PURE__ */ React.createElement(ListItem.DropIndicator, {
193
- lineInset: 8,
194
- terminalInset: -8,
195
- gap: -8,
196
- edge: orientation === "horizontal" ? "left" : "top"
197
- })));
198
- } finally {
199
- _effect.f();
200
- }
201
- });
202
-
203
- // packages/ui/react-ui-stack/src/components/StackItem/StackItem.tsx
204
- import { useSignals as _useSignals8 } from "@preact-signals/safe-react/tracking";
205
- import { combine as combine2 } from "@atlaskit/pragmatic-drag-and-drop/combine";
206
- import { draggable, dropTargetForElements as dropTargetForElements2 } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
207
- import { preserveOffsetOnSource } from "@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source";
208
- import { setCustomNativeDragPreview } from "@atlaskit/pragmatic-drag-and-drop/element/set-custom-native-drag-preview";
209
- import { attachClosestEdge as attachClosestEdge2, extractClosestEdge as extractClosestEdge2 } from "@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge";
210
- import { useFocusableGroup as useFocusableGroup2 } from "@fluentui/react-tabster";
211
- import { composeRefs as composeRefs2 } from "@radix-ui/react-compose-refs";
212
- import React8, { forwardRef as forwardRef5, useLayoutEffect as useLayoutEffect2, useState as useState4, useCallback as useCallback2, useMemo as useMemo3 } from "react";
213
- import { createPortal } from "react-dom";
214
- import { ListItem as ListItem2 } from "@dxos/react-ui";
215
- import { resizeAttributes, sizeStyle } from "@dxos/react-ui-dnd";
216
- import { mx as mx5 } from "@dxos/react-ui-theme";
217
-
218
- // packages/ui/react-ui-stack/src/components/StackItem/StackItemContent.tsx
219
- import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
220
- import React2, { forwardRef as forwardRef2, useMemo as useMemo2 } from "react";
221
- import { mx as mx2 } from "@dxos/react-ui-theme";
222
- var StackItemContent = /* @__PURE__ */ forwardRef2(({ children, toolbar, statusbar, layoutManaged, classNames, size = "intrinsic", ...props }, forwardedRef) => {
223
- var _effect = _useSignals2();
224
- try {
225
- const { size: stackItemSize } = useStack();
226
- const { role } = useStackItem();
227
- const style = useMemo2(() => layoutManaged ? {} : {
228
- gridTemplateRows: [
229
- ...toolbar ? [
230
- role === "section" ? "calc(var(--toolbar-size) - 1px)" : "var(--toolbar-size)"
231
- ] : [],
232
- "1fr",
233
- ...statusbar ? [
234
- "var(--statusbar-size)"
235
- ] : []
236
- ].join(" ")
237
- }, [
238
- toolbar,
239
- statusbar,
240
- layoutManaged
241
- ]);
242
- return /* @__PURE__ */ React2.createElement("div", {
243
- role: "none",
244
- ...props,
245
- className: mx2("group grid grid-cols-[100%]", stackItemSize === "contain" && "min-bs-0 overflow-hidden", size === "video" ? "aspect-video" : size === "square" && "aspect-square", toolbar && "[&_.dx-toolbar]:relative [&_.dx-toolbar]:border-be [&_.dx-toolbar]:border-subduedSeparator", role === "section" && toolbar && "[&_.dx-toolbar]:sticky [&_.dx-toolbar]:z-[1] [&_.dx-toolbar]:block-start-0 [&_.dx-toolbar]:-mbe-px [&_.dx-toolbar]:min-is-0", classNames),
246
- style,
247
- "data-popover-collision-boundary": true,
248
- ref: forwardedRef
249
- }, children);
250
- } finally {
251
- _effect.f();
252
- }
253
- });
254
-
255
- // packages/ui/react-ui-stack/src/components/StackItem/StackItemDragHandle.tsx
256
- import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
257
- import { Slot } from "@radix-ui/react-slot";
258
- import React3 from "react";
259
- var StackItemDragHandle = ({ asChild, children }) => {
260
- var _effect = _useSignals3();
261
- try {
262
- const { selfDragHandleRef } = useStackItem();
263
- const Root = asChild ? Slot : "div";
264
- return /* @__PURE__ */ React3.createElement(Root, {
265
- ref: selfDragHandleRef,
266
- role: "button"
267
- }, children);
268
- } finally {
269
- _effect.f();
270
- }
271
- };
272
-
273
- // packages/ui/react-ui-stack/src/components/StackItem/StackItemHeading.tsx
274
- import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
275
- import { useFocusableGroup } from "@fluentui/react-tabster";
276
- import { Slot as Slot2 } from "@radix-ui/react-slot";
277
- import React4, { forwardRef as forwardRef3 } from "react";
278
- import { useAttention } from "@dxos/react-ui-attention";
279
- import { mx as mx3 } from "@dxos/react-ui-theme";
280
- var StackItemHeading = ({ children, classNames, asChild, separateOnScroll, ...props }) => {
281
- var _effect = _useSignals4();
282
- try {
283
- const { orientation } = useStack();
284
- const focusableGroupAttrs = useFocusableGroup({
285
- tabBehavior: "limited"
286
- });
287
- const Root = asChild ? Slot2 : "div";
288
- return /* @__PURE__ */ React4.createElement(Root, {
289
- role: "heading",
290
- ...props,
291
- tabIndex: 0,
292
- ...focusableGroupAttrs,
293
- className: mx3("flex items-center dx-focus-ring-inset-over-all relative !border-is-0 bg-headerSurface", separateOnScroll ? 'border-transparent [[data-scroll-separator="true"]_&]:border-subduedSeparator' : "border-subduedSeparator", orientation === "horizontal" ? "bs-[--rail-size]" : "is-[--rail-size] flex-col", orientation === "horizontal" ? "border-be" : "border-ie", classNames)
294
- }, children);
295
- } finally {
296
- _effect.f();
297
- }
298
- };
299
- var StackItemHeadingStickyContent = ({ children }) => {
300
- var _effect = _useSignals4();
301
- try {
302
- return /* @__PURE__ */ React4.createElement("div", {
303
- role: "none",
304
- className: "sticky block-start-0 bg-[--sticky-bg] p-1 is-full"
305
- }, children);
306
- } finally {
307
- _effect.f();
308
- }
309
- };
310
- var StackItemHeadingLabel = /* @__PURE__ */ forwardRef3(({ attendableId, related, classNames, ...props }, forwardedRef) => {
311
- var _effect = _useSignals4();
312
- try {
313
- const { hasAttention, isAncestor, isRelated } = useAttention(attendableId);
314
- return /* @__PURE__ */ React4.createElement("h1", {
315
- ...props,
316
- "data-attention": (related && isRelated || hasAttention || isAncestor).toString(),
317
- className: mx3("pli-1 min-is-0 is-0 grow truncate font-medium text-baseText data-[attention=true]:text-accentText self-center", classNames),
318
- ref: forwardedRef
319
- });
320
- } finally {
321
- _effect.f();
322
- }
323
- });
324
-
325
- // packages/ui/react-ui-stack/src/components/StackItem/StackItemResizeHandle.tsx
326
- import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
327
- import React5 from "react";
328
- import { ResizeHandle } from "@dxos/react-ui-dnd";
329
- var MIN_WIDTH = 20;
330
- var MIN_HEIGHT = 3;
331
- var StackItemResizeHandle = () => {
332
- var _effect = _useSignals5();
333
- try {
334
- const { orientation } = useStack();
335
- const { setSize, size } = useStackItem();
336
- return /* @__PURE__ */ React5.createElement(ResizeHandle, {
337
- side: orientation === "horizontal" ? "inline-end" : "block-end",
338
- fallbackSize: DEFAULT_EXTRINSIC_SIZE,
339
- minSize: orientation === "horizontal" ? MIN_WIDTH : MIN_HEIGHT,
340
- size,
341
- onSizeChange: setSize
342
- });
343
- } finally {
344
- _effect.f();
345
- }
346
- };
347
-
348
- // packages/ui/react-ui-stack/src/components/StackItem/StackItemSigil.tsx
349
- import { useSignals as _useSignals7 } from "@preact-signals/safe-react/tracking";
350
- import React7, { Fragment, forwardRef as forwardRef4, useState as useState3 } from "react";
351
- import { keySymbols } from "@dxos/keyboard";
352
- import { Button, DropdownMenu, Icon, toLocalizedString, useTranslation } from "@dxos/react-ui";
353
- import { useAttention as useAttention2 } from "@dxos/react-ui-attention";
354
- import { descriptionText, mx as mx4 } from "@dxos/react-ui-theme";
355
- import { getHostPlatform } from "@dxos/util";
356
-
357
- // packages/ui/react-ui-stack/src/components/StackItem/MenuSignifier.tsx
358
- import { useSignals as _useSignals6 } from "@preact-signals/safe-react/tracking";
359
- import React6 from "react";
360
- var MenuSignifierHorizontal = () => {
361
- var _effect = _useSignals6();
362
- try {
363
- return /* @__PURE__ */ React6.createElement("svg", {
364
- className: "absolute block-end-[7px]",
365
- width: 20,
366
- height: 2,
367
- viewBox: "0 0 20 2",
368
- stroke: "currentColor",
369
- opacity: 0.5
370
- }, /* @__PURE__ */ React6.createElement("line", {
371
- x1: 0.5,
372
- y1: 0.75,
373
- x2: 19,
374
- y2: 0.75,
375
- strokeWidth: 1.25,
376
- strokeLinecap: "round",
377
- strokeDasharray: "6 20",
378
- strokeDashoffset: "-6.5"
379
- }));
380
- } finally {
381
- _effect.f();
382
- }
383
- };
384
-
385
- // packages/ui/react-ui-stack/src/translations.ts
386
- var translationKey = "stack";
387
- var translations_default = [
388
- {
389
- "en-US": {
390
- [translationKey]: {
391
- "resize label": "Drag to resize",
392
- "drag handle label": "Drag to rearrange",
393
- "pin start label": "Pin to the left sidebar",
394
- "pin end label": "Pin to the right sidebar",
395
- "increment start label": "Move to the left",
396
- "increment end label": "Move to the right",
397
- "close label": "Close",
398
- "minify label": "Minify"
399
- }
400
- }
401
- }
402
- ];
403
-
404
- // packages/ui/react-ui-stack/src/components/StackItem/StackItemSigil.tsx
405
- var StackItemSigilButton = /* @__PURE__ */ forwardRef4(({ attendableId, classNames, related, isMenu = true, children, ...props }, forwardedRef) => {
406
- var _effect = _useSignals7();
407
- try {
408
- const { hasAttention, isAncestor, isRelated } = useAttention2(attendableId);
409
- const variant = related && isRelated || hasAttention || isAncestor ? "primary" : "ghost";
410
- return /* @__PURE__ */ React7.createElement(Button, {
411
- ...props,
412
- variant,
413
- classNames: [
414
- "shrink-0 pli-0 min-bs-0 is-[--rail-action] bs-[--rail-action] relative app-no-drag",
415
- classNames
416
- ],
417
- ref: forwardedRef
418
- }, isMenu && /* @__PURE__ */ React7.createElement(MenuSignifierHorizontal, null), children);
419
- } finally {
420
- _effect.f();
421
- }
422
- });
423
- var StackItemSigil = /* @__PURE__ */ forwardRef4(({ actions: actionGroups, onAction, triggerLabel, attendableId, icon, related, children }, forwardedRef) => {
424
- var _effect = _useSignals7();
425
- try {
426
- const { t } = useTranslation(translationKey);
427
- const [optionsMenuOpen, setOptionsMenuOpen] = useState3(false);
428
- const hasActions = actionGroups && actionGroups.length > 0;
429
- const button = /* @__PURE__ */ React7.createElement(StackItemSigilButton, {
430
- attendableId,
431
- related,
432
- isMenu: hasActions,
433
- // TODO(wittjosiah): Better disabling of interactive styles when no action are available.
434
- // Remove underscore icon when no actions are available?
435
- classNames: !hasActions && "cursor-default"
436
- }, /* @__PURE__ */ React7.createElement("span", {
437
- className: "sr-only"
438
- }, triggerLabel), /* @__PURE__ */ React7.createElement(Icon, {
439
- icon,
440
- size: 5
441
- }));
442
- if (!hasActions) {
443
- return button;
444
- }
445
- return /* @__PURE__ */ React7.createElement(DropdownMenu.Root, {
446
- open: optionsMenuOpen,
447
- onOpenChange: setOptionsMenuOpen
448
- }, /* @__PURE__ */ React7.createElement(DropdownMenu.Trigger, {
449
- asChild: true,
450
- ref: forwardedRef
451
- }, button), /* @__PURE__ */ React7.createElement(DropdownMenu.Portal, null, /* @__PURE__ */ React7.createElement(DropdownMenu.Content, {
452
- classNames: "z-[31]"
453
- }, /* @__PURE__ */ React7.createElement(DropdownMenu.Viewport, null, actionGroups?.map((actions, index) => {
454
- const separator = index > 0 ? /* @__PURE__ */ React7.createElement(DropdownMenu.Separator, null) : null;
455
- return /* @__PURE__ */ React7.createElement(Fragment, {
456
- key: index
457
- }, separator, actions.map((action) => {
458
- const shortcut = typeof action.properties.keyBinding === "string" ? action.properties.keyBinding : action.properties.keyBinding?.[getHostPlatform()];
459
- const menuItemType = action.properties.menuItemType;
460
- const Root = menuItemType === "toggle" ? DropdownMenu.CheckboxItem : DropdownMenu.Item;
461
- return /* @__PURE__ */ React7.createElement(Root, {
462
- key: action.id,
463
- onClick: (event) => {
464
- if (action.properties.disabled) {
465
- return;
466
- }
467
- event.stopPropagation();
468
- setOptionsMenuOpen(false);
469
- onAction?.(action);
470
- },
471
- classNames: "gap-2",
472
- disabled: action.properties.disabled,
473
- checked: menuItemType === "toggle" ? action.properties.isChecked : void 0,
474
- ...action.properties?.testId && {
475
- "data-testid": action.properties.testId
476
- }
477
- }, /* @__PURE__ */ React7.createElement(Icon, {
478
- icon: action.properties.icon ?? "ph--placeholder--regular",
479
- size: 4
480
- }), /* @__PURE__ */ React7.createElement("span", {
481
- className: "grow truncate"
482
- }, toLocalizedString(action.properties.label ?? "", t)), menuItemType === "toggle" && /* @__PURE__ */ React7.createElement(DropdownMenu.ItemIndicator, {
483
- asChild: true
484
- }, /* @__PURE__ */ React7.createElement(Icon, {
485
- icon: "ph--check--regular",
486
- size: 4
487
- })), shortcut && /* @__PURE__ */ React7.createElement("span", {
488
- className: mx4("shrink-0", descriptionText)
489
- }, keySymbols(shortcut).join("")));
490
- }));
491
- }), children), /* @__PURE__ */ React7.createElement(DropdownMenu.Arrow, null))));
492
- } finally {
493
- _effect.f();
494
- }
495
- });
496
-
497
- // packages/ui/react-ui-stack/src/components/StackItem/StackItem.tsx
498
- var DEFAULT_HORIZONTAL_SIZE = 48;
499
- var DEFAULT_VERTICAL_SIZE = "min-content";
500
- var DEFAULT_EXTRINSIC_SIZE = DEFAULT_HORIZONTAL_SIZE;
501
- var StackItemRoot = /* @__PURE__ */ forwardRef5(({ item, children, classNames, size: propsSize, onSizeChange, role, order, prevSiblingId, nextSiblingId, style, disableRearrange, focusIndicatorVariant = "over-all", ...props }, forwardedRef) => {
502
- var _effect = _useSignals8();
503
- try {
504
- const [itemElement, itemRef] = useState4(null);
505
- const [selfDragHandleElement, selfDragHandleRef] = useState4(null);
506
- const [closestEdge, setEdge] = useState4(null);
507
- const [sourceId, setSourceId] = useState4(null);
508
- const [dragState, setDragState] = useState4(idle);
509
- const { orientation, rail, onRearrange } = useStack();
510
- const [size = orientation === "horizontal" ? DEFAULT_HORIZONTAL_SIZE : DEFAULT_VERTICAL_SIZE, setInternalSize] = useState4(propsSize);
511
- const Root = role ?? "div";
512
- const composedItemRef = composeRefs2(itemRef, forwardedRef);
513
- const setSize = useCallback2((nextSize, commit) => {
514
- setInternalSize(nextSize);
515
- if (commit) {
516
- onSizeChange?.(nextSize);
517
- }
518
- }, [
519
- onSizeChange
520
- ]);
521
- const type = orientation === "horizontal" ? "column" : "card";
522
- useLayoutEffect2(() => {
523
- if (!itemElement || !onRearrange || disableRearrange) {
524
- return;
525
- }
526
- return combine2(draggable({
527
- element: itemElement,
528
- ...selfDragHandleElement && {
529
- dragHandle: selfDragHandleElement
530
- },
531
- getInitialData: () => ({
532
- id: item.id,
533
- type
534
- }),
535
- onGenerateDragPreview: ({ nativeSetDragImage, source, location }) => {
536
- document.body.setAttribute("data-drag-preview", "true");
537
- const offsetFn = preserveOffsetOnSource({
538
- element: source.element,
539
- input: location.current.input
540
- });
541
- const rect = source.element.getBoundingClientRect();
542
- setCustomNativeDragPreview({
543
- nativeSetDragImage,
544
- getOffset: ({ container }) => {
545
- return offsetFn({
546
- container
547
- });
548
- },
549
- render: ({ container }) => {
550
- container.style.width = rect.width + "px";
551
- setDragState({
552
- type: "preview",
553
- container,
554
- item
555
- });
556
- return () => {
557
- };
558
- }
559
- });
560
- },
561
- onDragStart: () => {
562
- document.body.removeAttribute("data-drag-preview");
563
- itemElement?.closest("[data-drag-autoscroll]")?.setAttribute("data-drag-autoscroll", "active");
564
- setDragState({
565
- type: "is-dragging",
566
- item
567
- });
568
- },
569
- onDrop: () => {
570
- itemElement?.closest("[data-drag-autoscroll]")?.setAttribute("data-drag-autoscroll", "idle");
571
- setDragState(idle);
572
- }
573
- }), dropTargetForElements2({
574
- element: itemElement,
575
- getData: ({ input, element }) => {
576
- return attachClosestEdge2({
577
- id: item.id,
578
- type
579
- }, {
580
- input,
581
- element,
582
- allowedEdges: orientation === "horizontal" ? [
583
- "left",
584
- "right"
585
- ] : [
586
- "top",
587
- "bottom"
588
- ]
589
- });
590
- },
591
- onDragEnter: ({ self, source }) => {
592
- if (source.data.type === self.data.type) {
593
- setEdge(extractClosestEdge2(self.data));
594
- setSourceId(source.data.id);
595
- }
596
- },
597
- onDrag: ({ self, source }) => {
598
- if (source.data.type === self.data.type) {
599
- setEdge(extractClosestEdge2(self.data));
600
- setSourceId(source.data.id);
601
- }
602
- },
603
- onDragLeave: () => {
604
- setEdge(null);
605
- setSourceId(null);
606
- },
607
- onDrop: ({ self, source }) => {
608
- setEdge(null);
609
- setSourceId(null);
610
- if (source.data.type === self.data.type) {
611
- onRearrange(source.data, self.data, extractClosestEdge2(self.data));
612
- }
613
- }
614
- }));
615
- }, [
616
- orientation,
617
- item,
618
- onRearrange,
619
- selfDragHandleElement,
620
- itemElement
621
- ]);
622
- const focusableGroupAttrs = useFocusableGroup2({
623
- tabBehavior: "limited"
624
- });
625
- const shouldShowDropIndicator = () => {
626
- if (!closestEdge || !sourceId) {
627
- return false;
628
- }
629
- if (sourceId === item.id) {
630
- return false;
631
- }
632
- const isTrailingEdgeOfPrevSibling = prevSiblingId !== void 0 && sourceId === prevSiblingId && (orientation === "horizontal" && closestEdge === "left" || orientation === "vertical" && closestEdge === "top");
633
- if (isTrailingEdgeOfPrevSibling) {
634
- return false;
635
- }
636
- const isLeadingEdgeOfNextSibling = nextSiblingId !== void 0 && sourceId === nextSiblingId && (orientation === "horizontal" && closestEdge === "right" || orientation === "vertical" && closestEdge === "bottom");
637
- if (isLeadingEdgeOfNextSibling) {
638
- return false;
639
- }
640
- return true;
641
- };
642
- const stackItemContextValue = useMemo3(() => ({
643
- selfDragHandleRef,
644
- size,
645
- setSize,
646
- state: dragState,
647
- setState: setDragState,
648
- role
649
- }), [
650
- selfDragHandleRef,
651
- size,
652
- setSize,
653
- dragState,
654
- setDragState,
655
- role
656
- ]);
657
- return /* @__PURE__ */ React8.createElement(StackItemContext.Provider, {
658
- value: stackItemContextValue
659
- }, /* @__PURE__ */ React8.createElement(Root, {
660
- ...props,
661
- tabIndex: 0,
662
- ...focusableGroupAttrs,
663
- className: mx5("group/stack-item grid relative", focusIndicatorVariant === "over-all" ? "dx-focus-ring-inset-over-all" : orientation === "horizontal" ? "dx-focus-ring-group-x" : "dx-focus-ring-group-y", orientation === "horizontal" ? "grid-rows-subgrid" : "grid-cols-subgrid", rail && (orientation === "horizontal" ? "row-span-2" : "col-span-2"), role === "section" && orientation !== "horizontal" && "border-be border-subduedSeparator", classNames),
664
- "data-dx-stack-item": true,
665
- ...resizeAttributes,
666
- style: {
667
- ...sizeStyle(size, orientation),
668
- ...Number.isFinite(order) && {
669
- [orientation === "horizontal" ? "gridColumn" : "gridRow"]: `${order}`
670
- },
671
- ...style
672
- },
673
- ref: composedItemRef
674
- }, children, shouldShowDropIndicator() && closestEdge && /* @__PURE__ */ React8.createElement(ListItem2.DropIndicator, {
675
- lineInset: 8,
676
- terminalInset: -8,
677
- edge: closestEdge
678
- })));
679
- } finally {
680
- _effect.f();
681
- }
682
- });
683
- var StackItemDragPreview = ({ children }) => {
684
- const { state } = useStackItem();
685
- return state?.type === "preview" ? /* @__PURE__ */ createPortal(children({
686
- item: state.item
687
- }), state.container) : null;
688
- };
689
- var StackItem = {
690
- Root: StackItemRoot,
691
- Content: StackItemContent,
692
- Heading: StackItemHeading,
693
- HeadingLabel: StackItemHeadingLabel,
694
- HeadingStickyContent: StackItemHeadingStickyContent,
695
- ResizeHandle: StackItemResizeHandle,
696
- DragHandle: StackItemDragHandle,
697
- Sigil: StackItemSigil,
698
- SigilButton: StackItemSigilButton,
699
- DragPreview: StackItemDragPreview
700
- };
701
-
702
- // packages/ui/react-ui-stack/src/exemplars/Card/Card.tsx
703
- import { useSignals as _useSignals9 } from "@preact-signals/safe-react/tracking";
704
- import { Primitive } from "@radix-ui/react-primitive";
705
- import { Slot as Slot3 } from "@radix-ui/react-slot";
706
- import React9, { forwardRef as forwardRef6 } from "react";
707
- import { Icon as Icon2, IconButton, Toolbar, useTranslation as useTranslation2 } from "@dxos/react-ui";
708
- import { hoverableControls, mx as mx6 } from "@dxos/react-ui-theme";
709
-
710
- // packages/ui/react-ui-stack/src/exemplars/Card/fragments.ts
711
- var cardRoot = "contain-layout pli-2 plb-1 first-of-type:pbs-0 last-of-type:pbe-0";
712
- var cardContent = "rounded overflow-hidden bg-cardSurface border border-separator dark:border-subduedSeparator dx-focus-ring-group-y-indicator relative min-bs-[--rail-item] group/card";
713
- var cardSpacing = "pli-cardSpacingInline mlb-cardSpacingBlock";
714
- var labelSpacing = "mbs-inputSpacingBlock mbe-labelSpacingBlock";
715
- var cardDialogContent = "p-0 bs-content min-bs-[8rem] max-bs-full md:max-is-[32rem] overflow-hidden";
716
- var cardDialogHeader = "pli-cardSpacingInline mbs-cardSpacingBlock flex justify-between";
717
- var cardDialogOverflow = "overflow-y-auto min-bs-0 flex-1";
718
- var cardDialogPaddedOverflow = `${cardDialogOverflow} plb-cardSpacingBlock`;
719
- var cardDialogSearchListRoot = "pli-cardSpacingInline pbs-cardSpacingBlock [&>input]:mbe-0 min-bs-0 flex-1 flex flex-col";
720
- var cardText = cardSpacing;
721
- var cardHeading = "text-lg font-medium line-clamp-2";
722
- var cardChrome = "pli-[--dx-cardSpacingChrome] mlb-[--dx-cardSpacingChrome] [&_.dx-button]:text-start [&_.dx-button]:is-full";
723
-
724
- // packages/ui/react-ui-stack/src/exemplars/Card/Card.tsx
725
- var CardRoot = /* @__PURE__ */ forwardRef6(({ children, classNames, asChild, role = "none", ...props }, forwardedRef) => {
726
- var _effect = _useSignals9();
727
- try {
728
- const Root = asChild ? Slot3 : "div";
729
- const rootProps = asChild ? {
730
- classNames: [
731
- cardRoot,
732
- classNames
733
- ]
734
- } : {
735
- className: mx6(cardRoot, classNames),
736
- role
737
- };
738
- return /* @__PURE__ */ React9.createElement(Root, {
739
- ...props,
740
- ...rootProps,
741
- ref: forwardedRef
742
- }, children);
743
- } finally {
744
- _effect.f();
745
- }
746
- });
747
- var CardContent = /* @__PURE__ */ forwardRef6(({ children, classNames, asChild, role = "group", ...props }, forwardedRef) => {
748
- var _effect = _useSignals9();
749
- try {
750
- const Root = asChild ? Slot3 : "div";
751
- const rootProps = asChild ? {
752
- classNames: [
753
- cardContent,
754
- classNames
755
- ]
756
- } : {
757
- className: mx6(cardContent, classNames),
758
- role
759
- };
760
- return /* @__PURE__ */ React9.createElement(Root, {
761
- ...props,
762
- ...rootProps,
763
- ref: forwardedRef
764
- }, children);
765
- } finally {
766
- _effect.f();
767
- }
768
- });
769
- var CardConditionalContent = ({ role, children }) => {
770
- var _effect = _useSignals9();
771
- try {
772
- if ([
773
- "popover",
774
- "card--kanban"
775
- ].includes(role ?? "never")) {
776
- return /* @__PURE__ */ React9.createElement("div", {
777
- className: role === "popover" ? "popover-card-width" : role === "card--kanban" ? "contents" : ""
778
- }, children);
779
- } else {
780
- return /* @__PURE__ */ React9.createElement(CardContent, role === "card--document" && {
781
- classNames: [
782
- "mlb-[1em]",
783
- hoverableControls
784
- ]
785
- }, children);
786
- }
787
- } finally {
788
- _effect.f();
789
- }
790
- };
791
- var CardHeading = /* @__PURE__ */ forwardRef6(({ children, classNames, asChild, role = "heading", ...props }, forwardedRef) => {
792
- var _effect = _useSignals9();
793
- try {
794
- const Root = asChild ? Slot3 : "div";
795
- const rootProps = asChild ? {
796
- classNames: [
797
- cardHeading,
798
- cardText,
799
- classNames
800
- ]
801
- } : {
802
- className: mx6(cardHeading, cardText, classNames),
803
- role
804
- };
805
- return /* @__PURE__ */ React9.createElement(Root, {
806
- ...props,
807
- ...rootProps,
808
- ref: forwardedRef
809
- }, children);
810
- } finally {
811
- _effect.f();
812
- }
813
- });
814
- var CardToolbar = /* @__PURE__ */ forwardRef6(({ children, classNames, ...props }, forwardedRef) => {
815
- var _effect = _useSignals9();
816
- try {
817
- return /* @__PURE__ */ React9.createElement(Toolbar.Root, {
818
- ...props,
819
- classNames: [
820
- "bg-transparent",
821
- classNames
822
- ],
823
- ref: forwardedRef
824
- }, children);
825
- } finally {
826
- _effect.f();
827
- }
828
- });
829
- var CardToolbarIconButton = Toolbar.IconButton;
830
- var CardToolbarSeparator = Toolbar.Separator;
831
- var CardDragHandle = /* @__PURE__ */ forwardRef6(({ toolbarItem }, forwardedRef) => {
832
- var _effect = _useSignals9();
833
- try {
834
- const { t } = useTranslation2(translationKey);
835
- const Root = toolbarItem ? Toolbar.IconButton : IconButton;
836
- return /* @__PURE__ */ React9.createElement(Root, {
837
- iconOnly: true,
838
- icon: "ph--dots-six-vertical--regular",
839
- variant: "ghost",
840
- label: t("card drag handle label"),
841
- classNames: "pli-2",
842
- ref: forwardedRef
843
- });
844
- } finally {
845
- _effect.f();
846
- }
847
- });
848
- var CardDragPreview = StackItem.DragPreview;
849
- var CardMenu = Primitive.div;
850
- var CardPoster = (props) => {
851
- var _effect = _useSignals9();
852
- try {
853
- const aspect = props.aspect === "auto" ? "aspect-auto" : "aspect-video";
854
- if (props.image) {
855
- return /* @__PURE__ */ React9.createElement("img", {
856
- className: `dx-card__poster ${aspect} object-cover is-full bs-auto`,
857
- src: props.image,
858
- alt: props.alt
859
- });
860
- }
861
- if (props.icon) {
862
- return /* @__PURE__ */ React9.createElement("div", {
863
- role: "image",
864
- className: `dx-card__poster grid ${aspect} place-items-center bg-inputSurface text-subdued`,
865
- "aria-label": props.alt
866
- }, /* @__PURE__ */ React9.createElement(Icon2, {
867
- icon: props.icon,
868
- size: 10
869
- }));
870
- }
871
- } finally {
872
- _effect.f();
873
- }
874
- };
875
- var CardChrome = /* @__PURE__ */ forwardRef6(({ children, classNames, asChild, role = "none", ...props }, forwardedRef) => {
876
- var _effect = _useSignals9();
877
- try {
878
- const Root = asChild ? Slot3 : "div";
879
- const rootProps = asChild ? {
880
- classNames: [
881
- cardChrome,
882
- classNames
883
- ]
884
- } : {
885
- className: mx6(cardChrome, classNames),
886
- role
887
- };
888
- return /* @__PURE__ */ React9.createElement(Root, {
889
- ...props,
890
- ...rootProps,
891
- ref: forwardedRef
892
- }, children);
893
- } finally {
894
- _effect.f();
895
- }
896
- });
897
- var CardText = /* @__PURE__ */ forwardRef6(({ children, classNames, asChild, role = "none", ...props }, forwardedRef) => {
898
- var _effect = _useSignals9();
899
- try {
900
- const Root = asChild ? Slot3 : "p";
901
- const rootProps = asChild ? {
902
- classNames: [
903
- cardText,
904
- classNames
905
- ]
906
- } : {
907
- className: mx6(cardText, classNames),
908
- role
909
- };
910
- return /* @__PURE__ */ React9.createElement(Root, {
911
- ...props,
912
- ...rootProps,
913
- ref: forwardedRef
914
- }, children);
915
- } finally {
916
- _effect.f();
917
- }
918
- });
919
- var Card = {
920
- Root: CardRoot,
921
- Content: CardContent,
922
- Container: CardConditionalContent,
923
- Heading: CardHeading,
924
- Toolbar: CardToolbar,
925
- ToolbarIconButton: CardToolbarIconButton,
926
- ToolbarSeparator: CardToolbarSeparator,
927
- DragHandle: CardDragHandle,
928
- DragPreview: CardDragPreview,
929
- Menu: CardMenu,
930
- Poster: CardPoster,
931
- Chrome: CardChrome,
932
- Text: CardText
933
- };
934
-
935
- // packages/ui/react-ui-stack/src/exemplars/Card/CardDragPreview.tsx
936
- import { useSignals as _useSignals10 } from "@preact-signals/safe-react/tracking";
937
- import React10 from "react";
938
- import { mx as mx7 } from "@dxos/react-ui-theme";
939
- var CardDragPreviewRoot = ({ children }) => {
940
- var _effect = _useSignals10();
941
- try {
942
- return /* @__PURE__ */ React10.createElement("div", {
943
- className: "p-2"
944
- }, children);
945
- } finally {
946
- _effect.f();
947
- }
948
- };
949
- var CardDragPreviewContent = ({ children }) => {
950
- var _effect = _useSignals10();
951
- try {
952
- return /* @__PURE__ */ React10.createElement("div", {
953
- className: mx7(cardContent, "ring-focusLine ring-neutralFocusIndicator")
954
- }, children);
955
- } finally {
956
- _effect.f();
957
- }
958
- };
959
- var CardDragPreview2 = {
960
- Root: CardDragPreviewRoot,
961
- Content: CardDragPreviewContent
962
- };
963
-
964
- // packages/ui/react-ui-stack/src/exemplars/CardStack/CardStack.tsx
965
- import { useSignals as _useSignals11 } from "@preact-signals/safe-react/tracking";
966
- import { Slot as Slot4 } from "@radix-ui/react-slot";
967
- import React11, { forwardRef as forwardRef7 } from "react";
968
- import { mx as mx8 } from "@dxos/react-ui-theme";
969
- var CardStackStack = /* @__PURE__ */ forwardRef7(({ children, classNames, itemsCount = 0, ...props }, forwardedRef) => {
970
- var _effect = _useSignals11();
971
- try {
972
- return /* @__PURE__ */ React11.createElement(Stack, {
973
- orientation: "vertical",
974
- size: "contain",
975
- rail: false,
976
- classNames: (
977
- /* NOTE(thure): Do not let this element have zero intrinsic size, otherwise the drop indicator will not display. See #9035. */
978
- [
979
- "plb-1",
980
- itemsCount > 0 && "plb-2",
981
- classNames
982
- ]
983
- ),
984
- itemsCount,
985
- separatorOnScroll: 9,
986
- "data-density": "fine",
987
- ...props,
988
- ref: forwardedRef
989
- }, children);
990
- } finally {
991
- _effect.f();
992
- }
993
- });
994
- var CardStackDragHandle = Card.DragHandle;
995
- var cardStackHeading = "mli-2 order-first bg-transparent rounded-bs-md flex items-center";
996
- var CardStackHeading = /* @__PURE__ */ forwardRef7(({ children, classNames, asChild, role = "heading", ...props }, forwardedRef) => {
997
- var _effect = _useSignals11();
998
- try {
999
- const Root = asChild ? Slot4 : "div";
1000
- const rootProps = asChild ? {
1001
- classNames: [
1002
- cardStackHeading,
1003
- classNames
1004
- ]
1005
- } : {
1006
- className: mx8(cardStackHeading, classNames),
1007
- role
1008
- };
1009
- return /* @__PURE__ */ React11.createElement(Root, {
1010
- ...props,
1011
- ...rootProps,
1012
- ref: forwardedRef
1013
- }, children);
1014
- } finally {
1015
- _effect.f();
1016
- }
1017
- });
1018
- var cardStackFooter = 'plb-2 mli-2 border-bs border-transparent [[data-scroll-separator-end="true"]_&]:border-subduedSeparator';
1019
- var CardStackFooter = /* @__PURE__ */ forwardRef7(({ children, classNames, asChild, role = "none", ...props }, forwardedRef) => {
1020
- var _effect = _useSignals11();
1021
- try {
1022
- const Root = asChild ? Slot4 : "div";
1023
- const rootProps = asChild ? {
1024
- classNames: [
1025
- cardStackFooter,
1026
- classNames
1027
- ]
1028
- } : {
1029
- className: mx8(cardStackFooter, classNames),
1030
- role
1031
- };
1032
- return /* @__PURE__ */ React11.createElement(Root, {
1033
- ...props,
1034
- ...rootProps,
1035
- ref: forwardedRef
1036
- }, children);
1037
- } finally {
1038
- _effect.f();
1039
- }
1040
- });
1041
- var cardStackContent = [
1042
- "shrink min-bs-0 bg-baseSurface border border-separator rounded-md grid dx-focus-ring-group-x-indicator kanban-drop",
1043
- railGridHorizontalContainFitContent
1044
- ];
1045
- var CardStackContent = /* @__PURE__ */ forwardRef7(({ children, classNames, asChild, role = "none", ...props }, forwardedRef) => {
1046
- var _effect = _useSignals11();
1047
- try {
1048
- const Root = asChild ? Slot4 : "div";
1049
- const rootProps = asChild ? {
1050
- classNames: [
1051
- ...cardStackContent,
1052
- classNames
1053
- ]
1054
- } : {
1055
- className: mx8(...cardStackContent, classNames),
1056
- role
1057
- };
1058
- return /* @__PURE__ */ React11.createElement(Root, {
1059
- ...props,
1060
- ...rootProps,
1061
- "data-scroll-separator": "false",
1062
- ref: forwardedRef
1063
- }, children);
1064
- } finally {
1065
- _effect.f();
1066
- }
1067
- });
1068
- var cardStackRoot = "flex flex-col pli-2 plb-2";
1069
- var CardStackRoot = /* @__PURE__ */ forwardRef7(({ children, classNames, asChild, role = "none", ...props }, forwardedRef) => {
1070
- var _effect = _useSignals11();
1071
- try {
1072
- const Root = asChild ? Slot4 : "div";
1073
- const rootProps = asChild ? {
1074
- classNames: [
1075
- cardStackRoot,
1076
- classNames
1077
- ]
1078
- } : {
1079
- className: mx8(cardStackRoot, classNames),
1080
- role
1081
- };
1082
- return /* @__PURE__ */ React11.createElement(Root, {
1083
- ...props,
1084
- ...rootProps,
1085
- ref: forwardedRef
1086
- }, children);
1087
- } finally {
1088
- _effect.f();
1089
- }
1090
- });
1091
- var CardStack = {
1092
- Root: CardStackRoot,
1093
- Content: CardStackContent,
1094
- Stack: CardStackStack,
1095
- Heading: CardStackHeading,
1096
- Footer: CardStackFooter,
1097
- DragHandle: CardStackDragHandle
1098
- };
1099
-
1100
- // packages/ui/react-ui-stack/src/exemplars/CardStack/CardStackDragPreview.tsx
1101
- import { useSignals as _useSignals12 } from "@preact-signals/safe-react/tracking";
1102
- import React12 from "react";
1103
- import { IconButton as IconButton2, useTranslation as useTranslation3 } from "@dxos/react-ui";
1104
- import { mx as mx9 } from "@dxos/react-ui-theme";
1105
- var CardStackDragPreviewRoot = ({ children }) => {
1106
- var _effect = _useSignals12();
1107
- try {
1108
- return /* @__PURE__ */ React12.createElement("div", {
1109
- className: "p-2"
1110
- }, /* @__PURE__ */ React12.createElement("div", {
1111
- className: "rounded-md max-bs-[calc(100dvh-1rem)] overflow-hidden bg-baseSurface border border-separator ring-focusLine ring-neutralFocusIndicator flex flex-col"
1112
- }, children));
1113
- } finally {
1114
- _effect.f();
1115
- }
1116
- };
1117
- var CardStackDragPreviewHeading = ({ children }) => {
1118
- var _effect = _useSignals12();
1119
- try {
1120
- const { t } = useTranslation3(translationKey);
1121
- return /* @__PURE__ */ React12.createElement("div", {
1122
- className: "flex items-center p-2"
1123
- }, /* @__PURE__ */ React12.createElement(IconButton2, {
1124
- iconOnly: true,
1125
- icon: "ph--dots-six-vertical--regular",
1126
- variant: "ghost",
1127
- label: t("column drag handle label"),
1128
- classNames: "pli-2"
1129
- }), children);
1130
- } finally {
1131
- _effect.f();
1132
- }
1133
- };
1134
- var CardStackDragPreviewContent = ({ children, itemsCount = 0 }) => {
1135
- var _effect = _useSignals12();
1136
- try {
1137
- return /* @__PURE__ */ React12.createElement("div", {
1138
- className: mx9("overflow-y-auto flex-1 pli-2 flex flex-col gap-2", "plb-1", itemsCount > 0 ? "plb-2" : "plb-1")
1139
- }, children);
1140
- } finally {
1141
- _effect.f();
1142
- }
1143
- };
1144
- var CardStackDragPreviewFooter = ({ children }) => {
1145
- var _effect = _useSignals12();
1146
- try {
1147
- return /* @__PURE__ */ React12.createElement("div", {
1148
- className: "p-2 border-t border-separator"
1149
- }, children);
1150
- } finally {
1151
- _effect.f();
1152
- }
1153
- };
1154
- var CardStackDragPreview = {
1155
- Root: CardStackDragPreviewRoot,
1156
- Heading: CardStackDragPreviewHeading,
1157
- Content: CardStackDragPreviewContent,
1158
- Footer: CardStackDragPreviewFooter
1159
- };
2
+ import {
3
+ Card,
4
+ CardDragPreview,
5
+ CardStack,
6
+ CardStackDragPreview,
7
+ DEFAULT_EXTRINSIC_SIZE,
8
+ DEFAULT_HORIZONTAL_SIZE,
9
+ DEFAULT_VERTICAL_SIZE,
10
+ Image,
11
+ Stack,
12
+ StackContext,
13
+ StackItem,
14
+ StackItemDragPreview,
15
+ autoScrollRootAttributes,
16
+ cardChrome,
17
+ cardDialogContent,
18
+ cardDialogHeader,
19
+ cardDialogOverflow,
20
+ cardDialogPaddedOverflow,
21
+ cardDialogSearchListRoot,
22
+ cardHeading,
23
+ cardNoSpacing,
24
+ cardRoot,
25
+ cardSpacing,
26
+ cardStackContent,
27
+ cardStackFooter,
28
+ cardStackHeading,
29
+ cardStackItem,
30
+ cardStackRoot,
31
+ cardText,
32
+ labelSpacing,
33
+ railGridHorizontal,
34
+ railGridHorizontalContainFitContent,
35
+ railGridVertical,
36
+ railGridVerticalContainFitContent,
37
+ translationKey,
38
+ translations
39
+ } from "./chunk-HE3BRF7A.mjs";
1160
40
  export {
1161
41
  Card,
1162
- CardDragPreview2 as CardDragPreview,
42
+ CardDragPreview,
1163
43
  CardStack,
1164
44
  CardStackDragPreview,
1165
45
  DEFAULT_EXTRINSIC_SIZE,
1166
46
  DEFAULT_HORIZONTAL_SIZE,
1167
47
  DEFAULT_VERTICAL_SIZE,
48
+ Image,
1168
49
  Stack,
1169
50
  StackContext,
1170
51
  StackItem,
1171
52
  StackItemDragPreview,
1172
53
  autoScrollRootAttributes,
1173
54
  cardChrome,
1174
- cardContent,
1175
55
  cardDialogContent,
1176
56
  cardDialogHeader,
1177
57
  cardDialogOverflow,
1178
58
  cardDialogPaddedOverflow,
1179
59
  cardDialogSearchListRoot,
1180
60
  cardHeading,
61
+ cardNoSpacing,
1181
62
  cardRoot,
1182
63
  cardSpacing,
1183
64
  cardStackContent,
1184
65
  cardStackFooter,
1185
66
  cardStackHeading,
67
+ cardStackItem,
1186
68
  cardStackRoot,
1187
69
  cardText,
1188
70
  labelSpacing,
@@ -1190,6 +72,7 @@ export {
1190
72
  railGridHorizontalContainFitContent,
1191
73
  railGridVertical,
1192
74
  railGridVerticalContainFitContent,
1193
- translations_default as translations
75
+ translationKey,
76
+ translations
1194
77
  };
1195
78
  //# sourceMappingURL=index.mjs.map