@dxos/react-ui-mosaic 0.3.9-main.5167f76 → 0.3.9-main.58adff6

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.
@@ -1,16 +1,20 @@
1
1
  // packages/ui/react-ui-mosaic/src/mosaic/hooks/useContainer.ts
2
2
  import { useContext } from "react";
3
- import { raise } from "@dxos/debug";
4
3
 
5
4
  // packages/ui/react-ui-mosaic/src/mosaic/Container.tsx
6
5
  import React, { createContext, useEffect } from "react";
7
6
  var DEFAULT_TRANSITION = 200;
8
- var MosaicContainerContext = /* @__PURE__ */ createContext(void 0);
9
- var MosaicContainer = ({ children, id, debug, Component: Component2, transitionDuration = DEFAULT_TRANSITION, modifier, getOverlayProps, getOverlayStyle, onOver, onDrop }) => {
7
+ var DEFAULT_TYPE = "unknown";
8
+ var MosaicContainerContext = /* @__PURE__ */ createContext({
9
+ id: "never",
10
+ type: DEFAULT_TYPE
11
+ });
12
+ var MosaicContainer = ({ children, id, debug, type = DEFAULT_TYPE, Component: Component2, transitionDuration = DEFAULT_TRANSITION, modifier, getOverlayProps, getOverlayStyle, onOver, onDrop }) => {
10
13
  const mosaic = useMosaic();
11
14
  const container = {
12
15
  id,
13
16
  debug,
17
+ type,
14
18
  Component: Component2,
15
19
  transitionDuration,
16
20
  modifier,
@@ -30,14 +34,14 @@ var MosaicContainer = ({ children, id, debug, Component: Component2, transitionD
30
34
  };
31
35
 
32
36
  // packages/ui/react-ui-mosaic/src/mosaic/hooks/useContainer.ts
33
- var useContainer = () => useContext(MosaicContainerContext) ?? raise(new Error("Missing MosaicContainerContext"));
37
+ var useContainer = () => useContext(MosaicContainerContext);
34
38
 
35
39
  // packages/ui/react-ui-mosaic/src/mosaic/hooks/useItemsWithPreview.ts
36
40
  import { useEffect as useEffect2, useState as useState2 } from "react";
37
41
 
38
42
  // packages/ui/react-ui-mosaic/src/mosaic/hooks/useMosaic.ts
39
43
  import { useContext as useContext2 } from "react";
40
- import { raise as raise2 } from "@dxos/debug";
44
+ import { raise } from "@dxos/debug";
41
45
 
42
46
  // packages/ui/react-ui-mosaic/src/mosaic/Root.tsx
43
47
  import { DndContext, KeyboardSensor, MouseSensor, pointerWithin, rectIntersection, TouchSensor, useSensor, useSensors } from "@dnd-kit/core";
@@ -155,12 +159,12 @@ var MosaicRoot = ({ Component: Component2 = DefaultComponent, debug, children })
155
159
  coordinateGetter: sortableKeyboardCoordinates
156
160
  }));
157
161
  const handleDragStart = (event) => {
158
- setActiveItem(pick(event.active.data.current, "path", "item", "position"));
162
+ setActiveItem(pick(event.active.data.current, "path", "type", "item", "position"));
159
163
  };
160
164
  const handleDragMove = (event) => {
161
165
  };
162
166
  const handleDragOver = (event) => {
163
- const overItem2 = pick(event.over?.data.current, "path", "item", "position");
167
+ const overItem2 = pick(event.over?.data.current, "path", "type", "item", "position");
164
168
  if (overItem2?.item?.id === activeItem?.item.id) {
165
169
  return;
166
170
  }
@@ -256,11 +260,13 @@ var MosaicDebug = ({ containers, operation, activeItem, overItem }) => {
256
260
  active: {
257
261
  id: activeItem?.item?.id.slice(0, 16),
258
262
  path: activeItem?.path && Path.create(...Path.parts(activeItem.path).map((part) => part.slice(0, 16))),
263
+ type: activeItem?.type,
259
264
  position: activeItem?.position
260
265
  },
261
266
  over: {
262
267
  id: overItem?.item?.id.slice(0, 16),
263
268
  path: overItem?.path && Path.create(...Path.parts(overItem.path).map((part) => part.slice(0, 16))),
269
+ type: overItem?.type,
264
270
  position: overItem?.position
265
271
  }
266
272
  }
@@ -268,7 +274,7 @@ var MosaicDebug = ({ containers, operation, activeItem, overItem }) => {
268
274
  };
269
275
 
270
276
  // packages/ui/react-ui-mosaic/src/mosaic/hooks/useMosaic.ts
271
- var useMosaic = () => useContext2(MosaicContext) ?? raise2(new Error("Missing MosaicContext"));
277
+ var useMosaic = () => useContext2(MosaicContext) ?? raise(new Error("Missing MosaicContext"));
272
278
 
273
279
  // packages/ui/react-ui-mosaic/src/mosaic/hooks/useItemsWithPreview.ts
274
280
  var useItemsWithPreview = ({ path, items }) => {
@@ -480,7 +486,7 @@ var Row = ({ children, id, items }) => /* @__PURE__ */ React6.createElement(Sort
480
486
  import { useDraggable, useDroppable } from "@dnd-kit/core";
481
487
  import { defaultAnimateLayoutChanges, useSortable } from "@dnd-kit/sortable";
482
488
  import React7 from "react";
483
- var DraggableTile = ({ path: parentPath, item, Component: Component2 = DefaultComponent, position, draggableStyle, ...props }) => {
489
+ var DraggableTile = ({ path: parentPath, type = DEFAULT_TYPE, item, Component: Component2 = DefaultComponent, position, draggableStyle, ...props }) => {
484
490
  const { operation } = useMosaic();
485
491
  const path = Path.create(parentPath, item.id);
486
492
  const {
@@ -493,6 +499,7 @@ var DraggableTile = ({ path: parentPath, item, Component: Component2 = DefaultCo
493
499
  id: path,
494
500
  data: {
495
501
  path,
502
+ type,
496
503
  item,
497
504
  position
498
505
  }
@@ -501,6 +508,7 @@ var DraggableTile = ({ path: parentPath, item, Component: Component2 = DefaultCo
501
508
  ref: setNodeRef,
502
509
  item,
503
510
  path,
511
+ type,
504
512
  position,
505
513
  operation,
506
514
  isDragging,
@@ -516,13 +524,14 @@ var DraggableTile = ({ path: parentPath, item, Component: Component2 = DefaultCo
516
524
  ...props
517
525
  });
518
526
  };
519
- var DroppableTile = ({ path: parentPath, item, Component: Component2 = DefaultComponent, position, ...props }) => {
527
+ var DroppableTile = ({ path: parentPath, type = DEFAULT_TYPE, item, Component: Component2 = DefaultComponent, position, ...props }) => {
520
528
  const { operation } = useMosaic();
521
529
  const path = parentPath === item.id ? parentPath : Path.create(parentPath, item.id);
522
530
  const { setNodeRef, isOver } = useDroppable({
523
531
  id: path,
524
532
  data: {
525
533
  path,
534
+ type,
526
535
  item,
527
536
  position
528
537
  }
@@ -531,13 +540,14 @@ var DroppableTile = ({ path: parentPath, item, Component: Component2 = DefaultCo
531
540
  ref: setNodeRef,
532
541
  item,
533
542
  path,
543
+ type,
534
544
  position,
535
545
  operation,
536
546
  isOver,
537
547
  ...props
538
548
  });
539
549
  };
540
- var SortableTile = ({ path: parentPath, item, Component: OverrideComponent, position, draggableStyle, ...props }) => {
550
+ var SortableTile = ({ path: parentPath, type = DEFAULT_TYPE, item, Component: OverrideComponent, position, draggableStyle, ...props }) => {
541
551
  const { operation, activeItem, overItem } = useMosaic();
542
552
  const { transitionDuration, Component: ContainerComponent } = useContainer();
543
553
  const path = Path.create(parentPath, item.id);
@@ -546,6 +556,7 @@ var SortableTile = ({ path: parentPath, item, Component: OverrideComponent, posi
546
556
  id: isPreview ? activeItem.path : path,
547
557
  data: {
548
558
  path,
559
+ type,
549
560
  item,
550
561
  position
551
562
  },
@@ -569,6 +580,7 @@ var SortableTile = ({ path: parentPath, item, Component: OverrideComponent, posi
569
580
  ref: setNodeRef,
570
581
  item,
571
582
  path,
583
+ type,
572
584
  position,
573
585
  operation,
574
586
  active,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/mosaic/hooks/useContainer.ts", "../../../src/mosaic/Container.tsx", "../../../src/mosaic/hooks/useItemsWithPreview.ts", "../../../src/mosaic/hooks/useMosaic.ts", "../../../src/mosaic/Root.tsx", "../../../src/mosaic/Debug.tsx", "../../../src/mosaic/DefaultComponent.tsx", "../../../src/mosaic/util/data.ts", "../../../src/mosaic/util/path.ts", "../../../src/mosaic/util/styles.ts", "../../../src/mosaic/hooks/useItemsWithOrigin.ts", "../../../src/mosaic/DragOverlay.tsx", "../../../src/mosaic/SortableContext.tsx", "../../../src/mosaic/Tile.tsx", "../../../src/mosaic/Mosaic.ts", "../../../src/views/Grid/layout.ts", "../../../src/views/Grid/Grid.tsx", "../../../src/views/Kanban/Kanban.tsx", "../../../src/views/Stack/Stack.tsx", "../../../src/views/Tree/Tree.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { MosaicContainerContext, type MosaicContainerProps } from '../Container';\nimport { type MosaicDataItem } from '../types';\n\nexport const useContainer = <\n TData extends MosaicDataItem = MosaicDataItem,\n TPosition = unknown,\n>(): MosaicContainerProps<TData, TPosition> =>\n useContext(MosaicContainerContext) ?? raise(new Error('Missing MosaicContainerContext'));\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Modifier } from '@dnd-kit/core';\nimport React, {\n createContext,\n useEffect,\n type CSSProperties,\n type HTMLAttributes,\n type PropsWithChildren,\n} from 'react';\n\nimport { type MosaicTileComponent } from './Tile';\nimport { useMosaic } from './hooks';\nimport { type MosaicDataItem, type MosaicDraggedItem } from './types';\n\nexport const DEFAULT_TRANSITION = 200;\n\nexport type MosaicTileOverlayProps = {\n grow?: boolean;\n debug?: boolean;\n};\n\n/**\n * Possible operations when dropping a tile.\n *\n * * `transfer` - Remove the tile from it's current path and move to a new path.\n * * `copy` - Add a clone of the tile at a new path.\n * * `rearrange` - Change the order of the tile within it's current path.\n * * `reject` - The tile is not allowed where it was dropped.\n */\n// TODO(wittjosiah): Add 'delete'. Consider adding 'swap'.\nexport type MosaicOperation = 'transfer' | 'copy' | 'rearrange' | 'reject';\n\nexport type MosaicMoveEvent<TPosition = unknown> = {\n active: MosaicDraggedItem<TPosition>;\n over: MosaicDraggedItem<TPosition>;\n};\n\nexport type MosaicDropEvent<TPosition = unknown> = MosaicMoveEvent<TPosition> & {\n operation: MosaicOperation;\n};\n\nexport type MosaicContainerProps<TData extends MosaicDataItem = MosaicDataItem, TPosition = unknown> = Pick<\n HTMLAttributes<HTMLDivElement>,\n 'className'\n> &\n PropsWithChildren<{\n id: string;\n\n // TODO(wittjosiah): Don't expose externally.\n debug?: boolean;\n\n /**\n * Default component used to render tiles.\n */\n Component?: MosaicTileComponent<TData, any>;\n\n /**\n * Length of transition when moving tiles in milliseconds.\n *\n * @default 200\n */\n transitionDuration?: number;\n\n /**\n * Adapter to transform properties while dragging (e.g., constraint axes).\n * https://github.com/clauderic/dnd-kit/blob/master/packages/core/src/modifiers/types.ts\n */\n modifier?: (activeItem: MosaicDraggedItem, ...modifierArgs: Parameters<Modifier>) => ReturnType<Modifier>;\n\n /**\n * Property overrides for the default overlay.\n */\n getOverlayProps?: () => MosaicTileOverlayProps;\n\n /**\n * Style property overrides for the default overlay.\n */\n getOverlayStyle?: () => CSSProperties;\n\n /**\n * Called when a tile is dragged over the container.\n * Returns true if the tile can be dropped.\n */\n onOver?: (event: MosaicMoveEvent<TPosition>) => MosaicOperation;\n\n /**\n * Called when a tile is dropped on the container.\n */\n onDrop?: (event: MosaicDropEvent<TPosition>) => void;\n }>;\n\nexport type MosaicContainerContextType = Omit<MosaicContainerProps<any>, 'children'>;\n\nexport const MosaicContainerContext = createContext<MosaicContainerContextType | undefined>(undefined);\n\n/**\n * Root Container that manages the layout of tiles.\n */\nexport const MosaicContainer = ({\n children,\n id,\n debug,\n Component,\n transitionDuration = DEFAULT_TRANSITION,\n modifier,\n getOverlayProps,\n getOverlayStyle,\n onOver,\n onDrop,\n}: MosaicContainerProps) => {\n const mosaic = useMosaic();\n const container = {\n id,\n debug,\n Component,\n transitionDuration,\n modifier,\n getOverlayProps,\n getOverlayStyle,\n onOver,\n onDrop,\n };\n\n useEffect(() => {\n mosaic.setContainer(container.id, container);\n return () => {\n // TODO(burdon): The overlay unregisters the container after the tile has re-rendered (removing it).\n // mosaic.setContainer(container.id);\n };\n }, Object.values(container));\n\n return <MosaicContainerContext.Provider value={container}>{children}</MosaicContainerContext.Provider>;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { useMosaic } from './useMosaic';\nimport { type MosaicDataItem } from '../types';\nimport { Path } from '../util';\n\n/**\n * Returns a spliced collection of items including a placeholder if items that could drop,\n * and removing any item that is currently being dragged out.\n */\nexport const useItemsWithPreview = <T extends MosaicDataItem>({ path, items }: { path: string; items: T[] }): T[] => {\n const { operation, activeItem, overItem } = useMosaic();\n const [itemsWithPreview, setItemsWithPreview] = useState(items);\n const overParent =\n // If over the sortable context itself & active item is foreign, then treat self as the parent.\n // This allows items to be appended to the end of the sortable.\n overItem?.path === path && activeItem && Path.parent(activeItem.path) !== overItem.path\n ? path\n : overItem && Path.parent(overItem.path);\n const [lastOverParent, setLastOverParent] = useState(overParent);\n\n useEffect(() => {\n if (!activeItem || !overItem) {\n setLastOverParent(undefined);\n setItemsWithPreview(items);\n return;\n }\n\n if (lastOverParent === overParent) {\n return;\n }\n\n const activeIsChild = Path.hasChild(path, activeItem.path);\n const overIsChild = Path.hasChild(path, overItem.path);\n const overSelf = overItem.path === path;\n\n if (operation === 'reject' || operation === 'rearrange') {\n setLastOverParent(undefined);\n setItemsWithPreview(items);\n return;\n } else {\n setLastOverParent(overParent);\n }\n if (!activeIsChild && overIsChild) {\n // Insert item into sortable.\n setItemsWithPreview((items) => {\n const position = overItem.position as number;\n return [...items.slice(0, position), activeItem.item as T, ...items.slice(position)];\n });\n } else if (!activeIsChild && overSelf) {\n // Append item to end of sortable.\n setItemsWithPreview((items) => [...items, activeItem.item as T]);\n } else if (activeIsChild && !overIsChild) {\n // Remove item being dragged out.\n setItemsWithPreview((items) => items.filter((item) => item.id !== activeItem.item.id));\n } else {\n // Reset items.\n setItemsWithPreview(items);\n }\n }, [operation, activeItem, overItem, overParent, lastOverParent, path, items]);\n\n // In order to avoid render glitching, rather than waiting for the effect to run,\n // immediately return the new items after dropping an item into a new path.\n return items.length === itemsWithPreview.length ? items : itemsWithPreview;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { MosaicContext } from '../Root';\n\nexport const useMosaic = () => useContext(MosaicContext) ?? raise(new Error('Missing MosaicContext'));\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport {\n type CollisionDetection,\n DndContext,\n type DragCancelEvent,\n type DragEndEvent,\n type DragMoveEvent,\n type DragOverEvent,\n type DragStartEvent,\n KeyboardSensor,\n type Modifier,\n MouseSensor,\n pointerWithin,\n rectIntersection,\n TouchSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport { sortableKeyboardCoordinates } from '@dnd-kit/sortable';\nimport pick from 'lodash.pick';\nimport React, { createContext, type FC, type PropsWithChildren, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { DEFAULT_TRANSITION, type MosaicContainerProps, type MosaicMoveEvent, type MosaicOperation } from './Container';\nimport { Debug } from './Debug';\nimport { DefaultComponent } from './DefaultComponent';\nimport { type MosaicTileComponent } from './Tile';\nimport { type MosaicDraggedItem } from './types';\nimport { Path } from './util';\n\nconst DEFAULT_COMPONENT_ID = '__default';\n\nexport type MosaicContextType = {\n containers: Record<string, MosaicContainerProps<any> | undefined>;\n setContainer: (id: string, container?: MosaicContainerProps<any>) => void;\n activeItem: MosaicDraggedItem | undefined;\n overItem: MosaicDraggedItem | undefined;\n operation: MosaicOperation;\n};\n\nexport const MosaicContext = createContext<MosaicContextType | undefined>(undefined);\n\nexport type MosaicRootProps = PropsWithChildren<{\n /**\n * Default component.\n */\n Component?: MosaicTileComponent<any>;\n debug?: boolean;\n}>;\n\n/**\n * Root context provider.\n */\nexport const MosaicRoot: FC<MosaicRootProps> = ({ Component = DefaultComponent, debug, children }) => {\n const [containers, setContainers] = useState<MosaicContextType['containers']>({\n [DEFAULT_COMPONENT_ID]: { id: DEFAULT_COMPONENT_ID, Component },\n });\n\n const handleSetContainer = (id: string, container?: MosaicContainerProps<any>) => {\n setContainers((containers) => {\n if (container) {\n return { ...containers, [id]: container };\n } else {\n const { [id]: _, ...rest } = containers;\n return rest;\n }\n });\n };\n\n const [activeItem, setActiveItem] = useState<MosaicDraggedItem>();\n const [overItem, setOverItem] = useState<MosaicDraggedItem>();\n const [operation, setOperation] = useState<MosaicOperation>('reject');\n\n //\n // DndKit Defaults\n //\n\n /**\n * See: https://docs.dndkit.com/api-documentation/context-provider/collision-detection-algorithms#custom-collision-detection-algorithms\n * See: https://github.com/clauderic/dnd-kit/tree/master/packages/core/src/utilities/algorithms\n */\n // TODO(burdon): Flickering: should not change while animation is happening.\n const collisionDetection: CollisionDetection = (args) => {\n // pointerWithin is the most accurate (since we're using drag handles), but only works with pointer sensors.\n const pointerCollisions = pointerWithin(args);\n if (pointerCollisions.length > 0) {\n return pointerCollisions;\n }\n\n // If there are no collisions with the pointer, return rectangle intersections.\n return rectIntersection(args);\n };\n\n /**\n * Dragging transformation modifiers adaptable by container.\n * See: https://github.com/clauderic/dnd-kit/tree/master/packages/core/src/modifiers\n */\n const modifiers: Modifier = (props) => {\n const { transform } = props;\n if (activeItem) {\n const container = containers[Path.first(activeItem.path)];\n return container?.modifier?.(activeItem, props) ?? transform;\n } else {\n return transform;\n }\n };\n\n /**\n * See: https://github.com/clauderic/dnd-kit/tree/master/packages/core/src/sensors\n */\n const sensors = useSensors(\n useSensor(MouseSensor, {\n activationConstraint: {\n distance: 10,\n },\n }),\n useSensor(TouchSensor, {\n activationConstraint: {\n delay: 200,\n tolerance: 5,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n //\n // Events\n //\n\n const handleDragStart = (event: DragStartEvent) => {\n setActiveItem(pick(event.active.data.current as MosaicDraggedItem, 'path', 'item', 'position'));\n };\n\n const handleDragMove = (event: DragMoveEvent) => {};\n\n const handleDragOver = (event: DragOverEvent) => {\n const overItem = pick(event.over?.data.current as MosaicDraggedItem, 'path', 'item', 'position');\n\n // If the over item is the same as the active item, do nothing.\n // This happens when moving between containers where a placeholder of itself is rendered where it will be dropped.\n if (overItem?.item?.id === activeItem?.item.id) {\n return;\n }\n\n const activeContainer = activeItem && containers[Path.first(activeItem.path)];\n const overContainer = overItem?.path && containers[Path.first(overItem.path)];\n if (!event.over || !overItem || !overContainer || !activeItem || !activeContainer) {\n setOperation('reject');\n setOverItem(undefined);\n return;\n }\n\n const onOver = ({ active, over }: MosaicMoveEvent) => {\n if (Path.parent(active.path) === Path.parent(over.path)) {\n return 'rearrange';\n } else if (overContainer.onOver) {\n return overContainer.onOver({ active, over });\n } else {\n return 'reject';\n }\n };\n\n setOperation(onOver({ active: activeItem, over: overItem }));\n setOverItem(overItem);\n };\n\n const handleDragCancel = (event: DragCancelEvent) => {\n setOperation('reject');\n setActiveItem(undefined);\n setOverItem(undefined);\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const overContainer = overItem && containers[Path.first(overItem.path)];\n\n if (\n operation !== 'reject' &&\n activeItem &&\n overItem &&\n (activeItem.path !== overItem.path || activeItem.position !== overItem.position)\n ) {\n const activeContainer = containers[Path.first(activeItem.path)];\n if (activeContainer) {\n activeContainer.onDrop?.({ operation, active: activeItem, over: overItem });\n\n if (overContainer && overContainer !== activeContainer) {\n overContainer.onDrop?.({ operation, active: activeItem, over: overItem });\n }\n }\n }\n\n setTimeout(() => {\n setOperation('reject');\n setOverItem(undefined);\n setActiveItem(undefined);\n }, overContainer?.transitionDuration ?? DEFAULT_TRANSITION);\n };\n\n return (\n <MosaicContext.Provider value={{ containers, setContainer: handleSetContainer, activeItem, overItem, operation }}>\n <DndContext\n collisionDetection={collisionDetection}\n modifiers={[modifiers]}\n sensors={sensors}\n // TODO(burdon): Allow container to veto drop.\n cancelDrop={(event) => false}\n onDragStart={handleDragStart}\n onDragMove={handleDragMove}\n onDragOver={handleDragOver}\n onDragCancel={handleDragCancel}\n onDragEnd={handleDragEnd}\n >\n {children}\n {debug &&\n createPortal(\n <MosaicDebug containers={containers} operation={operation} activeItem={activeItem} overItem={overItem} />,\n document.body,\n )}\n </DndContext>\n </MosaicContext.Provider>\n );\n};\n\nconst MosaicDebug: FC<{\n containers: MosaicContextType['containers'];\n operation: MosaicOperation;\n activeItem?: MosaicDraggedItem;\n overItem?: MosaicDraggedItem;\n}> = ({ containers, operation, activeItem, overItem }) => {\n return (\n <Debug\n position='bottom-right'\n data={{\n containers: Object.keys(containers).map((id) => id),\n operation,\n active: {\n id: activeItem?.item?.id.slice(0, 16),\n path: activeItem?.path && Path.create(...Path.parts(activeItem.path).map((part) => part.slice(0, 16))),\n position: activeItem?.position,\n },\n over: {\n id: overItem?.item?.id.slice(0, 16),\n path: overItem?.path && Path.create(...Path.parts(overItem.path).map((part) => part.slice(0, 16))),\n position: overItem?.position,\n },\n }}\n />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type FC } from 'react';\n\nimport { mx } from '@dxos/react-ui-theme';\n\ntype Position = 'bottom-left' | 'bottom-right';\n\nexport type DebugProps = { data: any; position?: Position };\n\nexport const Debug: FC<DebugProps> = ({ data, position }) => (\n <pre\n className={mx(\n 'font-mono text-xs overflow-hidden m-2 p-1 z-[100]',\n 'bg-neutral-50 dark:bg-neutral-700 border border-neutral-300 rounded',\n position === 'bottom-left' && 'fixed left-0 bottom-0',\n position === 'bottom-right' && 'fixed right-0 bottom-0',\n )}\n >\n {JSON.stringify(data, undefined, 1)}\n </pre>\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { forwardRef } from 'react';\n\nimport { Card } from '@dxos/react-ui';\n\nimport { type MosaicTileComponent } from './Tile';\nimport { type MosaicDataItem } from './types';\nimport { Path } from './util';\n\nexport const DefaultComponent: MosaicTileComponent<MosaicDataItem> = forwardRef(\n ({ draggableStyle, draggableProps, item: { id }, path }, forwardRef) => {\n return (\n <Card.Root ref={forwardRef} style={draggableStyle}>\n <Card.Header>\n <Card.DragHandle {...draggableProps} />\n <Card.Title title={Path.create(path, id)} classNames='truncate font-mono text-xs' />\n </Card.Header>\n </Card.Root>\n );\n },\n);\n\nDefaultComponent.displayName = 'DefaultComponent';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { arrayMove } from '@dxos/util';\n\nimport { type MosaicDataItem } from '../types';\n\n// TODO(wittjosiah): Generalize and expand rearrange utilities.\n\nexport const swapItems = <TItem extends MosaicDataItem, TValue extends MosaicDataItem>(\n items: TItem[],\n from: TValue,\n to: TValue,\n): TItem[] => {\n const fromIndex = items.findIndex((item) => item.id === from.id);\n const toIndex = items.findIndex((item) => item.id === to.id);\n return fromIndex !== -1 && toIndex !== -1 ? arrayMove(items, fromIndex, toIndex) : items;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nconst SEPARATOR = '/';\n\nexport const Path = {\n create: (...args: string[]) => args.join(SEPARATOR),\n\n parts: (path: string) => path.split(SEPARATOR),\n length: (path: string) => path.split(SEPARATOR).length,\n first: (path: string) => path.split(SEPARATOR)[0] ?? path,\n last: (path: string) => path.split(SEPARATOR).at(-1) ?? path,\n parent: (path: string) => path.split(SEPARATOR).slice(0, -1).join(SEPARATOR),\n\n hasRoot: (path: string, id: string) => Path.first(path) === id,\n hasChild: (path: string, compare: string) => Path.parent(compare) === path,\n hasDescendent: (path: string, compare: string) => compare !== path && compare.startsWith(path),\n siblings: (path: string, compare: string) => Path.parent(path) === Path.parent(compare),\n onPath: (path: string, id: string) => Path.parts(path).includes(id),\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// https://docs.dndkit.com/api-documentation/draggable/usedraggable#transform\n\nimport { CSS, type Transform } from '@dnd-kit/utilities';\n\nexport const getTransformCSS = (transform: Transform | null) =>\n transform ? CSS.Transform.toString(Object.assign(transform, { scaleX: 1, scaleY: 1 })) : undefined;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useMosaic } from './useMosaic';\nimport { type MosaicDataItem } from '../types';\nimport { Path } from '../util';\n\n// TODO(thure): Harmonize this hook signature with its sibling’s.\nexport const useItemsWithOrigin = <T extends MosaicDataItem>(path: string, items: T[]) => {\n const { operation, activeItem, overItem } = useMosaic();\n\n if (!activeItem || !overItem) {\n return items;\n }\n\n const activeIsChild = Path.hasChild(path, activeItem.path);\n const overIsChild = Path.hasChild(path, overItem.path);\n\n if (activeIsChild && !overIsChild && operation !== 'rearrange') {\n // Change the dnd-id of the origin item that may move to a foreign destination\n return items.map((item) => {\n if (item.id === activeItem.item.id) {\n return { ...item, id: `${item.id}--origin` };\n } else {\n return item;\n }\n });\n } else {\n // Reset items.\n return items;\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DragOverlay } from '@dnd-kit/core';\nimport React, { Component, type PropsWithChildren, useEffect, useRef, useState } from 'react';\n\nimport { type MosaicContainerProps } from './Container';\nimport { DefaultComponent } from './DefaultComponent';\nimport { type MosaicTileComponent } from './Tile';\nimport { useMosaic } from './hooks';\nimport { Path } from './util';\n\nexport type MosaicDragOverlayProps = { delay?: number; debug?: boolean } & Omit<\n React.ComponentProps<typeof DragOverlay>,\n 'children'\n>;\n\n/**\n * Render the currently dragged item of the Mosaic.\n */\nexport const MosaicDragOverlay = ({ delay = 200, debug = false, ...overlayProps }: MosaicDragOverlayProps) => {\n const { containers, operation, activeItem, overItem } = useMosaic();\n\n // Get the overlay component from the over container, otherwise default to the original.\n const [state, setState] = useState<{\n container?: MosaicContainerProps<any>;\n OverlayComponent?: MosaicTileComponent<any>;\n }>({});\n\n const timer = useRef<ReturnType<typeof setTimeout>>();\n\n useEffect(() => {\n if (activeItem) {\n let container: MosaicContainerProps<any> | undefined;\n let OverlayComponent: MosaicTileComponent<any> | undefined;\n if (overItem?.path) {\n container = containers[Path.first(overItem.path)];\n OverlayComponent = container?.Component;\n }\n\n if (!OverlayComponent) {\n container = containers[Path.first(activeItem.path)];\n OverlayComponent = container?.Component ?? DefaultComponent;\n }\n\n // Prevent jitter when transitioning across containers.\n clearTimeout(timer.current);\n timer.current = setTimeout(() => setState({ container, OverlayComponent }), timer.current ? delay : 0);\n } else {\n setState({});\n }\n }, [activeItem, overItem]);\n\n // Ensure the overlay is rendered as soon as there's an active item, then use local state.\n const container = state.container ?? (activeItem && containers[Path.first(activeItem.path)]);\n const OverlayComponent = state.OverlayComponent ?? container?.Component;\n // Fallback is always to the active (origin) container.\n const FallbackComponent = (activeItem && containers[Path.first(activeItem.path)])?.Component ?? DefaultComponent;\n\n // NOTE: The DragOverlay wrapper element must always be mounted to support animations. Conditionally render the content.\n return (\n // TODO(burdon): Set custom animations (e.g., in/out/around).\n <DragOverlay adjustScale={false} {...overlayProps} style={{ ...container?.getOverlayStyle?.() }}>\n {/* TODO(burdon): Configure density via getOverlayProps. */}\n {activeItem?.path && container && OverlayComponent && (\n <OverlayErrorBoundary\n fallback={\n <FallbackComponent\n {...container.getOverlayProps?.()}\n item={activeItem.item}\n path={activeItem.path}\n operation={operation}\n active='overlay'\n />\n }\n >\n <OverlayComponent\n {...container.getOverlayProps?.()}\n item={activeItem.item}\n path={activeItem.path}\n operation={operation}\n active='overlay'\n />\n {debug && (\n <div className='flex flex-wrap mt-1 p-1 bg-neutral-50 dark:bg-neutral-700 text-xs border rounded overflow-hidden gap-1'>\n <span className='truncate'>\n <span className='text-neutral-400'>container </span>\n {container.id}\n </span>\n <span className='truncate'>\n <span className='text-neutral-400'>item </span>\n {activeItem.item.id.slice(0, 8)}\n </span>\n </div>\n )}\n </OverlayErrorBoundary>\n )}\n </DragOverlay>\n );\n};\n\ntype OverlayErrorBoundaryProps = PropsWithChildren<{ fallback?: React.ReactNode }>;\n\nclass OverlayErrorBoundary extends Component<OverlayErrorBoundaryProps> {\n private readonly fallback: React.ReactNode;\n\n constructor(props: OverlayErrorBoundaryProps) {\n super(props);\n this.fallback = props.fallback ?? <p>ERROR: ${String(this.state.error)}</p>;\n }\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n override state = {\n error: null,\n };\n\n override componentDidCatch(error: any, info: any) {\n console.warn(error, info);\n }\n\n override render() {\n if (this.state.error) {\n return this.fallback;\n }\n\n return this.props.children;\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SortableContext, horizontalListSortingStrategy, verticalListSortingStrategy } from '@dnd-kit/sortable';\nimport React, { type PropsWithChildren } from 'react';\n\nimport { useContainer, useMosaic } from './hooks';\nimport { type MosaicDataItem } from './types';\nimport { Path } from './util';\n\ntype Direction = 'horizontal' | 'vertical';\n\nexport type MosaicSortableProps<TData extends MosaicDataItem = MosaicDataItem> = PropsWithChildren<{\n id?: string;\n items?: TData[];\n direction?: Direction;\n}>;\n\n/**\n * Mosaic convenience wrapper for dnd-kit SortableContext.\n */\n// TODO(burdon): Remove since just obfuscates SortableContext unless more deeply integrated with useSortableItem.\n// Otherwise accept same props as SortableContext (e.g., verticalListSortingStrategy).\nexport const MosaicSortableContext = ({ id, items = [], direction = 'vertical', children }: MosaicSortableProps) => {\n const { operation, activeItem, overItem } = useMosaic();\n const container = useContainer();\n const contextId = id ?? container.id;\n const Sortable = direction === 'vertical' ? Column : Row;\n\n const ids = items.map((item) => {\n const path = Path.create(contextId, item.id);\n // TODO(wittjosiah): Copied from Tile.tsx. Consider factoring out to ensure logic is consistent.\n const isPreview =\n activeItem &&\n activeItem.item.id === item.id &&\n overItem &&\n (Path.siblings(overItem.path, path) || Path.hasChild(overItem.path, path)) &&\n operation !== 'reject';\n return isPreview ? activeItem.path : path;\n });\n\n return (\n <Sortable id={contextId} items={ids}>\n {children}\n </Sortable>\n );\n};\n\nconst Column = ({ children, id, items }: PropsWithChildren<{ id: string; items: string[] }>) => (\n <SortableContext id={id} items={items} strategy={verticalListSortingStrategy}>\n {children}\n </SortableContext>\n);\n\nconst Row = ({ children, id, items }: PropsWithChildren<{ id: string; items: string[] }>) => (\n <SortableContext id={id} items={items} strategy={horizontalListSortingStrategy}>\n {children}\n </SortableContext>\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type DraggableAttributes, useDraggable, useDroppable } from '@dnd-kit/core';\nimport { defaultAnimateLayoutChanges, useSortable } from '@dnd-kit/sortable';\nimport React from 'react';\nimport type { CSSProperties, ForwardRefExoticComponent, HTMLAttributes, RefAttributes } from 'react';\n\nimport type { MosaicOperation, MosaicTileOverlayProps } from './Container';\nimport { DefaultComponent } from './DefaultComponent';\nimport { useContainer, useMosaic } from './hooks';\nimport type { MosaicDataItem, MosaicDraggedItem } from './types';\nimport { getTransformCSS, Path } from './util';\n\nexport type MosaicActiveType = 'overlay' | 'rearrange' | 'origin' | 'destination';\n\nexport type MosaicTileAction = { id: string; action: string; data?: any };\n\n/**\n * Props passed to mosaic tile.\n */\nexport type MosaicTileProps<TData extends MosaicDataItem = MosaicDataItem, TPosition = unknown> = Pick<\n HTMLAttributes<HTMLDivElement>,\n 'className'\n> &\n MosaicTileOverlayProps & {\n path: string;\n item: TData;\n Component?: MosaicTileComponent<TData, any>;\n position?: TPosition;\n operation?: MosaicOperation;\n active?: MosaicActiveType; // TODO(burdon): Rename state?\n\n // DndKit props.\n isDragging?: boolean;\n isOver?: boolean;\n draggableStyle?: CSSProperties;\n draggableProps?: DraggableAttributes &\n // TODO(wittjosiah): SyntheticListenerMap.\n HTMLAttributes<HTMLElement>;\n\n // TODO(burdon): Generalize events via onAction?\n onSelect?: () => void;\n onRemove?: () => void;\n onNavigate?: () => void;\n onAction?: (action: MosaicTileAction) => void;\n };\n\n/**\n * Mosaic Tile component.\n */\nexport type MosaicTileComponent<\n TData extends MosaicDataItem = MosaicDataItem,\n TElement extends HTMLElement = HTMLDivElement,\n> = ForwardRefExoticComponent<\n RefAttributes<TElement> & Omit<MosaicTileProps<TData>, 'Component' | 'operation'> & { operation: MosaicOperation }\n>;\n\n/**\n * Basic draggable mosaic tile.\n */\nexport const DraggableTile = ({\n path: parentPath,\n item,\n Component = DefaultComponent,\n position,\n draggableStyle,\n ...props\n}: MosaicTileProps<any>) => {\n const { operation } = useMosaic();\n const path = Path.create(parentPath, item.id);\n const { setNodeRef, attributes, listeners, /* transform, */ isDragging } = useDraggable({\n id: path,\n data: { path, item, position } satisfies MosaicDraggedItem,\n });\n\n return (\n <Component\n ref={setNodeRef}\n item={item}\n path={path}\n position={position}\n operation={operation}\n isDragging={isDragging}\n draggableStyle={{\n // TODO(burdon): Override by container?\n // transform: getTransformCSS(transform),\n ...draggableStyle,\n }}\n draggableProps={{ ...attributes, ...listeners }}\n {...props}\n />\n );\n};\n\n/**\n * Basic droppable mosaic tile.\n */\nexport const DroppableTile = ({\n path: parentPath,\n item,\n Component = DefaultComponent,\n position,\n ...props\n}: MosaicTileProps<any>) => {\n const { operation } = useMosaic();\n const path =\n parentPath === item.id\n ? parentPath // If the path is the same as the item id, then this is the root tile.\n : Path.create(parentPath, item.id);\n const { setNodeRef, isOver } = useDroppable({\n id: path,\n data: { path, item, position } satisfies MosaicDraggedItem,\n });\n\n return (\n <Component\n ref={setNodeRef}\n item={item}\n path={path}\n position={position}\n operation={operation}\n isOver={isOver}\n {...props}\n />\n );\n};\n\n/**\n * Mosaic tile that can be sorted.\n */\nexport const SortableTile = ({\n path: parentPath,\n item,\n Component: OverrideComponent,\n position,\n draggableStyle,\n ...props\n}: MosaicTileProps<any, number>) => {\n const { operation, activeItem, overItem } = useMosaic();\n const { transitionDuration, Component: ContainerComponent } = useContainer();\n\n const path = Path.create(parentPath, item.id);\n // Re-use the active path if it's the same item and the item is a preview.\n // This helps dndkit understand that the item is being moved and animate it appropriately.\n const isPreview =\n activeItem &&\n activeItem.item.id === item.id &&\n overItem &&\n !Path.siblings(activeItem.path, overItem.path) &&\n (Path.siblings(overItem.path, path) || Path.hasChild(overItem.path, path)) &&\n operation !== 'reject';\n\n const { setNodeRef, attributes, listeners, transform, isDragging, isOver } = useSortable({\n id: isPreview ? activeItem.path : path,\n data: { path, item, position } satisfies MosaicDraggedItem,\n animateLayoutChanges: (args) =>\n defaultAnimateLayoutChanges({ ...args, wasDragging: item.id !== activeItem?.item.id }),\n });\n\n let active: MosaicActiveType | undefined;\n if (isDragging) {\n if (operation === 'rearrange' || operation === 'reject') {\n active = 'rearrange';\n } else if (activeItem && Path.parent(activeItem.path) !== parentPath) {\n active = 'destination';\n } else {\n active = 'origin';\n }\n }\n\n const Component = OverrideComponent ?? ContainerComponent ?? DefaultComponent;\n\n return (\n <Component\n ref={setNodeRef}\n item={item}\n path={path}\n position={position}\n operation={operation}\n active={active}\n isDragging={isDragging}\n isOver={isOver}\n draggableStyle={{\n transform: getTransformCSS(transform),\n transition: transform ? `transform ${transitionDuration}ms ease` : 'none',\n ...draggableStyle,\n }}\n draggableProps={{ ...attributes, ...listeners }}\n {...props}\n />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type FC } from 'react';\n\nimport {\n MosaicContainer,\n type MosaicContainerProps as NaturalMosaicContainerProps,\n type MosaicMoveEvent as NaturalMosaicMoveEvent,\n type MosaicDropEvent as NaturalMosaicDropEvent,\n type MosaicOperation as NaturalMosaicOperation,\n} from './Container';\nimport { Debug, type DebugProps } from './Debug';\nimport { DefaultComponent } from './DefaultComponent';\nimport { MosaicDragOverlay, type MosaicDragOverlayProps } from './DragOverlay';\nimport { MosaicRoot, type MosaicRootProps as NaturalMosaicRootProps } from './Root';\nimport { MosaicSortableContext, type MosaicSortableProps as NaturalMosaicSortableProps } from './SortableContext';\nimport {\n DraggableTile,\n DroppableTile,\n SortableTile,\n type MosaicTileAction as NaturalMosaicTileAction,\n type MosaicTileProps as NaturalMosaicTileProps,\n type MosaicTileComponent as NaturalMosaicTileComponent,\n type MosaicActiveType as NaturalMosaicActiveType,\n} from './Tile';\nimport { type MosaicDataItem } from './types';\n\nexport const Mosaic = {\n Root: MosaicRoot,\n Container: MosaicContainer,\n DragOverlay: MosaicDragOverlay,\n SortableContext: MosaicSortableContext,\n DraggableTile,\n DroppableTile,\n SortableTile,\n\n // TODO(wittjosiah): Consider factoring out or using inline styles instead depending on DXOS UI theme/tailwind.\n DefaultComponent,\n // TODO(burdon): Don't export; move to util.\n Debug,\n} as {\n Root: FC<MosaicRootProps>;\n Container: FC<MosaicContainerProps<any, any>>;\n DragOverlay: FC<MosaicOverlayProps>;\n SortableContext: FC<MosaicSortableProps>;\n DraggableTile: FC<MosaicTileProps<any, any>>;\n DroppableTile: FC<MosaicTileProps<any, any>>;\n SortableTile: FC<MosaicTileProps<any, number>>;\n\n DefaultComponent: MosaicTileComponent;\n Debug: FC<MosaicDebugProps>;\n};\n\nexport type MosaicRootProps = NaturalMosaicRootProps;\n\nexport type MosaicContainerProps<\n TData extends MosaicDataItem = MosaicDataItem,\n TPosition = unknown,\n> = NaturalMosaicContainerProps<TData, TPosition>;\n\nexport type MosaicOverlayProps = MosaicDragOverlayProps;\n\nexport type MosaicSortableProps = NaturalMosaicSortableProps;\n\nexport type MosaicTileAction = NaturalMosaicTileAction;\n\nexport type MosaicTileProps<\n TData extends MosaicDataItem = MosaicDataItem,\n TPosition = unknown,\n> = NaturalMosaicTileProps<TData, TPosition>;\n\nexport type MosaicTileComponent<\n TData extends MosaicDataItem = MosaicDataItem,\n TElement extends HTMLElement = HTMLDivElement,\n> = NaturalMosaicTileComponent<TData, TElement>;\n\nexport type MosaicMoveEvent<TPosition = unknown> = NaturalMosaicMoveEvent<TPosition>;\nexport type MosaicDropEvent<TPosition = unknown> = NaturalMosaicDropEvent<TPosition>;\nexport type MosaicOperation = NaturalMosaicOperation;\nexport type MosaicActiveType = NaturalMosaicActiveType;\n\n// TODO(burdon): Remove.\nexport type MosaicDebugProps = DebugProps;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport type Size = { x: number; y: number };\nexport type Position = { x: number; y: number };\nexport type Dimension = { width: number; height: number };\nexport type Bounds = { left: number; top: number; width: number; height: number };\n\nexport const createMatrix = <TValue>(size: Size, value: (position: Position) => TValue): TValue[][] => {\n const matrix: TValue[][] = [];\n for (let x = 0; x < size.x; x++) {\n matrix.push(Array.from({ length: size.y }, (_, y) => value({ x, y })));\n }\n\n return matrix;\n};\n\nexport const getDimension = ({ width, height }: Dimension, spacing = 0): Dimension => ({\n width: width - spacing * 2,\n height: height - spacing * 2,\n});\n\nexport const getBounds = ({ x, y }: Position, { width, height }: Dimension, spacing = 0): Bounds => ({\n left: x * width + spacing * 2,\n top: y * height + spacing * 2,\n width: width - spacing * 2,\n height: height - spacing * 2,\n});\n\nexport const getPanelBounds = ({ x, y }: Position, { width, height }: Dimension, spacing = 0): Dimension => ({\n width: x * width + spacing * 2,\n height: y * height + spacing * 2,\n});\n\nexport const calculateCellWidth = (\n defaultWidth: number,\n screenWidth: number,\n options: { min: number; max: number } = { min: 260, max: 400 },\n) => {\n return screenWidth > options.min && screenWidth < options.max ? screenWidth : defaultWidth;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useDroppable } from '@dnd-kit/core';\nimport { PlusCircle } from '@phosphor-icons/react';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport React, { type FC, useState, useMemo, useEffect } from 'react';\nimport { useResizeDetector } from 'react-resize-detector';\n\nimport { Button, useMediaQuery } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport {\n calculateCellWidth,\n createMatrix,\n getBounds,\n getDimension,\n getPanelBounds,\n type Dimension,\n type Position,\n type Size,\n} from './layout';\nimport {\n type MosaicContainerProps,\n type MosaicDataItem,\n type MosaicTileAction,\n Mosaic,\n Path,\n useMosaic,\n} from '../../mosaic';\n\n//\n// Selection\n//\n\n// TODO(burdon): Factor out as mosaic standard.\ntype ControlledSelection = {\n selected?: string;\n onSelect?: (id: string) => void;\n};\n\n//\n// Context.\n//\n\ntype GridOptions = {\n size: Size;\n cellBounds: Dimension;\n spacing?: number;\n};\n\nconst defaultGridOptions: GridOptions = {\n size: { x: 8, y: 8 },\n cellBounds: { width: 272, height: 272 },\n spacing: 6,\n};\n\n//\n// Container.\n//\n\nexport type GridLayout = { [id: string]: Position };\n\nexport type GridProps<TData extends MosaicDataItem = MosaicDataItem> = MosaicContainerProps<TData, Position> &\n ControlledSelection & {\n items?: TData[];\n layout?: GridLayout;\n options?: Partial<GridOptions>;\n margin?: boolean;\n square?: boolean;\n debug?: boolean;\n onCreate?: (position: Position) => void;\n onAction?: (action: MosaicTileAction) => void; // TODO(burdon): Standardize across mosaics?\n };\n\n/**\n * Grid content.\n */\n// TODO(burdon): Make generic (and forwardRef).\nexport const Grid = ({\n id,\n items = [],\n layout = {},\n options: opts,\n margin,\n square = true,\n debug,\n selected: controlledSelected,\n Component = Mosaic.DefaultComponent,\n className,\n onDrop,\n onOver,\n onSelect,\n onCreate,\n onAction,\n}: GridProps) => {\n const { ref: containerRef, width, height } = useResizeDetector({ refreshRate: 200 });\n const options = defaultsDeep({}, opts, defaultGridOptions);\n const { matrix, bounds, cellBounds } = useMemo(() => {\n // Change default cell bounds to screen width if mobile.\n const cellWidth = calculateCellWidth(options.cellBounds.width, width ?? 0);\n const cellBounds = {\n width: cellWidth,\n height: square ? cellWidth : options.cellBounds.height,\n };\n\n return {\n matrix: createMatrix(options.size, ({ x, y }) => ({ x, y })),\n bounds: getPanelBounds(options.size, cellBounds, options.spacing),\n cellBounds,\n };\n }, [options, width]);\n\n // No margin if mobile.\n const [isNotMobile] = useMediaQuery('md');\n const marginSize = margin && !isNotMobile ? Math.max(cellBounds.width, cellBounds.height) : 0;\n\n const [selected, setSelected] = useState(controlledSelected);\n useEffect(() => {\n setSelected(controlledSelected);\n if (controlledSelected) {\n scrollToCenter(controlledSelected);\n }\n }, [controlledSelected]);\n\n const scrollToCenter = (id: string) => {\n const item = items.find((item) => item.id === id);\n if (item && width && height) {\n const pos = getBounds(layout[item.id], cellBounds);\n const top = pos.top + marginSize - (height - cellBounds.height) / 2;\n const left = pos.left + marginSize - (width - cellBounds.width) / 2;\n containerRef.current!.scrollTo({ top, left, behavior: 'smooth' });\n }\n };\n\n // TODO(burdon): Focus ring/navigation.\n // TODO(burdon): Set center point on container (via translation?) Scale container to zoom.\n const handleSelect = (id: string) => {\n setSelected(id);\n scrollToCenter(id);\n onSelect?.(id);\n };\n\n useEffect(() => {\n if (selected) {\n scrollToCenter(selected);\n }\n }, [selected, width, height]);\n\n return (\n <Mosaic.Container\n {...{\n id,\n Component,\n getOverlayProps: () => ({ grow: true }),\n getOverlayStyle: () => ({ display: 'flex', ...getDimension(cellBounds, options.spacing) }),\n onDrop,\n onOver,\n }}\n >\n <div className={mx('flex grow overflow-auto', className)}>\n {/* TODO(burdon): Tailwind classes aren't currently processed by labs. */}\n <div ref={containerRef} className={mx('grow overflow-auto snap-x md:snap-none snap-mandatory')}>\n <div className='group block relative' style={{ ...bounds, margin: marginSize }}>\n {matrix && (\n <div style={{ padding: options.spacing }}>\n <div className='relative'>\n {matrix.map((row) =>\n row.map(({ x, y }) => (\n <GridCell\n key={`${x}-${y}`}\n path={id}\n position={{ x, y }}\n bounds={getBounds({ x, y }, cellBounds)}\n padding={options.spacing}\n onCreate={onCreate}\n />\n )),\n )}\n </div>\n </div>\n )}\n\n <div>\n {items.map((item) => {\n const position = layout[item.id] ?? { x: 0, y: 0 };\n return (\n <Mosaic.DraggableTile\n key={item.id}\n item={item}\n path={id}\n position={position}\n Component={Component}\n draggableStyle={{\n position: 'absolute',\n ...getBounds(position, cellBounds, options.spacing),\n }}\n onSelect={() => handleSelect(item.id)}\n onAction={onAction}\n // debug={debug}\n />\n );\n })}\n </div>\n </div>\n\n {debug && <Mosaic.Debug data={{ items: items?.length }} position='bottom-right' />}\n </div>\n </div>\n </Mosaic.Container>\n );\n};\n\n/**\n * Grid cell.\n */\nconst GridCell: FC<{\n path: string;\n position: Position;\n bounds: Dimension;\n padding?: number;\n onCreate?: (position: Position) => void;\n}> = ({ path, position, bounds, padding, onCreate }) => {\n const { overItem } = useMosaic();\n const isOverContainer = path === overItem?.path;\n const { setNodeRef, isOver } = useDroppable({\n id: Path.create(path, 'cell', `${position.x}-${position.y}`),\n data: { path, position },\n });\n\n return (\n <div\n ref={setNodeRef}\n style={{ ...bounds, padding }}\n className='absolute flex justify-center items-center grow select-none cursor-pointer'\n >\n <div\n className={mx(\n 'group/cell flex group-hover:flex w-full h-full items-center justify-center',\n 'box-border border-dashed border-4 border-neutral-75 dark:border-neutral-850 rounded-lg',\n 'transition ease-in-out duration-300',\n isOver && 'flex bg-neutral-75 dark:bg-neutral-850 border-neutral-200 dark:border-neutral-800',\n )}\n >\n <div\n className={mx(\n 'opacity-10 transition ease-in-out duration-300 group-hover/cell:opacity-100',\n isOverContainer && 'hidden',\n )}\n >\n {onCreate && (\n // TODO(burdon): Style button.\n <Button variant='ghost' onClick={() => onCreate(position)}>\n <PlusCircle className={getSize(8)} />\n </Button>\n )}\n </div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { forwardRef, useMemo } from 'react';\n\nimport { Card } from '@dxos/react-ui';\nimport { groupSurface, mx } from '@dxos/react-ui-theme';\n\nimport {\n Mosaic,\n type MosaicContainerProps,\n type MosaicDataItem,\n type MosaicTileComponent,\n Path,\n useItemsWithPreview,\n useContainer,\n} from '../../mosaic';\n\n// Example:\n// https://master--5fc05e08a4a65d0021ae0bf2.chromatic.com/?path=/story/presets-sortable-multiple-containers--basic-setup\n\nexport type KanbanColumn<TData extends MosaicDataItem = MosaicDataItem> = MosaicDataItem & {\n title: string;\n items: TData[];\n};\n\nexport type KanbanProps<TData extends MosaicDataItem = MosaicDataItem> = MosaicContainerProps<TData, number> & {\n columns: KanbanColumn<TData>[];\n debug?: boolean;\n};\n\nexport const Kanban = ({\n id,\n columns,\n Component: TileComponent = Mosaic.DefaultComponent,\n debug,\n onDrop,\n}: KanbanProps) => {\n const Component = useMemo(() => OverlayComponent(id, TileComponent), [id, TileComponent]);\n\n return (\n <Mosaic.Container\n {...{\n id,\n debug,\n Component,\n // Restrict columns to x-axis.\n modifier: ({ path, item }, { transform }) =>\n path === Path.create(id, item.id) ? { ...transform, y: 0 } : transform,\n // Restrict to objects from other columns.\n // TODO(burdon): Consider objects from other containers.\n // TODO(wittjosiah): Allow override.\n onOver: ({ active, over }) => (Path.length(active.path) >= Path.length(over.path) ? 'transfer' : 'reject'),\n onDrop,\n }}\n >\n <div className='grow flex overflow-y-hidden overflow-x-auto'>\n <div className='flex'>\n <Mosaic.SortableContext items={columns} direction='horizontal'>\n {columns.map((column, index) => (\n <Mosaic.SortableTile\n key={column.id}\n item={column}\n path={id}\n position={index}\n Component={Component}\n debug={debug}\n />\n ))}\n </Mosaic.SortableContext>\n </div>\n </div>\n </Mosaic.Container>\n );\n};\n\nconst OverlayComponent = (id: string, Component: MosaicTileComponent<any>): MosaicTileComponent<any> =>\n forwardRef((props, ref) => {\n const isColumn = Path.hasRoot(props.path, id) && Path.length(props.path) === 2;\n if (isColumn && props.active === 'overlay') {\n return (\n // Needs to not override the main kanban path.\n <Mosaic.Container {...{ id: `${id}-active`, Component }}>\n <KanbanColumnComponent {...props} ref={ref} />\n </Mosaic.Container>\n );\n }\n\n return isColumn ? <KanbanColumnComponent {...props} ref={ref} /> : <Component {...props} ref={ref} />;\n });\n\nconst KanbanColumnComponent: MosaicTileComponent<KanbanColumn> = forwardRef(\n ({ path, item, active, draggableStyle, draggableProps, debug }, forwardRef) => {\n const { id, title, items } = item;\n const { Component } = useContainer();\n const itemsWithPreview = useItemsWithPreview({ path, items });\n\n return (\n <div role='none' className='grow flex flex-col' ref={forwardRef}>\n <div\n className={mx(\n groupSurface,\n 'grow flex flex-col w-[300px] snap-center overflow-hidden m-1',\n active === 'rearrange' && 'opacity-0',\n )}\n style={draggableStyle}\n >\n <Card.Root classNames='shrink-0 bg-cyan-200'>\n <Card.Header>\n <Card.DragHandle {...draggableProps} />\n <Card.Title title={title} />\n <Card.Menu />\n </Card.Header>\n </Card.Root>\n\n <div className={mx('flex flex-col grow overflow-y-scroll')}>\n <div className='flex flex-col my-1'>\n <Mosaic.SortableContext id={path} items={itemsWithPreview} direction='vertical'>\n {itemsWithPreview.map((item, index) => (\n <Mosaic.SortableTile\n key={item.id}\n item={item}\n path={path}\n position={index}\n Component={Component!}\n className='m-1'\n // debug={debug}\n />\n ))}\n </Mosaic.SortableContext>\n </div>\n </div>\n {debug && <Mosaic.Debug data={{ path, id, items: itemsWithPreview.length }} />}\n </div>\n </div>\n );\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { Mosaic, type MosaicContainerProps, type MosaicDataItem, useItemsWithPreview } from '../../mosaic';\n\nexport type Direction = 'horizontal' | 'vertical';\n\nexport type StackProps<TData extends MosaicDataItem = MosaicDataItem> = MosaicContainerProps<TData, number> & {\n items?: TData[];\n direction?: Direction;\n debug?: boolean;\n};\n\n// TODO(burdon): Make generic (and forwardRef).\nexport const Stack = ({\n id,\n Component = Mosaic.DefaultComponent,\n onOver,\n onDrop,\n items = [],\n direction = 'vertical',\n debug,\n}: StackProps) => {\n const itemsWithPreview = useItemsWithPreview({ path: id, items });\n\n return (\n <div className={mx('flex overflow-hidden', direction === 'vertical' && 'w-[300px]')}>\n <div\n className={mx('flex flex-col w-full my-1', direction === 'vertical' ? 'overflow-y-auto' : 'overflow-x-auto')}\n >\n <Mosaic.Container {...{ id, Component, onOver, onDrop }}>\n <Mosaic.SortableContext items={itemsWithPreview} direction={direction}>\n {itemsWithPreview.map((item, index) => (\n <Mosaic.SortableTile\n key={item.id}\n item={item}\n path={id}\n position={index}\n className='m-1'\n // debug={debug}\n />\n ))}\n </Mosaic.SortableContext>\n </Mosaic.Container>\n {debug && (\n <div className='grow'>\n <Mosaic.Debug data={{ id, items: itemsWithPreview.length }} />\n </div>\n )}\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { forwardRef } from 'react';\n\nimport { Card, Tree as TreeComponent, TreeItem as TreeItemComponent } from '@dxos/react-ui';\nimport { dropRing, mx } from '@dxos/react-ui-theme';\n\nimport {\n type MosaicContainerProps,\n Mosaic,\n type MosaicDataItem,\n type MosaicTileComponent,\n useContainer,\n useMosaic,\n Path,\n useItemsWithOrigin,\n} from '../../mosaic';\n\n// TODO(burdon): Tree data model that provides a pure abstraction of the plugin Graph.\n// - The Tree (like Stack, Grid) is a high level container that assembles Radix style DXOS UI components from a model.\n// - Models in general should be easily mapped from the Graph and/or ECHO queries.\n// - See: https://master--5fc05e08a4a65d0021ae0bf2.chromatic.com/?path=/story/examples-tree-sortable--basic-setup\n\nexport type TreeProps<TData extends MosaicDataItem = TreeData> = MosaicContainerProps<TData, number> & {\n items?: TData[];\n debug?: boolean;\n};\n\nexport type TreeData = {\n id: string;\n label?: string; // TODO(burdon): Provide adapter.\n children: TreeData[];\n};\n\n// TODO(burdon): Make generic (and forwardRef).\nexport const Tree = ({ id, Component = TreeItem, onOver, onDrop, items = [], debug }: TreeProps) => {\n return (\n <Mosaic.Container\n {...{\n id,\n debug,\n Component,\n onOver,\n onDrop,\n }}\n >\n <TreeRoot items={items} />\n </Mosaic.Container>\n );\n};\n\nconst TreeRoot = ({ items }: { items: TreeData[] }) => {\n const { id, Component } = useContainer();\n const itemsWithOrigin = useItemsWithOrigin(id, items);\n\n return (\n <TreeComponent.Root classNames='flex flex-col'>\n <Mosaic.SortableContext id={id} items={itemsWithOrigin} direction='vertical'>\n {itemsWithOrigin.map((item, index) => (\n <TreeItemComponent.Root key={item.id} collapsible defaultOpen>\n <Mosaic.SortableTile item={item} path={id} position={index} Component={Component!} />\n </TreeItemComponent.Root>\n ))}\n </Mosaic.SortableContext>\n </TreeComponent.Root>\n );\n};\n\n/**\n * Pure component that is used by the mosaic overlay.\n */\nconst TreeItem: MosaicTileComponent<TreeData> = forwardRef(\n ({ path, draggableStyle, draggableProps, item, operation, active, isOver, isDragging, className }, forwardedRef) => {\n return (\n <div\n ref={forwardedRef}\n style={draggableStyle}\n className={mx(\n 'flex flex-col rounded',\n className,\n (active === 'rearrange' || active === 'origin') && 'opacity-0',\n active === 'destination' && 'opacity-20',\n isOver && dropRing,\n )}\n >\n <Card.Header>\n <Card.DragHandle {...draggableProps} />\n <Card.Title title={item.label ?? path} classNames='truncate' />\n </Card.Header>\n\n {!active && item.children && <TreeBranch path={path} items={item.children} />}\n </div>\n );\n },\n);\n\nconst TreeBranch = ({ path, items }: { path: string; items: TreeData[] }) => {\n const { operation, overItem } = useMosaic();\n const { Component } = useContainer();\n const itemsWithOrigin = useItemsWithOrigin(path, items);\n\n return (\n <TreeItemComponent.Body className='pis-4'>\n <Mosaic.SortableContext id={path} items={itemsWithOrigin} direction='vertical'>\n {itemsWithOrigin.map((child, index) => (\n <TreeComponent.Branch key={child.id}>\n <TreeItemComponent.Root collapsible defaultOpen>\n <Mosaic.SortableTile\n item={child}\n path={path}\n position={index}\n Component={Component!}\n isOver={\n overItem?.path === Path.create(path, child.id) && (operation === 'transfer' || operation === 'copy')\n }\n />\n </TreeItemComponent.Root>\n </TreeComponent.Branch>\n ))}\n </Mosaic.SortableContext>\n </TreeItemComponent.Body>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["useContext", "raise", "React", "createContext", "useEffect", "DEFAULT_TRANSITION", "MosaicContainerContext", "createContext", "undefined", "MosaicContainer", "children", "id", "debug", "Component", "transitionDuration", "modifier", "getOverlayProps", "getOverlayStyle", "onOver", "onDrop", "mosaic", "useMosaic", "container", "useEffect", "setContainer", "Object", "values", "Provider", "value", "useContainer", "useContext", "MosaicContainerContext", "raise", "Error", "useEffect", "useState", "useContext", "raise", "DndContext", "KeyboardSensor", "MouseSensor", "pointerWithin", "rectIntersection", "TouchSensor", "useSensor", "useSensors", "sortableKeyboardCoordinates", "pick", "React", "createContext", "useState", "createPortal", "React", "mx", "Debug", "data", "position", "React", "pre", "className", "mx", "JSON", "stringify", "undefined", "React", "forwardRef", "Card", "arrayMove", "swapItems", "items", "from", "to", "fromIndex", "findIndex", "item", "id", "toIndex", "arrayMove", "SEPARATOR", "Path", "create", "args", "join", "parts", "path", "split", "length", "first", "last", "at", "parent", "slice", "hasRoot", "id", "hasChild", "compare", "hasDescendent", "startsWith", "siblings", "onPath", "includes", "CSS", "getTransformCSS", "transform", "CSS", "Transform", "toString", "Object", "assign", "scaleX", "scaleY", "undefined", "DefaultComponent", "forwardRef", "draggableStyle", "draggableProps", "item", "id", "path", "React", "Card", "Root", "ref", "style", "Header", "DragHandle", "Title", "title", "Path", "create", "classNames", "displayName", "DEFAULT_COMPONENT_ID", "MosaicContext", "createContext", "undefined", "MosaicRoot", "Component", "DefaultComponent", "debug", "children", "containers", "setContainers", "useState", "id", "handleSetContainer", "container", "_", "rest", "activeItem", "setActiveItem", "overItem", "setOverItem", "operation", "setOperation", "collisionDetection", "args", "pointerCollisions", "pointerWithin", "length", "rectIntersection", "modifiers", "props", "transform", "Path", "first", "path", "modifier", "sensors", "useSensors", "useSensor", "MouseSensor", "activationConstraint", "distance", "TouchSensor", "delay", "tolerance", "KeyboardSensor", "coordinateGetter", "sortableKeyboardCoordinates", "handleDragStart", "event", "pick", "active", "data", "current", "handleDragMove", "handleDragOver", "over", "item", "activeContainer", "overContainer", "onOver", "parent", "handleDragCancel", "handleDragEnd", "position", "onDrop", "setTimeout", "transitionDuration", "DEFAULT_TRANSITION", "React", "Provider", "value", "setContainer", "DndContext", "cancelDrop", "onDragStart", "onDragMove", "onDragOver", "onDragCancel", "onDragEnd", "createPortal", "MosaicDebug", "document", "body", "Debug", "Object", "keys", "map", "slice", "create", "parts", "part", "useMosaic", "useContext", "MosaicContext", "raise", "Error", "useItemsWithPreview", "path", "items", "operation", "activeItem", "overItem", "useMosaic", "itemsWithPreview", "setItemsWithPreview", "useState", "overParent", "Path", "parent", "lastOverParent", "setLastOverParent", "useEffect", "undefined", "activeIsChild", "hasChild", "overIsChild", "overSelf", "position", "slice", "item", "filter", "id", "length", "useItemsWithOrigin", "path", "items", "operation", "activeItem", "overItem", "useMosaic", "activeIsChild", "Path", "hasChild", "overIsChild", "map", "item", "id", "DragOverlay", "React", "Component", "useEffect", "useRef", "useState", "MosaicDragOverlay", "delay", "debug", "overlayProps", "containers", "operation", "activeItem", "overItem", "useMosaic", "state", "setState", "useState", "timer", "useRef", "useEffect", "container", "OverlayComponent", "path", "Path", "first", "Component", "DefaultComponent", "clearTimeout", "current", "setTimeout", "FallbackComponent", "React", "DragOverlay", "adjustScale", "style", "getOverlayStyle", "OverlayErrorBoundary", "fallback", "getOverlayProps", "item", "active", "div", "className", "span", "id", "slice", "constructor", "props", "error", "p", "String", "getDerivedStateFromError", "componentDidCatch", "info", "console", "warn", "render", "children", "SortableContext", "horizontalListSortingStrategy", "verticalListSortingStrategy", "React", "MosaicSortableContext", "id", "items", "direction", "children", "operation", "activeItem", "overItem", "useMosaic", "container", "useContainer", "contextId", "Sortable", "Column", "Row", "ids", "map", "item", "path", "Path", "create", "isPreview", "siblings", "hasChild", "React", "SortableContext", "strategy", "verticalListSortingStrategy", "horizontalListSortingStrategy", "useDraggable", "useDroppable", "defaultAnimateLayoutChanges", "useSortable", "React", "DraggableTile", "path", "parentPath", "item", "Component", "DefaultComponent", "position", "draggableStyle", "props", "operation", "useMosaic", "Path", "create", "id", "setNodeRef", "attributes", "listeners", "isDragging", "useDraggable", "data", "React", "ref", "draggableProps", "DroppableTile", "isOver", "useDroppable", "SortableTile", "OverrideComponent", "activeItem", "overItem", "transitionDuration", "ContainerComponent", "useContainer", "isPreview", "siblings", "hasChild", "transform", "useSortable", "animateLayoutChanges", "args", "defaultAnimateLayoutChanges", "wasDragging", "active", "parent", "getTransformCSS", "transition", "Mosaic", "Root", "MosaicRoot", "Container", "MosaicContainer", "DragOverlay", "MosaicDragOverlay", "SortableContext", "MosaicSortableContext", "DraggableTile", "DroppableTile", "SortableTile", "DefaultComponent", "Debug", "createMatrix", "size", "value", "matrix", "x", "push", "Array", "from", "length", "y", "_", "getDimension", "width", "height", "spacing", "getBounds", "left", "top", "getPanelBounds", "calculateCellWidth", "defaultWidth", "screenWidth", "options", "min", "max", "useDroppable", "PlusCircle", "defaultsDeep", "React", "useState", "useMemo", "useEffect", "useResizeDetector", "Button", "useMediaQuery", "getSize", "mx", "defaultGridOptions", "size", "x", "y", "cellBounds", "width", "height", "spacing", "Grid", "id", "items", "layout", "options", "opts", "margin", "square", "debug", "selected", "controlledSelected", "Component", "Mosaic", "DefaultComponent", "className", "onDrop", "onOver", "onSelect", "onCreate", "onAction", "ref", "containerRef", "useResizeDetector", "refreshRate", "defaultsDeep", "matrix", "bounds", "useMemo", "cellWidth", "calculateCellWidth", "createMatrix", "getPanelBounds", "isNotMobile", "useMediaQuery", "marginSize", "Math", "max", "setSelected", "useState", "useEffect", "scrollToCenter", "item", "find", "pos", "getBounds", "top", "left", "current", "scrollTo", "behavior", "handleSelect", "React", "Container", "getOverlayProps", "grow", "getOverlayStyle", "display", "getDimension", "div", "mx", "style", "padding", "map", "row", "GridCell", "key", "path", "position", "DraggableTile", "draggableStyle", "Debug", "data", "length", "overItem", "useMosaic", "isOverContainer", "setNodeRef", "isOver", "useDroppable", "Path", "create", "Button", "variant", "onClick", "PlusCircle", "getSize", "React", "forwardRef", "useMemo", "Card", "groupSurface", "mx", "Kanban", "id", "columns", "Component", "TileComponent", "Mosaic", "DefaultComponent", "debug", "onDrop", "useMemo", "OverlayComponent", "React", "Container", "modifier", "path", "item", "transform", "Path", "create", "y", "onOver", "active", "over", "length", "div", "className", "SortableContext", "items", "direction", "map", "column", "index", "SortableTile", "key", "position", "forwardRef", "props", "ref", "isColumn", "hasRoot", "KanbanColumnComponent", "draggableStyle", "draggableProps", "title", "useContainer", "itemsWithPreview", "useItemsWithPreview", "role", "mx", "groupSurface", "style", "Card", "Root", "classNames", "Header", "DragHandle", "Title", "Menu", "Debug", "data", "React", "mx", "Stack", "id", "Component", "Mosaic", "DefaultComponent", "onOver", "onDrop", "items", "direction", "debug", "itemsWithPreview", "useItemsWithPreview", "path", "React", "div", "className", "mx", "Container", "SortableContext", "map", "item", "index", "SortableTile", "key", "position", "Debug", "data", "length", "React", "forwardRef", "Card", "Tree", "TreeComponent", "TreeItem", "TreeItemComponent", "dropRing", "mx", "Tree", "id", "Component", "TreeItem", "onOver", "onDrop", "items", "debug", "React", "Mosaic", "Container", "TreeRoot", "useContainer", "itemsWithOrigin", "useItemsWithOrigin", "TreeComponent", "Root", "classNames", "SortableContext", "direction", "map", "item", "index", "TreeItemComponent", "key", "collapsible", "defaultOpen", "SortableTile", "path", "position", "forwardRef", "draggableStyle", "draggableProps", "operation", "active", "isOver", "isDragging", "className", "forwardedRef", "div", "ref", "style", "mx", "dropRing", "Card", "Header", "DragHandle", "Title", "title", "label", "children", "TreeBranch", "overItem", "useMosaic", "Body", "child", "Branch", "Path", "create"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { useContext } from 'react';\n\nimport { MosaicContainerContext, type MosaicContainerContextType } from '../Container';\nimport { type MosaicDataItem } from '../types';\n\nexport const useContainer = <\n TData extends MosaicDataItem = MosaicDataItem,\n TPosition = unknown,\n>(): MosaicContainerContextType<TData, TPosition> => useContext(MosaicContainerContext);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Modifier } from '@dnd-kit/core';\nimport React, {\n createContext,\n useEffect,\n type CSSProperties,\n type HTMLAttributes,\n type PropsWithChildren,\n} from 'react';\n\nimport { type MosaicTileComponent } from './Tile';\nimport { useMosaic } from './hooks';\nimport { type MosaicDataItem, type MosaicDraggedItem } from './types';\n\n// TODO(wittjosiah): Factor out.\ntype WithRequiredProperty<Type, Key extends keyof Type> = Type & {\n [Property in Key]-?: Type[Property];\n};\n\nexport const DEFAULT_TRANSITION = 200;\nexport const DEFAULT_TYPE = 'unknown';\n\nexport type MosaicTileOverlayProps = {\n grow?: boolean;\n debug?: boolean;\n};\n\n/**\n * Possible operations when dropping a tile.\n *\n * * `transfer` - Remove the tile from it's current path and move to a new path.\n * * `copy` - Add a clone of the tile at a new path.\n * * `rearrange` - Change the order of the tile within it's current path.\n * * `reject` - The tile is not allowed where it was dropped.\n */\n// TODO(wittjosiah): Add 'delete'. Consider adding 'swap'.\nexport type MosaicOperation = 'transfer' | 'copy' | 'rearrange' | 'reject';\n\nexport type MosaicMoveEvent<TPosition = unknown> = {\n active: MosaicDraggedItem<TPosition>;\n over: MosaicDraggedItem<TPosition>;\n};\n\nexport type MosaicDropEvent<TPosition = unknown> = MosaicMoveEvent<TPosition> & {\n operation: MosaicOperation;\n};\n\nexport type MosaicContainerProps<TData extends MosaicDataItem = MosaicDataItem, TPosition = unknown> = Pick<\n HTMLAttributes<HTMLDivElement>,\n 'className'\n> &\n PropsWithChildren<{\n id: string;\n\n // TODO(wittjosiah): Don't expose externally.\n debug?: boolean;\n\n /**\n * Default component used to render tiles.\n */\n Component?: MosaicTileComponent<TData, any>;\n\n /**\n * Default type of tiles.\n */\n type?: string;\n\n /**\n * Length of transition when moving tiles in milliseconds.\n *\n * @default 200\n */\n transitionDuration?: number;\n\n /**\n * Adapter to transform properties while dragging (e.g., constraint axes).\n * https://github.com/clauderic/dnd-kit/blob/master/packages/core/src/modifiers/types.ts\n */\n modifier?: (activeItem: MosaicDraggedItem, ...modifierArgs: Parameters<Modifier>) => ReturnType<Modifier>;\n\n /**\n * Property overrides for the default overlay.\n */\n getOverlayProps?: () => MosaicTileOverlayProps;\n\n /**\n * Style property overrides for the default overlay.\n */\n getOverlayStyle?: () => CSSProperties;\n\n /**\n * Called when a tile is dragged over the container.\n * Returns true if the tile can be dropped.\n */\n onOver?: (event: MosaicMoveEvent<TPosition>) => MosaicOperation;\n\n /**\n * Called when a tile is dropped on the container.\n */\n onDrop?: (event: MosaicDropEvent<TPosition>) => void;\n }>;\n\nexport type MosaicContainerContextType<\n TData extends MosaicDataItem = MosaicDataItem,\n TPosition = unknown,\n> = WithRequiredProperty<Omit<MosaicContainerProps<TData, TPosition>, 'children'>, 'type'>;\n\nexport const MosaicContainerContext = createContext<MosaicContainerContextType<any>>({\n id: 'never',\n type: DEFAULT_TYPE,\n});\n\n/**\n * Root Container that manages the layout of tiles.\n */\nexport const MosaicContainer = ({\n children,\n id,\n debug,\n type = DEFAULT_TYPE,\n Component,\n transitionDuration = DEFAULT_TRANSITION,\n modifier,\n getOverlayProps,\n getOverlayStyle,\n onOver,\n onDrop,\n}: MosaicContainerProps) => {\n const mosaic = useMosaic();\n const container = {\n id,\n debug,\n type,\n Component,\n transitionDuration,\n modifier,\n getOverlayProps,\n getOverlayStyle,\n onOver,\n onDrop,\n };\n\n useEffect(() => {\n mosaic.setContainer(container.id, container);\n return () => {\n // TODO(burdon): The overlay unregisters the container after the tile has re-rendered (removing it).\n // mosaic.setContainer(container.id);\n };\n }, Object.values(container));\n\n return <MosaicContainerContext.Provider value={container}>{children}</MosaicContainerContext.Provider>;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { useMosaic } from './useMosaic';\nimport { type MosaicDataItem } from '../types';\nimport { Path } from '../util';\n\n/**\n * Returns a spliced collection of items including a placeholder if items that could drop,\n * and removing any item that is currently being dragged out.\n */\nexport const useItemsWithPreview = <T extends MosaicDataItem>({ path, items }: { path: string; items: T[] }): T[] => {\n const { operation, activeItem, overItem } = useMosaic();\n const [itemsWithPreview, setItemsWithPreview] = useState(items);\n const overParent =\n // If over the sortable context itself & active item is foreign, then treat self as the parent.\n // This allows items to be appended to the end of the sortable.\n overItem?.path === path && activeItem && Path.parent(activeItem.path) !== overItem.path\n ? path\n : overItem && Path.parent(overItem.path);\n const [lastOverParent, setLastOverParent] = useState(overParent);\n\n useEffect(() => {\n if (!activeItem || !overItem) {\n setLastOverParent(undefined);\n setItemsWithPreview(items);\n return;\n }\n\n if (lastOverParent === overParent) {\n return;\n }\n\n const activeIsChild = Path.hasChild(path, activeItem.path);\n const overIsChild = Path.hasChild(path, overItem.path);\n const overSelf = overItem.path === path;\n\n if (operation === 'reject' || operation === 'rearrange') {\n setLastOverParent(undefined);\n setItemsWithPreview(items);\n return;\n } else {\n setLastOverParent(overParent);\n }\n if (!activeIsChild && overIsChild) {\n // Insert item into sortable.\n setItemsWithPreview((items) => {\n const position = overItem.position as number;\n return [...items.slice(0, position), activeItem.item as T, ...items.slice(position)];\n });\n } else if (!activeIsChild && overSelf) {\n // Append item to end of sortable.\n setItemsWithPreview((items) => [...items, activeItem.item as T]);\n } else if (activeIsChild && !overIsChild) {\n // Remove item being dragged out.\n setItemsWithPreview((items) => items.filter((item) => item.id !== activeItem.item.id));\n } else {\n // Reset items.\n setItemsWithPreview(items);\n }\n }, [operation, activeItem, overItem, overParent, lastOverParent, path, items]);\n\n // In order to avoid render glitching, rather than waiting for the effect to run,\n // immediately return the new items after dropping an item into a new path.\n return items.length === itemsWithPreview.length ? items : itemsWithPreview;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { MosaicContext } from '../Root';\n\nexport const useMosaic = () => useContext(MosaicContext) ?? raise(new Error('Missing MosaicContext'));\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport {\n type CollisionDetection,\n DndContext,\n type DragCancelEvent,\n type DragEndEvent,\n type DragMoveEvent,\n type DragOverEvent,\n type DragStartEvent,\n KeyboardSensor,\n type Modifier,\n MouseSensor,\n pointerWithin,\n rectIntersection,\n TouchSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport { sortableKeyboardCoordinates } from '@dnd-kit/sortable';\nimport pick from 'lodash.pick';\nimport React, { createContext, type FC, type PropsWithChildren, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { DEFAULT_TRANSITION, type MosaicContainerProps, type MosaicMoveEvent, type MosaicOperation } from './Container';\nimport { Debug } from './Debug';\nimport { DefaultComponent } from './DefaultComponent';\nimport { type MosaicTileComponent } from './Tile';\nimport { type MosaicDraggedItem } from './types';\nimport { Path } from './util';\n\nconst DEFAULT_COMPONENT_ID = '__default';\n\nexport type MosaicContextType = {\n containers: Record<string, MosaicContainerProps<any> | undefined>;\n setContainer: (id: string, container?: MosaicContainerProps<any>) => void;\n activeItem: MosaicDraggedItem | undefined;\n overItem: MosaicDraggedItem | undefined;\n operation: MosaicOperation;\n};\n\nexport const MosaicContext = createContext<MosaicContextType | undefined>(undefined);\n\nexport type MosaicRootProps = PropsWithChildren<{\n /**\n * Default component.\n */\n Component?: MosaicTileComponent<any>;\n debug?: boolean;\n}>;\n\n/**\n * Root context provider.\n */\nexport const MosaicRoot: FC<MosaicRootProps> = ({ Component = DefaultComponent, debug, children }) => {\n const [containers, setContainers] = useState<MosaicContextType['containers']>({\n [DEFAULT_COMPONENT_ID]: { id: DEFAULT_COMPONENT_ID, Component },\n });\n\n const handleSetContainer = (id: string, container?: MosaicContainerProps<any>) => {\n setContainers((containers) => {\n if (container) {\n return { ...containers, [id]: container };\n } else {\n const { [id]: _, ...rest } = containers;\n return rest;\n }\n });\n };\n\n const [activeItem, setActiveItem] = useState<MosaicDraggedItem>();\n const [overItem, setOverItem] = useState<MosaicDraggedItem>();\n const [operation, setOperation] = useState<MosaicOperation>('reject');\n\n //\n // DndKit Defaults\n //\n\n /**\n * See: https://docs.dndkit.com/api-documentation/context-provider/collision-detection-algorithms#custom-collision-detection-algorithms\n * See: https://github.com/clauderic/dnd-kit/tree/master/packages/core/src/utilities/algorithms\n */\n // TODO(burdon): Flickering: should not change while animation is happening.\n const collisionDetection: CollisionDetection = (args) => {\n // pointerWithin is the most accurate (since we're using drag handles), but only works with pointer sensors.\n const pointerCollisions = pointerWithin(args);\n if (pointerCollisions.length > 0) {\n return pointerCollisions;\n }\n\n // If there are no collisions with the pointer, return rectangle intersections.\n return rectIntersection(args);\n };\n\n /**\n * Dragging transformation modifiers adaptable by container.\n * See: https://github.com/clauderic/dnd-kit/tree/master/packages/core/src/modifiers\n */\n const modifiers: Modifier = (props) => {\n const { transform } = props;\n if (activeItem) {\n const container = containers[Path.first(activeItem.path)];\n return container?.modifier?.(activeItem, props) ?? transform;\n } else {\n return transform;\n }\n };\n\n /**\n * See: https://github.com/clauderic/dnd-kit/tree/master/packages/core/src/sensors\n */\n const sensors = useSensors(\n useSensor(MouseSensor, {\n activationConstraint: {\n distance: 10,\n },\n }),\n useSensor(TouchSensor, {\n activationConstraint: {\n delay: 200,\n tolerance: 5,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n //\n // Events\n //\n\n const handleDragStart = (event: DragStartEvent) => {\n setActiveItem(pick(event.active.data.current as MosaicDraggedItem, 'path', 'type', 'item', 'position'));\n };\n\n const handleDragMove = (event: DragMoveEvent) => {};\n\n const handleDragOver = (event: DragOverEvent) => {\n const overItem = pick(event.over?.data.current as MosaicDraggedItem, 'path', 'type', 'item', 'position');\n\n // If the over item is the same as the active item, do nothing.\n // This happens when moving between containers where a placeholder of itself is rendered where it will be dropped.\n if (overItem?.item?.id === activeItem?.item.id) {\n return;\n }\n\n const activeContainer = activeItem && containers[Path.first(activeItem.path)];\n const overContainer = overItem?.path && containers[Path.first(overItem.path)];\n if (!event.over || !overItem || !overContainer || !activeItem || !activeContainer) {\n setOperation('reject');\n setOverItem(undefined);\n return;\n }\n\n const onOver = ({ active, over }: MosaicMoveEvent) => {\n if (Path.parent(active.path) === Path.parent(over.path)) {\n return 'rearrange';\n } else if (overContainer.onOver) {\n return overContainer.onOver({ active, over });\n } else {\n return 'reject';\n }\n };\n\n setOperation(onOver({ active: activeItem, over: overItem }));\n setOverItem(overItem);\n };\n\n const handleDragCancel = (event: DragCancelEvent) => {\n setOperation('reject');\n setActiveItem(undefined);\n setOverItem(undefined);\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const overContainer = overItem && containers[Path.first(overItem.path)];\n\n if (\n operation !== 'reject' &&\n activeItem &&\n overItem &&\n (activeItem.path !== overItem.path || activeItem.position !== overItem.position)\n ) {\n const activeContainer = containers[Path.first(activeItem.path)];\n if (activeContainer) {\n activeContainer.onDrop?.({ operation, active: activeItem, over: overItem });\n\n if (overContainer && overContainer !== activeContainer) {\n overContainer.onDrop?.({ operation, active: activeItem, over: overItem });\n }\n }\n }\n\n setTimeout(() => {\n setOperation('reject');\n setOverItem(undefined);\n setActiveItem(undefined);\n }, overContainer?.transitionDuration ?? DEFAULT_TRANSITION);\n };\n\n return (\n <MosaicContext.Provider value={{ containers, setContainer: handleSetContainer, activeItem, overItem, operation }}>\n <DndContext\n collisionDetection={collisionDetection}\n modifiers={[modifiers]}\n sensors={sensors}\n // TODO(burdon): Allow container to veto drop.\n cancelDrop={(event) => false}\n onDragStart={handleDragStart}\n onDragMove={handleDragMove}\n onDragOver={handleDragOver}\n onDragCancel={handleDragCancel}\n onDragEnd={handleDragEnd}\n >\n {children}\n {debug &&\n createPortal(\n <MosaicDebug containers={containers} operation={operation} activeItem={activeItem} overItem={overItem} />,\n document.body,\n )}\n </DndContext>\n </MosaicContext.Provider>\n );\n};\n\nconst MosaicDebug: FC<{\n containers: MosaicContextType['containers'];\n operation: MosaicOperation;\n activeItem?: MosaicDraggedItem;\n overItem?: MosaicDraggedItem;\n}> = ({ containers, operation, activeItem, overItem }) => {\n return (\n <Debug\n position='bottom-right'\n data={{\n containers: Object.keys(containers).map((id) => id),\n operation,\n active: {\n id: activeItem?.item?.id.slice(0, 16),\n path: activeItem?.path && Path.create(...Path.parts(activeItem.path).map((part) => part.slice(0, 16))),\n type: activeItem?.type,\n position: activeItem?.position,\n },\n over: {\n id: overItem?.item?.id.slice(0, 16),\n path: overItem?.path && Path.create(...Path.parts(overItem.path).map((part) => part.slice(0, 16))),\n type: overItem?.type,\n position: overItem?.position,\n },\n }}\n />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type FC } from 'react';\n\nimport { mx } from '@dxos/react-ui-theme';\n\ntype Position = 'bottom-left' | 'bottom-right';\n\nexport type DebugProps = { data: any; position?: Position };\n\nexport const Debug: FC<DebugProps> = ({ data, position }) => (\n <pre\n className={mx(\n 'font-mono text-xs overflow-hidden m-2 p-1 z-[100]',\n 'bg-neutral-50 dark:bg-neutral-700 border border-neutral-300 rounded',\n position === 'bottom-left' && 'fixed left-0 bottom-0',\n position === 'bottom-right' && 'fixed right-0 bottom-0',\n )}\n >\n {JSON.stringify(data, undefined, 1)}\n </pre>\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { forwardRef } from 'react';\n\nimport { Card } from '@dxos/react-ui';\n\nimport { type MosaicTileComponent } from './Tile';\nimport { type MosaicDataItem } from './types';\nimport { Path } from './util';\n\nexport const DefaultComponent: MosaicTileComponent<MosaicDataItem> = forwardRef(\n ({ draggableStyle, draggableProps, item: { id }, path }, forwardRef) => {\n return (\n <Card.Root ref={forwardRef} style={draggableStyle}>\n <Card.Header>\n <Card.DragHandle {...draggableProps} />\n <Card.Title title={Path.create(path, id)} classNames='truncate font-mono text-xs' />\n </Card.Header>\n </Card.Root>\n );\n },\n);\n\nDefaultComponent.displayName = 'DefaultComponent';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { arrayMove } from '@dxos/util';\n\nimport { type MosaicDataItem } from '../types';\n\n// TODO(wittjosiah): Generalize and expand rearrange utilities.\n\nexport const swapItems = <TItem extends MosaicDataItem, TValue extends MosaicDataItem>(\n items: TItem[],\n from: TValue,\n to: TValue,\n): TItem[] => {\n const fromIndex = items.findIndex((item) => item.id === from.id);\n const toIndex = items.findIndex((item) => item.id === to.id);\n return fromIndex !== -1 && toIndex !== -1 ? arrayMove(items, fromIndex, toIndex) : items;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nconst SEPARATOR = '/';\n\nexport const Path = {\n create: (...args: string[]) => args.join(SEPARATOR),\n\n parts: (path: string) => path.split(SEPARATOR),\n length: (path: string) => path.split(SEPARATOR).length,\n first: (path: string) => path.split(SEPARATOR)[0] ?? path,\n last: (path: string) => path.split(SEPARATOR).at(-1) ?? path,\n parent: (path: string) => path.split(SEPARATOR).slice(0, -1).join(SEPARATOR),\n\n hasRoot: (path: string, id: string) => Path.first(path) === id,\n hasChild: (path: string, compare: string) => Path.parent(compare) === path,\n hasDescendent: (path: string, compare: string) => compare !== path && compare.startsWith(path),\n siblings: (path: string, compare: string) => Path.parent(path) === Path.parent(compare),\n onPath: (path: string, id: string) => Path.parts(path).includes(id),\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// https://docs.dndkit.com/api-documentation/draggable/usedraggable#transform\n\nimport { CSS, type Transform } from '@dnd-kit/utilities';\n\nexport const getTransformCSS = (transform: Transform | null) =>\n transform ? CSS.Transform.toString(Object.assign(transform, { scaleX: 1, scaleY: 1 })) : undefined;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useMosaic } from './useMosaic';\nimport { type MosaicDataItem } from '../types';\nimport { Path } from '../util';\n\n// TODO(thure): Harmonize this hook signature with its sibling’s.\nexport const useItemsWithOrigin = <T extends MosaicDataItem>(path: string, items: T[]) => {\n const { operation, activeItem, overItem } = useMosaic();\n\n if (!activeItem || !overItem) {\n return items;\n }\n\n const activeIsChild = Path.hasChild(path, activeItem.path);\n const overIsChild = Path.hasChild(path, overItem.path);\n\n if (activeIsChild && !overIsChild && operation !== 'rearrange') {\n // Change the dnd-id of the origin item that may move to a foreign destination\n return items.map((item) => {\n if (item.id === activeItem.item.id) {\n return { ...item, id: `${item.id}--origin` };\n } else {\n return item;\n }\n });\n } else {\n // Reset items.\n return items;\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DragOverlay } from '@dnd-kit/core';\nimport React, { Component, type PropsWithChildren, useEffect, useRef, useState } from 'react';\n\nimport { type MosaicContainerProps } from './Container';\nimport { DefaultComponent } from './DefaultComponent';\nimport { type MosaicTileComponent } from './Tile';\nimport { useMosaic } from './hooks';\nimport { Path } from './util';\n\nexport type MosaicDragOverlayProps = { delay?: number; debug?: boolean } & Omit<\n React.ComponentProps<typeof DragOverlay>,\n 'children'\n>;\n\n/**\n * Render the currently dragged item of the Mosaic.\n */\nexport const MosaicDragOverlay = ({ delay = 200, debug = false, ...overlayProps }: MosaicDragOverlayProps) => {\n const { containers, operation, activeItem, overItem } = useMosaic();\n\n // Get the overlay component from the over container, otherwise default to the original.\n const [state, setState] = useState<{\n container?: MosaicContainerProps<any>;\n OverlayComponent?: MosaicTileComponent<any>;\n }>({});\n\n const timer = useRef<ReturnType<typeof setTimeout>>();\n\n useEffect(() => {\n if (activeItem) {\n let container: MosaicContainerProps<any> | undefined;\n let OverlayComponent: MosaicTileComponent<any> | undefined;\n if (overItem?.path) {\n container = containers[Path.first(overItem.path)];\n OverlayComponent = container?.Component;\n }\n\n if (!OverlayComponent) {\n container = containers[Path.first(activeItem.path)];\n OverlayComponent = container?.Component ?? DefaultComponent;\n }\n\n // Prevent jitter when transitioning across containers.\n clearTimeout(timer.current);\n timer.current = setTimeout(() => setState({ container, OverlayComponent }), timer.current ? delay : 0);\n } else {\n setState({});\n }\n }, [activeItem, overItem]);\n\n // Ensure the overlay is rendered as soon as there's an active item, then use local state.\n const container = state.container ?? (activeItem && containers[Path.first(activeItem.path)]);\n const OverlayComponent = state.OverlayComponent ?? container?.Component;\n // Fallback is always to the active (origin) container.\n const FallbackComponent = (activeItem && containers[Path.first(activeItem.path)])?.Component ?? DefaultComponent;\n\n // NOTE: The DragOverlay wrapper element must always be mounted to support animations. Conditionally render the content.\n return (\n // TODO(burdon): Set custom animations (e.g., in/out/around).\n <DragOverlay adjustScale={false} {...overlayProps} style={{ ...container?.getOverlayStyle?.() }}>\n {/* TODO(burdon): Configure density via getOverlayProps. */}\n {activeItem?.path && container && OverlayComponent && (\n <OverlayErrorBoundary\n fallback={\n <FallbackComponent\n {...container.getOverlayProps?.()}\n item={activeItem.item}\n path={activeItem.path}\n operation={operation}\n active='overlay'\n />\n }\n >\n <OverlayComponent\n {...container.getOverlayProps?.()}\n item={activeItem.item}\n path={activeItem.path}\n operation={operation}\n active='overlay'\n />\n {debug && (\n <div className='flex flex-wrap mt-1 p-1 bg-neutral-50 dark:bg-neutral-700 text-xs border rounded overflow-hidden gap-1'>\n <span className='truncate'>\n <span className='text-neutral-400'>container </span>\n {container.id}\n </span>\n <span className='truncate'>\n <span className='text-neutral-400'>item </span>\n {activeItem.item.id.slice(0, 8)}\n </span>\n </div>\n )}\n </OverlayErrorBoundary>\n )}\n </DragOverlay>\n );\n};\n\ntype OverlayErrorBoundaryProps = PropsWithChildren<{ fallback?: React.ReactNode }>;\n\nclass OverlayErrorBoundary extends Component<OverlayErrorBoundaryProps> {\n private readonly fallback: React.ReactNode;\n\n constructor(props: OverlayErrorBoundaryProps) {\n super(props);\n this.fallback = props.fallback ?? <p>ERROR: ${String(this.state.error)}</p>;\n }\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n override state = {\n error: null,\n };\n\n override componentDidCatch(error: any, info: any) {\n console.warn(error, info);\n }\n\n override render() {\n if (this.state.error) {\n return this.fallback;\n }\n\n return this.props.children;\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SortableContext, horizontalListSortingStrategy, verticalListSortingStrategy } from '@dnd-kit/sortable';\nimport React, { type PropsWithChildren } from 'react';\n\nimport { useContainer, useMosaic } from './hooks';\nimport { type MosaicDataItem } from './types';\nimport { Path } from './util';\n\ntype Direction = 'horizontal' | 'vertical';\n\nexport type MosaicSortableProps<TData extends MosaicDataItem = MosaicDataItem> = PropsWithChildren<{\n id?: string;\n items?: TData[];\n direction?: Direction;\n}>;\n\n/**\n * Mosaic convenience wrapper for dnd-kit SortableContext.\n */\n// TODO(burdon): Remove since just obfuscates SortableContext unless more deeply integrated with useSortableItem.\n// Otherwise accept same props as SortableContext (e.g., verticalListSortingStrategy).\nexport const MosaicSortableContext = ({ id, items = [], direction = 'vertical', children }: MosaicSortableProps) => {\n const { operation, activeItem, overItem } = useMosaic();\n const container = useContainer();\n const contextId = id ?? container.id;\n const Sortable = direction === 'vertical' ? Column : Row;\n\n const ids = items.map((item) => {\n const path = Path.create(contextId, item.id);\n // TODO(wittjosiah): Copied from Tile.tsx. Consider factoring out to ensure logic is consistent.\n const isPreview =\n activeItem &&\n activeItem.item.id === item.id &&\n overItem &&\n (Path.siblings(overItem.path, path) || Path.hasChild(overItem.path, path)) &&\n operation !== 'reject';\n return isPreview ? activeItem.path : path;\n });\n\n return (\n <Sortable id={contextId} items={ids}>\n {children}\n </Sortable>\n );\n};\n\nconst Column = ({ children, id, items }: PropsWithChildren<{ id: string; items: string[] }>) => (\n <SortableContext id={id} items={items} strategy={verticalListSortingStrategy}>\n {children}\n </SortableContext>\n);\n\nconst Row = ({ children, id, items }: PropsWithChildren<{ id: string; items: string[] }>) => (\n <SortableContext id={id} items={items} strategy={horizontalListSortingStrategy}>\n {children}\n </SortableContext>\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type DraggableAttributes, useDraggable, useDroppable } from '@dnd-kit/core';\nimport { defaultAnimateLayoutChanges, useSortable } from '@dnd-kit/sortable';\nimport React from 'react';\nimport type { CSSProperties, ForwardRefExoticComponent, HTMLAttributes, RefAttributes } from 'react';\n\nimport { DEFAULT_TYPE, type MosaicOperation, type MosaicTileOverlayProps } from './Container';\nimport { DefaultComponent } from './DefaultComponent';\nimport { useContainer, useMosaic } from './hooks';\nimport type { MosaicDataItem, MosaicDraggedItem } from './types';\nimport { getTransformCSS, Path } from './util';\n\nexport type MosaicActiveType = 'overlay' | 'rearrange' | 'origin' | 'destination';\n\nexport type MosaicTileAction = { id: string; action: string; data?: any };\n\n/**\n * Props passed to mosaic tile.\n */\nexport type MosaicTileProps<TData extends MosaicDataItem = MosaicDataItem, TPosition = unknown> = Pick<\n HTMLAttributes<HTMLDivElement>,\n 'className'\n> &\n MosaicTileOverlayProps & {\n path: string;\n item: TData;\n Component?: MosaicTileComponent<TData, any>;\n position?: TPosition;\n type?: string;\n operation?: MosaicOperation;\n active?: MosaicActiveType; // TODO(burdon): Rename state?\n\n // DndKit props.\n isDragging?: boolean;\n isOver?: boolean;\n draggableStyle?: CSSProperties;\n draggableProps?: DraggableAttributes &\n // TODO(wittjosiah): SyntheticListenerMap.\n HTMLAttributes<HTMLElement>;\n\n // TODO(burdon): Generalize events via onAction?\n onSelect?: () => void;\n onRemove?: () => void;\n onNavigate?: () => void;\n onAction?: (action: MosaicTileAction) => void;\n };\n\n/**\n * Mosaic Tile component.\n */\nexport type MosaicTileComponent<\n TData extends MosaicDataItem = MosaicDataItem,\n TElement extends HTMLElement = HTMLDivElement,\n> = ForwardRefExoticComponent<\n RefAttributes<TElement> & Omit<MosaicTileProps<TData>, 'Component' | 'operation'> & { operation: MosaicOperation }\n>;\n\n/**\n * Basic draggable mosaic tile.\n */\nexport const DraggableTile = ({\n path: parentPath,\n type = DEFAULT_TYPE,\n item,\n Component = DefaultComponent,\n position,\n draggableStyle,\n ...props\n}: MosaicTileProps<any>) => {\n const { operation } = useMosaic();\n const path = Path.create(parentPath, item.id);\n const { setNodeRef, attributes, listeners, /* transform, */ isDragging } = useDraggable({\n id: path,\n data: { path, type, item, position } satisfies MosaicDraggedItem,\n });\n\n return (\n <Component\n ref={setNodeRef}\n item={item}\n path={path}\n type={type}\n position={position}\n operation={operation}\n isDragging={isDragging}\n draggableStyle={{\n // TODO(burdon): Override by container?\n // transform: getTransformCSS(transform),\n ...draggableStyle,\n }}\n draggableProps={{ ...attributes, ...listeners }}\n {...props}\n />\n );\n};\n\n/**\n * Basic droppable mosaic tile.\n */\nexport const DroppableTile = ({\n path: parentPath,\n type = DEFAULT_TYPE,\n item,\n Component = DefaultComponent,\n position,\n ...props\n}: MosaicTileProps<any>) => {\n const { operation } = useMosaic();\n const path =\n parentPath === item.id\n ? parentPath // If the path is the same as the item id, then this is the root tile.\n : Path.create(parentPath, item.id);\n const { setNodeRef, isOver } = useDroppable({\n id: path,\n data: { path, type, item, position } satisfies MosaicDraggedItem,\n });\n\n return (\n <Component\n ref={setNodeRef}\n item={item}\n path={path}\n type={type}\n position={position}\n operation={operation}\n isOver={isOver}\n {...props}\n />\n );\n};\n\n/**\n * Mosaic tile that can be sorted.\n */\nexport const SortableTile = ({\n path: parentPath,\n type = DEFAULT_TYPE,\n item,\n Component: OverrideComponent,\n position,\n draggableStyle,\n ...props\n}: MosaicTileProps<any, number>) => {\n const { operation, activeItem, overItem } = useMosaic();\n const { transitionDuration, Component: ContainerComponent } = useContainer();\n\n const path = Path.create(parentPath, item.id);\n // Re-use the active path if it's the same item and the item is a preview.\n // This helps dndkit understand that the item is being moved and animate it appropriately.\n const isPreview =\n activeItem &&\n activeItem.item.id === item.id &&\n overItem &&\n !Path.siblings(activeItem.path, overItem.path) &&\n (Path.siblings(overItem.path, path) || Path.hasChild(overItem.path, path)) &&\n operation !== 'reject';\n\n const { setNodeRef, attributes, listeners, transform, isDragging, isOver } = useSortable({\n id: isPreview ? activeItem.path : path,\n data: { path, type, item, position } satisfies MosaicDraggedItem,\n animateLayoutChanges: (args) =>\n defaultAnimateLayoutChanges({ ...args, wasDragging: item.id !== activeItem?.item.id }),\n });\n\n let active: MosaicActiveType | undefined;\n if (isDragging) {\n if (operation === 'rearrange' || operation === 'reject') {\n active = 'rearrange';\n } else if (activeItem && Path.parent(activeItem.path) !== parentPath) {\n active = 'destination';\n } else {\n active = 'origin';\n }\n }\n\n const Component = OverrideComponent ?? ContainerComponent ?? DefaultComponent;\n\n return (\n <Component\n ref={setNodeRef}\n item={item}\n path={path}\n type={type}\n position={position}\n operation={operation}\n active={active}\n isDragging={isDragging}\n isOver={isOver}\n draggableStyle={{\n transform: getTransformCSS(transform),\n transition: transform ? `transform ${transitionDuration}ms ease` : 'none',\n ...draggableStyle,\n }}\n draggableProps={{ ...attributes, ...listeners }}\n {...props}\n />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type FC } from 'react';\n\nimport {\n MosaicContainer,\n type MosaicContainerProps as NaturalMosaicContainerProps,\n type MosaicMoveEvent as NaturalMosaicMoveEvent,\n type MosaicDropEvent as NaturalMosaicDropEvent,\n type MosaicOperation as NaturalMosaicOperation,\n} from './Container';\nimport { Debug, type DebugProps } from './Debug';\nimport { DefaultComponent } from './DefaultComponent';\nimport { MosaicDragOverlay, type MosaicDragOverlayProps } from './DragOverlay';\nimport { MosaicRoot, type MosaicRootProps as NaturalMosaicRootProps } from './Root';\nimport { MosaicSortableContext, type MosaicSortableProps as NaturalMosaicSortableProps } from './SortableContext';\nimport {\n DraggableTile,\n DroppableTile,\n SortableTile,\n type MosaicTileAction as NaturalMosaicTileAction,\n type MosaicTileProps as NaturalMosaicTileProps,\n type MosaicTileComponent as NaturalMosaicTileComponent,\n type MosaicActiveType as NaturalMosaicActiveType,\n} from './Tile';\nimport { type MosaicDataItem } from './types';\n\nexport const Mosaic = {\n Root: MosaicRoot,\n Container: MosaicContainer,\n DragOverlay: MosaicDragOverlay,\n SortableContext: MosaicSortableContext,\n DraggableTile,\n DroppableTile,\n SortableTile,\n\n // TODO(wittjosiah): Consider factoring out or using inline styles instead depending on DXOS UI theme/tailwind.\n DefaultComponent,\n // TODO(burdon): Don't export; move to util.\n Debug,\n} as {\n Root: FC<MosaicRootProps>;\n Container: FC<MosaicContainerProps<any, any>>;\n DragOverlay: FC<MosaicOverlayProps>;\n SortableContext: FC<MosaicSortableProps>;\n DraggableTile: FC<MosaicTileProps<any, any>>;\n DroppableTile: FC<MosaicTileProps<any, any>>;\n SortableTile: FC<MosaicTileProps<any, number>>;\n\n DefaultComponent: MosaicTileComponent;\n Debug: FC<MosaicDebugProps>;\n};\n\nexport type MosaicRootProps = NaturalMosaicRootProps;\n\nexport type MosaicContainerProps<\n TData extends MosaicDataItem = MosaicDataItem,\n TPosition = unknown,\n> = NaturalMosaicContainerProps<TData, TPosition>;\n\nexport type MosaicOverlayProps = MosaicDragOverlayProps;\n\nexport type MosaicSortableProps = NaturalMosaicSortableProps;\n\nexport type MosaicTileAction = NaturalMosaicTileAction;\n\nexport type MosaicTileProps<\n TData extends MosaicDataItem = MosaicDataItem,\n TPosition = unknown,\n> = NaturalMosaicTileProps<TData, TPosition>;\n\nexport type MosaicTileComponent<\n TData extends MosaicDataItem = MosaicDataItem,\n TElement extends HTMLElement = HTMLDivElement,\n> = NaturalMosaicTileComponent<TData, TElement>;\n\nexport type MosaicMoveEvent<TPosition = unknown> = NaturalMosaicMoveEvent<TPosition>;\nexport type MosaicDropEvent<TPosition = unknown> = NaturalMosaicDropEvent<TPosition>;\nexport type MosaicOperation = NaturalMosaicOperation;\nexport type MosaicActiveType = NaturalMosaicActiveType;\n\n// TODO(burdon): Remove.\nexport type MosaicDebugProps = DebugProps;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport type Size = { x: number; y: number };\nexport type Position = { x: number; y: number };\nexport type Dimension = { width: number; height: number };\nexport type Bounds = { left: number; top: number; width: number; height: number };\n\nexport const createMatrix = <TValue>(size: Size, value: (position: Position) => TValue): TValue[][] => {\n const matrix: TValue[][] = [];\n for (let x = 0; x < size.x; x++) {\n matrix.push(Array.from({ length: size.y }, (_, y) => value({ x, y })));\n }\n\n return matrix;\n};\n\nexport const getDimension = ({ width, height }: Dimension, spacing = 0): Dimension => ({\n width: width - spacing * 2,\n height: height - spacing * 2,\n});\n\nexport const getBounds = ({ x, y }: Position, { width, height }: Dimension, spacing = 0): Bounds => ({\n left: x * width + spacing * 2,\n top: y * height + spacing * 2,\n width: width - spacing * 2,\n height: height - spacing * 2,\n});\n\nexport const getPanelBounds = ({ x, y }: Position, { width, height }: Dimension, spacing = 0): Dimension => ({\n width: x * width + spacing * 2,\n height: y * height + spacing * 2,\n});\n\nexport const calculateCellWidth = (\n defaultWidth: number,\n screenWidth: number,\n options: { min: number; max: number } = { min: 260, max: 400 },\n) => {\n return screenWidth > options.min && screenWidth < options.max ? screenWidth : defaultWidth;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useDroppable } from '@dnd-kit/core';\nimport { PlusCircle } from '@phosphor-icons/react';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport React, { type FC, useState, useMemo, useEffect } from 'react';\nimport { useResizeDetector } from 'react-resize-detector';\n\nimport { Button, useMediaQuery } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport {\n calculateCellWidth,\n createMatrix,\n getBounds,\n getDimension,\n getPanelBounds,\n type Dimension,\n type Position,\n type Size,\n} from './layout';\nimport {\n type MosaicContainerProps,\n type MosaicDataItem,\n type MosaicTileAction,\n Mosaic,\n Path,\n useMosaic,\n} from '../../mosaic';\n\n//\n// Selection\n//\n\n// TODO(burdon): Factor out as mosaic standard.\ntype ControlledSelection = {\n selected?: string;\n onSelect?: (id: string) => void;\n};\n\n//\n// Context.\n//\n\ntype GridOptions = {\n size: Size;\n cellBounds: Dimension;\n spacing?: number;\n};\n\nconst defaultGridOptions: GridOptions = {\n size: { x: 8, y: 8 },\n cellBounds: { width: 272, height: 272 },\n spacing: 6,\n};\n\n//\n// Container.\n//\n\nexport type GridLayout = { [id: string]: Position };\n\nexport type GridProps<TData extends MosaicDataItem = MosaicDataItem> = MosaicContainerProps<TData, Position> &\n ControlledSelection & {\n items?: TData[];\n layout?: GridLayout;\n options?: Partial<GridOptions>;\n margin?: boolean;\n square?: boolean;\n debug?: boolean;\n onCreate?: (position: Position) => void;\n onAction?: (action: MosaicTileAction) => void; // TODO(burdon): Standardize across mosaics?\n };\n\n/**\n * Grid content.\n */\n// TODO(burdon): Make generic (and forwardRef).\nexport const Grid = ({\n id,\n items = [],\n layout = {},\n options: opts,\n margin,\n square = true,\n debug,\n selected: controlledSelected,\n Component = Mosaic.DefaultComponent,\n className,\n onDrop,\n onOver,\n onSelect,\n onCreate,\n onAction,\n}: GridProps) => {\n const { ref: containerRef, width, height } = useResizeDetector({ refreshRate: 200 });\n const options = defaultsDeep({}, opts, defaultGridOptions);\n const { matrix, bounds, cellBounds } = useMemo(() => {\n // Change default cell bounds to screen width if mobile.\n const cellWidth = calculateCellWidth(options.cellBounds.width, width ?? 0);\n const cellBounds = {\n width: cellWidth,\n height: square ? cellWidth : options.cellBounds.height,\n };\n\n return {\n matrix: createMatrix(options.size, ({ x, y }) => ({ x, y })),\n bounds: getPanelBounds(options.size, cellBounds, options.spacing),\n cellBounds,\n };\n }, [options, width]);\n\n // No margin if mobile.\n const [isNotMobile] = useMediaQuery('md');\n const marginSize = margin && !isNotMobile ? Math.max(cellBounds.width, cellBounds.height) : 0;\n\n const [selected, setSelected] = useState(controlledSelected);\n useEffect(() => {\n setSelected(controlledSelected);\n if (controlledSelected) {\n scrollToCenter(controlledSelected);\n }\n }, [controlledSelected]);\n\n const scrollToCenter = (id: string) => {\n const item = items.find((item) => item.id === id);\n if (item && width && height) {\n const pos = getBounds(layout[item.id], cellBounds);\n const top = pos.top + marginSize - (height - cellBounds.height) / 2;\n const left = pos.left + marginSize - (width - cellBounds.width) / 2;\n containerRef.current!.scrollTo({ top, left, behavior: 'smooth' });\n }\n };\n\n // TODO(burdon): Focus ring/navigation.\n // TODO(burdon): Set center point on container (via translation?) Scale container to zoom.\n const handleSelect = (id: string) => {\n setSelected(id);\n scrollToCenter(id);\n onSelect?.(id);\n };\n\n useEffect(() => {\n if (selected) {\n scrollToCenter(selected);\n }\n }, [selected, width, height]);\n\n return (\n <Mosaic.Container\n {...{\n id,\n Component,\n getOverlayProps: () => ({ grow: true }),\n getOverlayStyle: () => ({ display: 'flex', ...getDimension(cellBounds, options.spacing) }),\n onDrop,\n onOver,\n }}\n >\n <div className={mx('flex grow overflow-auto', className)}>\n {/* TODO(burdon): Tailwind classes aren't currently processed by labs. */}\n <div ref={containerRef} className={mx('grow overflow-auto snap-x md:snap-none snap-mandatory')}>\n <div className='group block relative' style={{ ...bounds, margin: marginSize }}>\n {matrix && (\n <div style={{ padding: options.spacing }}>\n <div className='relative'>\n {matrix.map((row) =>\n row.map(({ x, y }) => (\n <GridCell\n key={`${x}-${y}`}\n path={id}\n position={{ x, y }}\n bounds={getBounds({ x, y }, cellBounds)}\n padding={options.spacing}\n onCreate={onCreate}\n />\n )),\n )}\n </div>\n </div>\n )}\n\n <div>\n {items.map((item) => {\n const position = layout[item.id] ?? { x: 0, y: 0 };\n return (\n <Mosaic.DraggableTile\n key={item.id}\n item={item}\n path={id}\n position={position}\n Component={Component}\n draggableStyle={{\n position: 'absolute',\n ...getBounds(position, cellBounds, options.spacing),\n }}\n onSelect={() => handleSelect(item.id)}\n onAction={onAction}\n // debug={debug}\n />\n );\n })}\n </div>\n </div>\n\n {debug && <Mosaic.Debug data={{ items: items?.length }} position='bottom-right' />}\n </div>\n </div>\n </Mosaic.Container>\n );\n};\n\n/**\n * Grid cell.\n */\nconst GridCell: FC<{\n path: string;\n position: Position;\n bounds: Dimension;\n padding?: number;\n onCreate?: (position: Position) => void;\n}> = ({ path, position, bounds, padding, onCreate }) => {\n const { overItem } = useMosaic();\n const isOverContainer = path === overItem?.path;\n const { setNodeRef, isOver } = useDroppable({\n id: Path.create(path, 'cell', `${position.x}-${position.y}`),\n data: { path, position },\n });\n\n return (\n <div\n ref={setNodeRef}\n style={{ ...bounds, padding }}\n className='absolute flex justify-center items-center grow select-none cursor-pointer'\n >\n <div\n className={mx(\n 'group/cell flex group-hover:flex w-full h-full items-center justify-center',\n 'box-border border-dashed border-4 border-neutral-75 dark:border-neutral-850 rounded-lg',\n 'transition ease-in-out duration-300',\n isOver && 'flex bg-neutral-75 dark:bg-neutral-850 border-neutral-200 dark:border-neutral-800',\n )}\n >\n <div\n className={mx(\n 'opacity-10 transition ease-in-out duration-300 group-hover/cell:opacity-100',\n isOverContainer && 'hidden',\n )}\n >\n {onCreate && (\n // TODO(burdon): Style button.\n <Button variant='ghost' onClick={() => onCreate(position)}>\n <PlusCircle className={getSize(8)} />\n </Button>\n )}\n </div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { forwardRef, useMemo } from 'react';\n\nimport { Card } from '@dxos/react-ui';\nimport { groupSurface, mx } from '@dxos/react-ui-theme';\n\nimport {\n Mosaic,\n type MosaicContainerProps,\n type MosaicDataItem,\n type MosaicTileComponent,\n Path,\n useItemsWithPreview,\n useContainer,\n} from '../../mosaic';\n\n// Example:\n// https://master--5fc05e08a4a65d0021ae0bf2.chromatic.com/?path=/story/presets-sortable-multiple-containers--basic-setup\n\nexport type KanbanColumn<TData extends MosaicDataItem = MosaicDataItem> = MosaicDataItem & {\n title: string;\n items: TData[];\n};\n\nexport type KanbanProps<TData extends MosaicDataItem = MosaicDataItem> = MosaicContainerProps<TData, number> & {\n columns: KanbanColumn<TData>[];\n debug?: boolean;\n};\n\nexport const Kanban = ({\n id,\n columns,\n Component: TileComponent = Mosaic.DefaultComponent,\n debug,\n onDrop,\n}: KanbanProps) => {\n const Component = useMemo(() => OverlayComponent(id, TileComponent), [id, TileComponent]);\n\n return (\n <Mosaic.Container\n {...{\n id,\n debug,\n Component,\n // Restrict columns to x-axis.\n modifier: ({ path, item }, { transform }) =>\n path === Path.create(id, item.id) ? { ...transform, y: 0 } : transform,\n // Restrict to objects from other columns.\n // TODO(burdon): Consider objects from other containers.\n // TODO(wittjosiah): Allow override.\n onOver: ({ active, over }) => (Path.length(active.path) >= Path.length(over.path) ? 'transfer' : 'reject'),\n onDrop,\n }}\n >\n <div className='grow flex overflow-y-hidden overflow-x-auto'>\n <div className='flex'>\n <Mosaic.SortableContext items={columns} direction='horizontal'>\n {columns.map((column, index) => (\n <Mosaic.SortableTile\n key={column.id}\n item={column}\n path={id}\n position={index}\n Component={Component}\n debug={debug}\n />\n ))}\n </Mosaic.SortableContext>\n </div>\n </div>\n </Mosaic.Container>\n );\n};\n\nconst OverlayComponent = (id: string, Component: MosaicTileComponent<any>): MosaicTileComponent<any> =>\n forwardRef((props, ref) => {\n const isColumn = Path.hasRoot(props.path, id) && Path.length(props.path) === 2;\n if (isColumn && props.active === 'overlay') {\n return (\n // Needs to not override the main kanban path.\n <Mosaic.Container {...{ id: `${id}-active`, Component }}>\n <KanbanColumnComponent {...props} ref={ref} />\n </Mosaic.Container>\n );\n }\n\n return isColumn ? <KanbanColumnComponent {...props} ref={ref} /> : <Component {...props} ref={ref} />;\n });\n\nconst KanbanColumnComponent: MosaicTileComponent<KanbanColumn> = forwardRef(\n ({ path, item, active, draggableStyle, draggableProps, debug }, forwardRef) => {\n const { id, title, items } = item;\n const { Component } = useContainer();\n const itemsWithPreview = useItemsWithPreview({ path, items });\n\n return (\n <div role='none' className='grow flex flex-col' ref={forwardRef}>\n <div\n className={mx(\n groupSurface,\n 'grow flex flex-col w-[300px] snap-center overflow-hidden m-1',\n active === 'rearrange' && 'opacity-0',\n )}\n style={draggableStyle}\n >\n <Card.Root classNames='shrink-0 bg-cyan-200'>\n <Card.Header>\n <Card.DragHandle {...draggableProps} />\n <Card.Title title={title} />\n <Card.Menu />\n </Card.Header>\n </Card.Root>\n\n <div className={mx('flex flex-col grow overflow-y-scroll')}>\n <div className='flex flex-col my-1'>\n <Mosaic.SortableContext id={path} items={itemsWithPreview} direction='vertical'>\n {itemsWithPreview.map((item, index) => (\n <Mosaic.SortableTile\n key={item.id}\n item={item}\n path={path}\n position={index}\n Component={Component!}\n className='m-1'\n // debug={debug}\n />\n ))}\n </Mosaic.SortableContext>\n </div>\n </div>\n {debug && <Mosaic.Debug data={{ path, id, items: itemsWithPreview.length }} />}\n </div>\n </div>\n );\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { Mosaic, type MosaicContainerProps, type MosaicDataItem, useItemsWithPreview } from '../../mosaic';\n\nexport type Direction = 'horizontal' | 'vertical';\n\nexport type StackProps<TData extends MosaicDataItem = MosaicDataItem> = MosaicContainerProps<TData, number> & {\n items?: TData[];\n direction?: Direction;\n debug?: boolean;\n};\n\n// TODO(burdon): Make generic (and forwardRef).\nexport const Stack = ({\n id,\n Component = Mosaic.DefaultComponent,\n onOver,\n onDrop,\n items = [],\n direction = 'vertical',\n debug,\n}: StackProps) => {\n const itemsWithPreview = useItemsWithPreview({ path: id, items });\n\n return (\n <div className={mx('flex overflow-hidden', direction === 'vertical' && 'w-[300px]')}>\n <div\n className={mx('flex flex-col w-full my-1', direction === 'vertical' ? 'overflow-y-auto' : 'overflow-x-auto')}\n >\n <Mosaic.Container {...{ id, Component, onOver, onDrop }}>\n <Mosaic.SortableContext items={itemsWithPreview} direction={direction}>\n {itemsWithPreview.map((item, index) => (\n <Mosaic.SortableTile\n key={item.id}\n item={item}\n path={id}\n position={index}\n className='m-1'\n // debug={debug}\n />\n ))}\n </Mosaic.SortableContext>\n </Mosaic.Container>\n {debug && (\n <div className='grow'>\n <Mosaic.Debug data={{ id, items: itemsWithPreview.length }} />\n </div>\n )}\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { forwardRef } from 'react';\n\nimport { Card, Tree as TreeComponent, TreeItem as TreeItemComponent } from '@dxos/react-ui';\nimport { dropRing, mx } from '@dxos/react-ui-theme';\n\nimport {\n type MosaicContainerProps,\n Mosaic,\n type MosaicDataItem,\n type MosaicTileComponent,\n useContainer,\n useMosaic,\n Path,\n useItemsWithOrigin,\n} from '../../mosaic';\n\n// TODO(burdon): Tree data model that provides a pure abstraction of the plugin Graph.\n// - The Tree (like Stack, Grid) is a high level container that assembles Radix style DXOS UI components from a model.\n// - Models in general should be easily mapped from the Graph and/or ECHO queries.\n// - See: https://master--5fc05e08a4a65d0021ae0bf2.chromatic.com/?path=/story/examples-tree-sortable--basic-setup\n\nexport type TreeProps<TData extends MosaicDataItem = TreeData> = MosaicContainerProps<TData, number> & {\n items?: TData[];\n debug?: boolean;\n};\n\nexport type TreeData = {\n id: string;\n label?: string; // TODO(burdon): Provide adapter.\n children: TreeData[];\n};\n\n// TODO(burdon): Make generic (and forwardRef).\nexport const Tree = ({ id, Component = TreeItem, onOver, onDrop, items = [], debug }: TreeProps) => {\n return (\n <Mosaic.Container\n {...{\n id,\n debug,\n Component,\n onOver,\n onDrop,\n }}\n >\n <TreeRoot items={items} />\n </Mosaic.Container>\n );\n};\n\nconst TreeRoot = ({ items }: { items: TreeData[] }) => {\n const { id, Component } = useContainer();\n const itemsWithOrigin = useItemsWithOrigin(id, items);\n\n return (\n <TreeComponent.Root classNames='flex flex-col'>\n <Mosaic.SortableContext id={id} items={itemsWithOrigin} direction='vertical'>\n {itemsWithOrigin.map((item, index) => (\n <TreeItemComponent.Root key={item.id} collapsible defaultOpen>\n <Mosaic.SortableTile item={item} path={id} position={index} Component={Component!} />\n </TreeItemComponent.Root>\n ))}\n </Mosaic.SortableContext>\n </TreeComponent.Root>\n );\n};\n\n/**\n * Pure component that is used by the mosaic overlay.\n */\nconst TreeItem: MosaicTileComponent<TreeData> = forwardRef(\n ({ path, draggableStyle, draggableProps, item, operation, active, isOver, isDragging, className }, forwardedRef) => {\n return (\n <div\n ref={forwardedRef}\n style={draggableStyle}\n className={mx(\n 'flex flex-col rounded',\n className,\n (active === 'rearrange' || active === 'origin') && 'opacity-0',\n active === 'destination' && 'opacity-20',\n isOver && dropRing,\n )}\n >\n <Card.Header>\n <Card.DragHandle {...draggableProps} />\n <Card.Title title={item.label ?? path} classNames='truncate' />\n </Card.Header>\n\n {!active && item.children && <TreeBranch path={path} items={item.children} />}\n </div>\n );\n },\n);\n\nconst TreeBranch = ({ path, items }: { path: string; items: TreeData[] }) => {\n const { operation, overItem } = useMosaic();\n const { Component } = useContainer();\n const itemsWithOrigin = useItemsWithOrigin(path, items);\n\n return (\n <TreeItemComponent.Body className='pis-4'>\n <Mosaic.SortableContext id={path} items={itemsWithOrigin} direction='vertical'>\n {itemsWithOrigin.map((child, index) => (\n <TreeComponent.Branch key={child.id}>\n <TreeItemComponent.Root collapsible defaultOpen>\n <Mosaic.SortableTile\n item={child}\n path={path}\n position={index}\n Component={Component!}\n isOver={\n overItem?.path === Path.create(path, child.id) && (operation === 'transfer' || operation === 'copy')\n }\n />\n </TreeItemComponent.Root>\n </TreeComponent.Branch>\n ))}\n </Mosaic.SortableContext>\n </TreeItemComponent.Body>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["useContext", "React", "createContext", "useEffect", "DEFAULT_TRANSITION", "DEFAULT_TYPE", "MosaicContainerContext", "createContext", "id", "type", "MosaicContainer", "children", "debug", "Component", "transitionDuration", "modifier", "getOverlayProps", "getOverlayStyle", "onOver", "onDrop", "mosaic", "useMosaic", "container", "useEffect", "setContainer", "Object", "values", "Provider", "value", "useContainer", "useContext", "MosaicContainerContext", "useEffect", "useState", "useContext", "raise", "DndContext", "KeyboardSensor", "MouseSensor", "pointerWithin", "rectIntersection", "TouchSensor", "useSensor", "useSensors", "sortableKeyboardCoordinates", "pick", "React", "createContext", "useState", "createPortal", "React", "mx", "Debug", "data", "position", "React", "pre", "className", "mx", "JSON", "stringify", "undefined", "React", "forwardRef", "Card", "arrayMove", "swapItems", "items", "from", "to", "fromIndex", "findIndex", "item", "id", "toIndex", "arrayMove", "SEPARATOR", "Path", "create", "args", "join", "parts", "path", "split", "length", "first", "last", "at", "parent", "slice", "hasRoot", "id", "hasChild", "compare", "hasDescendent", "startsWith", "siblings", "onPath", "includes", "CSS", "getTransformCSS", "transform", "CSS", "Transform", "toString", "Object", "assign", "scaleX", "scaleY", "undefined", "DefaultComponent", "forwardRef", "draggableStyle", "draggableProps", "item", "id", "path", "React", "Card", "Root", "ref", "style", "Header", "DragHandle", "Title", "title", "Path", "create", "classNames", "displayName", "DEFAULT_COMPONENT_ID", "MosaicContext", "createContext", "undefined", "MosaicRoot", "Component", "DefaultComponent", "debug", "children", "containers", "setContainers", "useState", "id", "handleSetContainer", "container", "_", "rest", "activeItem", "setActiveItem", "overItem", "setOverItem", "operation", "setOperation", "collisionDetection", "args", "pointerCollisions", "pointerWithin", "length", "rectIntersection", "modifiers", "props", "transform", "Path", "first", "path", "modifier", "sensors", "useSensors", "useSensor", "MouseSensor", "activationConstraint", "distance", "TouchSensor", "delay", "tolerance", "KeyboardSensor", "coordinateGetter", "sortableKeyboardCoordinates", "handleDragStart", "event", "pick", "active", "data", "current", "handleDragMove", "handleDragOver", "over", "item", "activeContainer", "overContainer", "onOver", "parent", "handleDragCancel", "handleDragEnd", "position", "onDrop", "setTimeout", "transitionDuration", "DEFAULT_TRANSITION", "React", "Provider", "value", "setContainer", "DndContext", "cancelDrop", "onDragStart", "onDragMove", "onDragOver", "onDragCancel", "onDragEnd", "createPortal", "MosaicDebug", "document", "body", "Debug", "Object", "keys", "map", "slice", "create", "parts", "part", "type", "useMosaic", "useContext", "MosaicContext", "raise", "Error", "useItemsWithPreview", "path", "items", "operation", "activeItem", "overItem", "useMosaic", "itemsWithPreview", "setItemsWithPreview", "useState", "overParent", "Path", "parent", "lastOverParent", "setLastOverParent", "useEffect", "undefined", "activeIsChild", "hasChild", "overIsChild", "overSelf", "position", "slice", "item", "filter", "id", "length", "useItemsWithOrigin", "path", "items", "operation", "activeItem", "overItem", "useMosaic", "activeIsChild", "Path", "hasChild", "overIsChild", "map", "item", "id", "DragOverlay", "React", "Component", "useEffect", "useRef", "useState", "MosaicDragOverlay", "delay", "debug", "overlayProps", "containers", "operation", "activeItem", "overItem", "useMosaic", "state", "setState", "useState", "timer", "useRef", "useEffect", "container", "OverlayComponent", "path", "Path", "first", "Component", "DefaultComponent", "clearTimeout", "current", "setTimeout", "FallbackComponent", "React", "DragOverlay", "adjustScale", "style", "getOverlayStyle", "OverlayErrorBoundary", "fallback", "getOverlayProps", "item", "active", "div", "className", "span", "id", "slice", "constructor", "props", "error", "p", "String", "getDerivedStateFromError", "componentDidCatch", "info", "console", "warn", "render", "children", "SortableContext", "horizontalListSortingStrategy", "verticalListSortingStrategy", "React", "MosaicSortableContext", "id", "items", "direction", "children", "operation", "activeItem", "overItem", "useMosaic", "container", "useContainer", "contextId", "Sortable", "Column", "Row", "ids", "map", "item", "path", "Path", "create", "isPreview", "siblings", "hasChild", "React", "SortableContext", "strategy", "verticalListSortingStrategy", "horizontalListSortingStrategy", "useDraggable", "useDroppable", "defaultAnimateLayoutChanges", "useSortable", "React", "DraggableTile", "path", "parentPath", "type", "DEFAULT_TYPE", "item", "Component", "DefaultComponent", "position", "draggableStyle", "props", "operation", "useMosaic", "Path", "create", "id", "setNodeRef", "attributes", "listeners", "isDragging", "useDraggable", "data", "React", "ref", "draggableProps", "DroppableTile", "isOver", "useDroppable", "SortableTile", "OverrideComponent", "activeItem", "overItem", "transitionDuration", "ContainerComponent", "useContainer", "isPreview", "siblings", "hasChild", "transform", "useSortable", "animateLayoutChanges", "args", "defaultAnimateLayoutChanges", "wasDragging", "active", "parent", "getTransformCSS", "transition", "Mosaic", "Root", "MosaicRoot", "Container", "MosaicContainer", "DragOverlay", "MosaicDragOverlay", "SortableContext", "MosaicSortableContext", "DraggableTile", "DroppableTile", "SortableTile", "DefaultComponent", "Debug", "createMatrix", "size", "value", "matrix", "x", "push", "Array", "from", "length", "y", "_", "getDimension", "width", "height", "spacing", "getBounds", "left", "top", "getPanelBounds", "calculateCellWidth", "defaultWidth", "screenWidth", "options", "min", "max", "useDroppable", "PlusCircle", "defaultsDeep", "React", "useState", "useMemo", "useEffect", "useResizeDetector", "Button", "useMediaQuery", "getSize", "mx", "defaultGridOptions", "size", "x", "y", "cellBounds", "width", "height", "spacing", "Grid", "id", "items", "layout", "options", "opts", "margin", "square", "debug", "selected", "controlledSelected", "Component", "Mosaic", "DefaultComponent", "className", "onDrop", "onOver", "onSelect", "onCreate", "onAction", "ref", "containerRef", "useResizeDetector", "refreshRate", "defaultsDeep", "matrix", "bounds", "useMemo", "cellWidth", "calculateCellWidth", "createMatrix", "getPanelBounds", "isNotMobile", "useMediaQuery", "marginSize", "Math", "max", "setSelected", "useState", "useEffect", "scrollToCenter", "item", "find", "pos", "getBounds", "top", "left", "current", "scrollTo", "behavior", "handleSelect", "React", "Container", "getOverlayProps", "grow", "getOverlayStyle", "display", "getDimension", "div", "mx", "style", "padding", "map", "row", "GridCell", "key", "path", "position", "DraggableTile", "draggableStyle", "Debug", "data", "length", "overItem", "useMosaic", "isOverContainer", "setNodeRef", "isOver", "useDroppable", "Path", "create", "Button", "variant", "onClick", "PlusCircle", "getSize", "React", "forwardRef", "useMemo", "Card", "groupSurface", "mx", "Kanban", "id", "columns", "Component", "TileComponent", "Mosaic", "DefaultComponent", "debug", "onDrop", "useMemo", "OverlayComponent", "React", "Container", "modifier", "path", "item", "transform", "Path", "create", "y", "onOver", "active", "over", "length", "div", "className", "SortableContext", "items", "direction", "map", "column", "index", "SortableTile", "key", "position", "forwardRef", "props", "ref", "isColumn", "hasRoot", "KanbanColumnComponent", "draggableStyle", "draggableProps", "title", "useContainer", "itemsWithPreview", "useItemsWithPreview", "role", "mx", "groupSurface", "style", "Card", "Root", "classNames", "Header", "DragHandle", "Title", "Menu", "Debug", "data", "React", "mx", "Stack", "id", "Component", "Mosaic", "DefaultComponent", "onOver", "onDrop", "items", "direction", "debug", "itemsWithPreview", "useItemsWithPreview", "path", "React", "div", "className", "mx", "Container", "SortableContext", "map", "item", "index", "SortableTile", "key", "position", "Debug", "data", "length", "React", "forwardRef", "Card", "Tree", "TreeComponent", "TreeItem", "TreeItemComponent", "dropRing", "mx", "Tree", "id", "Component", "TreeItem", "onOver", "onDrop", "items", "debug", "React", "Mosaic", "Container", "TreeRoot", "useContainer", "itemsWithOrigin", "useItemsWithOrigin", "TreeComponent", "Root", "classNames", "SortableContext", "direction", "map", "item", "index", "TreeItemComponent", "key", "collapsible", "defaultOpen", "SortableTile", "path", "position", "forwardRef", "draggableStyle", "draggableProps", "operation", "active", "isOver", "isDragging", "className", "forwardedRef", "div", "ref", "style", "mx", "dropRing", "Card", "Header", "DragHandle", "Title", "title", "label", "children", "TreeBranch", "overItem", "useMosaic", "Body", "child", "Branch", "Path", "create"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/ui/react-ui-mosaic/src/mosaic/Container.tsx":{"bytes":7699,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/index.ts","kind":"import-statement","original":"./hooks"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/hooks/useContainer.ts":{"bytes":1561,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/Container.tsx","kind":"import-statement","original":"../Container"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/Debug.tsx":{"bytes":2101,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/util/data.ts":{"bytes":2029,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/util/path.ts":{"bytes":3427,"imports":[],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/util/styles.ts":{"bytes":1464,"imports":[{"path":"@dnd-kit/utilities","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts":{"bytes":633,"imports":[{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/data.ts","kind":"import-statement","original":"./data"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/path.ts","kind":"import-statement","original":"./path"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/styles.ts","kind":"import-statement","original":"./styles"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/DefaultComponent.tsx":{"bytes":2903,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/Root.tsx":{"bytes":26016,"imports":[{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"lodash.pick","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/Container.tsx","kind":"import-statement","original":"./Container"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/Debug.tsx","kind":"import-statement","original":"./Debug"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/DefaultComponent.tsx","kind":"import-statement","original":"./DefaultComponent"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/hooks/useMosaic.ts":{"bytes":1191,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/Root.tsx","kind":"import-statement","original":"../Root"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/hooks/useItemsWithPreview.ts":{"bytes":9142,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/useMosaic.ts","kind":"import-statement","original":"./useMosaic"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/hooks/useItemsWithOrigin.ts":{"bytes":3646,"imports":[{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/useMosaic.ts","kind":"import-statement","original":"./useMosaic"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/hooks/index.ts":{"bytes":814,"imports":[{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/useContainer.ts","kind":"import-statement","original":"./useContainer"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/useItemsWithPreview.ts","kind":"import-statement","original":"./useItemsWithPreview"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/useItemsWithOrigin.ts","kind":"import-statement","original":"./useItemsWithOrigin"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/useMosaic.ts","kind":"import-statement","original":"./useMosaic"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/types.ts":{"bytes":854,"imports":[],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/DragOverlay.tsx":{"bytes":14479,"imports":[{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/DefaultComponent.tsx","kind":"import-statement","original":"./DefaultComponent"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/SortableContext.tsx":{"bytes":6845,"imports":[{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/Tile.tsx":{"bytes":16567,"imports":[{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/DefaultComponent.tsx","kind":"import-statement","original":"./DefaultComponent"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/Mosaic.ts":{"bytes":5852,"imports":[{"path":"packages/ui/react-ui-mosaic/src/mosaic/Container.tsx","kind":"import-statement","original":"./Container"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/Debug.tsx","kind":"import-statement","original":"./Debug"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/DefaultComponent.tsx","kind":"import-statement","original":"./DefaultComponent"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/DragOverlay.tsx","kind":"import-statement","original":"./DragOverlay"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/Root.tsx","kind":"import-statement","original":"./Root"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/SortableContext.tsx","kind":"import-statement","original":"./SortableContext"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/Tile.tsx","kind":"import-statement","original":"./Tile"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/index.ts":{"bytes":714,"imports":[{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/types.ts","kind":"import-statement","original":"./types"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts","kind":"import-statement","original":"./util"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/Mosaic.ts","kind":"import-statement","original":"./Mosaic"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/Grid/layout.ts":{"bytes":4883,"imports":[],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/Grid/Grid.tsx":{"bytes":24299,"imports":[{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-resize-detector","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/views/Grid/layout.ts","kind":"import-statement","original":"./layout"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/index.ts","kind":"import-statement","original":"../../mosaic"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/Grid/index.ts":{"bytes":556,"imports":[{"path":"packages/ui/react-ui-mosaic/src/views/Grid/layout.ts","kind":"import-statement","original":"./layout"},{"path":"packages/ui/react-ui-mosaic/src/views/Grid/Grid.tsx","kind":"import-statement","original":"./Grid"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/Kanban/Kanban.tsx":{"bytes":14820,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/index.ts","kind":"import-statement","original":"../../mosaic"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/Kanban/index.ts":{"bytes":478,"imports":[{"path":"packages/ui/react-ui-mosaic/src/views/Kanban/Kanban.tsx","kind":"import-statement","original":"./Kanban"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/Stack/Stack.tsx":{"bytes":5469,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/index.ts","kind":"import-statement","original":"../../mosaic"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/Stack/index.ts":{"bytes":472,"imports":[{"path":"packages/ui/react-ui-mosaic/src/views/Stack/Stack.tsx","kind":"import-statement","original":"./Stack"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/Tree/Tree.tsx":{"bytes":12593,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/index.ts","kind":"import-statement","original":"../../mosaic"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/Tree/index.ts":{"bytes":470,"imports":[{"path":"packages/ui/react-ui-mosaic/src/views/Tree/Tree.tsx","kind":"import-statement","original":"./Tree"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/index.ts":{"bytes":708,"imports":[{"path":"packages/ui/react-ui-mosaic/src/views/Grid/index.ts","kind":"import-statement","original":"./Grid"},{"path":"packages/ui/react-ui-mosaic/src/views/Kanban/index.ts","kind":"import-statement","original":"./Kanban"},{"path":"packages/ui/react-ui-mosaic/src/views/Stack/index.ts","kind":"import-statement","original":"./Stack"},{"path":"packages/ui/react-ui-mosaic/src/views/Tree/index.ts","kind":"import-statement","original":"./Tree"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/index.ts":{"bytes":679,"imports":[{"path":"packages/ui/react-ui-mosaic/src/mosaic/index.ts","kind":"import-statement","original":"./mosaic"},{"path":"packages/ui/react-ui-mosaic/src/views/index.ts","kind":"import-statement","original":"./views"}],"format":"esm"}},"outputs":{"packages/ui/react-ui-mosaic/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":87560},"packages/ui/react-ui-mosaic/dist/lib/browser/index.mjs":{"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"lodash.pick","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dnd-kit/utilities","kind":"import-statement","external":true},{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-resize-detector","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"exports":["Grid","Kanban","Mosaic","Path","Stack","Tree","calculateCellWidth","createMatrix","getBounds","getDimension","getPanelBounds","getTransformCSS","swapItems","useContainer","useItemsWithOrigin","useItemsWithPreview","useMosaic"],"entryPoint":"packages/ui/react-ui-mosaic/src/index.ts","inputs":{"packages/ui/react-ui-mosaic/src/mosaic/hooks/useContainer.ts":{"bytesInOutput":188},"packages/ui/react-ui-mosaic/src/mosaic/Container.tsx":{"bytesInOutput":786},"packages/ui/react-ui-mosaic/src/mosaic/hooks/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-mosaic/src/mosaic/hooks/useItemsWithPreview.ts":{"bytesInOutput":2023},"packages/ui/react-ui-mosaic/src/mosaic/hooks/useMosaic.ts":{"bytesInOutput":194},"packages/ui/react-ui-mosaic/src/mosaic/Root.tsx":{"bytesInOutput":5523},"packages/ui/react-ui-mosaic/src/mosaic/Debug.tsx":{"bytesInOutput":442},"packages/ui/react-ui-mosaic/src/mosaic/DefaultComponent.tsx":{"bytesInOutput":640},"packages/ui/react-ui-mosaic/src/mosaic/util/data.ts":{"bytesInOutput":306},"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-mosaic/src/mosaic/util/path.ts":{"bytesInOutput":678},"packages/ui/react-ui-mosaic/src/mosaic/util/styles.ts":{"bytesInOutput":180},"packages/ui/react-ui-mosaic/src/mosaic/hooks/useItemsWithOrigin.ts":{"bytesInOutput":594},"packages/ui/react-ui-mosaic/src/mosaic/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-mosaic/src/mosaic/DragOverlay.tsx":{"bytesInOutput":3298},"packages/ui/react-ui-mosaic/src/mosaic/SortableContext.tsx":{"bytesInOutput":1191},"packages/ui/react-ui-mosaic/src/mosaic/Tile.tsx":{"bytesInOutput":3168},"packages/ui/react-ui-mosaic/src/mosaic/Mosaic.ts":{"bytesInOutput":383},"packages/ui/react-ui-mosaic/src/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-mosaic/src/views/Grid/layout.ts":{"bytesInOutput":877},"packages/ui/react-ui-mosaic/src/views/Grid/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-mosaic/src/views/Grid/Grid.tsx":{"bytesInOutput":5684},"packages/ui/react-ui-mosaic/src/views/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-mosaic/src/views/Kanban/Kanban.tsx":{"bytesInOutput":3910},"packages/ui/react-ui-mosaic/src/views/Kanban/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-mosaic/src/views/Stack/Stack.tsx":{"bytesInOutput":1242},"packages/ui/react-ui-mosaic/src/views/Stack/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-mosaic/src/views/Tree/Tree.tsx":{"bytesInOutput":2987},"packages/ui/react-ui-mosaic/src/views/Tree/index.ts":{"bytesInOutput":0}},"bytes":36078}}}
1
+ {"inputs":{"packages/ui/react-ui-mosaic/src/mosaic/Container.tsx":{"bytes":8515,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/index.ts","kind":"import-statement","original":"./hooks"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/hooks/useContainer.ts":{"bytes":1270,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/Container.tsx","kind":"import-statement","original":"../Container"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/Debug.tsx":{"bytes":2101,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/util/data.ts":{"bytes":2029,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/util/path.ts":{"bytes":3427,"imports":[],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/util/styles.ts":{"bytes":1464,"imports":[{"path":"@dnd-kit/utilities","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts":{"bytes":633,"imports":[{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/data.ts","kind":"import-statement","original":"./data"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/path.ts","kind":"import-statement","original":"./path"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/styles.ts","kind":"import-statement","original":"./styles"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/DefaultComponent.tsx":{"bytes":2903,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/Root.tsx":{"bytes":26302,"imports":[{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"lodash.pick","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/Container.tsx","kind":"import-statement","original":"./Container"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/Debug.tsx","kind":"import-statement","original":"./Debug"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/DefaultComponent.tsx","kind":"import-statement","original":"./DefaultComponent"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/hooks/useMosaic.ts":{"bytes":1191,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/Root.tsx","kind":"import-statement","original":"../Root"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/hooks/useItemsWithPreview.ts":{"bytes":9142,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/useMosaic.ts","kind":"import-statement","original":"./useMosaic"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/hooks/useItemsWithOrigin.ts":{"bytes":3646,"imports":[{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/useMosaic.ts","kind":"import-statement","original":"./useMosaic"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/hooks/index.ts":{"bytes":814,"imports":[{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/useContainer.ts","kind":"import-statement","original":"./useContainer"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/useItemsWithPreview.ts","kind":"import-statement","original":"./useItemsWithPreview"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/useItemsWithOrigin.ts","kind":"import-statement","original":"./useItemsWithOrigin"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/useMosaic.ts","kind":"import-statement","original":"./useMosaic"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/types.ts":{"bytes":1040,"imports":[],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/DragOverlay.tsx":{"bytes":14479,"imports":[{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/DefaultComponent.tsx","kind":"import-statement","original":"./DefaultComponent"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/SortableContext.tsx":{"bytes":6845,"imports":[{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/Tile.tsx":{"bytes":17248,"imports":[{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/Container.tsx","kind":"import-statement","original":"./Container"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/DefaultComponent.tsx","kind":"import-statement","original":"./DefaultComponent"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/Mosaic.ts":{"bytes":5852,"imports":[{"path":"packages/ui/react-ui-mosaic/src/mosaic/Container.tsx","kind":"import-statement","original":"./Container"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/Debug.tsx","kind":"import-statement","original":"./Debug"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/DefaultComponent.tsx","kind":"import-statement","original":"./DefaultComponent"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/DragOverlay.tsx","kind":"import-statement","original":"./DragOverlay"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/Root.tsx","kind":"import-statement","original":"./Root"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/SortableContext.tsx","kind":"import-statement","original":"./SortableContext"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/Tile.tsx","kind":"import-statement","original":"./Tile"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/index.ts":{"bytes":714,"imports":[{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/types.ts","kind":"import-statement","original":"./types"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts","kind":"import-statement","original":"./util"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/Mosaic.ts","kind":"import-statement","original":"./Mosaic"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/Grid/layout.ts":{"bytes":4883,"imports":[],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/Grid/Grid.tsx":{"bytes":24299,"imports":[{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-resize-detector","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/views/Grid/layout.ts","kind":"import-statement","original":"./layout"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/index.ts","kind":"import-statement","original":"../../mosaic"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/Grid/index.ts":{"bytes":556,"imports":[{"path":"packages/ui/react-ui-mosaic/src/views/Grid/layout.ts","kind":"import-statement","original":"./layout"},{"path":"packages/ui/react-ui-mosaic/src/views/Grid/Grid.tsx","kind":"import-statement","original":"./Grid"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/Kanban/Kanban.tsx":{"bytes":14820,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/index.ts","kind":"import-statement","original":"../../mosaic"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/Kanban/index.ts":{"bytes":478,"imports":[{"path":"packages/ui/react-ui-mosaic/src/views/Kanban/Kanban.tsx","kind":"import-statement","original":"./Kanban"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/Stack/Stack.tsx":{"bytes":5469,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/index.ts","kind":"import-statement","original":"../../mosaic"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/Stack/index.ts":{"bytes":472,"imports":[{"path":"packages/ui/react-ui-mosaic/src/views/Stack/Stack.tsx","kind":"import-statement","original":"./Stack"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/Tree/Tree.tsx":{"bytes":12593,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-mosaic/src/mosaic/index.ts","kind":"import-statement","original":"../../mosaic"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/Tree/index.ts":{"bytes":470,"imports":[{"path":"packages/ui/react-ui-mosaic/src/views/Tree/Tree.tsx","kind":"import-statement","original":"./Tree"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/views/index.ts":{"bytes":708,"imports":[{"path":"packages/ui/react-ui-mosaic/src/views/Grid/index.ts","kind":"import-statement","original":"./Grid"},{"path":"packages/ui/react-ui-mosaic/src/views/Kanban/index.ts","kind":"import-statement","original":"./Kanban"},{"path":"packages/ui/react-ui-mosaic/src/views/Stack/index.ts","kind":"import-statement","original":"./Stack"},{"path":"packages/ui/react-ui-mosaic/src/views/Tree/index.ts","kind":"import-statement","original":"./Tree"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/index.ts":{"bytes":679,"imports":[{"path":"packages/ui/react-ui-mosaic/src/mosaic/index.ts","kind":"import-statement","original":"./mosaic"},{"path":"packages/ui/react-ui-mosaic/src/views/index.ts","kind":"import-statement","original":"./views"}],"format":"esm"}},"outputs":{"packages/ui/react-ui-mosaic/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":88331},"packages/ui/react-ui-mosaic/dist/lib/browser/index.mjs":{"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"lodash.pick","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dnd-kit/utilities","kind":"import-statement","external":true},{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-resize-detector","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"exports":["Grid","Kanban","Mosaic","Path","Stack","Tree","calculateCellWidth","createMatrix","getBounds","getDimension","getPanelBounds","getTransformCSS","swapItems","useContainer","useItemsWithOrigin","useItemsWithPreview","useMosaic"],"entryPoint":"packages/ui/react-ui-mosaic/src/index.ts","inputs":{"packages/ui/react-ui-mosaic/src/mosaic/hooks/useContainer.ts":{"bytesInOutput":97},"packages/ui/react-ui-mosaic/src/mosaic/Container.tsx":{"bytesInOutput":880},"packages/ui/react-ui-mosaic/src/mosaic/hooks/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-mosaic/src/mosaic/hooks/useItemsWithPreview.ts":{"bytesInOutput":2023},"packages/ui/react-ui-mosaic/src/mosaic/hooks/useMosaic.ts":{"bytesInOutput":183},"packages/ui/react-ui-mosaic/src/mosaic/Root.tsx":{"bytesInOutput":5601},"packages/ui/react-ui-mosaic/src/mosaic/Debug.tsx":{"bytesInOutput":442},"packages/ui/react-ui-mosaic/src/mosaic/DefaultComponent.tsx":{"bytesInOutput":640},"packages/ui/react-ui-mosaic/src/mosaic/util/data.ts":{"bytesInOutput":306},"packages/ui/react-ui-mosaic/src/mosaic/util/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-mosaic/src/mosaic/util/path.ts":{"bytesInOutput":678},"packages/ui/react-ui-mosaic/src/mosaic/util/styles.ts":{"bytesInOutput":180},"packages/ui/react-ui-mosaic/src/mosaic/hooks/useItemsWithOrigin.ts":{"bytesInOutput":594},"packages/ui/react-ui-mosaic/src/mosaic/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-mosaic/src/mosaic/DragOverlay.tsx":{"bytesInOutput":3298},"packages/ui/react-ui-mosaic/src/mosaic/SortableContext.tsx":{"bytesInOutput":1191},"packages/ui/react-ui-mosaic/src/mosaic/Tile.tsx":{"bytesInOutput":3297},"packages/ui/react-ui-mosaic/src/mosaic/Mosaic.ts":{"bytesInOutput":383},"packages/ui/react-ui-mosaic/src/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-mosaic/src/views/Grid/layout.ts":{"bytesInOutput":877},"packages/ui/react-ui-mosaic/src/views/Grid/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-mosaic/src/views/Grid/Grid.tsx":{"bytesInOutput":5684},"packages/ui/react-ui-mosaic/src/views/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-mosaic/src/views/Kanban/Kanban.tsx":{"bytesInOutput":3910},"packages/ui/react-ui-mosaic/src/views/Kanban/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-mosaic/src/views/Stack/Stack.tsx":{"bytesInOutput":1242},"packages/ui/react-ui-mosaic/src/views/Stack/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-mosaic/src/views/Tree/Tree.tsx":{"bytesInOutput":2987},"packages/ui/react-ui-mosaic/src/views/Tree/index.ts":{"bytesInOutput":0}},"bytes":36277}}}
@@ -2,7 +2,11 @@ import { type Modifier } from '@dnd-kit/core';
2
2
  import React, { type CSSProperties, type HTMLAttributes, type PropsWithChildren } from 'react';
3
3
  import { type MosaicTileComponent } from './Tile';
4
4
  import { type MosaicDataItem, type MosaicDraggedItem } from './types';
5
+ type WithRequiredProperty<Type, Key extends keyof Type> = Type & {
6
+ [Property in Key]-?: Type[Property];
7
+ };
5
8
  export declare const DEFAULT_TRANSITION = 200;
9
+ export declare const DEFAULT_TYPE = "unknown";
6
10
  export type MosaicTileOverlayProps = {
7
11
  grow?: boolean;
8
12
  debug?: boolean;
@@ -30,6 +34,10 @@ export type MosaicContainerProps<TData extends MosaicDataItem = MosaicDataItem,
30
34
  * Default component used to render tiles.
31
35
  */
32
36
  Component?: MosaicTileComponent<TData, any>;
37
+ /**
38
+ * Default type of tiles.
39
+ */
40
+ type?: string;
33
41
  /**
34
42
  * Length of transition when moving tiles in milliseconds.
35
43
  *
@@ -59,10 +67,11 @@ export type MosaicContainerProps<TData extends MosaicDataItem = MosaicDataItem,
59
67
  */
60
68
  onDrop?: (event: MosaicDropEvent<TPosition>) => void;
61
69
  }>;
62
- export type MosaicContainerContextType = Omit<MosaicContainerProps<any>, 'children'>;
63
- export declare const MosaicContainerContext: React.Context<MosaicContainerContextType | undefined>;
70
+ export type MosaicContainerContextType<TData extends MosaicDataItem = MosaicDataItem, TPosition = unknown> = WithRequiredProperty<Omit<MosaicContainerProps<TData, TPosition>, 'children'>, 'type'>;
71
+ export declare const MosaicContainerContext: React.Context<MosaicContainerContextType<any, unknown>>;
64
72
  /**
65
73
  * Root Container that manages the layout of tiles.
66
74
  */
67
- export declare const MosaicContainer: ({ children, id, debug, Component, transitionDuration, modifier, getOverlayProps, getOverlayStyle, onOver, onDrop, }: MosaicContainerProps) => JSX.Element;
75
+ export declare const MosaicContainer: ({ children, id, debug, type, Component, transitionDuration, modifier, getOverlayProps, getOverlayStyle, onOver, onDrop, }: MosaicContainerProps) => JSX.Element;
76
+ export {};
68
77
  //# sourceMappingURL=Container.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../../../src/mosaic/Container.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,EAGZ,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACvB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEtE,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;;;;;;GAOG;AAEH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE3E,MAAM,MAAM,eAAe,CAAC,SAAS,GAAG,OAAO,IAAI;IACjD,MAAM,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,SAAS,GAAG,OAAO,IAAI,eAAe,CAAC,SAAS,CAAC,GAAG;IAC9E,SAAS,EAAE,eAAe,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAAC,KAAK,SAAS,cAAc,GAAG,cAAc,EAAE,SAAS,GAAG,OAAO,IAAI,IAAI,CACzG,cAAc,CAAC,cAAc,CAAC,EAC9B,WAAW,CACZ,GACC,iBAAiB,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IAGX,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE5C;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,YAAY,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,UAAU,CAAC,QAAQ,CAAC,CAAC;IAE1G;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,sBAAsB,CAAC;IAE/C;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,aAAa,CAAC;IAEtC;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,SAAS,CAAC,KAAK,eAAe,CAAC;IAEhE;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;CACtD,CAAC,CAAC;AAEL,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;AAErF,eAAO,MAAM,sBAAsB,uDAAmE,CAAC;AAEvG;;GAEG;AACH,eAAO,MAAM,eAAe,wHAWzB,oBAAoB,gBAuBtB,CAAC"}
1
+ {"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../../../src/mosaic/Container.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,EAGZ,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACvB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGtE,KAAK,oBAAoB,CAAC,IAAI,EAAE,GAAG,SAAS,MAAM,IAAI,IAAI,IAAI,GAAG;KAC9D,QAAQ,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,YAAY,YAAY,CAAC;AAEtC,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;;;;;;GAOG;AAEH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE3E,MAAM,MAAM,eAAe,CAAC,SAAS,GAAG,OAAO,IAAI;IACjD,MAAM,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,SAAS,GAAG,OAAO,IAAI,eAAe,CAAC,SAAS,CAAC,GAAG;IAC9E,SAAS,EAAE,eAAe,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAAC,KAAK,SAAS,cAAc,GAAG,cAAc,EAAE,SAAS,GAAG,OAAO,IAAI,IAAI,CACzG,cAAc,CAAC,cAAc,CAAC,EAC9B,WAAW,CACZ,GACC,iBAAiB,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IAGX,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE5C;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,YAAY,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,UAAU,CAAC,QAAQ,CAAC,CAAC;IAE1G;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,sBAAsB,CAAC;IAE/C;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,aAAa,CAAC;IAEtC;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,SAAS,CAAC,KAAK,eAAe,CAAC;IAEhE;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;CACtD,CAAC,CAAC;AAEL,MAAM,MAAM,0BAA0B,CACpC,KAAK,SAAS,cAAc,GAAG,cAAc,EAC7C,SAAS,GAAG,OAAO,IACjB,oBAAoB,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;AAE3F,eAAO,MAAM,sBAAsB,yDAGjC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe,8HAYzB,oBAAoB,gBAwBtB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { type DraggableAttributes } from '@dnd-kit/core';
2
2
  import type { CSSProperties, ForwardRefExoticComponent, HTMLAttributes, RefAttributes } from 'react';
3
- import type { MosaicOperation, MosaicTileOverlayProps } from './Container';
3
+ import { type MosaicOperation, type MosaicTileOverlayProps } from './Container';
4
4
  import type { MosaicDataItem } from './types';
5
5
  export type MosaicActiveType = 'overlay' | 'rearrange' | 'origin' | 'destination';
6
6
  export type MosaicTileAction = {
@@ -16,6 +16,7 @@ export type MosaicTileProps<TData extends MosaicDataItem = MosaicDataItem, TPosi
16
16
  item: TData;
17
17
  Component?: MosaicTileComponent<TData, any>;
18
18
  position?: TPosition;
19
+ type?: string;
19
20
  operation?: MosaicOperation;
20
21
  active?: MosaicActiveType;
21
22
  isDragging?: boolean;
@@ -36,13 +37,13 @@ export type MosaicTileComponent<TData extends MosaicDataItem = MosaicDataItem, T
36
37
  /**
37
38
  * Basic draggable mosaic tile.
38
39
  */
39
- export declare const DraggableTile: ({ path: parentPath, item, Component, position, draggableStyle, ...props }: MosaicTileProps<any>) => JSX.Element;
40
+ export declare const DraggableTile: ({ path: parentPath, type, item, Component, position, draggableStyle, ...props }: MosaicTileProps<any>) => JSX.Element;
40
41
  /**
41
42
  * Basic droppable mosaic tile.
42
43
  */
43
- export declare const DroppableTile: ({ path: parentPath, item, Component, position, ...props }: MosaicTileProps<any>) => JSX.Element;
44
+ export declare const DroppableTile: ({ path: parentPath, type, item, Component, position, ...props }: MosaicTileProps<any>) => JSX.Element;
44
45
  /**
45
46
  * Mosaic tile that can be sorted.
46
47
  */
47
- export declare const SortableTile: ({ path: parentPath, item, Component: OverrideComponent, position, draggableStyle, ...props }: MosaicTileProps<any, number>) => JSX.Element;
48
+ export declare const SortableTile: ({ path: parentPath, type, item, Component: OverrideComponent, position, draggableStyle, ...props }: MosaicTileProps<any, number>) => JSX.Element;
48
49
  //# sourceMappingURL=Tile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tile.d.ts","sourceRoot":"","sources":["../../../../src/mosaic/Tile.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,mBAAmB,EAA8B,MAAM,eAAe,CAAC;AAGrF,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAErG,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAG3E,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,SAAS,CAAC;AAGjE,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,CAAC;AAElF,MAAM,MAAM,gBAAgB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC;AAE1E;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,KAAK,SAAS,cAAc,GAAG,cAAc,EAAE,SAAS,GAAG,OAAO,IAAI,IAAI,CACpG,cAAc,CAAC,cAAc,CAAC,EAC9B,WAAW,CACZ,GACC,sBAAsB,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,CAAC,EAAE,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC5C,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAG1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,cAAc,CAAC,EAAE,mBAAmB,GAElC,cAAc,CAAC,WAAW,CAAC,CAAC;IAG9B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC/C,CAAC;AAEJ;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAC7B,KAAK,SAAS,cAAc,GAAG,cAAc,EAC7C,QAAQ,SAAS,WAAW,GAAG,cAAc,IAC3C,yBAAyB,CAC3B,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC,GAAG;IAAE,SAAS,EAAE,eAAe,CAAA;CAAE,CACnH,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,8EAOvB,gBAAgB,GAAG,CAAC,gBAyBtB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,8DAMvB,gBAAgB,GAAG,CAAC,gBAsBtB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,iGAOtB,gBAAgB,GAAG,EAAE,MAAM,CAAC,gBAsD9B,CAAC"}
1
+ {"version":3,"file":"Tile.d.ts","sourceRoot":"","sources":["../../../../src/mosaic/Tile.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,mBAAmB,EAA8B,MAAM,eAAe,CAAC;AAGrF,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAErG,OAAO,EAAgB,KAAK,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAG9F,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,SAAS,CAAC;AAGjE,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,CAAC;AAElF,MAAM,MAAM,gBAAgB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC;AAE1E;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,KAAK,SAAS,cAAc,GAAG,cAAc,EAAE,SAAS,GAAG,OAAO,IAAI,IAAI,CACpG,cAAc,CAAC,cAAc,CAAC,EAC9B,WAAW,CACZ,GACC,sBAAsB,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,CAAC,EAAE,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC5C,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAG1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,cAAc,CAAC,EAAE,mBAAmB,GAElC,cAAc,CAAC,WAAW,CAAC,CAAC;IAG9B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC/C,CAAC;AAEJ;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAC7B,KAAK,SAAS,cAAc,GAAG,cAAc,EAC7C,QAAQ,SAAS,WAAW,GAAG,cAAc,IAC3C,yBAAyB,CAC3B,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC,GAAG;IAAE,SAAS,EAAE,eAAe,CAAA;CAAE,CACnH,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,oFAQvB,gBAAgB,GAAG,CAAC,gBA0BtB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,oEAOvB,gBAAgB,GAAG,CAAC,gBAuBtB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,uGAQtB,gBAAgB,GAAG,EAAE,MAAM,CAAC,gBAuD9B,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type MosaicContainerProps } from '../Container';
1
+ import { type MosaicContainerContextType } from '../Container';
2
2
  import { type MosaicDataItem } from '../types';
3
- export declare const useContainer: <TData extends MosaicDataItem = MosaicDataItem, TPosition = unknown>() => MosaicContainerProps<TData, TPosition>;
3
+ export declare const useContainer: <TData extends MosaicDataItem = MosaicDataItem, TPosition = unknown>() => MosaicContainerContextType<TData, TPosition>;
4
4
  //# sourceMappingURL=useContainer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useContainer.d.ts","sourceRoot":"","sources":["../../../../../src/mosaic/hooks/useContainer.ts"],"names":[],"mappings":"AAQA,OAAO,EAA0B,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,eAAO,MAAM,YAAY,kHAIiE,CAAC"}
1
+ {"version":3,"file":"useContainer.d.ts","sourceRoot":"","sources":["../../../../../src/mosaic/hooks/useContainer.ts"],"names":[],"mappings":"AAMA,OAAO,EAA0B,KAAK,0BAA0B,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,eAAO,MAAM,YAAY,wHAG8D,CAAC"}
@@ -3,6 +3,7 @@ export type MosaicDataItem = {
3
3
  };
4
4
  export type MosaicDraggedItem<TPosition = unknown> = {
5
5
  path: string;
6
+ type: string;
6
7
  item: MosaicDataItem;
7
8
  position?: TPosition;
8
9
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/mosaic/types.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5C,MAAM,MAAM,iBAAiB,CAAC,SAAS,GAAG,OAAO,IAAI;IACnD,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,cAAc,CAAC;IAErB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/mosaic/types.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,cAAc,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5C,MAAM,MAAM,iBAAiB,CAAC,SAAS,GAAG,OAAO,IAAI;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,cAAc,CAAC;IAErB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/react-ui-mosaic",
3
- "version": "0.3.9-main.5167f76",
3
+ "version": "0.3.9-main.58adff6",
4
4
  "description": "An intermediate interface for drag-and-drop interactions.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -25,13 +25,13 @@
25
25
  "lodash.defaultsdeep": "^4.6.1",
26
26
  "lodash.pick": "^4.4.0",
27
27
  "react-resize-detector": "^7.1.2",
28
- "@dxos/debug": "0.3.9-main.5167f76",
29
- "@dxos/invariant": "0.3.9-main.5167f76",
30
- "@dxos/keys": "0.3.9-main.5167f76",
31
- "@dxos/react-ui": "0.3.9-main.5167f76",
32
- "@dxos/util": "0.3.9-main.5167f76",
33
- "@dxos/react-ui-theme": "0.3.9-main.5167f76",
34
- "@dxos/react-ui-types": "0.3.9-main.5167f76"
28
+ "@dxos/debug": "0.3.9-main.58adff6",
29
+ "@dxos/invariant": "0.3.9-main.58adff6",
30
+ "@dxos/keys": "0.3.9-main.58adff6",
31
+ "@dxos/react-ui": "0.3.9-main.58adff6",
32
+ "@dxos/react-ui-theme": "0.3.9-main.58adff6",
33
+ "@dxos/react-ui-types": "0.3.9-main.58adff6",
34
+ "@dxos/util": "0.3.9-main.58adff6"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@faker-js/faker": "^8.0.2",
@@ -47,10 +47,10 @@
47
47
  "react-dom": "^18.2.0",
48
48
  "vite": "^4.3.9",
49
49
  "vite-plugin-turbosnap": "^1.0.2",
50
- "@dxos/app-graph": "0.3.9-main.5167f76",
51
- "@dxos/echo-schema": "0.3.9-main.5167f76",
52
- "@dxos/gem-core": "0.3.9-main.5167f76",
53
- "@dxos/react-client": "0.3.9-main.5167f76"
50
+ "@dxos/app-graph": "0.3.9-main.58adff6",
51
+ "@dxos/echo-schema": "0.3.9-main.58adff6",
52
+ "@dxos/gem-core": "0.3.9-main.58adff6",
53
+ "@dxos/react-client": "0.3.9-main.58adff6"
54
54
  },
55
55
  "peerDependencies": {
56
56
  "@phosphor-icons/react": "^2.0.5",
@@ -15,7 +15,13 @@ import { type MosaicTileComponent } from './Tile';
15
15
  import { useMosaic } from './hooks';
16
16
  import { type MosaicDataItem, type MosaicDraggedItem } from './types';
17
17
 
18
+ // TODO(wittjosiah): Factor out.
19
+ type WithRequiredProperty<Type, Key extends keyof Type> = Type & {
20
+ [Property in Key]-?: Type[Property];
21
+ };
22
+
18
23
  export const DEFAULT_TRANSITION = 200;
24
+ export const DEFAULT_TYPE = 'unknown';
19
25
 
20
26
  export type MosaicTileOverlayProps = {
21
27
  grow?: boolean;
@@ -57,6 +63,11 @@ export type MosaicContainerProps<TData extends MosaicDataItem = MosaicDataItem,
57
63
  */
58
64
  Component?: MosaicTileComponent<TData, any>;
59
65
 
66
+ /**
67
+ * Default type of tiles.
68
+ */
69
+ type?: string;
70
+
60
71
  /**
61
72
  * Length of transition when moving tiles in milliseconds.
62
73
  *
@@ -92,9 +103,15 @@ export type MosaicContainerProps<TData extends MosaicDataItem = MosaicDataItem,
92
103
  onDrop?: (event: MosaicDropEvent<TPosition>) => void;
93
104
  }>;
94
105
 
95
- export type MosaicContainerContextType = Omit<MosaicContainerProps<any>, 'children'>;
106
+ export type MosaicContainerContextType<
107
+ TData extends MosaicDataItem = MosaicDataItem,
108
+ TPosition = unknown,
109
+ > = WithRequiredProperty<Omit<MosaicContainerProps<TData, TPosition>, 'children'>, 'type'>;
96
110
 
97
- export const MosaicContainerContext = createContext<MosaicContainerContextType | undefined>(undefined);
111
+ export const MosaicContainerContext = createContext<MosaicContainerContextType<any>>({
112
+ id: 'never',
113
+ type: DEFAULT_TYPE,
114
+ });
98
115
 
99
116
  /**
100
117
  * Root Container that manages the layout of tiles.
@@ -103,6 +120,7 @@ export const MosaicContainer = ({
103
120
  children,
104
121
  id,
105
122
  debug,
123
+ type = DEFAULT_TYPE,
106
124
  Component,
107
125
  transitionDuration = DEFAULT_TRANSITION,
108
126
  modifier,
@@ -115,6 +133,7 @@ export const MosaicContainer = ({
115
133
  const container = {
116
134
  id,
117
135
  debug,
136
+ type,
118
137
  Component,
119
138
  transitionDuration,
120
139
  modifier,
@@ -133,13 +133,13 @@ export const MosaicRoot: FC<MosaicRootProps> = ({ Component = DefaultComponent,
133
133
  //
134
134
 
135
135
  const handleDragStart = (event: DragStartEvent) => {
136
- setActiveItem(pick(event.active.data.current as MosaicDraggedItem, 'path', 'item', 'position'));
136
+ setActiveItem(pick(event.active.data.current as MosaicDraggedItem, 'path', 'type', 'item', 'position'));
137
137
  };
138
138
 
139
139
  const handleDragMove = (event: DragMoveEvent) => {};
140
140
 
141
141
  const handleDragOver = (event: DragOverEvent) => {
142
- const overItem = pick(event.over?.data.current as MosaicDraggedItem, 'path', 'item', 'position');
142
+ const overItem = pick(event.over?.data.current as MosaicDraggedItem, 'path', 'type', 'item', 'position');
143
143
 
144
144
  // If the over item is the same as the active item, do nothing.
145
145
  // This happens when moving between containers where a placeholder of itself is rendered where it will be dropped.
@@ -241,11 +241,13 @@ const MosaicDebug: FC<{
241
241
  active: {
242
242
  id: activeItem?.item?.id.slice(0, 16),
243
243
  path: activeItem?.path && Path.create(...Path.parts(activeItem.path).map((part) => part.slice(0, 16))),
244
+ type: activeItem?.type,
244
245
  position: activeItem?.position,
245
246
  },
246
247
  over: {
247
248
  id: overItem?.item?.id.slice(0, 16),
248
249
  path: overItem?.path && Path.create(...Path.parts(overItem.path).map((part) => part.slice(0, 16))),
250
+ type: overItem?.type,
249
251
  position: overItem?.position,
250
252
  },
251
253
  }}
@@ -7,7 +7,7 @@ import { defaultAnimateLayoutChanges, useSortable } from '@dnd-kit/sortable';
7
7
  import React from 'react';
8
8
  import type { CSSProperties, ForwardRefExoticComponent, HTMLAttributes, RefAttributes } from 'react';
9
9
 
10
- import type { MosaicOperation, MosaicTileOverlayProps } from './Container';
10
+ import { DEFAULT_TYPE, type MosaicOperation, type MosaicTileOverlayProps } from './Container';
11
11
  import { DefaultComponent } from './DefaultComponent';
12
12
  import { useContainer, useMosaic } from './hooks';
13
13
  import type { MosaicDataItem, MosaicDraggedItem } from './types';
@@ -29,6 +29,7 @@ export type MosaicTileProps<TData extends MosaicDataItem = MosaicDataItem, TPosi
29
29
  item: TData;
30
30
  Component?: MosaicTileComponent<TData, any>;
31
31
  position?: TPosition;
32
+ type?: string;
32
33
  operation?: MosaicOperation;
33
34
  active?: MosaicActiveType; // TODO(burdon): Rename state?
34
35
 
@@ -62,6 +63,7 @@ export type MosaicTileComponent<
62
63
  */
63
64
  export const DraggableTile = ({
64
65
  path: parentPath,
66
+ type = DEFAULT_TYPE,
65
67
  item,
66
68
  Component = DefaultComponent,
67
69
  position,
@@ -72,7 +74,7 @@ export const DraggableTile = ({
72
74
  const path = Path.create(parentPath, item.id);
73
75
  const { setNodeRef, attributes, listeners, /* transform, */ isDragging } = useDraggable({
74
76
  id: path,
75
- data: { path, item, position } satisfies MosaicDraggedItem,
77
+ data: { path, type, item, position } satisfies MosaicDraggedItem,
76
78
  });
77
79
 
78
80
  return (
@@ -80,6 +82,7 @@ export const DraggableTile = ({
80
82
  ref={setNodeRef}
81
83
  item={item}
82
84
  path={path}
85
+ type={type}
83
86
  position={position}
84
87
  operation={operation}
85
88
  isDragging={isDragging}
@@ -99,6 +102,7 @@ export const DraggableTile = ({
99
102
  */
100
103
  export const DroppableTile = ({
101
104
  path: parentPath,
105
+ type = DEFAULT_TYPE,
102
106
  item,
103
107
  Component = DefaultComponent,
104
108
  position,
@@ -111,7 +115,7 @@ export const DroppableTile = ({
111
115
  : Path.create(parentPath, item.id);
112
116
  const { setNodeRef, isOver } = useDroppable({
113
117
  id: path,
114
- data: { path, item, position } satisfies MosaicDraggedItem,
118
+ data: { path, type, item, position } satisfies MosaicDraggedItem,
115
119
  });
116
120
 
117
121
  return (
@@ -119,6 +123,7 @@ export const DroppableTile = ({
119
123
  ref={setNodeRef}
120
124
  item={item}
121
125
  path={path}
126
+ type={type}
122
127
  position={position}
123
128
  operation={operation}
124
129
  isOver={isOver}
@@ -132,6 +137,7 @@ export const DroppableTile = ({
132
137
  */
133
138
  export const SortableTile = ({
134
139
  path: parentPath,
140
+ type = DEFAULT_TYPE,
135
141
  item,
136
142
  Component: OverrideComponent,
137
143
  position,
@@ -154,7 +160,7 @@ export const SortableTile = ({
154
160
 
155
161
  const { setNodeRef, attributes, listeners, transform, isDragging, isOver } = useSortable({
156
162
  id: isPreview ? activeItem.path : path,
157
- data: { path, item, position } satisfies MosaicDraggedItem,
163
+ data: { path, type, item, position } satisfies MosaicDraggedItem,
158
164
  animateLayoutChanges: (args) =>
159
165
  defaultAnimateLayoutChanges({ ...args, wasDragging: item.id !== activeItem?.item.id }),
160
166
  });
@@ -177,6 +183,7 @@ export const SortableTile = ({
177
183
  ref={setNodeRef}
178
184
  item={item}
179
185
  path={path}
186
+ type={type}
180
187
  position={position}
181
188
  operation={operation}
182
189
  active={active}
@@ -4,13 +4,10 @@
4
4
 
5
5
  import { useContext } from 'react';
6
6
 
7
- import { raise } from '@dxos/debug';
8
-
9
- import { MosaicContainerContext, type MosaicContainerProps } from '../Container';
7
+ import { MosaicContainerContext, type MosaicContainerContextType } from '../Container';
10
8
  import { type MosaicDataItem } from '../types';
11
9
 
12
10
  export const useContainer = <
13
11
  TData extends MosaicDataItem = MosaicDataItem,
14
12
  TPosition = unknown,
15
- >(): MosaicContainerProps<TData, TPosition> =>
16
- useContext(MosaicContainerContext) ?? raise(new Error('Missing MosaicContainerContext'));
13
+ >(): MosaicContainerContextType<TData, TPosition> => useContext(MosaicContainerContext);
@@ -2,10 +2,12 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ // TODO(wittjosiah): Rename MosiacDataItem to MosaicItemData?
5
6
  export type MosaicDataItem = { id: string };
6
7
 
7
8
  export type MosaicDraggedItem<TPosition = unknown> = {
8
9
  path: string;
10
+ type: string;
9
11
  // TODO(wittjosiah): Rename data? Otherwise item within item.
10
12
  item: MosaicDataItem;
11
13
  // Index or layout-specific positional information (stored separately from the item).