@kwiz/fluentui 1.0.21 → 1.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/npm-publish.yml +4 -15
- package/dist/_modules/config.d.ts +1 -0
- package/dist/_modules/config.js +9 -0
- package/dist/_modules/config.js.map +1 -0
- package/dist/_modules/constants.d.ts +2 -0
- package/dist/_modules/constants.js +3 -0
- package/dist/_modules/constants.js.map +1 -0
- package/dist/controls/accordion.d.ts +13 -0
- package/dist/controls/accordion.js +27 -0
- package/dist/controls/accordion.js.map +1 -0
- package/dist/controls/button.d.ts +28 -0
- package/dist/controls/button.js +113 -0
- package/dist/controls/button.js.map +1 -0
- package/dist/controls/centered.d.ts +5 -0
- package/dist/controls/centered.js +14 -0
- package/dist/controls/centered.js.map +1 -0
- package/dist/controls/date.d.ts +8 -0
- package/dist/controls/date.js +32 -0
- package/dist/controls/date.js.map +1 -0
- package/dist/controls/dropdown.d.ts +36 -0
- package/dist/controls/dropdown.js +35 -0
- package/dist/controls/dropdown.js.map +1 -0
- package/dist/controls/error-boundary.d.ts +23 -0
- package/dist/controls/error-boundary.js +33 -0
- package/dist/controls/error-boundary.js.map +1 -0
- package/dist/controls/field-editor.d.ts +13 -0
- package/dist/controls/field-editor.js +15 -0
- package/dist/controls/field-editor.js.map +1 -0
- package/dist/controls/file-upload.d.ts +18 -0
- package/dist/controls/file-upload.js +41 -0
- package/dist/controls/file-upload.js.map +1 -0
- package/dist/controls/horizontal.d.ts +8 -0
- package/dist/controls/horizontal.js +23 -0
- package/dist/controls/horizontal.js.map +1 -0
- package/dist/controls/input.d.ts +13 -0
- package/dist/controls/input.js +43 -0
- package/dist/controls/input.js.map +1 -0
- package/dist/controls/kwizoverflow.d.ts +14 -0
- package/dist/controls/kwizoverflow.js +45 -0
- package/dist/controls/kwizoverflow.js.map +1 -0
- package/dist/controls/list.d.ts +21 -0
- package/dist/controls/list.js +72 -0
- package/dist/controls/list.js.map +1 -0
- package/dist/controls/loading.d.ts +5 -0
- package/dist/controls/loading.js +7 -0
- package/dist/controls/loading.js.map +1 -0
- package/dist/controls/please-wait.d.ts +18 -0
- package/dist/controls/please-wait.js +16 -0
- package/dist/controls/please-wait.js.map +1 -0
- package/dist/controls/prompt.d.ts +32 -0
- package/dist/controls/prompt.js +31 -0
- package/dist/controls/prompt.js.map +1 -0
- package/dist/controls/search.d.ts +13 -0
- package/dist/controls/search.js +47 -0
- package/dist/controls/search.js.map +1 -0
- package/dist/controls/section.d.ts +14 -0
- package/dist/controls/section.js +27 -0
- package/dist/controls/section.js.map +1 -0
- package/dist/controls/svg.d.ts +23 -0
- package/dist/controls/svg.js +45 -0
- package/dist/controls/svg.js.map +1 -0
- package/dist/controls/toolbar.d.ts +12 -0
- package/dist/controls/toolbar.js +23 -0
- package/dist/controls/toolbar.js.map +1 -0
- package/dist/controls/vertical-content.d.ts +6 -0
- package/dist/controls/vertical-content.js +37 -0
- package/dist/controls/vertical-content.js.map +1 -0
- package/dist/controls/vertical.d.ts +8 -0
- package/dist/controls/vertical.js +23 -0
- package/dist/controls/vertical.js.map +1 -0
- package/dist/helpers/context.d.ts +26 -0
- package/dist/helpers/context.js +15 -0
- package/dist/helpers/context.js.map +1 -0
- package/dist/helpers/drag-drop/drag-drop-container.d.ts +15 -0
- package/dist/helpers/drag-drop/drag-drop-container.js +13 -0
- package/dist/helpers/drag-drop/drag-drop-container.js.map +1 -0
- package/dist/helpers/drag-drop/drag-drop-context.d.ts +30 -0
- package/dist/helpers/drag-drop/drag-drop-context.js +47 -0
- package/dist/helpers/drag-drop/drag-drop-context.js.map +1 -0
- package/dist/helpers/drag-drop/exports.d.ts +4 -0
- package/dist/helpers/drag-drop/exports.js +3 -0
- package/dist/helpers/drag-drop/exports.js.map +1 -0
- package/dist/helpers/drag-drop/use-draggable.d.ts +13 -0
- package/dist/helpers/drag-drop/use-draggable.js +33 -0
- package/dist/helpers/drag-drop/use-draggable.js.map +1 -0
- package/dist/helpers/drag-drop/use-droppable.d.ts +14 -0
- package/dist/helpers/drag-drop/use-droppable.js +28 -0
- package/dist/helpers/drag-drop/use-droppable.js.map +1 -0
- package/dist/helpers/hooks.d.ts +62 -0
- package/dist/helpers/hooks.js +287 -0
- package/dist/helpers/hooks.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/styles/styles.d.ts +19 -0
- package/dist/styles/styles.js +79 -0
- package/dist/styles/styles.js.map +1 -0
- package/dist/styles/theme.d.ts +6 -0
- package/dist/styles/theme.js +77 -0
- package/dist/styles/theme.js.map +1 -0
- package/package.json +3 -1
- package/src/controls/dropdown.tsx +33 -28
- package/src/helpers/drag-drop/drag-drop-container.tsx +47 -0
- package/src/helpers/drag-drop/drag-drop-context.tsx +67 -0
- package/src/helpers/drag-drop/exports.ts +4 -0
- package/src/helpers/drag-drop/readme.md +76 -0
- package/src/helpers/drag-drop/use-draggable.ts +56 -0
- package/src/helpers/drag-drop/use-droppable.ts +48 -0
- package/src/index.ts +1 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { isNullOrEmptyString } from "@kwiz/common";
|
|
2
|
+
import { useDragDropContext } from "./drag-drop-context";
|
|
3
|
+
import { iDraggedItemType, iDraggableProps } from "./use-draggable";
|
|
4
|
+
import { iDroppableProps } from "./use-droppable";
|
|
5
|
+
|
|
6
|
+
interface one<DragItemType extends iDraggedItemType<string>> {
|
|
7
|
+
dragInfo: iDraggableProps<DragItemType>;
|
|
8
|
+
}
|
|
9
|
+
interface other<
|
|
10
|
+
DropInfoTypes extends string = never,
|
|
11
|
+
DropInfoItemTypes extends iDraggedItemType<DropInfoTypes> = never,
|
|
12
|
+
> {
|
|
13
|
+
dropInfo: iDroppableProps<DropInfoTypes, DropInfoItemTypes>;
|
|
14
|
+
}
|
|
15
|
+
type iDragDropProps<
|
|
16
|
+
DragItemType extends iDraggedItemType<string>,
|
|
17
|
+
DropInfoTypes extends string = never,
|
|
18
|
+
DropInfoItemTypes extends iDraggedItemType<DropInfoTypes> = never,
|
|
19
|
+
> = one<DragItemType>
|
|
20
|
+
| other<DropInfoTypes, DropInfoItemTypes>
|
|
21
|
+
| (one<DragItemType> & other<DropInfoTypes, DropInfoItemTypes>);
|
|
22
|
+
|
|
23
|
+
type iProps<DragItemType extends iDraggedItemType<string>, DropInfoTypes extends string, DropInfoItemTypes extends iDraggedItemType<DropInfoTypes>> =
|
|
24
|
+
//all DIV props, except ref - we need ref.
|
|
25
|
+
Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref">
|
|
26
|
+
//pass drag class names
|
|
27
|
+
& {
|
|
28
|
+
onDraggingClassName?: string;
|
|
29
|
+
onDragOverClassName?: string;
|
|
30
|
+
}
|
|
31
|
+
//drag/drop info
|
|
32
|
+
& iDragDropProps<DragItemType, DropInfoTypes, DropInfoItemTypes>
|
|
33
|
+
|
|
34
|
+
export function DragDropContainer<
|
|
35
|
+
DragItemType extends iDraggedItemType<string> = never,
|
|
36
|
+
DropInfoTypes extends string = never,
|
|
37
|
+
DropInfoItemTypes extends iDraggedItemType<DropInfoTypes> = never
|
|
38
|
+
>(props: React.PropsWithChildren<iProps<DragItemType, DropInfoTypes, DropInfoItemTypes>>) {
|
|
39
|
+
|
|
40
|
+
const { drag, drop, dragDropRef } = useDragDropContext(props);
|
|
41
|
+
|
|
42
|
+
const classNames: string[] = isNullOrEmptyString(props.className) ? [] : props.className.split(' ');
|
|
43
|
+
if (drag.isDragging && props.onDraggingClassName) classNames.push(props.onDraggingClassName);
|
|
44
|
+
if (drop.isOver && props.onDragOverClassName) classNames.push(props.onDragOverClassName);
|
|
45
|
+
|
|
46
|
+
return <div {...(props || {})} ref={dragDropRef} className={classNames.join(' ')}>{props.children}</div>;
|
|
47
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { isNullOrUndefined } from "@kwiz/common";
|
|
2
|
+
import React, { useContext } from "react";
|
|
3
|
+
import { DndProvider } from "react-dnd";
|
|
4
|
+
import { HTML5Backend } from "react-dnd-html5-backend";
|
|
5
|
+
import { useStateEX } from "../hooks";
|
|
6
|
+
import { iDraggableProps, iDraggedItemType, useDraggable } from "./use-draggable";
|
|
7
|
+
import useDroppable, { iDroppableProps } from "./use-droppable";
|
|
8
|
+
|
|
9
|
+
export interface iDragDropContext {
|
|
10
|
+
isDragging: boolean;
|
|
11
|
+
setIsDragging: (value: boolean) => void;
|
|
12
|
+
}
|
|
13
|
+
//create context
|
|
14
|
+
export const DragDropContext = React.createContext<iDragDropContext>(null);
|
|
15
|
+
//use context from within controls
|
|
16
|
+
export function useDragDropContextInternal() {
|
|
17
|
+
const dragDropContext = useContext(DragDropContext);
|
|
18
|
+
return dragDropContext;
|
|
19
|
+
}
|
|
20
|
+
export function useDragDropContext<
|
|
21
|
+
DragItemType extends iDraggedItemType<string> = never,
|
|
22
|
+
DropInfoType extends iDroppableProps<string, any> = never
|
|
23
|
+
>(info: {
|
|
24
|
+
dragInfo?: iDraggableProps<DragItemType>;
|
|
25
|
+
dropInfo?: DropInfoType;
|
|
26
|
+
}) {
|
|
27
|
+
const dragDropContext = useDragDropContextInternal();
|
|
28
|
+
const isDraggable = !isNullOrUndefined(info.dragInfo);
|
|
29
|
+
const isDroppable = !isNullOrUndefined(info.dropInfo);
|
|
30
|
+
const drag = useDraggable(info?.dragInfo);
|
|
31
|
+
const drop = useDroppable(info?.dropInfo);
|
|
32
|
+
const acceptDrops = isDroppable && !drag.isDragging && dragDropContext.isDragging;
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
dragDropContext,
|
|
36
|
+
drag,
|
|
37
|
+
drop,
|
|
38
|
+
dragDropRef: isDraggable && !isDroppable
|
|
39
|
+
? drag.dragRef
|
|
40
|
+
: !isDraggable && isDroppable
|
|
41
|
+
? drop.dropRef
|
|
42
|
+
//both drag and drop allowed
|
|
43
|
+
: acceptDrops ? drop.dropRef : drag.dragRef
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export function useDragDropContextProvider(): iDragDropContext {
|
|
47
|
+
const [isDragging, setIsDragging] = useStateEX(false);
|
|
48
|
+
|
|
49
|
+
//build context
|
|
50
|
+
const ctx: iDragDropContext = {
|
|
51
|
+
isDragging, setIsDragging
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
return ctx;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
interface iProps {
|
|
59
|
+
}
|
|
60
|
+
export const DragDropContextProvider: React.FunctionComponent<React.PropsWithChildren<iProps>> = (props) => {
|
|
61
|
+
const provider = useDragDropContextProvider();
|
|
62
|
+
return <DragDropContext.Provider value={provider}>
|
|
63
|
+
<DndProvider backend={HTML5Backend}>
|
|
64
|
+
{props.children}
|
|
65
|
+
</DndProvider>
|
|
66
|
+
</DragDropContext.Provider>;
|
|
67
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
Use drag drop with types examples:
|
|
2
|
+
|
|
3
|
+
Wrap everything within drag/drop context:
|
|
4
|
+
```tsx
|
|
5
|
+
<DragDropContextProvider>
|
|
6
|
+
...
|
|
7
|
+
</DragDropContextProvider>
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Define the types you want to allow drag/drop:
|
|
11
|
+
```tsx
|
|
12
|
+
export type dragColumnType = "column";
|
|
13
|
+
export type dragCellType = "cell";
|
|
14
|
+
export interface dragColumn extends iDraggedItemType<dragColumnType> {
|
|
15
|
+
data: iDesignerContextFields
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface dragCell extends iDraggedItemType<dragCellType> {
|
|
19
|
+
row: number;
|
|
20
|
+
cell: number;
|
|
21
|
+
}
|
|
22
|
+
export interface dropCellOrColumn extends iDroppableProps<dragColumnType | dragCellType, dragColumn | dragCell> {
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
use within a control:
|
|
27
|
+
```tsx
|
|
28
|
+
const { drag, drop, dragDropRef } = useDragDropContext<
|
|
29
|
+
dragCell, dropCellOrColumn
|
|
30
|
+
>({
|
|
31
|
+
dragInfo: {
|
|
32
|
+
item: {
|
|
33
|
+
type: "cell",
|
|
34
|
+
cell: props.index,
|
|
35
|
+
row: props.rowIndex
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
dropInfo: {
|
|
39
|
+
acceptTypes: ["cell", "column"],
|
|
40
|
+
onItemDrop: item => {
|
|
41
|
+
switch (item.type) {
|
|
42
|
+
case "cell":
|
|
43
|
+
alert(item.cell);
|
|
44
|
+
break;
|
|
45
|
+
case "column":
|
|
46
|
+
alert(item.data.title);
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
...
|
|
54
|
+
|
|
55
|
+
<Section css={[
|
|
56
|
+
drop.isOver && classes.hover,
|
|
57
|
+
drag.isDragging && classes.dragging
|
|
58
|
+
]}
|
|
59
|
+
ref={dragDropRef}>
|
|
60
|
+
...
|
|
61
|
+
</Section>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Use with a wrapper:
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
<DragDropContainer<dragColumn>
|
|
68
|
+
dragInfo={{
|
|
69
|
+
item: {
|
|
70
|
+
type: "column",
|
|
71
|
+
data: f
|
|
72
|
+
}
|
|
73
|
+
}}>
|
|
74
|
+
<ButtonEX ... />
|
|
75
|
+
</DragDropContainer>
|
|
76
|
+
```
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { ConnectDragSource, DragSourceMonitor, useDrag } from 'react-dnd';
|
|
3
|
+
import { useDragDropContextInternal } from './drag-drop-context';
|
|
4
|
+
|
|
5
|
+
export interface iDraggedItemType<DragType extends string> {
|
|
6
|
+
type: DragType;
|
|
7
|
+
}
|
|
8
|
+
export interface iDraggableProps<ItemType extends iDraggedItemType<string>> {
|
|
9
|
+
item: ItemType;
|
|
10
|
+
onBeginDrag?: () => void;
|
|
11
|
+
onEndDrag?: (dropResult: any) => void;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function useDraggable<ItemType extends iDraggedItemType<string>>(props?: iDraggableProps<ItemType>): {
|
|
15
|
+
isDragging: boolean;
|
|
16
|
+
dragRef: ConnectDragSource
|
|
17
|
+
} {
|
|
18
|
+
const {
|
|
19
|
+
item,
|
|
20
|
+
onBeginDrag,
|
|
21
|
+
onEndDrag,
|
|
22
|
+
} = props || {
|
|
23
|
+
item: {
|
|
24
|
+
type: "~invalid~"
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const dragDropContext = useDragDropContextInternal();
|
|
29
|
+
|
|
30
|
+
const [{ isDragging }, dragRef] = useDrag(
|
|
31
|
+
() => ({
|
|
32
|
+
type: item.type,
|
|
33
|
+
item,
|
|
34
|
+
collect: (monitor: DragSourceMonitor) => ({
|
|
35
|
+
isDragging: monitor.isDragging(),
|
|
36
|
+
}),
|
|
37
|
+
end: (item, monitor) => {
|
|
38
|
+
dragDropContext.setIsDragging(false);
|
|
39
|
+
onEndDrag && onEndDrag(monitor.getDropResult());
|
|
40
|
+
},
|
|
41
|
+
}),
|
|
42
|
+
[item, item.type]
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
if (isDragging) {
|
|
47
|
+
dragDropContext.setIsDragging(true);
|
|
48
|
+
onBeginDrag && onBeginDrag();
|
|
49
|
+
}
|
|
50
|
+
}, [isDragging, onBeginDrag])
|
|
51
|
+
|
|
52
|
+
return {
|
|
53
|
+
isDragging,
|
|
54
|
+
dragRef,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ConnectDropTarget, DropTargetMonitor, useDrop } from 'react-dnd';
|
|
2
|
+
import { iDraggedItemType } from './use-draggable';
|
|
3
|
+
|
|
4
|
+
export interface iDroppableProps<DropTypes extends string, ItemTypes extends iDraggedItemType<DropTypes>> {
|
|
5
|
+
acceptTypes: DropTypes[];
|
|
6
|
+
onItemDrop: (item: ItemTypes) => void;
|
|
7
|
+
onHover?: (item: ItemTypes) => void;
|
|
8
|
+
onDrop?: () => void;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function useDroppable<DropType extends string, ItemType extends iDraggedItemType<DropType>>(props?: iDroppableProps<DropType, ItemType>): {
|
|
12
|
+
canDrop: boolean;
|
|
13
|
+
isOver: boolean;
|
|
14
|
+
dropRef: ConnectDropTarget;
|
|
15
|
+
} {
|
|
16
|
+
const {
|
|
17
|
+
acceptTypes,
|
|
18
|
+
onItemDrop,
|
|
19
|
+
onHover,
|
|
20
|
+
onDrop,
|
|
21
|
+
} = props || {
|
|
22
|
+
acceptTypes: [],
|
|
23
|
+
onItemDrop: () => { }
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const [{ canDrop, isOver }, dropRef] = useDrop({
|
|
27
|
+
accept: acceptTypes,
|
|
28
|
+
drop: (item: ItemType) => {
|
|
29
|
+
onItemDrop(item);
|
|
30
|
+
onDrop?.();
|
|
31
|
+
},
|
|
32
|
+
hover: (item: ItemType) => {
|
|
33
|
+
onHover?.(item);
|
|
34
|
+
},
|
|
35
|
+
collect: (monitor: DropTargetMonitor) => ({
|
|
36
|
+
canDrop: monitor.canDrop(),
|
|
37
|
+
isOver: monitor.isOver(),
|
|
38
|
+
}),
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
canDrop,
|
|
43
|
+
isOver,
|
|
44
|
+
dropRef,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export default useDroppable;
|
package/src/index.ts
CHANGED
|
@@ -21,6 +21,7 @@ export * from './controls/vertical';
|
|
|
21
21
|
export * from './controls/vertical-content';
|
|
22
22
|
export { KWIZFluentContext, useKWIZFluentContext } from './helpers/context';
|
|
23
23
|
export type { iKWIZFluentContext } from './helpers/context';
|
|
24
|
+
export * from './helpers/drag-drop/exports';
|
|
24
25
|
export * from './helpers/hooks';
|
|
25
26
|
export { KnownClassNames } from './styles/styles';
|
|
26
27
|
|