@kwiz/fluentui 1.0.21 → 1.0.24

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. package/.github/workflows/npm-publish.yml +4 -15
  2. package/dist/_modules/config.d.ts +1 -0
  3. package/dist/_modules/config.js +9 -0
  4. package/dist/_modules/config.js.map +1 -0
  5. package/dist/_modules/constants.d.ts +2 -0
  6. package/dist/_modules/constants.js +3 -0
  7. package/dist/_modules/constants.js.map +1 -0
  8. package/dist/controls/accordion.d.ts +13 -0
  9. package/dist/controls/accordion.js +27 -0
  10. package/dist/controls/accordion.js.map +1 -0
  11. package/dist/controls/button.d.ts +28 -0
  12. package/dist/controls/button.js +113 -0
  13. package/dist/controls/button.js.map +1 -0
  14. package/dist/controls/centered.d.ts +5 -0
  15. package/dist/controls/centered.js +14 -0
  16. package/dist/controls/centered.js.map +1 -0
  17. package/dist/controls/date.d.ts +8 -0
  18. package/dist/controls/date.js +32 -0
  19. package/dist/controls/date.js.map +1 -0
  20. package/dist/controls/dropdown.d.ts +36 -0
  21. package/dist/controls/dropdown.js +35 -0
  22. package/dist/controls/dropdown.js.map +1 -0
  23. package/dist/controls/error-boundary.d.ts +23 -0
  24. package/dist/controls/error-boundary.js +33 -0
  25. package/dist/controls/error-boundary.js.map +1 -0
  26. package/dist/controls/field-editor.d.ts +13 -0
  27. package/dist/controls/field-editor.js +15 -0
  28. package/dist/controls/field-editor.js.map +1 -0
  29. package/dist/controls/file-upload.d.ts +18 -0
  30. package/dist/controls/file-upload.js +41 -0
  31. package/dist/controls/file-upload.js.map +1 -0
  32. package/dist/controls/horizontal.d.ts +8 -0
  33. package/dist/controls/horizontal.js +23 -0
  34. package/dist/controls/horizontal.js.map +1 -0
  35. package/dist/controls/input.d.ts +13 -0
  36. package/dist/controls/input.js +43 -0
  37. package/dist/controls/input.js.map +1 -0
  38. package/dist/controls/kwizoverflow.d.ts +14 -0
  39. package/dist/controls/kwizoverflow.js +45 -0
  40. package/dist/controls/kwizoverflow.js.map +1 -0
  41. package/dist/controls/list.d.ts +21 -0
  42. package/dist/controls/list.js +72 -0
  43. package/dist/controls/list.js.map +1 -0
  44. package/dist/controls/loading.d.ts +5 -0
  45. package/dist/controls/loading.js +7 -0
  46. package/dist/controls/loading.js.map +1 -0
  47. package/dist/controls/please-wait.d.ts +18 -0
  48. package/dist/controls/please-wait.js +16 -0
  49. package/dist/controls/please-wait.js.map +1 -0
  50. package/dist/controls/prompt.d.ts +32 -0
  51. package/dist/controls/prompt.js +31 -0
  52. package/dist/controls/prompt.js.map +1 -0
  53. package/dist/controls/search.d.ts +13 -0
  54. package/dist/controls/search.js +47 -0
  55. package/dist/controls/search.js.map +1 -0
  56. package/dist/controls/section.d.ts +14 -0
  57. package/dist/controls/section.js +27 -0
  58. package/dist/controls/section.js.map +1 -0
  59. package/dist/controls/svg.d.ts +23 -0
  60. package/dist/controls/svg.js +45 -0
  61. package/dist/controls/svg.js.map +1 -0
  62. package/dist/controls/toolbar.d.ts +12 -0
  63. package/dist/controls/toolbar.js +23 -0
  64. package/dist/controls/toolbar.js.map +1 -0
  65. package/dist/controls/vertical-content.d.ts +6 -0
  66. package/dist/controls/vertical-content.js +37 -0
  67. package/dist/controls/vertical-content.js.map +1 -0
  68. package/dist/controls/vertical.d.ts +8 -0
  69. package/dist/controls/vertical.js +23 -0
  70. package/dist/controls/vertical.js.map +1 -0
  71. package/dist/helpers/context.d.ts +26 -0
  72. package/dist/helpers/context.js +15 -0
  73. package/dist/helpers/context.js.map +1 -0
  74. package/dist/helpers/drag-drop/drag-drop-container.d.ts +15 -0
  75. package/dist/helpers/drag-drop/drag-drop-container.js +13 -0
  76. package/dist/helpers/drag-drop/drag-drop-container.js.map +1 -0
  77. package/dist/helpers/drag-drop/drag-drop-context.d.ts +30 -0
  78. package/dist/helpers/drag-drop/drag-drop-context.js +47 -0
  79. package/dist/helpers/drag-drop/drag-drop-context.js.map +1 -0
  80. package/dist/helpers/drag-drop/exports.d.ts +4 -0
  81. package/dist/helpers/drag-drop/exports.js +3 -0
  82. package/dist/helpers/drag-drop/exports.js.map +1 -0
  83. package/dist/helpers/drag-drop/use-draggable.d.ts +13 -0
  84. package/dist/helpers/drag-drop/use-draggable.js +33 -0
  85. package/dist/helpers/drag-drop/use-draggable.js.map +1 -0
  86. package/dist/helpers/drag-drop/use-droppable.d.ts +14 -0
  87. package/dist/helpers/drag-drop/use-droppable.js +28 -0
  88. package/dist/helpers/drag-drop/use-droppable.js.map +1 -0
  89. package/dist/helpers/hooks.d.ts +62 -0
  90. package/dist/helpers/hooks.js +287 -0
  91. package/dist/helpers/hooks.js.map +1 -0
  92. package/dist/index.d.ts +26 -0
  93. package/dist/index.js +26 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/styles/styles.d.ts +19 -0
  96. package/dist/styles/styles.js +79 -0
  97. package/dist/styles/styles.js.map +1 -0
  98. package/dist/styles/theme.d.ts +6 -0
  99. package/dist/styles/theme.js +77 -0
  100. package/dist/styles/theme.js.map +1 -0
  101. package/package.json +3 -1
  102. package/src/controls/dropdown.tsx +33 -28
  103. package/src/helpers/drag-drop/drag-drop-container.tsx +47 -0
  104. package/src/helpers/drag-drop/drag-drop-context.tsx +67 -0
  105. package/src/helpers/drag-drop/exports.ts +4 -0
  106. package/src/helpers/drag-drop/readme.md +76 -0
  107. package/src/helpers/drag-drop/use-draggable.ts +56 -0
  108. package/src/helpers/drag-drop/use-droppable.ts +48 -0
  109. 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,4 @@
1
+ export { DragDropContainer } from './drag-drop-container';
2
+ export { DragDropContextProvider, useDragDropContext } from "./drag-drop-context";
3
+ export type { iDraggedItemType } from "./use-draggable";
4
+ export type { iDroppableProps } from "./use-droppable";
@@ -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