@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.
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