@contember/react-repeater-dnd-kit 2.0.0-alpha.9 → 2.0.0-beta.2

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 (63) hide show
  1. package/dist/development/src/components/RepeaterSortable.cjs +3 -3
  2. package/dist/development/src/components/RepeaterSortable.cjs.map +1 -1
  3. package/dist/development/src/components/RepeaterSortable.js +3 -3
  4. package/dist/development/src/components/RepeaterSortable.js.map +1 -1
  5. package/dist/development/src/components/RepeaterSortableDragOverlay.cjs +5 -5
  6. package/dist/development/src/components/RepeaterSortableDragOverlay.cjs.map +1 -1
  7. package/dist/development/src/components/RepeaterSortableDragOverlay.js +5 -5
  8. package/dist/development/src/components/RepeaterSortableDragOverlay.js.map +1 -1
  9. package/dist/development/src/components/RepeaterSortableDropIndicator.cjs +1 -1
  10. package/dist/development/src/components/RepeaterSortableDropIndicator.cjs.map +1 -1
  11. package/dist/development/src/components/RepeaterSortableDropIndicator.js +1 -1
  12. package/dist/development/src/components/RepeaterSortableDropIndicator.js.map +1 -1
  13. package/dist/development/src/components/RepeaterSortableEachItem.cjs +4 -4
  14. package/dist/development/src/components/RepeaterSortableEachItem.cjs.map +1 -1
  15. package/dist/development/src/components/RepeaterSortableEachItem.js +4 -4
  16. package/dist/development/src/components/RepeaterSortableEachItem.js.map +1 -1
  17. package/dist/development/src/components/RepeaterSortableItemActivator.cjs +1 -1
  18. package/dist/development/src/components/RepeaterSortableItemActivator.cjs.map +1 -1
  19. package/dist/development/src/components/RepeaterSortableItemActivator.js +1 -1
  20. package/dist/development/src/components/RepeaterSortableItemActivator.js.map +1 -1
  21. package/dist/development/src/components/RepeaterSortableItemNode.cjs +1 -1
  22. package/dist/development/src/components/RepeaterSortableItemNode.cjs.map +1 -1
  23. package/dist/development/src/components/RepeaterSortableItemNode.js +1 -1
  24. package/dist/development/src/components/RepeaterSortableItemNode.js.map +1 -1
  25. package/dist/development/src/contexts.cjs.map +1 -1
  26. package/dist/development/src/contexts.js.map +1 -1
  27. package/dist/production/src/components/RepeaterSortable.cjs.map +1 -1
  28. package/dist/production/src/components/RepeaterSortable.js.map +1 -1
  29. package/dist/production/src/components/RepeaterSortableDragOverlay.cjs.map +1 -1
  30. package/dist/production/src/components/RepeaterSortableDragOverlay.js.map +1 -1
  31. package/dist/production/src/components/RepeaterSortableDropIndicator.cjs.map +1 -1
  32. package/dist/production/src/components/RepeaterSortableDropIndicator.js.map +1 -1
  33. package/dist/production/src/components/RepeaterSortableEachItem.cjs.map +1 -1
  34. package/dist/production/src/components/RepeaterSortableEachItem.js.map +1 -1
  35. package/dist/production/src/components/RepeaterSortableItemActivator.cjs.map +1 -1
  36. package/dist/production/src/components/RepeaterSortableItemActivator.js.map +1 -1
  37. package/dist/production/src/components/RepeaterSortableItemNode.cjs.map +1 -1
  38. package/dist/production/src/components/RepeaterSortableItemNode.js.map +1 -1
  39. package/dist/production/src/contexts.cjs.map +1 -1
  40. package/dist/production/src/contexts.js.map +1 -1
  41. package/dist/types/components/RepeaterSortable.d.ts +31 -0
  42. package/dist/types/components/RepeaterSortable.d.ts.map +1 -1
  43. package/dist/types/components/RepeaterSortableDragOverlay.d.ts +3 -0
  44. package/dist/types/components/RepeaterSortableDragOverlay.d.ts.map +1 -1
  45. package/dist/types/components/RepeaterSortableDropIndicator.d.ts +3 -0
  46. package/dist/types/components/RepeaterSortableDropIndicator.d.ts.map +1 -1
  47. package/dist/types/components/RepeaterSortableEachItem.d.ts +4 -0
  48. package/dist/types/components/RepeaterSortableEachItem.d.ts.map +1 -1
  49. package/dist/types/components/RepeaterSortableItemActivator.d.ts +5 -2
  50. package/dist/types/components/RepeaterSortableItemActivator.d.ts.map +1 -1
  51. package/dist/types/components/RepeaterSortableItemNode.d.ts +5 -2
  52. package/dist/types/components/RepeaterSortableItemNode.d.ts.map +1 -1
  53. package/dist/types/contexts.d.ts +6 -0
  54. package/dist/types/contexts.d.ts.map +1 -1
  55. package/dist/types/tsconfig.tsbuildinfo +1 -1
  56. package/package.json +8 -7
  57. package/src/components/RepeaterSortable.tsx +31 -0
  58. package/src/components/RepeaterSortableDragOverlay.tsx +3 -0
  59. package/src/components/RepeaterSortableDropIndicator.tsx +3 -0
  60. package/src/components/RepeaterSortableEachItem.tsx +4 -0
  61. package/src/components/RepeaterSortableItemActivator.tsx +5 -2
  62. package/src/components/RepeaterSortableItemNode.tsx +5 -2
  63. package/src/contexts.ts +6 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@contember/react-repeater-dnd-kit",
