@dxos/react-ui-mosaic 0.3.3-main.006ca4d

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +45 -0
  3. package/dist/lib/browser/index.mjs +596 -0
  4. package/dist/lib/browser/index.mjs.map +7 -0
  5. package/dist/lib/browser/meta.json +1 -0
  6. package/dist/types/src/index.d.ts +2 -0
  7. package/dist/types/src/index.d.ts.map +1 -0
  8. package/dist/types/src/mosaic/Container.d.ts +65 -0
  9. package/dist/types/src/mosaic/Container.d.ts.map +1 -0
  10. package/dist/types/src/mosaic/Debug.d.ts +9 -0
  11. package/dist/types/src/mosaic/Debug.d.ts.map +1 -0
  12. package/dist/types/src/mosaic/DefaultComponent.d.ts +4 -0
  13. package/dist/types/src/mosaic/DefaultComponent.d.ts.map +1 -0
  14. package/dist/types/src/mosaic/DragOverlay.d.ts +11 -0
  15. package/dist/types/src/mosaic/DragOverlay.d.ts.map +1 -0
  16. package/dist/types/src/mosaic/Mosaic.d.ts +32 -0
  17. package/dist/types/src/mosaic/Mosaic.d.ts.map +1 -0
  18. package/dist/types/src/mosaic/Root.d.ts +24 -0
  19. package/dist/types/src/mosaic/Root.d.ts.map +1 -0
  20. package/dist/types/src/mosaic/SortableContext.d.ts +14 -0
  21. package/dist/types/src/mosaic/SortableContext.d.ts.map +1 -0
  22. package/dist/types/src/mosaic/Tile.d.ts +41 -0
  23. package/dist/types/src/mosaic/Tile.d.ts.map +1 -0
  24. package/dist/types/src/mosaic/hooks/index.d.ts +5 -0
  25. package/dist/types/src/mosaic/hooks/index.d.ts.map +1 -0
  26. package/dist/types/src/mosaic/hooks/useContainer.d.ts +4 -0
  27. package/dist/types/src/mosaic/hooks/useContainer.d.ts.map +1 -0
  28. package/dist/types/src/mosaic/hooks/useItemsWithPreview.d.ts +10 -0
  29. package/dist/types/src/mosaic/hooks/useItemsWithPreview.d.ts.map +1 -0
  30. package/dist/types/src/mosaic/hooks/useMosaic.d.ts +2 -0
  31. package/dist/types/src/mosaic/hooks/useMosaic.d.ts.map +1 -0
  32. package/dist/types/src/mosaic/hooks/useSortedItems.d.ts +6 -0
  33. package/dist/types/src/mosaic/hooks/useSortedItems.d.ts.map +1 -0
  34. package/dist/types/src/mosaic/index.d.ts +5 -0
  35. package/dist/types/src/mosaic/index.d.ts.map +1 -0
  36. package/dist/types/src/mosaic/types.d.ts +9 -0
  37. package/dist/types/src/mosaic/types.d.ts.map +1 -0
  38. package/dist/types/src/mosaic/util/data.d.ts +3 -0
  39. package/dist/types/src/mosaic/util/data.d.ts.map +1 -0
  40. package/dist/types/src/mosaic/util/index.d.ts +4 -0
  41. package/dist/types/src/mosaic/util/index.d.ts.map +1 -0
  42. package/dist/types/src/mosaic/util/path.d.ts +14 -0
  43. package/dist/types/src/mosaic/util/path.d.ts.map +1 -0
  44. package/dist/types/src/mosaic/util/path.test.d.ts +2 -0
  45. package/dist/types/src/mosaic/util/path.test.d.ts.map +1 -0
  46. package/dist/types/src/mosaic/util/styles.d.ts +3 -0
  47. package/dist/types/src/mosaic/util/styles.d.ts.map +1 -0
  48. package/dist/types/src/testing/Cards.d.ts +10 -0
  49. package/dist/types/src/testing/Cards.d.ts.map +1 -0
  50. package/dist/types/src/testing/decorators.d.ts +4 -0
  51. package/dist/types/src/testing/decorators.d.ts.map +1 -0
  52. package/dist/types/src/testing/generator.d.ts +43 -0
  53. package/dist/types/src/testing/generator.d.ts.map +1 -0
  54. package/dist/types/src/testing/index.d.ts +5 -0
  55. package/dist/types/src/testing/index.d.ts.map +1 -0
  56. package/dist/types/src/testing/next-fractional-index.d.ts +5 -0
  57. package/dist/types/src/testing/next-fractional-index.d.ts.map +1 -0
  58. package/dist/types/src/views/Demo/Demo.stories.d.ts +13 -0
  59. package/dist/types/src/views/Demo/Demo.stories.d.ts.map +1 -0
  60. package/dist/types/src/views/Demo/Echo.stories.d.ts +12 -0
  61. package/dist/types/src/views/Demo/Echo.stories.d.ts.map +1 -0
  62. package/dist/types/src/views/Grid/Grid.d.ts +30 -0
  63. package/dist/types/src/views/Grid/Grid.d.ts.map +1 -0
  64. package/dist/types/src/views/Grid/Grid.stories.d.ts +13 -0
  65. package/dist/types/src/views/Grid/Grid.stories.d.ts.map +1 -0
  66. package/dist/types/src/views/Grid/index.d.ts +3 -0
  67. package/dist/types/src/views/Grid/index.d.ts.map +1 -0
  68. package/dist/types/src/views/Grid/layout.d.ts +27 -0
  69. package/dist/types/src/views/Grid/layout.d.ts.map +1 -0
  70. package/dist/types/src/views/Grid/testing.d.ts +10 -0
  71. package/dist/types/src/views/Grid/testing.d.ts.map +1 -0
  72. package/dist/types/src/views/Kanban/Echo.stories.d.ts +18 -0
  73. package/dist/types/src/views/Kanban/Echo.stories.d.ts.map +1 -0
  74. package/dist/types/src/views/Kanban/Kanban.d.ts +11 -0
  75. package/dist/types/src/views/Kanban/Kanban.d.ts.map +1 -0
  76. package/dist/types/src/views/Kanban/Kanban.stories.d.ts +28 -0
  77. package/dist/types/src/views/Kanban/Kanban.stories.d.ts.map +1 -0
  78. package/dist/types/src/views/Kanban/index.d.ts +2 -0
  79. package/dist/types/src/views/Kanban/index.d.ts.map +1 -0
  80. package/dist/types/src/views/Kanban/testing.d.ts +20 -0
  81. package/dist/types/src/views/Kanban/testing.d.ts.map +1 -0
  82. package/dist/types/src/views/Stack/Columns.stories.d.ts +34 -0
  83. package/dist/types/src/views/Stack/Columns.stories.d.ts.map +1 -0
  84. package/dist/types/src/views/Stack/Stack.d.ts +9 -0
  85. package/dist/types/src/views/Stack/Stack.d.ts.map +1 -0
  86. package/dist/types/src/views/Stack/Stack.stories.d.ts +39 -0
  87. package/dist/types/src/views/Stack/Stack.stories.d.ts.map +1 -0
  88. package/dist/types/src/views/Stack/index.d.ts +2 -0
  89. package/dist/types/src/views/Stack/index.d.ts.map +1 -0
  90. package/dist/types/src/views/Stack/testing.d.ts +9 -0
  91. package/dist/types/src/views/Stack/testing.d.ts.map +1 -0
  92. package/dist/types/src/views/Tree/Graph.stories.d.ts +21 -0
  93. package/dist/types/src/views/Tree/Graph.stories.d.ts.map +1 -0
  94. package/dist/types/src/views/Tree/Tree.d.ts +13 -0
  95. package/dist/types/src/views/Tree/Tree.d.ts.map +1 -0
  96. package/dist/types/src/views/Tree/Tree.stories.d.ts +41 -0
  97. package/dist/types/src/views/Tree/Tree.stories.d.ts.map +1 -0
  98. package/dist/types/src/views/Tree/index.d.ts +2 -0
  99. package/dist/types/src/views/Tree/index.d.ts.map +1 -0
  100. package/dist/types/src/views/Tree/testing.d.ts +15 -0
  101. package/dist/types/src/views/Tree/testing.d.ts.map +1 -0
  102. package/dist/types/src/views/index.d.ts +5 -0
  103. package/dist/types/src/views/index.d.ts.map +1 -0
  104. package/package.json +67 -0
  105. package/src/index.ts +5 -0
  106. package/src/mosaic/Container.tsx +137 -0
  107. package/src/mosaic/Debug.tsx +24 -0
  108. package/src/mosaic/DefaultComponent.tsx +26 -0
  109. package/src/mosaic/DragOverlay.tsx +136 -0
  110. package/src/mosaic/Mosaic.ts +84 -0
  111. package/src/mosaic/Root.tsx +255 -0
  112. package/src/mosaic/SortableContext.tsx +60 -0
  113. package/src/mosaic/Tile.tsx +189 -0
  114. package/src/mosaic/hooks/index.ts +8 -0
  115. package/src/mosaic/hooks/useContainer.ts +16 -0
  116. package/src/mosaic/hooks/useItemsWithPreview.ts +64 -0
  117. package/src/mosaic/hooks/useMosaic.ts +11 -0
  118. package/src/mosaic/hooks/useSortedItems.ts +14 -0
  119. package/src/mosaic/index.ts +9 -0
  120. package/src/mosaic/types.ts +13 -0
  121. package/src/mosaic/util/data.ts +19 -0
  122. package/src/mosaic/util/index.ts +7 -0
  123. package/src/mosaic/util/path.test.ts +26 -0
  124. package/src/mosaic/util/path.ts +21 -0
  125. package/src/mosaic/util/styles.ts +10 -0
  126. package/src/testing/Cards.tsx +88 -0
  127. package/src/testing/decorators.tsx +20 -0
  128. package/src/testing/generator.ts +135 -0
  129. package/src/testing/index.ts +9 -0
  130. package/src/testing/next-fractional-index.ts +36 -0
  131. package/src/views/Demo/Demo.stories.tsx +79 -0
  132. package/src/views/Demo/Echo.stories.tsx +74 -0
  133. package/src/views/Grid/Grid.stories.tsx +48 -0
  134. package/src/views/Grid/Grid.tsx +248 -0
  135. package/src/views/Grid/index.ts +7 -0
  136. package/src/views/Grid/layout.ts +42 -0
  137. package/src/views/Grid/testing.tsx +91 -0
  138. package/src/views/Kanban/Echo.stories.tsx +67 -0
  139. package/src/views/Kanban/Kanban.stories.tsx +48 -0
  140. package/src/views/Kanban/Kanban.tsx +139 -0
  141. package/src/views/Kanban/index.ts +5 -0
  142. package/src/views/Kanban/testing.tsx +231 -0
  143. package/src/views/Stack/Columns.stories.tsx +61 -0
  144. package/src/views/Stack/Stack.stories.tsx +62 -0
  145. package/src/views/Stack/Stack.tsx +58 -0
  146. package/src/views/Stack/index.ts +5 -0
  147. package/src/views/Stack/testing.tsx +77 -0
  148. package/src/views/Tree/Graph.stories.tsx +36 -0
  149. package/src/views/Tree/Tree.stories.tsx +92 -0
  150. package/src/views/Tree/Tree.tsx +128 -0
  151. package/src/views/Tree/index.ts +5 -0
  152. package/src/views/Tree/testing.tsx +156 -0
  153. package/src/views/index.ts +8 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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/useSortedItems.ts", "../../../src/mosaic/DragOverlay.tsx", "../../../src/mosaic/SortableContext.tsx", "../../../src/mosaic/Tile.tsx", "../../../src/mosaic/Mosaic.ts"],
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// TODO(wittjosiah): Add delete.\nexport type MosaicOperation = 'adopt' | '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 MosaicCompareDataItem = Parameters<typeof Array.prototype.sort>[0];\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 /**\n * Used to sort items within the container.\n */\n compare?: MosaicCompareDataItem;\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 compare,\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 compare,\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 (operation === 'reject' || operation === 'rearrange' || !activeItem || !overItem) {\n setLastOverParent(undefined);\n setItemsWithPreview(items);\n return;\n }\n\n if (lastOverParent === overParent) {\n return;\n }\n\n setLastOverParent(overParent);\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 (!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 // TODO(wittjosiah): Default to reject.\n return 'adopt';\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 { useContainer } from './useContainer';\nimport { type MosaicDataItem } from '../types';\n\n/**\n * Returns a sorted collection of items if a compare function is provided.\n */\nexport const useSortedItems = <T extends MosaicDataItem>(items: T[]): T[] => {\n const { compare } = useContainer();\n return compare ? [...items].sort(compare) : items;\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 { DensityProvider } from '@dxos/react-ui';\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 <DensityProvider density='fine'>\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 </DensityProvider>\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\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 onSelect?: () => void;\n onRemove?: () => 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 type MosaicCompareDataItem as NaturalMosaicCompareDataItem,\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 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 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 MosaicDebugProps = DebugProps;\n\nexport type MosaicMoveEvent<TPosition = unknown> = NaturalMosaicMoveEvent<TPosition>;\nexport type MosaicDropEvent<TPosition = unknown> = NaturalMosaicDropEvent<TPosition>;\nexport type MosaicOperation = NaturalMosaicOperation;\nexport type MosaicActiveType = NaturalMosaicActiveType;\n\nexport type MosaicCompareDataItem = NaturalMosaicCompareDataItem;\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", "compare", "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", "useSortedItems", "items", "compare", "useContainer", "sort", "DragOverlay", "React", "Component", "useEffect", "useRef", "useState", "DensityProvider", "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", "DensityProvider", "density", "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"]
7
+ }
@@ -0,0 +1 @@
1
+ {"inputs":{"packages/ui/react-ui-mosaic/src/mosaic/Container.tsx":{"bytes":7569,"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":26151,"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":8761,"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/useSortedItems.ts":{"bytes":1476,"imports":[{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/useContainer.ts","kind":"import-statement","original":"./useContainer"}],"format":"esm"},"packages/ui/react-ui-mosaic/src/mosaic/hooks/index.ts":{"bytes":806,"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/useMosaic.ts","kind":"import-statement","original":"./useMosaic"},{"path":"packages/ui/react-ui-mosaic/src/mosaic/hooks/useSortedItems.ts","kind":"import-statement","original":"./useSortedItems"}],"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":14978,"imports":[{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","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":16283,"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":5844,"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/index.ts":{"bytes":465,"imports":[{"path":"packages/ui/react-ui-mosaic/src/mosaic/index.ts","kind":"import-statement","original":"./mosaic"}],"format":"esm"}},"outputs":{"packages/ui/react-ui-mosaic/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":53513},"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":"@dxos/react-ui","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}],"exports":["Mosaic","Path","getTransformCSS","swapItems","useContainer","useItemsWithPreview","useMosaic","useSortedItems"],"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":808},"packages/ui/react-ui-mosaic/src/mosaic/hooks/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-mosaic/src/mosaic/hooks/useItemsWithPreview.ts":{"bytesInOutput":1913},"packages/ui/react-ui-mosaic/src/mosaic/hooks/useMosaic.ts":{"bytesInOutput":194},"packages/ui/react-ui-mosaic/src/mosaic/Root.tsx":{"bytesInOutput":5522},"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/useSortedItems.ts":{"bytesInOutput":136},"packages/ui/react-ui-mosaic/src/mosaic/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-mosaic/src/mosaic/DragOverlay.tsx":{"bytesInOutput":3431},"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}},"bytes":20549}}}
@@ -0,0 +1,2 @@
1
+ export * from './mosaic';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,UAAU,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { type Modifier } from '@dnd-kit/core';
2
+ import React, { type CSSProperties, type HTMLAttributes, type PropsWithChildren } from 'react';
3
+ import { type MosaicTileComponent } from './Tile';
4
+ import { type MosaicDataItem, type MosaicDraggedItem } from './types';
5
+ export declare const DEFAULT_TRANSITION = 200;
6
+ export type MosaicTileOverlayProps = {
7
+ grow?: boolean;
8
+ debug?: boolean;
9
+ };
10
+ export type MosaicOperation = 'adopt' | 'copy' | 'rearrange' | 'reject';
11
+ export type MosaicMoveEvent<TPosition = unknown> = {
12
+ active: MosaicDraggedItem<TPosition>;
13
+ over: MosaicDraggedItem<TPosition>;
14
+ };
15
+ export type MosaicDropEvent<TPosition = unknown> = MosaicMoveEvent<TPosition> & {
16
+ operation: MosaicOperation;
17
+ };
18
+ export type MosaicCompareDataItem = Parameters<typeof Array.prototype.sort>[0];
19
+ export type MosaicContainerProps<TData extends MosaicDataItem = MosaicDataItem, TPosition = unknown> = Pick<HTMLAttributes<HTMLDivElement>, 'className'> & PropsWithChildren<{
20
+ id: string;
21
+ debug?: boolean;
22
+ /**
23
+ * Default component used to render tiles.
24
+ */
25
+ Component?: MosaicTileComponent<TData, any>;
26
+ /**
27
+ * Length of transition when moving tiles in milliseconds.
28
+ *
29
+ * @default 200
30
+ */
31
+ transitionDuration?: number;
32
+ /**
33
+ * Adapter to transform properties while dragging (e.g., constraint axes).
34
+ * https://github.com/clauderic/dnd-kit/blob/master/packages/core/src/modifiers/types.ts
35
+ */
36
+ modifier?: (activeItem: MosaicDraggedItem, ...modifierArgs: Parameters<Modifier>) => ReturnType<Modifier>;
37
+ /**
38
+ * Property overrides for the default overlay.
39
+ */
40
+ getOverlayProps?: () => MosaicTileOverlayProps;
41
+ /**
42
+ * Style property overrides for the default overlay.
43
+ */
44
+ getOverlayStyle?: () => CSSProperties;
45
+ /**
46
+ * Called when a tile is dragged over the container.
47
+ * Returns true if the tile can be dropped.
48
+ */
49
+ onOver?: (event: MosaicMoveEvent<TPosition>) => MosaicOperation;
50
+ /**
51
+ * Called when a tile is dropped on the container.
52
+ */
53
+ onDrop?: (event: MosaicDropEvent<TPosition>) => void;
54
+ /**
55
+ * Used to sort items within the container.
56
+ */
57
+ compare?: MosaicCompareDataItem;
58
+ }>;
59
+ export type MosaicContainerContextType = Omit<MosaicContainerProps<any>, 'children'>;
60
+ export declare const MosaicContainerContext: React.Context<MosaicContainerContextType | undefined>;
61
+ /**
62
+ * Root Container that manages the layout of tiles.
63
+ */
64
+ export declare const MosaicContainer: ({ children, id, debug, Component, transitionDuration, modifier, getOverlayProps, getOverlayStyle, onOver, onDrop, compare, }: MosaicContainerProps) => JSX.Element;
65
+ //# sourceMappingURL=Container.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../../../src/mosaic/Container.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,EAGZ,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACvB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEtE,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAGF,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExE,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,qBAAqB,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAE/E,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;IAErD;;OAEG;IACH,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC,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,iIAYzB,oBAAoB,gBAwBtB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type FC } from 'react';
2
+ type Position = 'bottom-left' | 'bottom-right';
3
+ export type DebugProps = {
4
+ data: any;
5
+ position?: Position;
6
+ };
7
+ export declare const Debug: FC<DebugProps>;
8
+ export {};
9
+ //# sourceMappingURL=Debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Debug.d.ts","sourceRoot":"","sources":["../../../../src/mosaic/Debug.tsx"],"names":[],"mappings":"AAIA,OAAc,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAIvC,KAAK,QAAQ,GAAG,aAAa,GAAG,cAAc,CAAC;AAE/C,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAC;AAE5D,eAAO,MAAM,KAAK,EAAE,EAAE,CAAC,UAAU,CAWhC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type MosaicTileComponent } from './Tile';
2
+ import { type MosaicDataItem } from './types';
3
+ export declare const DefaultComponent: MosaicTileComponent<MosaicDataItem>;
4
+ //# sourceMappingURL=DefaultComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultComponent.d.ts","sourceRoot":"","sources":["../../../../src/mosaic/DefaultComponent.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,eAAO,MAAM,gBAAgB,EAAE,mBAAmB,CAAC,cAAc,CAWhE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { DragOverlay } from '@dnd-kit/core';
2
+ import React from 'react';
3
+ export type MosaicDragOverlayProps = {
4
+ delay?: number;
5
+ debug?: boolean;
6
+ } & Omit<React.ComponentProps<typeof DragOverlay>, 'children'>;
7
+ /**
8
+ * Render the currently dragged item of the Mosaic.
9
+ */
10
+ export declare const MosaicDragOverlay: ({ delay, debug, ...overlayProps }: MosaicDragOverlayProps) => JSX.Element;
11
+ //# sourceMappingURL=DragOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DragOverlay.d.ts","sourceRoot":"","sources":["../../../../src/mosaic/DragOverlay.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAyE,MAAM,OAAO,CAAC;AAU9F,MAAM,MAAM,sBAAsB,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAC7E,KAAK,CAAC,cAAc,CAAC,OAAO,WAAW,CAAC,EACxC,UAAU,CACX,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,sCAAqD,sBAAsB,gBAiFxG,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { type FC } from 'react';
2
+ import { type MosaicContainerProps as NaturalMosaicContainerProps, type MosaicMoveEvent as NaturalMosaicMoveEvent, type MosaicDropEvent as NaturalMosaicDropEvent, type MosaicOperation as NaturalMosaicOperation, type MosaicCompareDataItem as NaturalMosaicCompareDataItem } from './Container';
3
+ import { type DebugProps } from './Debug';
4
+ import { type MosaicDragOverlayProps } from './DragOverlay';
5
+ import { type MosaicRootProps as NaturalMosaicRootProps } from './Root';
6
+ import { type MosaicSortableProps as NaturalMosaicSortableProps } from './SortableContext';
7
+ import { type MosaicTileProps as NaturalMosaicTileProps, type MosaicTileComponent as NaturalMosaicTileComponent, type MosaicActiveType as NaturalMosaicActiveType } from './Tile';
8
+ import { type MosaicDataItem } from './types';
9
+ export declare const Mosaic: {
10
+ Root: FC<MosaicRootProps>;
11
+ Container: FC<MosaicContainerProps<any, any>>;
12
+ DragOverlay: FC<MosaicOverlayProps>;
13
+ SortableContext: FC<MosaicSortableProps>;
14
+ DraggableTile: FC<MosaicTileProps<any, any>>;
15
+ DroppableTile: FC<MosaicTileProps<any, any>>;
16
+ SortableTile: FC<MosaicTileProps<any, number>>;
17
+ DefaultComponent: MosaicTileComponent<MosaicDataItem, HTMLDivElement>;
18
+ Debug: FC<MosaicDebugProps>;
19
+ };
20
+ export type MosaicRootProps = NaturalMosaicRootProps;
21
+ export type MosaicContainerProps<TData extends MosaicDataItem = MosaicDataItem, TPosition = unknown> = NaturalMosaicContainerProps<TData, TPosition>;
22
+ export type MosaicOverlayProps = MosaicDragOverlayProps;
23
+ export type MosaicSortableProps = NaturalMosaicSortableProps;
24
+ export type MosaicTileProps<TData extends MosaicDataItem = MosaicDataItem, TPosition = unknown> = NaturalMosaicTileProps<TData, TPosition>;
25
+ export type MosaicTileComponent<TData extends MosaicDataItem = MosaicDataItem, TElement extends HTMLElement = HTMLDivElement> = NaturalMosaicTileComponent<TData, TElement>;
26
+ export type MosaicDebugProps = DebugProps;
27
+ export type MosaicMoveEvent<TPosition = unknown> = NaturalMosaicMoveEvent<TPosition>;
28
+ export type MosaicDropEvent<TPosition = unknown> = NaturalMosaicDropEvent<TPosition>;
29
+ export type MosaicOperation = NaturalMosaicOperation;
30
+ export type MosaicActiveType = NaturalMosaicActiveType;
31
+ export type MosaicCompareDataItem = NaturalMosaicCompareDataItem;
32
+ //# sourceMappingURL=Mosaic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Mosaic.d.ts","sourceRoot":"","sources":["../../../../src/mosaic/Mosaic.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAEL,KAAK,oBAAoB,IAAI,2BAA2B,EACxD,KAAK,eAAe,IAAI,sBAAsB,EAC9C,KAAK,eAAe,IAAI,sBAAsB,EAC9C,KAAK,eAAe,IAAI,sBAAsB,EAC9C,KAAK,qBAAqB,IAAI,4BAA4B,EAC3D,MAAM,aAAa,CAAC;AACrB,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,EAAqB,KAAK,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAc,KAAK,eAAe,IAAI,sBAAsB,EAAE,MAAM,QAAQ,CAAC;AACpF,OAAO,EAAyB,KAAK,mBAAmB,IAAI,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAClH,OAAO,EAIL,KAAK,eAAe,IAAI,sBAAsB,EAC9C,KAAK,mBAAmB,IAAI,0BAA0B,EACtD,KAAK,gBAAgB,IAAI,uBAAuB,EACjD,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,eAAO,MAAM,MAAM;UAcX,GAAG,eAAe,CAAC;eACd,GAAG,qBAAqB,GAAG,EAAE,GAAG,CAAC,CAAC;iBAChC,GAAG,kBAAkB,CAAC;qBAClB,GAAG,mBAAmB,CAAC;mBACzB,GAAG,gBAAgB,GAAG,EAAE,GAAG,CAAC,CAAC;mBAC7B,GAAG,gBAAgB,GAAG,EAAE,GAAG,CAAC,CAAC;kBAC9B,GAAG,gBAAgB,GAAG,EAAE,MAAM,CAAC,CAAC;;WAGvC,GAAG,gBAAgB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,sBAAsB,CAAC;AAErD,MAAM,MAAM,oBAAoB,CAC9B,KAAK,SAAS,cAAc,GAAG,cAAc,EAC7C,SAAS,GAAG,OAAO,IACjB,2BAA2B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAElD,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AAExD,MAAM,MAAM,mBAAmB,GAAG,0BAA0B,CAAC;AAE7D,MAAM,MAAM,eAAe,CACzB,KAAK,SAAS,cAAc,GAAG,cAAc,EAC7C,SAAS,GAAG,OAAO,IACjB,sBAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAE7C,MAAM,MAAM,mBAAmB,CAC7B,KAAK,SAAS,cAAc,GAAG,cAAc,EAC7C,QAAQ,SAAS,WAAW,GAAG,cAAc,IAC3C,0BAA0B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAEhD,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAE1C,MAAM,MAAM,eAAe,CAAC,SAAS,GAAG,OAAO,IAAI,sBAAsB,CAAC,SAAS,CAAC,CAAC;AACrF,MAAM,MAAM,eAAe,CAAC,SAAS,GAAG,OAAO,IAAI,sBAAsB,CAAC,SAAS,CAAC,CAAC;AACrF,MAAM,MAAM,eAAe,GAAG,sBAAsB,CAAC;AACrD,MAAM,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAEvD,MAAM,MAAM,qBAAqB,GAAG,4BAA4B,CAAC"}
@@ -0,0 +1,24 @@
1
+ import React, { type FC, type PropsWithChildren } from 'react';
2
+ import { type MosaicContainerProps, type MosaicOperation } from './Container';
3
+ import { type MosaicTileComponent } from './Tile';
4
+ import { type MosaicDraggedItem } from './types';
5
+ export type MosaicContextType = {
6
+ containers: Record<string, MosaicContainerProps<any> | undefined>;
7
+ setContainer: (id: string, container?: MosaicContainerProps<any>) => void;
8
+ activeItem: MosaicDraggedItem | undefined;
9
+ overItem: MosaicDraggedItem | undefined;
10
+ operation: MosaicOperation;
11
+ };
12
+ export declare const MosaicContext: React.Context<MosaicContextType | undefined>;
13
+ export type MosaicRootProps = PropsWithChildren<{
14
+ /**
15
+ * Default component.
16
+ */
17
+ Component?: MosaicTileComponent<any>;
18
+ debug?: boolean;
19
+ }>;
20
+ /**
21
+ * Root context provider.
22
+ */
23
+ export declare const MosaicRoot: FC<MosaicRootProps>;
24
+ //# sourceMappingURL=Root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Root.d.ts","sourceRoot":"","sources":["../../../../src/mosaic/Root.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,EAAiB,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAAY,MAAM,OAAO,CAAC;AAGxF,OAAO,EAAsB,KAAK,oBAAoB,EAAwB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAGxH,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAKjD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IAClE,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,oBAAoB,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAC1E,UAAU,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC1C,QAAQ,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACxC,SAAS,EAAE,eAAe,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,aAAa,8CAA0D,CAAC;AAErF,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;IAC9C;;OAEG;IACH,SAAS,CAAC,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CA2K1C,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type PropsWithChildren } from 'react';
2
+ import { type MosaicDataItem } from './types';
3
+ type Direction = 'horizontal' | 'vertical';
4
+ export type MosaicSortableProps<TData extends MosaicDataItem = MosaicDataItem> = PropsWithChildren<{
5
+ id?: string;
6
+ items?: TData[];
7
+ direction?: Direction;
8
+ }>;
9
+ /**
10
+ * Mosaic convenience wrapper for dnd-kit SortableContext.
11
+ */
12
+ export declare const MosaicSortableContext: ({ id, items, direction, children }: MosaicSortableProps) => JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=SortableContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SortableContext.d.ts","sourceRoot":"","sources":["../../../../src/mosaic/SortableContext.tsx"],"names":[],"mappings":"AAKA,OAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAGtD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,KAAK,SAAS,GAAG,YAAY,GAAG,UAAU,CAAC;AAE3C,MAAM,MAAM,mBAAmB,CAAC,KAAK,SAAS,cAAc,GAAG,cAAc,IAAI,iBAAiB,CAAC;IACjG,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC,CAAC;AAEH;;GAEG;AAGH,eAAO,MAAM,qBAAqB,uCAA0D,mBAAmB,gBAuB9G,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { type DraggableAttributes } from '@dnd-kit/core';
2
+ import type { CSSProperties, ForwardRefExoticComponent, HTMLAttributes, RefAttributes } from 'react';
3
+ import type { MosaicOperation, MosaicTileOverlayProps } from './Container';
4
+ import type { MosaicDataItem } from './types';
5
+ export type MosaicActiveType = 'overlay' | 'rearrange' | 'origin' | 'destination';
6
+ /**
7
+ * Props passed to mosaic tile.
8
+ */
9
+ export type MosaicTileProps<TData extends MosaicDataItem = MosaicDataItem, TPosition = unknown> = Pick<HTMLAttributes<HTMLDivElement>, 'className'> & MosaicTileOverlayProps & {
10
+ path: string;
11
+ item: TData;
12
+ Component?: MosaicTileComponent<TData, any>;
13
+ position?: TPosition;
14
+ operation?: MosaicOperation;
15
+ active?: MosaicActiveType;
16
+ isDragging?: boolean;
17
+ isOver?: boolean;
18
+ draggableStyle?: CSSProperties;
19
+ draggableProps?: DraggableAttributes & HTMLAttributes<HTMLElement>;
20
+ onSelect?: () => void;
21
+ onRemove?: () => void;
22
+ };
23
+ /**
24
+ * Mosaic Tile component.
25
+ */
26
+ export type MosaicTileComponent<TData extends MosaicDataItem = MosaicDataItem, TElement extends HTMLElement = HTMLDivElement> = ForwardRefExoticComponent<RefAttributes<TElement> & Omit<MosaicTileProps<TData>, 'Component' | 'operation'> & {
27
+ operation: MosaicOperation;
28
+ }>;
29
+ /**
30
+ * Basic draggable mosaic tile.
31
+ */
32
+ export declare const DraggableTile: ({ path: parentPath, item, Component, position, draggableStyle, ...props }: MosaicTileProps<any>) => JSX.Element;
33
+ /**
34
+ * Basic droppable mosaic tile.
35
+ */
36
+ export declare const DroppableTile: ({ path: parentPath, item, Component, position, ...props }: MosaicTileProps<any>) => JSX.Element;
37
+ /**
38
+ * Mosaic tile that can be sorted.
39
+ */
40
+ export declare const SortableTile: ({ path: parentPath, item, Component: OverrideComponent, position, draggableStyle, ...props }: MosaicTileProps<any, number>) => JSX.Element;
41
+ //# sourceMappingURL=Tile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tile.d.ts","sourceRoot":"","sources":["../../../../src/mosaic/Tile.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,mBAAmB,EAA8B,MAAM,eAAe,CAAC;AAGrF,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAErG,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAG3E,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,SAAS,CAAC;AAGjE,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,CAAC;AAElF;;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;IAE9B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,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"}
@@ -0,0 +1,5 @@
1
+ export * from './useContainer';
2
+ export * from './useItemsWithPreview';
3
+ export * from './useMosaic';
4
+ export * from './useSortedItems';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/mosaic/hooks/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type MosaicContainerProps } from '../Container';
2
+ import { type MosaicDataItem } from '../types';
3
+ export declare const useContainer: <TData extends MosaicDataItem = MosaicDataItem, TPosition = unknown>() => MosaicContainerProps<TData, TPosition>;
4
+ //# sourceMappingURL=useContainer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useContainer.d.ts","sourceRoot":"","sources":["../../../../../src/mosaic/hooks/useContainer.ts"],"names":[],"mappings":"AAQA,OAAO,EAA0B,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,eAAO,MAAM,YAAY,kHAIiE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type MosaicDataItem } from '../types';
2
+ /**
3
+ * Returns a spliced collection of items including a placeholder if items that could drop,
4
+ * and removing any item that is currently being dragged out.
5
+ */
6
+ export declare const useItemsWithPreview: <T extends MosaicDataItem>({ path, items }: {
7
+ path: string;
8
+ items: T[];
9
+ }) => T[];
10
+ //# sourceMappingURL=useItemsWithPreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useItemsWithPreview.d.ts","sourceRoot":"","sources":["../../../../../src/mosaic/hooks/useItemsWithPreview.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C;;;GAGG;AACH,eAAO,MAAM,mBAAmB;UAAuD,MAAM;;SAiD5F,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const useMosaic: () => import("../Root").MosaicContextType;
2
+ //# sourceMappingURL=useMosaic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMosaic.d.ts","sourceRoot":"","sources":["../../../../../src/mosaic/hooks/useMosaic.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,SAAS,2CAA+E,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type MosaicDataItem } from '../types';
2
+ /**
3
+ * Returns a sorted collection of items if a compare function is provided.
4
+ */
5
+ export declare const useSortedItems: <T extends MosaicDataItem>(items: T[]) => T[];
6
+ //# sourceMappingURL=useSortedItems.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSortedItems.d.ts","sourceRoot":"","sources":["../../../../../src/mosaic/hooks/useSortedItems.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C;;GAEG;AACH,eAAO,MAAM,cAAc,+CAG1B,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './hooks';
2
+ export * from './types';
3
+ export * from './util';
4
+ export * from './Mosaic';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mosaic/index.ts"],"names":[],"mappings":"AAIA,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AAEvB,cAAc,UAAU,CAAC"}
@@ -0,0 +1,9 @@
1
+ export type MosaicDataItem = {
2
+ id: string;
3
+ };
4
+ export type MosaicDraggedItem<TPosition = unknown> = {
5
+ path: string;
6
+ item: MosaicDataItem;
7
+ position?: TPosition;
8
+ };
9
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/mosaic/types.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5C,MAAM,MAAM,iBAAiB,CAAC,SAAS,GAAG,OAAO,IAAI;IACnD,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,cAAc,CAAC;IAErB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type MosaicDataItem } from '../types';
2
+ export declare const swapItems: <TItem extends MosaicDataItem, TValue extends MosaicDataItem>(items: TItem[], from: TValue, to: TValue) => TItem[];
3
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../../src/mosaic/util/data.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAI/C,eAAO,MAAM,SAAS,oHAQrB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './data';
2
+ export * from './path';
3
+ export * from './styles';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/mosaic/util/index.ts"],"names":[],"mappings":"AAIA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC"}
@@ -0,0 +1,14 @@
1
+ export declare const Path: {
2
+ create: (...args: string[]) => string;
3
+ parts: (path: string) => string[];
4
+ length: (path: string) => number;
5
+ first: (path: string) => string;
6
+ last: (path: string) => string;
7
+ parent: (path: string) => string;
8
+ hasRoot: (path: string, id: string) => boolean;
9
+ hasChild: (path: string, compare: string) => boolean;
10
+ hasDescendent: (path: string, compare: string) => boolean;
11
+ siblings: (path: string, compare: string) => boolean;
12
+ onPath: (path: string, id: string) => boolean;
13
+ };
14
+ //# sourceMappingURL=path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../../../src/mosaic/util/path.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,IAAI;sBACG,MAAM,EAAE;kBAEZ,MAAM;mBACL,MAAM;kBACP,MAAM;iBACP,MAAM;mBACJ,MAAM;oBAEL,MAAM,MAAM,MAAM;qBACjB,MAAM,WAAW,MAAM;0BAClB,MAAM,WAAW,MAAM;qBAC5B,MAAM,WAAW,MAAM;mBACzB,MAAM,MAAM,MAAM;CAClC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=path.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.test.d.ts","sourceRoot":"","sources":["../../../../../src/mosaic/util/path.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { type Transform } from '@dnd-kit/utilities';
2
+ export declare const getTransformCSS: (transform: Transform | null) => string | undefined;
3
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../../src/mosaic/util/styles.ts"],"names":[],"mappings":"AAMA,OAAO,EAAO,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEzD,eAAO,MAAM,eAAe,cAAe,SAAS,GAAG,IAAI,uBACyC,CAAC"}