@dxos/react-ui-mosaic 0.8.4-main.6fa680abb7 → 0.8.4-main.74a063c4e0
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-75KCPN67.mjs → chunk-6R7CESWM.mjs} +209 -158
- package/dist/lib/browser/chunk-6R7CESWM.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +46 -42
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/playwright/index.mjs +18 -8
- package/dist/lib/browser/playwright/index.mjs.map +3 -3
- package/dist/lib/browser/testing/index.mjs +13 -9
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node-esm/{chunk-XYWWHOXN.mjs → chunk-U7G2WXDG.mjs} +209 -158
- package/dist/lib/node-esm/chunk-U7G2WXDG.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +46 -42
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/playwright/index.mjs +18 -8
- package/dist/lib/node-esm/playwright/index.mjs.map +3 -3
- package/dist/lib/node-esm/testing/index.mjs +13 -9
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/types/src/components/Board/Board.d.ts +13 -6
- package/dist/types/src/components/Board/Board.d.ts.map +1 -1
- package/dist/types/src/components/Board/Board.stories.d.ts +5 -5
- package/dist/types/src/components/Board/Board.stories.d.ts.map +1 -1
- package/dist/types/src/components/Board/Column.d.ts +16 -8
- package/dist/types/src/components/Board/Column.d.ts.map +1 -1
- package/dist/types/src/components/Board/Item.d.ts +3 -0
- package/dist/types/src/components/Board/Item.d.ts.map +1 -1
- package/dist/types/src/components/Focus/Focus.d.ts +1 -25
- package/dist/types/src/components/Focus/Focus.d.ts.map +1 -1
- package/dist/types/src/components/Mosaic/Container.d.ts +17 -9
- package/dist/types/src/components/Mosaic/Container.d.ts.map +1 -1
- package/dist/types/src/components/Mosaic/Mosaic.d.ts +16 -21
- package/dist/types/src/components/Mosaic/Mosaic.d.ts.map +1 -1
- package/dist/types/src/components/Mosaic/Placeholder.d.ts.map +1 -1
- package/dist/types/src/components/Mosaic/Stack.d.ts +6 -6
- package/dist/types/src/components/Mosaic/Stack.d.ts.map +1 -1
- package/dist/types/src/components/Mosaic/Stack.stories.d.ts +11 -0
- package/dist/types/src/components/Mosaic/Stack.stories.d.ts.map +1 -1
- package/dist/types/src/components/Mosaic/Tile.d.ts +19 -9
- package/dist/types/src/components/Mosaic/Tile.d.ts.map +1 -1
- package/dist/types/src/hooks/useDefaultColumnEventHandler.d.ts.map +1 -1
- package/dist/types/src/playwright/board-manager.d.ts.map +1 -1
- package/dist/types/src/testing/DefaultStackTile.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +3 -3
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +26 -26
- package/src/AUDIT.md +106 -0
- package/src/components/Board/Board.stories.tsx +10 -11
- package/src/components/Board/Board.tsx +5 -7
- package/src/components/Board/Column.tsx +41 -40
- package/src/components/Board/Item.tsx +23 -24
- package/src/components/Focus/Focus.tsx +2 -102
- package/src/components/Mosaic/Container.tsx +46 -16
- package/src/components/Mosaic/Placeholder.tsx +1 -1
- package/src/components/Mosaic/Stack.stories.tsx +125 -69
- package/src/components/Mosaic/Stack.tsx +139 -50
- package/src/components/Mosaic/Tile.tsx +41 -34
- package/src/hooks/useContainerDebug.tsx +1 -1
- package/src/hooks/useDefaultColumnEventHandler.ts +0 -1
- package/src/playwright/board-manager.ts +18 -13
- package/src/playwright/smoke.spec.ts +10 -5
- package/src/testing/CardContainer.tsx +2 -2
- package/src/testing/DefaultStackTile.tsx +22 -19
- package/src/translations.ts +3 -3
- package/dist/lib/browser/chunk-75KCPN67.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-XYWWHOXN.mjs.map +0 -7
|
@@ -22,56 +22,7 @@ var useVisibleItems = ({ id, items, dragging, getId }) => {
|
|
|
22
22
|
};
|
|
23
23
|
|
|
24
24
|
// src/components/Focus/Focus.tsx
|
|
25
|
-
import {
|
|
26
|
-
import { useComposedRefs } from "@radix-ui/react-compose-refs";
|
|
27
|
-
import { Primitive } from "@radix-ui/react-primitive";
|
|
28
|
-
import { Slot } from "@radix-ui/react-slot";
|
|
29
|
-
import React, { createContext, forwardRef, useContext, useRef, useState } from "react";
|
|
30
|
-
import { composableProps, mx } from "@dxos/ui-theme";
|
|
31
|
-
var FOCUS_STATE_ATTR = "focus-state";
|
|
32
|
-
var FocusContext = /* @__PURE__ */ createContext({});
|
|
33
|
-
var useFocus = () => useContext(FocusContext);
|
|
34
|
-
var Group = /* @__PURE__ */ forwardRef(({ children, asChild, orientation = "vertical", ...props }, forwardedRef) => {
|
|
35
|
-
const { className, ...rest } = composableProps(props);
|
|
36
|
-
const Comp = asChild ? Slot : Primitive.div;
|
|
37
|
-
const rootRef = useRef(null);
|
|
38
|
-
const composedRef = useComposedRefs(rootRef, forwardedRef);
|
|
39
|
-
const focusableGroupAttrs = useFocusableGroup({
|
|
40
|
-
tabBehavior: "limited-trap-focus"
|
|
41
|
-
});
|
|
42
|
-
const arrowNavigationAttrs = useArrowNavigationGroup({
|
|
43
|
-
axis: orientation,
|
|
44
|
-
memorizeCurrent: true
|
|
45
|
-
});
|
|
46
|
-
const tabsterAttrs = useMergedTabsterAttributes_unstable(focusableGroupAttrs, arrowNavigationAttrs);
|
|
47
|
-
const [state, setState] = useState();
|
|
48
|
-
return /* @__PURE__ */ React.createElement(FocusContext.Provider, {
|
|
49
|
-
value: {
|
|
50
|
-
setFocus: setState
|
|
51
|
-
}
|
|
52
|
-
}, /* @__PURE__ */ React.createElement(Comp, {
|
|
53
|
-
...rest,
|
|
54
|
-
...tabsterAttrs,
|
|
55
|
-
...state && {
|
|
56
|
-
[`data-${FOCUS_STATE_ATTR}`]: state
|
|
57
|
-
},
|
|
58
|
-
tabIndex: 0,
|
|
59
|
-
className: mx([
|
|
60
|
-
// TODO(burdon): Option for border/rounded; ring/outline vs border?
|
|
61
|
-
"outline-hidden border border-separator md:rounded-xs",
|
|
62
|
-
// Focus (e.g., via tabster).
|
|
63
|
-
"focus:!border-accent-surface",
|
|
64
|
-
// Active (e.g., drop target).
|
|
65
|
-
"data-[focus-state=active]:border-neutral-focus-indicator",
|
|
66
|
-
// Error
|
|
67
|
-
"data-[focus-state=error]:border-rose-500"
|
|
68
|
-
], className),
|
|
69
|
-
ref: composedRef
|
|
70
|
-
}, children));
|
|
71
|
-
});
|
|
72
|
-
var Focus = {
|
|
73
|
-
Group
|
|
74
|
-
};
|
|
25
|
+
import { Focus, useFocus } from "@dxos/react-ui";
|
|
75
26
|
|
|
76
27
|
// src/components/Mosaic/styles.ts
|
|
77
28
|
var styles = {
|
|
@@ -109,23 +60,23 @@ var getSourceData = (source) => {
|
|
|
109
60
|
// src/components/Mosaic/Root.tsx
|
|
110
61
|
import { combine } from "@atlaskit/pragmatic-drag-and-drop/combine";
|
|
111
62
|
import { monitorForElements } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
|
|
112
|
-
import { useComposedRefs
|
|
113
|
-
import { createContext
|
|
114
|
-
import { Primitive
|
|
115
|
-
import { Slot
|
|
116
|
-
import
|
|
63
|
+
import { useComposedRefs } from "@radix-ui/react-compose-refs";
|
|
64
|
+
import { createContext } from "@radix-ui/react-context";
|
|
65
|
+
import { Primitive } from "@radix-ui/react-primitive";
|
|
66
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
67
|
+
import React, { forwardRef, useCallback, useEffect, useRef, useState } from "react";
|
|
117
68
|
import { log } from "@dxos/log";
|
|
118
|
-
import { mx
|
|
69
|
+
import { mx } from "@dxos/ui-theme";
|
|
119
70
|
var __dxlog_file = "/__w/dxos/dxos/packages/ui/react-ui-mosaic/src/components/Mosaic/Root.tsx";
|
|
120
|
-
var [MosaicRootContextProvider, useMosaicRootContext] =
|
|
71
|
+
var [MosaicRootContextProvider, useMosaicRootContext] = createContext("MosaicRoot");
|
|
121
72
|
var MOSAIC_ROOT_NAME = "Mosaic.Root";
|
|
122
73
|
var MOSAIC_ROOT_DEBUG_ATTR = "mosaic-debug";
|
|
123
|
-
var MosaicRoot = /* @__PURE__ */
|
|
124
|
-
const rootRef =
|
|
125
|
-
const composedRef =
|
|
126
|
-
const Comp = asChild ?
|
|
127
|
-
const [handlers, setHandlers] =
|
|
128
|
-
const [dragging, setDragging] =
|
|
74
|
+
var MosaicRoot = /* @__PURE__ */ forwardRef(({ classNames, children, asChild, debug }, forwardedRef) => {
|
|
75
|
+
const rootRef = useRef(null);
|
|
76
|
+
const composedRef = useComposedRefs(rootRef, forwardedRef);
|
|
77
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
78
|
+
const [handlers, setHandlers] = useState({});
|
|
79
|
+
const [dragging, setDragging] = useState();
|
|
129
80
|
const getSourceHandler = useCallback((source) => {
|
|
130
81
|
const data = source.data;
|
|
131
82
|
return {
|
|
@@ -341,7 +292,7 @@ var MosaicRoot = /* @__PURE__ */ forwardRef2(({ classNames, children, asChild, d
|
|
|
341
292
|
getSourceHandler,
|
|
342
293
|
getTargetHandler
|
|
343
294
|
]);
|
|
344
|
-
return /* @__PURE__ */
|
|
295
|
+
return /* @__PURE__ */ React.createElement(MosaicRootContextProvider, {
|
|
345
296
|
containers: handlers,
|
|
346
297
|
addContainer: (container) => setHandlers((containers) => ({
|
|
347
298
|
...containers,
|
|
@@ -354,8 +305,8 @@ var MosaicRoot = /* @__PURE__ */ forwardRef2(({ classNames, children, asChild, d
|
|
|
354
305
|
};
|
|
355
306
|
}),
|
|
356
307
|
dragging
|
|
357
|
-
}, /* @__PURE__ */
|
|
358
|
-
className:
|
|
308
|
+
}, /* @__PURE__ */ React.createElement(Comp, {
|
|
309
|
+
className: mx("group", classNames),
|
|
359
310
|
[`data-${MOSAIC_ROOT_DEBUG_ATTR}`]: debug,
|
|
360
311
|
ref: composedRef
|
|
361
312
|
}, children));
|
|
@@ -363,39 +314,53 @@ var MosaicRoot = /* @__PURE__ */ forwardRef2(({ classNames, children, asChild, d
|
|
|
363
314
|
MosaicRoot.displayName = MOSAIC_ROOT_NAME;
|
|
364
315
|
|
|
365
316
|
// src/components/Mosaic/Container.tsx
|
|
317
|
+
import { autoScrollForElements } from "@atlaskit/pragmatic-drag-and-drop-auto-scroll/element";
|
|
366
318
|
import { combine as combine2 } from "@atlaskit/pragmatic-drag-and-drop/combine";
|
|
367
319
|
import { dropTargetForElements } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
|
|
368
|
-
import {
|
|
369
|
-
import {
|
|
370
|
-
import {
|
|
371
|
-
import {
|
|
372
|
-
import { Slot as Slot3 } from "@radix-ui/react-slot";
|
|
320
|
+
import { useComposedRefs as useComposedRefs2 } from "@radix-ui/react-compose-refs";
|
|
321
|
+
import { createContext as createContext2 } from "@radix-ui/react-context";
|
|
322
|
+
import { Primitive as Primitive2 } from "@radix-ui/react-primitive";
|
|
323
|
+
import { Slot as Slot2 } from "@radix-ui/react-slot";
|
|
373
324
|
import { bind } from "bind-event-listener";
|
|
374
|
-
import
|
|
375
|
-
import { composableProps
|
|
325
|
+
import React2, { useCallback as useCallback2, useEffect as useEffect2, useMemo as useMemo2, useRef as useRef2, useState as useState2 } from "react";
|
|
326
|
+
import { composable, composableProps, mx as mx2 } from "@dxos/ui-theme";
|
|
376
327
|
import { isTruthy } from "@dxos/util";
|
|
377
328
|
var MOSAIC_CONTAINER_NAME = "Mosaic.Container";
|
|
378
|
-
var [MosaicContainerContextProvider, useMosaicContainerContext] =
|
|
329
|
+
var [MosaicContainerContextProvider, useMosaicContainerContext] = createContext2("MosaicContainer");
|
|
379
330
|
var MOSAIC_CONTAINER_STATE_ATTR = "mosaic-container-state";
|
|
380
331
|
var MOSAIC_CONTAINER_PLACEHOLDER_WIDTH = "--mosaic-placeholder-width";
|
|
381
332
|
var MOSAIC_CONTAINER_PLACEHOLDER_HEIGHT = "--mosaic-placeholder-height";
|
|
382
333
|
var counter = 0;
|
|
383
|
-
var MosaicContainer =
|
|
384
|
-
const { className, ...rest } =
|
|
385
|
-
const Comp = asChild ?
|
|
386
|
-
const rootRef =
|
|
387
|
-
const composedRef =
|
|
334
|
+
var MosaicContainer = composable(({ children, eventHandler: eventHandlerProp, orientation = "vertical", asChild, autoScroll: autoscrollElement, withFocus, currentId, onCurrentChange, debug, ...props }, forwardedRef) => {
|
|
335
|
+
const { className, ...rest } = composableProps(props);
|
|
336
|
+
const Comp = asChild ? Slot2 : Primitive2.div;
|
|
337
|
+
const rootRef = useRef2(null);
|
|
338
|
+
const composedRef = useComposedRefs2(rootRef, forwardedRef);
|
|
388
339
|
const eventHandler = useMemo2(() => eventHandlerProp ?? {
|
|
389
340
|
id: `mosaic-container-${counter++}`
|
|
390
341
|
}, [
|
|
391
342
|
eventHandlerProp
|
|
392
343
|
]);
|
|
393
344
|
const { dragging } = useMosaicRootContext(MOSAIC_CONTAINER_NAME);
|
|
394
|
-
const [state, setState] =
|
|
345
|
+
const [state, setState] = useState2({
|
|
395
346
|
type: "idle"
|
|
396
347
|
});
|
|
397
|
-
const [activeLocation, setActiveLocation] =
|
|
398
|
-
const [scrolling, setScrolling] =
|
|
348
|
+
const [activeLocation, setActiveLocation] = useState2();
|
|
349
|
+
const [scrolling, setScrolling] = useState2(false);
|
|
350
|
+
const setCurrentId = useCallback2((id) => onCurrentChange?.(id), [
|
|
351
|
+
onCurrentChange
|
|
352
|
+
]);
|
|
353
|
+
const scrollToRef = useRef2(void 0);
|
|
354
|
+
const registerScrollTo = useCallback2((fn) => {
|
|
355
|
+
scrollToRef.current = fn;
|
|
356
|
+
}, []);
|
|
357
|
+
useEffect2(() => {
|
|
358
|
+
if (currentId) {
|
|
359
|
+
scrollToRef.current?.(currentId);
|
|
360
|
+
}
|
|
361
|
+
}, [
|
|
362
|
+
currentId
|
|
363
|
+
]);
|
|
399
364
|
const { setFocus } = useFocus();
|
|
400
365
|
useEffect2(() => {
|
|
401
366
|
if (withFocus) {
|
|
@@ -530,7 +495,7 @@ var MosaicContainer = /* @__PURE__ */ forwardRef3(({ children, eventHandler: eve
|
|
|
530
495
|
data,
|
|
531
496
|
autoscrollElement
|
|
532
497
|
]);
|
|
533
|
-
return /* @__PURE__ */
|
|
498
|
+
return /* @__PURE__ */ React2.createElement(MosaicContainerContextProvider, {
|
|
534
499
|
id: eventHandler.id,
|
|
535
500
|
eventHandler,
|
|
536
501
|
orientation,
|
|
@@ -538,9 +503,12 @@ var MosaicContainer = /* @__PURE__ */ forwardRef3(({ children, eventHandler: eve
|
|
|
538
503
|
dragging: state.type === "active" ? dragging : void 0,
|
|
539
504
|
scrolling,
|
|
540
505
|
activeLocation,
|
|
541
|
-
setActiveLocation
|
|
542
|
-
|
|
543
|
-
|
|
506
|
+
setActiveLocation,
|
|
507
|
+
currentId,
|
|
508
|
+
setCurrentId,
|
|
509
|
+
registerScrollTo
|
|
510
|
+
}, /* @__PURE__ */ React2.createElement(Comp, {
|
|
511
|
+
className: mx2("h-full", className),
|
|
544
512
|
style: {
|
|
545
513
|
[MOSAIC_CONTAINER_PLACEHOLDER_WIDTH]: state.type === "active" && state.bounds ? `${state.bounds.width}px` : "0px",
|
|
546
514
|
[MOSAIC_CONTAINER_PLACEHOLDER_HEIGHT]: state.type === "active" && state.bounds ? `${state.bounds.height}px` : "0px"
|
|
@@ -553,28 +521,27 @@ var MosaicContainer = /* @__PURE__ */ forwardRef3(({ children, eventHandler: eve
|
|
|
553
521
|
MosaicContainer.displayName = MOSAIC_CONTAINER_NAME;
|
|
554
522
|
|
|
555
523
|
// src/components/Mosaic/Tile.tsx
|
|
524
|
+
import { attachClosestEdge, extractClosestEdge } from "@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge";
|
|
556
525
|
import { combine as combine3 } from "@atlaskit/pragmatic-drag-and-drop/combine";
|
|
557
526
|
import { draggable, dropTargetForElements as dropTargetForElements2 } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
|
|
558
527
|
import { preserveOffsetOnSource } from "@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source";
|
|
559
528
|
import { setCustomNativeDragPreview } from "@atlaskit/pragmatic-drag-and-drop/element/set-custom-native-drag-preview";
|
|
560
|
-
import { attachClosestEdge, extractClosestEdge } from "@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge";
|
|
561
529
|
import { composeRefs } from "@radix-ui/react-compose-refs";
|
|
562
|
-
import { createContext as
|
|
563
|
-
import { Primitive as
|
|
564
|
-
import { Slot as
|
|
565
|
-
import
|
|
530
|
+
import { createContext as createContext3 } from "@radix-ui/react-context";
|
|
531
|
+
import { Primitive as Primitive3 } from "@radix-ui/react-primitive";
|
|
532
|
+
import { Slot as Slot3 } from "@radix-ui/react-slot";
|
|
533
|
+
import React3, { useLayoutEffect, useMemo as useMemo3, useRef as useRef3, useState as useState3 } from "react";
|
|
566
534
|
import { createPortal } from "react-dom";
|
|
567
|
-
import { composableProps as
|
|
535
|
+
import { composableProps as composableProps2, slottable } from "@dxos/ui-theme";
|
|
568
536
|
var MOSAIC_TILE_NAME = "Mosaic.Tile";
|
|
569
|
-
var [MosaicTileContextProvider, useMosaicTileContext] =
|
|
537
|
+
var [MosaicTileContextProvider, useMosaicTileContext] = createContext3("MosaicTile");
|
|
570
538
|
var MOSAIC_TILE_STATE_ATTR = "mosaic-tile-state";
|
|
571
|
-
var MosaicTile =
|
|
572
|
-
const
|
|
573
|
-
const
|
|
574
|
-
const rootRef = useRef4(null);
|
|
539
|
+
var MosaicTile = slottable(({ children, asChild, dragHandle, allowedEdges: allowedEdgesProp, location, id, data: dataProp, draggable: draggableProp, current: _current, debug: _, ...props }, forwardedRef) => {
|
|
540
|
+
const Comp = asChild ? Slot3 : Primitive3.div;
|
|
541
|
+
const rootRef = useRef3(null);
|
|
575
542
|
const composedRef = composeRefs(rootRef, forwardedRef);
|
|
576
543
|
const { id: containerId, eventHandler, orientation, scrolling, setActiveLocation } = useMosaicContainerContext(MOSAIC_TILE_NAME);
|
|
577
|
-
const [state, setState] =
|
|
544
|
+
const [state, setState] = useState3({
|
|
578
545
|
type: "idle"
|
|
579
546
|
});
|
|
580
547
|
const allowedEdges = useMemo3(() => allowedEdgesProp || (orientation === "vertical" ? [
|
|
@@ -600,7 +567,7 @@ var MosaicTile = /* @__PURE__ */ forwardRef4(({ children, asChild, dragHandle, a
|
|
|
600
567
|
]);
|
|
601
568
|
useLayoutEffect(() => {
|
|
602
569
|
const root = rootRef.current;
|
|
603
|
-
if (!root || !containerId || scrolling) {
|
|
570
|
+
if (!draggableProp || !root || !containerId || scrolling) {
|
|
604
571
|
return;
|
|
605
572
|
}
|
|
606
573
|
const handleChange = ({ self, source }) => {
|
|
@@ -694,6 +661,8 @@ var MosaicTile = /* @__PURE__ */ forwardRef4(({ children, asChild, dragHandle, a
|
|
|
694
661
|
);
|
|
695
662
|
}, [
|
|
696
663
|
rootRef,
|
|
664
|
+
forwardedRef,
|
|
665
|
+
containerId,
|
|
697
666
|
dragHandle,
|
|
698
667
|
eventHandler,
|
|
699
668
|
data,
|
|
@@ -701,19 +670,22 @@ var MosaicTile = /* @__PURE__ */ forwardRef4(({ children, asChild, dragHandle, a
|
|
|
701
670
|
allowedEdges,
|
|
702
671
|
setActiveLocation
|
|
703
672
|
]);
|
|
704
|
-
|
|
673
|
+
const { className, ...rest } = composableProps2(props, {
|
|
674
|
+
classNames: "relative outline-none"
|
|
675
|
+
});
|
|
676
|
+
return /* @__PURE__ */ React3.createElement(MosaicTileContextProvider, {
|
|
705
677
|
state
|
|
706
|
-
}, /* @__PURE__ */
|
|
678
|
+
}, /* @__PURE__ */ React3.createElement(Comp, {
|
|
707
679
|
...rest,
|
|
680
|
+
"data-mosaic-tile-id": id,
|
|
708
681
|
[`data-${MOSAIC_TILE_STATE_ATTR}`]: state.type,
|
|
709
682
|
role: "listitem",
|
|
710
|
-
className
|
|
683
|
+
className,
|
|
711
684
|
ref: composedRef
|
|
712
|
-
}, children), state.type === "preview" && /* @__PURE__ */ createPortal(/* @__PURE__ */
|
|
685
|
+
}, children), state.type === "preview" && /* @__PURE__ */ createPortal(/* @__PURE__ */ React3.createElement(Comp, {
|
|
713
686
|
// NOTE: Use to control appearance while dragging.
|
|
714
687
|
[`data-${MOSAIC_TILE_STATE_ATTR}`]: state.type,
|
|
715
|
-
|
|
716
|
-
className: mx4("relative", className),
|
|
688
|
+
className,
|
|
717
689
|
style: {
|
|
718
690
|
width: `${state.rect.width}px`,
|
|
719
691
|
height: `${state.rect.height}px`
|
|
@@ -723,18 +695,18 @@ var MosaicTile = /* @__PURE__ */ forwardRef4(({ children, asChild, dragHandle, a
|
|
|
723
695
|
MosaicTile.displayName = MOSAIC_TILE_NAME;
|
|
724
696
|
|
|
725
697
|
// src/components/Mosaic/Placeholder.tsx
|
|
726
|
-
import { dropTargetForElements as dropTargetForElements3 } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
|
|
727
698
|
import { DropIndicator as NaturalDropIndicator } from "@atlaskit/pragmatic-drag-and-drop-react-drop-indicator/box";
|
|
728
|
-
import {
|
|
729
|
-
import {
|
|
730
|
-
import
|
|
731
|
-
import {
|
|
699
|
+
import { dropTargetForElements as dropTargetForElements3 } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
|
|
700
|
+
import { Primitive as Primitive4 } from "@radix-ui/react-primitive";
|
|
701
|
+
import { Slot as Slot4 } from "@radix-ui/react-slot";
|
|
702
|
+
import React4, { useLayoutEffect as useLayoutEffect2, useMemo as useMemo4, useRef as useRef4 } from "react";
|
|
703
|
+
import { mx as mx3 } from "@dxos/ui-theme";
|
|
732
704
|
var MOSAIC_PLACEHOLDER_NAME = "Mosaic.Placeholder";
|
|
733
705
|
var MOSAIC_PLACEHOLDER_ORIENTATION_ATTR = "mosaic-placeholder-orientation";
|
|
734
706
|
var MOSAIC_PLACEHOLDER_STATE_ATTR = "mosaic-placeholder-state";
|
|
735
707
|
var MosaicPlaceholder = ({ classNames, children, asChild, orientation = "vertical", location }) => {
|
|
736
|
-
const rootRef =
|
|
737
|
-
const Comp = asChild ?
|
|
708
|
+
const rootRef = useRef4(null);
|
|
709
|
+
const Comp = asChild ? Slot4 : Primitive4.div;
|
|
738
710
|
const { id: containerId, eventHandler, scrolling, activeLocation, setActiveLocation } = useMosaicContainerContext(MOSAIC_PLACEHOLDER_NAME);
|
|
739
711
|
const data = useMemo4(() => ({
|
|
740
712
|
type: "placeholder",
|
|
@@ -774,11 +746,11 @@ var MosaicPlaceholder = ({ classNames, children, asChild, orientation = "vertica
|
|
|
774
746
|
scrolling,
|
|
775
747
|
setActiveLocation
|
|
776
748
|
]);
|
|
777
|
-
return /* @__PURE__ */
|
|
749
|
+
return /* @__PURE__ */ React4.createElement(Comp, {
|
|
778
750
|
[`data-${MOSAIC_PLACEHOLDER_ORIENTATION_ATTR}`]: orientation,
|
|
779
751
|
[`data-${MOSAIC_PLACEHOLDER_STATE_ATTR}`]: data.location === activeLocation ? "active" : "idle",
|
|
780
752
|
role: "none",
|
|
781
|
-
className:
|
|
753
|
+
className: mx3("relative", classNames),
|
|
782
754
|
ref: rootRef
|
|
783
755
|
}, children);
|
|
784
756
|
};
|
|
@@ -786,7 +758,7 @@ MosaicPlaceholder.displayName = MOSAIC_PLACEHOLDER_NAME;
|
|
|
786
758
|
var DROP_INDICATOR_NAME = "Mosaic.DropIndicator";
|
|
787
759
|
var MosaicDropIndicator = (props) => {
|
|
788
760
|
const { state } = useMosaicTileContext(DROP_INDICATOR_NAME);
|
|
789
|
-
return state.type === "target" && state.closestEdge ? /* @__PURE__ */
|
|
761
|
+
return state.type === "target" && state.closestEdge ? /* @__PURE__ */ React4.createElement(NaturalDropIndicator, {
|
|
790
762
|
...props,
|
|
791
763
|
edge: state.closestEdge
|
|
792
764
|
}) : null;
|
|
@@ -794,24 +766,24 @@ var MosaicDropIndicator = (props) => {
|
|
|
794
766
|
MosaicDropIndicator.displayName = DROP_INDICATOR_NAME;
|
|
795
767
|
|
|
796
768
|
// src/components/Mosaic/Stack.tsx
|
|
769
|
+
import { useComposedRefs as useComposedRefs3 } from "@radix-ui/react-compose-refs";
|
|
797
770
|
import { useVirtualizer } from "@tanstack/react-virtual";
|
|
798
|
-
import
|
|
771
|
+
import React5, { forwardRef as forwardRef2, Fragment, useCallback as useCallback3, useEffect as useEffect3, useRef as useRef5 } from "react";
|
|
799
772
|
import { invariant } from "@dxos/invariant";
|
|
800
|
-
import { composableProps as
|
|
773
|
+
import { composable as composable2, composableProps as composableProps3, mx as mx4 } from "@dxos/ui-theme";
|
|
801
774
|
var __dxlog_file2 = "/__w/dxos/dxos/packages/ui/react-ui-mosaic/src/components/Mosaic/Stack.tsx";
|
|
802
775
|
var MOSAIC_STACK_NAME = "MosaicStack";
|
|
803
|
-
var MosaicStackInner =
|
|
804
|
-
const { className, ...rest } = composableProps4(props);
|
|
776
|
+
var MosaicStackInner = composable2(({ getId, orientation: orientationProp = "vertical", items, Tile, draggable: draggable2 = true, debug, ...props }, forwardedRef) => {
|
|
805
777
|
invariant(Tile, void 0, {
|
|
806
778
|
F: __dxlog_file2,
|
|
807
|
-
L:
|
|
779
|
+
L: 73,
|
|
808
780
|
S: void 0,
|
|
809
781
|
A: [
|
|
810
782
|
"Tile",
|
|
811
783
|
""
|
|
812
784
|
]
|
|
813
785
|
});
|
|
814
|
-
const { id, orientation = orientationProp, dragging } = useMosaicContainerContext(MOSAIC_STACK_NAME);
|
|
786
|
+
const { id, orientation = orientationProp, dragging, currentId, registerScrollTo } = useMosaicContainerContext(MOSAIC_STACK_NAME);
|
|
815
787
|
const visibleItems = useVisibleItems({
|
|
816
788
|
id,
|
|
817
789
|
items,
|
|
@@ -820,30 +792,52 @@ var MosaicStackInner = /* @__PURE__ */ forwardRef5(({ role = "list", orientation
|
|
|
820
792
|
});
|
|
821
793
|
invariant(orientation === "vertical" || orientation === "horizontal", `Invalid orientation: ${orientation}`, {
|
|
822
794
|
F: __dxlog_file2,
|
|
823
|
-
L:
|
|
795
|
+
L: 82,
|
|
824
796
|
S: void 0,
|
|
825
797
|
A: [
|
|
826
798
|
"orientation === 'vertical' || orientation === 'horizontal'",
|
|
827
799
|
"`Invalid orientation: ${orientation}`"
|
|
828
800
|
]
|
|
829
801
|
});
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
802
|
+
const rootRef = useRef5(null);
|
|
803
|
+
const scrollToId = useCallback3((targetId) => {
|
|
804
|
+
const el = rootRef.current?.querySelector(`[data-mosaic-tile-id="${CSS.escape(targetId)}"]`);
|
|
805
|
+
el?.scrollIntoView({
|
|
806
|
+
block: "nearest",
|
|
807
|
+
behavior: "smooth"
|
|
808
|
+
});
|
|
809
|
+
}, []);
|
|
810
|
+
useEffect3(() => {
|
|
811
|
+
registerScrollTo(scrollToId);
|
|
812
|
+
return () => registerScrollTo(void 0);
|
|
813
|
+
}, [
|
|
814
|
+
registerScrollTo,
|
|
815
|
+
scrollToId
|
|
816
|
+
]);
|
|
817
|
+
const composedRef = useComposedRefs3(rootRef, forwardedRef);
|
|
818
|
+
return /* @__PURE__ */ React5.createElement("div", {
|
|
819
|
+
...composableProps3(props, {
|
|
820
|
+
role: "list",
|
|
821
|
+
classNames: [
|
|
822
|
+
"flex",
|
|
823
|
+
orientation === "horizontal" && "h-full [&>*]:shrink-0",
|
|
824
|
+
orientation === "vertical" && "flex-col"
|
|
825
|
+
]
|
|
826
|
+
}),
|
|
827
|
+
ref: composedRef
|
|
828
|
+
}, draggable2 && /* @__PURE__ */ React5.createElement(InternalPlaceholder, {
|
|
836
829
|
orientation,
|
|
837
830
|
location: 0.5
|
|
838
|
-
}), visibleItems?.map((item, index) => /* @__PURE__ */
|
|
831
|
+
}), visibleItems?.map((item, index) => /* @__PURE__ */ React5.createElement(Fragment, {
|
|
839
832
|
key: getId(item)
|
|
840
|
-
}, /* @__PURE__ */
|
|
833
|
+
}, /* @__PURE__ */ React5.createElement(Tile, {
|
|
841
834
|
id: getId(item),
|
|
842
835
|
data: item,
|
|
843
836
|
location: index + 1,
|
|
844
837
|
draggable: draggable2,
|
|
838
|
+
current: getId(item) === currentId,
|
|
845
839
|
debug
|
|
846
|
-
}), /* @__PURE__ */
|
|
840
|
+
}), draggable2 && /* @__PURE__ */ React5.createElement(InternalPlaceholder, {
|
|
847
841
|
orientation,
|
|
848
842
|
location: index + 1.5
|
|
849
843
|
}))));
|
|
@@ -851,36 +845,90 @@ var MosaicStackInner = /* @__PURE__ */ forwardRef5(({ role = "list", orientation
|
|
|
851
845
|
MosaicStackInner.displayName = MOSAIC_STACK_NAME;
|
|
852
846
|
var MosaicStack = MosaicStackInner;
|
|
853
847
|
var MOSAIC_VIRTUAL_STACK_NAME = "MosaicVirtualStack";
|
|
854
|
-
var MosaicVirtualStackInner = /* @__PURE__ */
|
|
855
|
-
const { className, ...rest } = composableProps4(props);
|
|
848
|
+
var MosaicVirtualStackInner = /* @__PURE__ */ forwardRef2(({ orientation = "vertical", items, getId, Tile, estimateSize, getScrollElement, overscan = 8, gap, onChange, draggable: draggable2 = true, debug, ...props }, forwardedRef) => {
|
|
856
849
|
invariant(Tile, void 0, {
|
|
857
850
|
F: __dxlog_file2,
|
|
858
|
-
L:
|
|
851
|
+
L: 163,
|
|
859
852
|
S: void 0,
|
|
860
853
|
A: [
|
|
861
854
|
"Tile",
|
|
862
855
|
""
|
|
863
856
|
]
|
|
864
857
|
});
|
|
865
|
-
const { id, dragging } = useMosaicContainerContext(MOSAIC_VIRTUAL_STACK_NAME);
|
|
858
|
+
const { id, dragging, currentId, registerScrollTo } = useMosaicContainerContext(MOSAIC_VIRTUAL_STACK_NAME);
|
|
866
859
|
const visibleItems = useVisibleItems({
|
|
867
860
|
id,
|
|
868
861
|
items,
|
|
869
862
|
dragging: dragging?.source.data,
|
|
870
863
|
getId
|
|
871
864
|
});
|
|
865
|
+
const wrappedEstimateSize = draggable2 ? (index) => index % 2 === 0 ? 0 : estimateSize(Math.floor(index / 2)) : estimateSize;
|
|
872
866
|
const virtualizer = useVirtualizer({
|
|
873
|
-
|
|
874
|
-
|
|
867
|
+
// NOTE: When draggable we double the number of items to allow for placeholders.
|
|
868
|
+
count: draggable2 ? visibleItems.length * 2 + 1 : visibleItems.length,
|
|
869
|
+
estimateSize: wrappedEstimateSize,
|
|
870
|
+
gap,
|
|
871
|
+
// Key measurements by stable item ID so the size cache survives scrolling;
|
|
872
|
+
// without this, measurements are indexed by position and are lost when items reorder.
|
|
873
|
+
getItemKey: draggable2 ? (index) => index % 2 === 0 ? `ph-${index}` : getId(visibleItems[Math.floor(index / 2)]) : (index) => getId(visibleItems[index]),
|
|
875
874
|
getScrollElement,
|
|
876
875
|
overscan,
|
|
877
876
|
onChange
|
|
878
877
|
});
|
|
878
|
+
const scrollToId = useCallback3((targetId) => {
|
|
879
|
+
const itemIndex = visibleItems.findIndex((item) => getId(item) === targetId);
|
|
880
|
+
if (itemIndex >= 0) {
|
|
881
|
+
const virtualIndex = draggable2 ? itemIndex * 2 + 1 : itemIndex;
|
|
882
|
+
virtualizer.scrollToIndex(virtualIndex, {
|
|
883
|
+
align: "start",
|
|
884
|
+
behavior: "smooth"
|
|
885
|
+
});
|
|
886
|
+
}
|
|
887
|
+
}, [
|
|
888
|
+
visibleItems,
|
|
889
|
+
getId,
|
|
890
|
+
draggable2,
|
|
891
|
+
virtualizer
|
|
892
|
+
]);
|
|
893
|
+
useEffect3(() => {
|
|
894
|
+
registerScrollTo(scrollToId);
|
|
895
|
+
return () => registerScrollTo(void 0);
|
|
896
|
+
}, [
|
|
897
|
+
registerScrollTo,
|
|
898
|
+
scrollToId
|
|
899
|
+
]);
|
|
879
900
|
const virtualItems = virtualizer.getVirtualItems();
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
901
|
+
const getData = (index) => {
|
|
902
|
+
if (draggable2) {
|
|
903
|
+
if (index % 2 === 0) {
|
|
904
|
+
return {
|
|
905
|
+
location: Math.floor(index / 2) + 0.5
|
|
906
|
+
};
|
|
907
|
+
} else {
|
|
908
|
+
return {
|
|
909
|
+
data: visibleItems[Math.floor(index / 2)],
|
|
910
|
+
location: Math.floor(index / 2) + 1
|
|
911
|
+
};
|
|
912
|
+
}
|
|
913
|
+
} else {
|
|
914
|
+
return {
|
|
915
|
+
data: visibleItems[index],
|
|
916
|
+
location: index + 1
|
|
917
|
+
};
|
|
918
|
+
}
|
|
919
|
+
};
|
|
920
|
+
return /* @__PURE__ */ React5.createElement("div", {
|
|
921
|
+
...composableProps3(props, {
|
|
922
|
+
role: "list",
|
|
923
|
+
classNames: [
|
|
924
|
+
// shrink-0 is required: this div sets an explicit height via inline style (getTotalSize).
|
|
925
|
+
// Without it, a parent flex container (e.g. ScrollArea.Viewport) would shrink this div
|
|
926
|
+
// to the viewport height, collapsing the scroll content and causing scrollbar drift.
|
|
927
|
+
"flex shrink-0",
|
|
928
|
+
orientation === "horizontal" && "h-full [&>*]:shrink-0",
|
|
929
|
+
orientation === "vertical" && "flex-col"
|
|
930
|
+
]
|
|
931
|
+
}),
|
|
884
932
|
style: {
|
|
885
933
|
position: "relative",
|
|
886
934
|
...orientation === "vertical" ? {
|
|
@@ -892,43 +940,46 @@ var MosaicVirtualStackInner = /* @__PURE__ */ forwardRef5(({ role = "list", orie
|
|
|
892
940
|
}
|
|
893
941
|
},
|
|
894
942
|
ref: forwardedRef
|
|
895
|
-
}, virtualItems.map((
|
|
896
|
-
const data =
|
|
897
|
-
return /* @__PURE__ */
|
|
898
|
-
key
|
|
899
|
-
"data-index":
|
|
943
|
+
}, virtualItems.map(({ key, index, start }) => {
|
|
944
|
+
const { data, location } = getData(index);
|
|
945
|
+
return /* @__PURE__ */ React5.createElement("div", {
|
|
946
|
+
key,
|
|
947
|
+
"data-index": index,
|
|
900
948
|
style: {
|
|
901
949
|
position: "absolute",
|
|
902
950
|
top: 0,
|
|
903
951
|
left: 0,
|
|
904
952
|
...orientation === "vertical" ? {
|
|
905
953
|
width: "100%",
|
|
906
|
-
transform: `translateY(${
|
|
954
|
+
transform: `translateY(${start}px)`
|
|
907
955
|
} : {
|
|
908
956
|
height: "100%",
|
|
909
|
-
transform: `translateX(${
|
|
957
|
+
transform: `translateX(${start}px)`
|
|
910
958
|
}
|
|
911
959
|
},
|
|
912
960
|
ref: virtualizer.measureElement
|
|
913
|
-
},
|
|
914
|
-
orientation,
|
|
915
|
-
location: Math.floor(virtualItem.index / 2) + 0.5
|
|
916
|
-
}) : /* @__PURE__ */ React6.createElement(Tile, {
|
|
961
|
+
}, data ? /* @__PURE__ */ React5.createElement(Tile, {
|
|
917
962
|
id: getId(data),
|
|
918
963
|
data,
|
|
919
|
-
location
|
|
964
|
+
location,
|
|
965
|
+
draggable: draggable2,
|
|
966
|
+
current: getId(data) === currentId,
|
|
920
967
|
debug
|
|
968
|
+
}) : /* @__PURE__ */ React5.createElement(InternalPlaceholder, {
|
|
969
|
+
orientation,
|
|
970
|
+
location
|
|
921
971
|
}));
|
|
922
972
|
}));
|
|
923
973
|
});
|
|
924
974
|
MosaicVirtualStackInner.displayName = MOSAIC_VIRTUAL_STACK_NAME;
|
|
925
975
|
var MosaicVirtualStack = MosaicVirtualStackInner;
|
|
976
|
+
MosaicVirtualStack[/* @__PURE__ */ Symbol.for("dxos.composable")] = true;
|
|
926
977
|
var InternalPlaceholder = (props) => {
|
|
927
|
-
return /* @__PURE__ */
|
|
978
|
+
return /* @__PURE__ */ React5.createElement(MosaicPlaceholder, {
|
|
928
979
|
...props,
|
|
929
980
|
classNames: styles.placeholder.root
|
|
930
|
-
}, /* @__PURE__ */
|
|
931
|
-
className:
|
|
981
|
+
}, /* @__PURE__ */ React5.createElement("div", {
|
|
982
|
+
className: mx4("flex h-full bg-base-surface border border-dashed border-separator rounded-xs", styles.placeholder.content)
|
|
932
983
|
}));
|
|
933
984
|
};
|
|
934
985
|
InternalPlaceholder.displayName = "InternalPlaceholder";
|
|
@@ -946,8 +997,8 @@ var Mosaic = {
|
|
|
946
997
|
|
|
947
998
|
export {
|
|
948
999
|
useVisibleItems,
|
|
949
|
-
useFocus,
|
|
950
1000
|
Focus,
|
|
1001
|
+
useFocus,
|
|
951
1002
|
styles,
|
|
952
1003
|
getSourceData,
|
|
953
1004
|
useMosaicRootContext,
|
|
@@ -955,4 +1006,4 @@ export {
|
|
|
955
1006
|
useMosaicTileContext,
|
|
956
1007
|
Mosaic
|
|
957
1008
|
};
|
|
958
|
-
//# sourceMappingURL=chunk-
|
|
1009
|
+
//# sourceMappingURL=chunk-6R7CESWM.mjs.map
|