3
3
  "license": "Apache-2.0",
4
- "version": "2.0.0-alpha.9",
4
+ "version": "2.0.0-beta.2",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
7
  "main": "./dist/production/index.js",
@@ -11,6 +11,7 @@
11
11
  "types": "./dist/types/index.d.ts",
12
12
  "development": "./dist/development/index.js",
13
13
  "production": "./dist/production/index.js",
14
+ "typescript": "./src/index.ts",
14
15
  "default": "./dist/production/index.js"
15
16
  },
16
17
  "require": {
@@ -28,13 +29,13 @@
28
29
  "ae:test": "api-extractor run"
29
30
  },
30
31
  "dependencies": {
31
- "@contember/react-binding": "2.0.0-alpha.9",
32
- "@contember/react-repeater": "2.0.0-alpha.9",
33
- "@contember/react-utils": "2.0.0-alpha.9",
32
+ "@contember/react-binding": "2.0.0-beta.2",
33
+ "@contember/react-repeater": "2.0.0-beta.2",
34
+ "@contember/react-utils": "2.0.0-beta.2",
34
35
  "@dnd-kit/core": "^6.1.0",
35
36
  "@dnd-kit/sortable": "^8.0.0",
36
- "@radix-ui/react-portal": "^1.0.4",
37
- "@radix-ui/react-slot": "^1.0.2"
37
+ "@radix-ui/react-portal": "^1.1.2",
38
+ "@radix-ui/react-slot": "^1.1.0"
38
39
  },
39
40
  "peerDependencies": {
40
41
  "react": "^18 || ^19",
@@ -49,4 +50,4 @@
49
50
  "url": "https://github.com/contember/interface.git",
50
51
  "directory": "packages/react-repeater-dnd-kit"
51
52
  }
52
- }
53
+ }
@@ -5,6 +5,37 @@ import { RepeaterActiveEntityContext } from '../contexts'
5
5
  import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable'
6
6
  import { useRepeaterMethods, useRepeaterSortedEntities } from '@contember/react-repeater'
7
7
 
