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

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,20 +1,16 @@
1
1
  // packages/ui/react-ui-mosaic/src/mosaic/hooks/useContainer.ts
2
2
  import { useContext } from "react";
3
+ import { raise } from "@dxos/debug";
3
4
 
4
5
  // packages/ui/react-ui-mosaic/src/mosaic/Container.tsx
5
6
  import React, { createContext, useEffect } from "react";
6
7
  var DEFAULT_TRANSITION = 200;
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 }) => {
8
+ var MosaicContainerContext = /* @__PURE__ */ createContext(void 0);
9
+ var MosaicContainer = ({ children, id, debug, Component: Component2, transitionDuration = DEFAULT_TRANSITION, modifier, getOverlayProps, getOverlayStyle, onOver, onDrop }) => {
13
10
  const mosaic = useMosaic();
14
11
  const container = {
15
12
  id,
16
13
  debug,
17
- type,
18
14
  Component: Component2,
19
15
  transitionDuration,
20
16
  modifier,
@@ -34,14 +30,14 @@ var MosaicContainer = ({ children, id, debug, type = DEFAULT_TYPE, Component: Co
34
30
  };
35
31
 
36
32
  // packages/ui/react-ui-mosaic/src/mosaic/hooks/useContainer.ts
37
- var useContainer = () => useContext(MosaicContainerContext);
33
+ var useContainer = () => useContext(MosaicContainerContext) ?? raise(new Error("Missing MosaicContainerContext"));
38
34
 
39
35
  // packages/ui/react-ui-mosaic/src/mosaic/hooks/useItemsWithPreview.ts
40
36
  import { useEffect as useEffect2, useState as useState2 } from "react";
41
37
 
42
38
  // packages/ui/react-ui-mosaic/src/mosaic/hooks/useMosaic.ts
43
39
  import { useContext as useContext2 } from "react";
44
- import { raise } from "@dxos/debug";
40
+ import { raise as raise2 } from "@dxos/debug";
45
41
 
46
42
  // packages/ui/react-ui-mosaic/src/mosaic/Root.tsx
47
43
  import { DndContext, KeyboardSensor, MouseSensor, pointerWithin, rectIntersection, TouchSensor, useSensor, useSensors } from "@dnd-kit/core";
@@ -159,12 +155,12 @@ var MosaicRoot = ({ Component: Component2 = DefaultComponent, debug, children })
159
155
  coordinateGetter: sortableKeyboardCoordinates
160
156
  }));
161
157
  const handleDragStart = (event) => {
162
- setActiveItem(pick(event.active.data.current, "path", "type", "item", "position"));
158
+ setActiveItem(pick(event.active.data.current, "path", "item", "position"));
163
159
  };
164
160
  const handleDragMove = (event) => {
165
161
  };
166
162
  const handleDragOver = (event) => {
167
- const overItem2 = pick(event.over?.data.current, "path", "type", "item", "position");
163
+ const overItem2 = pick(event.over?.data.current, "path", "item", "position");
168
164
  if (overItem2?.item?.id === activeItem?.item.id) {
169
165
  return;
170
166
  }
@@ -260,13 +256,11 @@ var MosaicDebug = ({ containers, operation, activeItem, overItem }) => {
260
256
  active: {
261
257
  id: activeItem?.item?.id.slice(0, 16),
262
258
  path: activeItem?.path && Path.create(...Path.parts(activeItem.path).map((part) => part.slice(0, 16))),
263
- type: activeItem?.type,
264
259
  position: activeItem?.position
265
260
  },
266
261
  over: {
267
262
  id: overItem?.item?.id.slice(0, 16),
268
263
  path: overItem?.path && Path.create(...Path.parts(overItem.path).map((part) => part.slice(0, 16))),
269
- type: overItem?.type,
270
264
  position: overItem?.position
271
265
  }
272
266
  }
@@ -274,7 +268,7 @@ var MosaicDebug = ({ containers, operation, activeItem, overItem }) => {
274
268
  };
275
269
 
276
270
  // packages/ui/react-ui-mosaic/src/mosaic/hooks/useMosaic.ts
277
- var useMosaic = () => useContext2(MosaicContext) ?? raise(new Error("Missing MosaicContext"));
271
+ var useMosaic = () => useContext2(MosaicContext) ?? raise2(new Error("Missing MosaicContext"));
278
272
 
279
273
  // packages/ui/react-ui-mosaic/src/mosaic/hooks/useItemsWithPreview.ts
280
274
  var useItemsWithPreview = ({ path, items }) => {
@@ -486,7 +480,7 @@ var Row = ({ children, id, items }) => /* @__PURE__ */ React6.createElement(Sort
486
480
  import { useDraggable, useDroppable } from "@dnd-kit/core";
487
481
  import { defaultAnimateLayoutChanges, useSortable } from "@dnd-kit/sortable";
488
482
  import React7 from "react";
489
- var DraggableTile = ({ path: parentPath, type = DEFAULT_TYPE, item, Component: Component2 = DefaultComponent, position, draggableStyle, ...props }) => {
483
+ var DraggableTile = ({ path: parentPath, item, Component: Component2 = DefaultComponent, position, draggableStyle, ...props }) => {
490
484
  const { operation } = useMosaic();
491
485
  const path = Path.create(parentPath, item.id);
492
486
  const {
@@ -499,7 +493,6 @@ var DraggableTile = ({ path: parentPath, type = DEFAULT_TYPE, item, Component: C
499
493
  id: path,
500
494
  data: {
501
495
  path,
502
- type,
503
496
  item,
504
497
  position
505
498
  }
@@ -508,7 +501,6 @@ var DraggableTile = ({ path: parentPath, type = DEFAULT_TYPE, item, Component: C
508
501
  ref: setNodeRef,
509
502
  item,
510
503
  path,
511
- type,
512
504
  position,
513
505
  operation,
514
506
  isDragging,
@@ -524,14 +516,13 @@ var DraggableTile = ({ path: parentPath, type = DEFAULT_TYPE, item, Component: C
524
516
  ...props
525
517
  });
526
518
  };
527
- var DroppableTile = ({ path: parentPath, type = DEFAULT_TYPE, item, Component: Component2 = DefaultComponent, position, ...props }) => {
519
+ var DroppableTile = ({ path: parentPath, item, Component: Component2 = DefaultComponent, position, ...props }) => {
528
520
  const { operation } = useMosaic();
529
521
  const path = parentPath === item.id ? parentPath : Path.create(parentPath, item.id);
530
522
  const { setNodeRef, isOver } = useDroppable({
531
523
  id: path,
532
524
  data: {
533
525
  path,
534
- type,
535
526
  item,
536
527
  position
537
528
  }
@@ -540,14 +531,13 @@ var DroppableTile = ({ path: parentPath, type = DEFAULT_TYPE, item, Component: C
540
531
  ref: setNodeRef,
541
532
  item,
542
533
  path,
543
- type,
544
534
  position,
545
535
  operation,
546
536
  isOver,
547
537
  ...props
548
538
  });
549
539
  };
550
- var SortableTile = ({ path: parentPath, type = DEFAULT_TYPE, item, Component: OverrideComponent, position, draggableStyle, ...props }) => {
540
+ var SortableTile = ({ path: parentPath, item, Component: OverrideComponent, position, draggableStyle, ...props }) => {
551
541
  const { operation, activeItem, overItem } = useMosaic();
552
542
  const { transitionDuration, Component: ContainerComponent } = useContainer();
553
543
  const path = Path.create(parentPath, item.id);
@@ -556,7 +546,6 @@ var SortableTile = ({ path: parentPath, type = DEFAULT_TYPE, item, Component: Ov
556
546
  id: isPreview ? activeItem.path : path,
557
547
  data: {
558
548
  path,
559
- type,
560
549
  item,
561
550
  position
562
551
  },
@@ -580,7 +569,6 @@ var SortableTile = ({ path: parentPath, type = DEFAULT_TYPE, item, Component: Ov
580
569
  ref: setNodeRef,
581
570
  item,
582
571
  path,
583
- type,
584
572
  position,
585
573
  operation,
586
574
  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 { 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"]
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"]
7
7
  }
@@ -1 +1 @@
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}}}
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}}}
@@ -2,11 +2,7 @@ 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
- };
8
5
  export declare const DEFAULT_TRANSITION = 200;
9
- export declare const DEFAULT_TYPE = "unknown";
10
6
  export type MosaicTileOverlayProps = {
11
7
  grow?: boolean;
12
8
  debug?: boolean;
@@ -34,10 +30,6 @@ export type MosaicContainerProps<TData extends MosaicDataItem = MosaicDataItem,
34
30
  * Default component used to render tiles.
35
31
  */
36
32
  Component?: MosaicTileComponent<TData, any>;
37
- /**
38
- * Default type of tiles.
39
- */
40
- type?: string;
41
33
  /**
42
34
  * Length of transition when moving tiles in milliseconds.
43
35
  *
@@ -67,11 +59,10 @@ export type MosaicContainerProps<TData extends MosaicDataItem = MosaicDataItem,
67
59
  */
68
60
  onDrop?: (event: MosaicDropEvent<TPosition>) => void;
69
61
  }>;
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>>;
62
+ export type MosaicContainerContextType = Omit<MosaicContainerProps<any>, 'children'>;
63
+ export declare const MosaicContainerContext: React.Context<MosaicContainerContextType | undefined>;
72
64
  /**
73
65
  * Root Container that manages the layout of tiles.
74
66
  */
75
- export declare const MosaicContainer: ({ children, id, debug, type, Component, transitionDuration, modifier, getOverlayProps, getOverlayStyle, onOver, onDrop, }: MosaicContainerProps) => JSX.Element;
76
- export {};
67
+ export declare const MosaicContainer: ({ children, id, debug, Component, transitionDuration, modifier, getOverlayProps, getOverlayStyle, onOver, onDrop, }: MosaicContainerProps) => JSX.Element;
77
68
  //# 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;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
+ {"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,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, type MosaicTileOverlayProps } from './Container';
3
+ import type { MosaicOperation, 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,7 +16,6 @@ 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;
20
19
  operation?: MosaicOperation;
21
20
  active?: MosaicActiveType;
22
21
  isDragging?: boolean;
@@ -37,13 +36,13 @@ export type MosaicTileComponent<TData extends MosaicDataItem = MosaicDataItem, T
37
36
  /**
38
37
  * Basic draggable mosaic tile.
39
38
  */
40
- export declare const DraggableTile: ({ path: parentPath, type, item, Component, position, draggableStyle, ...props }: MosaicTileProps<any>) => JSX.Element;
39
+ export declare const DraggableTile: ({ path: parentPath, item, Component, position, draggableStyle, ...props }: MosaicTileProps<any>) => JSX.Element;
41
40
  /**
42
41
  * Basic droppable mosaic tile.
43
42
  */
44
- export declare const DroppableTile: ({ path: parentPath, type, item, Component, position, ...props }: MosaicTileProps<any>) => JSX.Element;
43
+ export declare const DroppableTile: ({ path: parentPath, item, Component, position, ...props }: MosaicTileProps<any>) => JSX.Element;
45
44
  /**
46
45
  * Mosaic tile that can be sorted.
47
46
  */
48
- export declare const SortableTile: ({ path: parentPath, type, item, Component: OverrideComponent, position, draggableStyle, ...props }: MosaicTileProps<any, number>) => JSX.Element;
47
+ export declare const SortableTile: ({ path: parentPath, item, Component: OverrideComponent, position, draggableStyle, ...props }: MosaicTileProps<any, number>) => JSX.Element;
49
48
  //# 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,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
+ {"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,4 +1,4 @@
1
- import { type MosaicContainerContextType } from '../Container';
1
+ import { type MosaicContainerProps } from '../Container';
2
2
  import { type MosaicDataItem } from '../types';
3
- export declare const useContainer: <TData extends MosaicDataItem = MosaicDataItem, TPosition = unknown>() => MosaicContainerContextType<TData, TPosition>;
3
+ export declare const useContainer: <TData extends MosaicDataItem = MosaicDataItem, TPosition = unknown>() => MosaicContainerProps<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":"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"}
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"}
@@ -3,7 +3,6 @@ export type MosaicDataItem = {
3
3
  };
4
4
  export type MosaicDraggedItem<TPosition = unknown> = {
5
5
  path: string;
6
- type: string;
7
6
  item: MosaicDataItem;
8
7
  position?: TPosition;
9
8
  };
@@ -1 +1 @@
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"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/react-ui-mosaic",
3
- "version": "0.3.9-main.58adff6",
3
+ "version": "0.3.9-main.cea1d3b",
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.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"
28
+ "@dxos/invariant": "0.3.9-main.cea1d3b",
29
+ "@dxos/keys": "0.3.9-main.cea1d3b",
30
+ "@dxos/debug": "0.3.9-main.cea1d3b",
31
+ "@dxos/react-ui": "0.3.9-main.cea1d3b",
32
+ "@dxos/react-ui-types": "0.3.9-main.cea1d3b",
33
+ "@dxos/react-ui-theme": "0.3.9-main.cea1d3b",
34
+ "@dxos/util": "0.3.9-main.cea1d3b"
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.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"
50
+ "@dxos/echo-schema": "0.3.9-main.cea1d3b",
51
+ "@dxos/gem-core": "0.3.9-main.cea1d3b",
52
+ "@dxos/app-graph": "0.3.9-main.cea1d3b",
53
+ "@dxos/react-client": "0.3.9-main.cea1d3b"
54
54
  },
55
55
  "peerDependencies": {
56
56
  "@phosphor-icons/react": "^2.0.5",
@@ -15,13 +15,7 @@ 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
-
23
18
  export const DEFAULT_TRANSITION = 200;
24
- export const DEFAULT_TYPE = 'unknown';
25
19
 
26
20
  export type MosaicTileOverlayProps = {
27
21
  grow?: boolean;
@@ -63,11 +57,6 @@ export type MosaicContainerProps<TData extends MosaicDataItem = MosaicDataItem,
63
57
  */
64
58
  Component?: MosaicTileComponent<TData, any>;
65
59
 
66
- /**
67
- * Default type of tiles.
68
- */
69
- type?: string;
70
-
71
60
  /**
72
61
  * Length of transition when moving tiles in milliseconds.
73
62
  *
@@ -103,15 +92,9 @@ export type MosaicContainerProps<TData extends MosaicDataItem = MosaicDataItem,
103
92
  onDrop?: (event: MosaicDropEvent<TPosition>) => void;
104
93
  }>;
105
94
 
106
- export type MosaicContainerContextType<
107
- TData extends MosaicDataItem = MosaicDataItem,
108
- TPosition = unknown,
109
- > = WithRequiredProperty<Omit<MosaicContainerProps<TData, TPosition>, 'children'>, 'type'>;
95
+ export type MosaicContainerContextType = Omit<MosaicContainerProps<any>, 'children'>;
110
96
 
111
- export const MosaicContainerContext = createContext<MosaicContainerContextType<any>>({
112
- id: 'never',
113
- type: DEFAULT_TYPE,
114
- });
97
+ export const MosaicContainerContext = createContext<MosaicContainerContextType | undefined>(undefined);
115
98
 
116
99
  /**
117
100
  * Root Container that manages the layout of tiles.
@@ -120,7 +103,6 @@ export const MosaicContainer = ({
120
103
  children,
121
104
  id,
122
105
  debug,
123
- type = DEFAULT_TYPE,
124
106
  Component,
125
107
  transitionDuration = DEFAULT_TRANSITION,
126
108
  modifier,
@@ -133,7 +115,6 @@ export const MosaicContainer = ({
133
115
  const container = {
134
116
  id,
135
117
  debug,
136
- type,
137
118
  Component,
138
119
  transitionDuration,
139
120
  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', 'type', 'item', 'position'));
136
+ setActiveItem(pick(event.active.data.current as MosaicDraggedItem, 'path', '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', 'type', 'item', 'position');
142
+ const overItem = pick(event.over?.data.current as MosaicDraggedItem, 'path', '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,13 +241,11 @@ 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,
245
244
  position: activeItem?.position,
246
245
  },
247
246
  over: {
248
247
  id: overItem?.item?.id.slice(0, 16),
249
248
  path: overItem?.path && Path.create(...Path.parts(overItem.path).map((part) => part.slice(0, 16))),
250
- type: overItem?.type,
251
249
  position: overItem?.position,
252
250
  },
253
251
  }}
@@ -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 { DEFAULT_TYPE, type MosaicOperation, type MosaicTileOverlayProps } from './Container';
10
+ import type { MosaicOperation, 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,7 +29,6 @@ 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;
33
32
  operation?: MosaicOperation;
34
33
  active?: MosaicActiveType; // TODO(burdon): Rename state?
35
34
 
@@ -63,7 +62,6 @@ export type MosaicTileComponent<
63
62
  */
64
63
  export const DraggableTile = ({
65
64
  path: parentPath,
66
- type = DEFAULT_TYPE,
67
65
  item,
68
66
  Component = DefaultComponent,
69
67
  position,
@@ -74,7 +72,7 @@ export const DraggableTile = ({
74
72
  const path = Path.create(parentPath, item.id);
75
73
  const { setNodeRef, attributes, listeners, /* transform, */ isDragging } = useDraggable({
76
74
  id: path,
77
- data: { path, type, item, position } satisfies MosaicDraggedItem,
75
+ data: { path, item, position } satisfies MosaicDraggedItem,
78
76
  });
79
77
 
80
78
  return (
@@ -82,7 +80,6 @@ export const DraggableTile = ({
82
80
  ref={setNodeRef}
83
81
  item={item}
84
82
  path={path}
85
- type={type}
86
83
  position={position}
87
84
  operation={operation}
88
85
  isDragging={isDragging}
@@ -102,7 +99,6 @@ export const DraggableTile = ({
102
99
  */
103
100
  export const DroppableTile = ({
104
101
  path: parentPath,
105
- type = DEFAULT_TYPE,
106
102
  item,
107
103
  Component = DefaultComponent,
108
104
  position,
@@ -115,7 +111,7 @@ export const DroppableTile = ({
115
111
  : Path.create(parentPath, item.id);
116
112
  const { setNodeRef, isOver } = useDroppable({
117
113
  id: path,
118
- data: { path, type, item, position } satisfies MosaicDraggedItem,
114
+ data: { path, item, position } satisfies MosaicDraggedItem,
119
115
  });
120
116
 
121
117
  return (
@@ -123,7 +119,6 @@ export const DroppableTile = ({
123
119
  ref={setNodeRef}
124
120
  item={item}
125
121
  path={path}
126
- type={type}
127
122
  position={position}
128
123
  operation={operation}
129
124
  isOver={isOver}
@@ -137,7 +132,6 @@ export const DroppableTile = ({
137
132
  */
138
133
  export const SortableTile = ({
139
134
  path: parentPath,
140
- type = DEFAULT_TYPE,
141
135
  item,
142
136
  Component: OverrideComponent,
143
137
  position,
@@ -160,7 +154,7 @@ export const SortableTile = ({
160
154
 
161
155
  const { setNodeRef, attributes, listeners, transform, isDragging, isOver } = useSortable({
162
156
  id: isPreview ? activeItem.path : path,
163
- data: { path, type, item, position } satisfies MosaicDraggedItem,
157
+ data: { path, item, position } satisfies MosaicDraggedItem,
164
158
  animateLayoutChanges: (args) =>
165
159
  defaultAnimateLayoutChanges({ ...args, wasDragging: item.id !== activeItem?.item.id }),
166
160
  });
@@ -183,7 +177,6 @@ export const SortableTile = ({
183
177
  ref={setNodeRef}
184
178
  item={item}
185
179
  path={path}
186
- type={type}
187
180
  position={position}
188
181
  operation={operation}
189
182
  active={active}
@@ -4,10 +4,13 @@
4
4
 
5
5
  import { useContext } from 'react';
6
6
 
7
- import { MosaicContainerContext, type MosaicContainerContextType } from '../Container';
7
+ import { raise } from '@dxos/debug';
8
+
9
+ import { MosaicContainerContext, type MosaicContainerProps } from '../Container';
8
10
  import { type MosaicDataItem } from '../types';
9
11
 
10
12
  export const useContainer = <
11
13
  TData extends MosaicDataItem = MosaicDataItem,
12
14
  TPosition = unknown,
13
- >(): MosaicContainerContextType<TData, TPosition> => useContext(MosaicContainerContext);
15
+ >(): MosaicContainerProps<TData, TPosition> =>
16
+ useContext(MosaicContainerContext) ?? raise(new Error('Missing MosaicContainerContext'));
@@ -2,12 +2,10 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- // TODO(wittjosiah): Rename MosiacDataItem to MosaicItemData?
6
5
  export type MosaicDataItem = { id: string };
7
6
 
8
7
  export type MosaicDraggedItem<TPosition = unknown> = {
9
8
  path: string;
10
- type: string;
11
9
  // TODO(wittjosiah): Rename data? Otherwise item within item.
12
10
  item: MosaicDataItem;
13
11
  // Index or layout-specific positional information (stored separately from the item).