8
+ /**
9
+ * Initializes dnd-kit based sorting for the repeater.
10
+ * Using the props, you can customize the behavior of the sorting and hook into the drag events.
11
+ *
12
+ * ## Example
13
+ * ```tsx
14
+ * <Repeater {...}>
15
+ * <RepeaterSortable>
16
+ * <RepeaterSortableEachItem>
17
+ * <div>
18
+ * <RepeaterSortableDropIndicator position={'before'}><div>Drop here</div></RepeaterSortableDropIndicator>
19
+ * <RepeaterSortableItemNode>
20
+ * <div>
21
+ * <RepeaterSortableItemActivator>
22
+ * <span/>
23
+ * </RepeaterSortableItemActivator>
24
+ * {children}
25
+ * </div>
26
+ * </RepeaterSortableItemNode>
27
+ * <RepeaterSortableDropIndicator position={'afer'}><div>Drop here</div></RepeaterSortableDropIndicator>
28
+ * </div>
29
+ * </RepeaterSortableEachItem>
30
+ * <RepeaterSortableDragOverlay>
31
+ * <div>
32
+ * {children}
33
+ * </div>
34
+ * </RepeaterSortableDragOverlay>
35
+ * </RepeaterSortable>
36
+ * </Repeater>
37
+ * ```
38
+ */
8
39
  export const RepeaterSortable = ({ children, onDragStart, onDragEnd: onDragEndIn, onDragCancel: onDragCancelIn, ...props }: {
9
40
  children: ReactNode
10
41
  } & DndContextProps) => {
@@ -5,6 +5,9 @@ import { DragOverlay } from '@dnd-kit/core'
5
5
  import { AccessorTree, Entity, useAccessorTreeState } from '@contember/react-binding'
6
6
  import { RepeaterCurrentEntityContext } from '@contember/react-repeater'
7
7
 
8
+ /**
9
+ * Component for rendering the repeater item being dragged.
10
+ */
8
11
  export const RepeaterSortableDragOverlay = ({ children }: {
9
12
  children: ReactNode
10
13
  }) => {
@@ -1,6 +1,9 @@
1
1
  import React, { ReactNode } from 'react'
2
2
  import { useRepeaterSortableItem } from '../contexts'
3
3
 
4
+ /**
5
+ * Renders a child element when the repeater item is being dragged over the drop indicator.
6
+ */
4
7
  export const RepeaterSortableDropIndicator = ({ children, position }: {
5
8
  children: ReactNode
6
9
  position: 'before' | 'after'
@@ -4,6 +4,10 @@ import { RepeaterEachItem, useRepeaterSortedEntities } from '@contember/react-re
4
4
  import { RepeaterSortableItemContext } from '../contexts'
5
5
  import { useEntity } from '@contember/react-binding'
6
6
 
7
+ /**
8
+ * Iterates over all entities in the repeater and renders the children for each entity.
9
+ * Also sets up the dnd-kit sortable context for the repeater items.
10
+ */
7
11
  export const RepeaterSortableEachItem = ({ children }: {
8
12
  children: ReactNode
9
13
  }) => {
@@ -1,10 +1,13 @@
1
- import React, { forwardRef, ReactNode } from 'react'
1
+ import React, { forwardRef, ReactElement, ReactNode } from 'react'
2
2
  import { useRepeaterSortableItem } from '../contexts'
3
3
  import { Slot } from '@radix-ui/react-slot'
4
4
  import { useComposeRef } from '@contember/react-utils'
5
5
 
6
+ /**
7
+ * Slot for the repeater item activator, which is the element that triggers the drag and drop interaction (e.g. a handle).
8
+ */
6
9
  export const RepeaterSortableItemActivator = forwardRef<HTMLElement, {
7
- children: ReactNode
10
+ children: ReactElement
8
11
  }>((props, ref) => {
9
12
  const { setActivatorNodeRef, listeners } = useRepeaterSortableItem()
10
13
  return <Slot ref={useComposeRef(ref, setActivatorNodeRef)} {...listeners} {...props} />
@@ -1,9 +1,12 @@
1
- import React, { ReactNode } from 'react'
1
+ import React, { ReactElement } from 'react'
2
2
  import { useRepeaterSortableItem } from '../contexts'
3
3
  import { Slot } from '@radix-ui/react-slot'
4
4
 
5
+ /**
6
+ * Slot for the repeater item node, which is the element that is being dragged.
7
+ */
5
8
  export const RepeaterSortableItemNode = ({ children }: {
6
- children: ReactNode
9
+ children: ReactElement
7
10
  }) => {
8
11
  const { setNodeRef } = useRepeaterSortableItem()
9
12
  return <Slot ref={setNodeRef}>{children}</Slot>
package/src/contexts.ts CHANGED
@@ -5,9 +5,15 @@ import { useSortable } from '@dnd-kit/sortable'
5
5
  const RepeaterSortableItemContext_ = createRequiredContext<ReturnType<typeof useSortable>>('RepeaterSortableItemContext')
6
6
  /** @internal */
7
7
  export const RepeaterSortableItemContext = RepeaterSortableItemContext_[0]
8
+ /**
9
+ * Returns the sortable context from dnd-kit (e.g. isDragging, isOver, setNodeRef) for the repeater item.
10
+ */
8
11
  export const useRepeaterSortableItem = RepeaterSortableItemContext_[1]
9
12
 
10
13
  const RepeaterActiveEntityContext_ = createContext<EntityAccessor | undefined>('RepeaterActiveEntityContext', undefined)
11
14
  /** @internal */
12
15
  export const RepeaterActiveEntityContext = RepeaterActiveEntityContext_[0]
16
+ /**
17
+ * Returns the entity that is currently being dragged in the repeater.
18
+ */
13
19
  export const useRepeaterActiveEntity = RepeaterActiveEntityContext_[1]