@edifice.io/react 2.2.2 → 2.2.3-develop-b2school.20250415115428

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 (124) hide show
  1. package/dist/components/Avatar/Avatar.d.ts +21 -0
  2. package/dist/components/Avatar/Avatar.js +15 -2
  3. package/dist/components/AvatarGroup/AvatarGroup.d.ts +24 -0
  4. package/dist/components/AvatarGroup/AvatarGroup.js +24 -0
  5. package/dist/components/AvatarGroup/index.d.ts +2 -0
  6. package/dist/components/Card/Card.d.ts +3 -1
  7. package/dist/components/Card/CardBody.d.ts +3 -1
  8. package/dist/components/Card/CardBody.js +4 -2
  9. package/dist/components/Combobox/Combobox.d.ts +55 -5
  10. package/dist/components/Combobox/Combobox.js +13 -7
  11. package/dist/components/Combobox/ComboboxTrigger.d.ts +30 -2
  12. package/dist/components/Combobox/ComboboxTrigger.js +27 -8
  13. package/dist/components/Dropdown/Dropdown.d.ts +14 -2
  14. package/dist/components/Dropdown/Dropdown.js +7 -3
  15. package/dist/components/Dropdown/DropdownItem.d.ts +9 -1
  16. package/dist/components/Dropdown/DropdownItem.js +11 -3
  17. package/dist/components/Dropdown/DropdownTrigger.d.ts +31 -2
  18. package/dist/components/Dropdown/DropdownTrigger.js +28 -4
  19. package/dist/components/List/List.d.ts +9 -1
  20. package/dist/components/List/List.js +9 -9
  21. package/dist/components/PreventPropagation/PreventPropagation.d.ts +10 -0
  22. package/dist/components/PreventPropagation/PreventPropagation.js +9 -0
  23. package/dist/components/PreventPropagation/index.d.ts +2 -0
  24. package/dist/components/SearchBar/SearchBar.d.ts +1 -1
  25. package/dist/components/SearchBar/SearchBar.js +3 -1
  26. package/dist/components/StackedGroup/StackedGroup.d.ts +23 -0
  27. package/dist/components/StackedGroup/StackedGroup.js +21 -0
  28. package/dist/components/StackedGroup/index.d.ts +1 -0
  29. package/dist/components/Switch/Switch.d.ts +29 -0
  30. package/dist/components/Switch/Switch.js +27 -0
  31. package/dist/components/Switch/index.d.ts +2 -0
  32. package/dist/components/index.d.ts +4 -0
  33. package/dist/editor.js +30 -22
  34. package/dist/hooks/index.d.ts +1 -0
  35. package/dist/hooks/useCheckable/useCheckable.js +10 -3
  36. package/dist/hooks/useConf/useConf.d.ts +1 -1
  37. package/dist/hooks/useConversation/useConversation.d.ts +1 -1
  38. package/dist/hooks/useConversation/useConversation.js +13 -17
  39. package/dist/hooks/useDropdown/useDropdown.d.ts +2 -1
  40. package/dist/hooks/useDropdown/useDropdown.js +5 -3
  41. package/dist/hooks/useSession/useSession.d.ts +1 -1
  42. package/dist/hooks/useWorkspaceFolders/index.d.ts +2 -0
  43. package/dist/hooks/useWorkspaceFolders/useWorkspaceFolders.d.ts +28 -0
  44. package/dist/hooks/useWorkspaceFolders/useWorkspaceFolders.js +74 -0
  45. package/dist/icons.js +232 -210
  46. package/dist/index.d.ts +1 -0
  47. package/dist/index.js +182 -146
  48. package/dist/modals.js +16 -14
  49. package/dist/modules/comments/components/Comment.js +49 -34
  50. package/dist/modules/comments/components/CommentDeleted.d.ts +1 -0
  51. package/dist/modules/comments/components/CommentDeleted.js +11 -0
  52. package/dist/modules/comments/components/CommentForm.d.ts +2 -1
  53. package/dist/modules/comments/components/CommentForm.js +12 -8
  54. package/dist/modules/comments/components/CommentList.js +3 -3
  55. package/dist/modules/comments/components/CommentReplies.d.ts +4 -0
  56. package/dist/modules/comments/components/CommentReplies.js +33 -0
  57. package/dist/modules/comments/constants.d.ts +4 -0
  58. package/dist/modules/comments/constants.js +2 -1
  59. package/dist/modules/comments/context/Context.d.ts +6 -4
  60. package/dist/modules/comments/hooks/useCommentReplies.d.ts +12 -0
  61. package/dist/modules/comments/hooks/useCommentReplies.js +36 -0
  62. package/dist/modules/comments/hooks/useComments.d.ts +7 -7
  63. package/dist/modules/comments/hooks/useComments.js +24 -19
  64. package/dist/modules/comments/hooks/useCommentsContext.d.ts +6 -4
  65. package/dist/modules/comments/provider/CommentProvider.js +16 -13
  66. package/dist/modules/comments/types.d.ts +14 -1
  67. package/dist/modules/editor/components/BubbleMenuEditInformationPane/BubbleMenuEditInformationPane.d.ts +6 -0
  68. package/dist/modules/editor/components/BubbleMenuEditInformationPane/BubbleMenuEditInformationPane.js +136 -0
  69. package/dist/modules/editor/components/BubbleMenuEditInformationPane/index.d.ts +1 -0
  70. package/dist/modules/editor/components/Editor/Editor.d.ts +3 -1
  71. package/dist/modules/editor/components/Editor/Editor.js +9 -4
  72. package/dist/modules/editor/components/EditorToolbar/EditorToolbar.js +12 -0
  73. package/dist/modules/editor/components/NodeView/ConversationHistoryNodeView.d.ts +2 -0
  74. package/dist/modules/editor/components/NodeView/ConversationHistoryNodeView.js +10 -0
  75. package/dist/modules/editor/components/NodeView/InformationPaneNodeView.d.ts +2 -0
  76. package/dist/modules/editor/components/NodeView/InformationPaneNodeView.js +10 -0
  77. package/dist/modules/editor/components/NodeView/index.d.ts +3 -1
  78. package/dist/modules/editor/components/Renderer/ConversationHistoryRenderer.d.ts +8 -0
  79. package/dist/modules/editor/components/Renderer/ConversationHistoryRenderer.js +28 -0
  80. package/dist/modules/editor/components/Renderer/InformationPaneRenderer.d.ts +3 -0
  81. package/dist/modules/editor/components/Renderer/InformationPaneRenderer.js +33 -0
  82. package/dist/modules/editor/components/Renderer/index.d.ts +3 -1
  83. package/dist/modules/editor/hooks/useTipTapEditor.d.ts +6 -2
  84. package/dist/modules/editor/hooks/useTipTapEditor.js +4 -2
  85. package/dist/modules/icons/components/IconFolderAdd.d.ts +7 -0
  86. package/dist/modules/icons/components/IconFolderAdd.js +13 -0
  87. package/dist/modules/icons/components/IconFolderDelete.d.ts +7 -0
  88. package/dist/modules/icons/components/IconFolderDelete.js +12 -0
  89. package/dist/modules/icons/components/IconGlobe2.d.ts +7 -0
  90. package/dist/modules/icons/components/IconGlobe2.js +16 -0
  91. package/dist/modules/icons/components/IconGroupAvatar.d.ts +7 -0
  92. package/dist/modules/icons/components/IconGroupAvatar.js +12 -0
  93. package/dist/modules/icons/components/IconInfoRectangle.d.ts +7 -0
  94. package/dist/modules/icons/components/IconInfoRectangle.js +13 -0
  95. package/dist/modules/icons/components/IconMailRecall.d.ts +7 -0
  96. package/dist/modules/icons/components/IconMailRecall.js +13 -0
  97. package/dist/modules/icons/components/IconQuestionMark.d.ts +7 -0
  98. package/dist/modules/icons/components/IconQuestionMark.js +13 -0
  99. package/dist/modules/icons/components/IconReadMail.d.ts +7 -0
  100. package/dist/modules/icons/components/IconReadMail.js +16 -0
  101. package/dist/modules/icons/components/IconSignature.d.ts +7 -0
  102. package/dist/modules/icons/components/IconSignature.js +13 -0
  103. package/dist/modules/icons/components/IconUndoAll.d.ts +7 -0
  104. package/dist/modules/icons/components/IconUndoAll.js +14 -0
  105. package/dist/modules/icons/components/IconUnreadMail.d.ts +7 -0
  106. package/dist/modules/icons/components/IconUnreadMail.js +16 -0
  107. package/dist/modules/icons/components/index.d.ts +11 -0
  108. package/dist/modules/modals/ConfirmModal/ConfirmModal.d.ts +42 -0
  109. package/dist/modules/modals/ConfirmModal/ConfirmModal.js +36 -0
  110. package/dist/modules/modals/ConfirmModal/index.d.ts +1 -0
  111. package/dist/modules/modals/ResourceModal/ResourceModal.d.ts +1 -1
  112. package/dist/modules/modals/ResourceModal/hooks/useUpdateMutation.d.ts +1 -1
  113. package/dist/modules/modals/ShareModal/ShareModal.d.ts +1 -1
  114. package/dist/modules/modals/ShareModal/apps/ShareBlog.d.ts +1 -1
  115. package/dist/modules/modals/ShareModal/hooks/useShareMutation.d.ts +1 -1
  116. package/dist/modules/modals/index.d.ts +1 -0
  117. package/dist/modules/multimedia/WorkspaceFolders/WorkspaceFolders.d.ts +8 -0
  118. package/dist/modules/multimedia/WorkspaceFolders/WorkspaceFolders.js +31 -0
  119. package/dist/modules/multimedia/WorkspaceFolders/index.d.ts +1 -0
  120. package/dist/modules/multimedia/index.d.ts +1 -0
  121. package/dist/multimedia.js +3 -1
  122. package/dist/providers/EdificeClientProvider/EdificeClientProvider.context.d.ts +1 -1
  123. package/dist/types/index.d.ts +1 -0
  124. package/package.json +6 -6
@@ -7,9 +7,11 @@ import Checkbox from "../Checkbox/Checkbox.js";
7
7
  import { Toolbar } from "../Toolbar/Toolbar.js";
8
8
  const List = ({
9
9
  items,
10
+ isCheckable = !1,
10
11
  data,
11
12
  renderNode,
12
- onSelectedItems
13
+ onSelectedItems,
14
+ className
13
15
  }) => {
14
16
  const {
15
17
  selectedItems,
@@ -21,11 +23,9 @@ const List = ({
21
23
  return useEffect(() => {
22
24
  selectedItems && (onSelectedItems == null || onSelectedItems(selectedItems));
23
25
  }, [onSelectedItems, selectedItems]), /* @__PURE__ */ jsxs(Fragment, { children: [
24
- items && /* @__PURE__ */ jsxs(Fragment, { children: [
25
- /* @__PURE__ */ jsx("div", { className: clsx("d-flex align-items-center gap-8", {
26
- "px-12": items
27
- }), children: /* @__PURE__ */ jsxs(Fragment, { children: [
28
- /* @__PURE__ */ jsxs("div", { className: "d-flex align-items-center gap-8", children: [
26
+ (items || isCheckable) && /* @__PURE__ */ jsxs(Fragment, { children: [
27
+ /* @__PURE__ */ jsx("div", { className: clsx("list-header d-flex align-items-center gap-8 px-12", className), children: /* @__PURE__ */ jsxs(Fragment, { children: [
28
+ /* @__PURE__ */ jsxs("div", { className: "d-flex align-items-center gap-8 py-12", children: [
29
29
  /* @__PURE__ */ jsx(Checkbox, { checked: allItemsSelected, indeterminate: isIndeterminate, onChange: () => handleOnSelectAllItems(allItemsSelected) }),
30
30
  /* @__PURE__ */ jsxs("span", { children: [
31
31
  "(",
@@ -33,15 +33,15 @@ const List = ({
33
33
  ")"
34
34
  ] })
35
35
  ] }),
36
- /* @__PURE__ */ jsx(Toolbar, { items, isBlock: !0, align: "left", variant: "no-shadow", className: clsx("gap-4 py-4", {
36
+ items && /* @__PURE__ */ jsx(Toolbar, { items, isBlock: !0, align: "left", variant: "no-shadow", className: clsx("gap-4 py-4", {
37
37
  "px-0 ms-auto": !isDesktopDevice
38
38
  }) })
39
39
  ] }) }),
40
40
  /* @__PURE__ */ jsx("div", { className: "border-top" })
41
41
  ] }),
42
42
  /* @__PURE__ */ jsx("div", { className: "mt-8", children: data == null ? void 0 : data.map((node) => {
43
- const checkbox = /* @__PURE__ */ jsx(Checkbox, { checked: selectedItems.includes(node._id), onChange: () => handleOnSelectItem(node._id) }), checked = selectedItems.includes(node._id);
44
- return /* @__PURE__ */ jsx(Fragment$1, { children: renderNode(node, checkbox, checked) }, node._id);
43
+ const checked = selectedItems.includes(node._id);
44
+ return /* @__PURE__ */ jsx(Fragment$1, { children: renderNode(node, /* @__PURE__ */ jsx(Checkbox, { checked, onChange: () => handleOnSelectItem(node._id), onClick: (event) => event.stopPropagation() }), checked) }, node._id);
45
45
  }) })
46
46
  ] });
47
47
  };
@@ -0,0 +1,10 @@
1
+ import { ReactNode } from 'react';
2
+ export interface PreventPropagationProps {
3
+ /** Children Props */
4
+ children: ReactNode;
5
+ }
6
+ declare const PreventPropagation: {
7
+ ({ children }: PreventPropagationProps): import("react/jsx-runtime").JSX.Element;
8
+ displayName: string;
9
+ };
10
+ export default PreventPropagation;
@@ -0,0 +1,9 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ const Root = ({
3
+ children
4
+ }) => /* @__PURE__ */ jsx("div", { onClick: (e) => {
5
+ e.stopPropagation();
6
+ }, children }), PreventPropagation = /* @__PURE__ */ Object.assign(Root, {});
7
+ export {
8
+ PreventPropagation as default
9
+ };
@@ -0,0 +1,2 @@
1
+ export { default as PreventPropagation } from './PreventPropagation';
2
+ export * from './PreventPropagation';
@@ -1,6 +1,6 @@
1
1
  import { ChangeEvent } from 'react';
2
2
  import { Size } from '../../types';
3
- export interface BaseProps {
3
+ export interface BaseProps extends Omit<React.ComponentPropsWithoutRef<'input'>, 'size'> {
4
4
  /**
5
5
  * String or Template literal with React i18next namespace
6
6
  */
@@ -24,10 +24,12 @@ const SearchBar = ({
24
24
  "ps-48": isVariant
25
25
  }), handleClick = () => {
26
26
  onClick == null || onClick();
27
+ }, handleKeyDown = (e) => {
28
+ e.key === "Enter" && (e.preventDefault(), handleClick());
27
29
  };
28
30
  return /* @__PURE__ */ jsxs(FormControl, { id: "search-bar", className: searchbar, children: [
29
31
  isVariant && /* @__PURE__ */ jsx("div", { className: "position-absolute z-1 top-50 start-0 translate-middle-y border-0 ps-12 bg-transparent", children: /* @__PURE__ */ jsx(SvgIconSearch, {}) }),
30
- /* @__PURE__ */ jsx(FormControl.Input, { type: "search", placeholder: t(placeholder), size, noValidationIcon: !0, className: input, onChange, disabled, ...restProps }),
32
+ /* @__PURE__ */ jsx(FormControl.Input, { type: "search", placeholder: t(placeholder), size, noValidationIcon: !0, className: input, onChange, disabled, onKeyDown: handleKeyDown, ...restProps }),
31
33
  !isVariant && /* @__PURE__ */ jsx(SearchButton, { type: "submit", "aria-label": t("search"), icon: /* @__PURE__ */ jsx(SvgIconSearch, {}), className: "border-start-0", onClick: handleClick })
32
34
  ] });
33
35
  };
@@ -0,0 +1,23 @@
1
+ import { ReactNode } from 'react';
2
+ export interface StackedGroupProps {
3
+ /**
4
+ * Children to stack
5
+ */
6
+ children: ReactNode[];
7
+ /**
8
+ * Overlap between items (in pixels)
9
+ * @default 20
10
+ */
11
+ overlap?: number;
12
+ /**
13
+ * Controls stacking order. When 'rightFirst', rightmost item has highest z-index
14
+ * @default 'leftFirst'
15
+ */
16
+ stackingOrder?: 'leftFirst' | 'rightFirst';
17
+ /**
18
+ * Additional CSS class
19
+ */
20
+ className?: string;
21
+ }
22
+ declare const StackedGroup: import('react').ForwardRefExoticComponent<StackedGroupProps & import('react').RefAttributes<HTMLDivElement>>;
23
+ export default StackedGroup;
@@ -0,0 +1,21 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import clsx from "clsx";
4
+ const StackedGroup = /* @__PURE__ */ forwardRef(({
5
+ children,
6
+ overlap = 20,
7
+ className,
8
+ stackingOrder = "leftFirst"
9
+ }, ref) => {
10
+ const classes = clsx("stacked-group", className);
11
+ return /* @__PURE__ */ jsx("div", { ref, className: classes, style: {
12
+ display: "flex",
13
+ alignItems: "center"
14
+ }, children: children.map((child, index) => /* @__PURE__ */ jsx("div", { style: {
15
+ marginLeft: index === 0 ? 0 : `-${overlap}px`,
16
+ zIndex: stackingOrder === "rightFirst" ? children.length - index : index + 1
17
+ }, children: child }, index)) });
18
+ });
19
+ export {
20
+ StackedGroup as default
21
+ };
@@ -0,0 +1 @@
1
+ export { default as StackedGroup } from './StackedGroup';
@@ -0,0 +1,29 @@
1
+ import { InputHTMLAttributes } from 'react';
2
+ export interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {
3
+ /**
4
+ * The label of the switch
5
+ */
6
+ label?: string;
7
+ /**
8
+ * The value of the switch
9
+ */
10
+ value?: string;
11
+ /**
12
+ * Define if switch is disabled
13
+ */
14
+ disabled?: boolean;
15
+ /**
16
+ * Define switch size
17
+ */
18
+ size?: 'sm' | 'md';
19
+ /**
20
+ * Additional class name for the label
21
+ */
22
+ labelClassName?: string;
23
+ /**
24
+ * Switch color variant
25
+ */
26
+ variant?: 'default' | 'ghost' | 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info';
27
+ }
28
+ declare const Switch: import('react').ForwardRefExoticComponent<SwitchProps & import('react').RefAttributes<HTMLInputElement>>;
29
+ export default Switch;
@@ -0,0 +1,27 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import clsx from "clsx";
4
+ const Switch = /* @__PURE__ */ forwardRef(({
5
+ className,
6
+ label,
7
+ value,
8
+ disabled,
9
+ size = "md",
10
+ variant = "default",
11
+ labelClassName,
12
+ ...restProps
13
+ }, ref) => {
14
+ const switchClass = clsx("switch", {
15
+ [`switch-${size}`]: size,
16
+ [`switch-${variant}`]: variant,
17
+ "switch-disabled": disabled
18
+ }, className), labelClass = clsx("switch-label", labelClassName);
19
+ return /* @__PURE__ */ jsxs("label", { className: switchClass, children: [
20
+ /* @__PURE__ */ jsx("input", { type: "checkbox", ref, value, disabled, ...restProps }),
21
+ /* @__PURE__ */ jsx("span", { className: "slider" }),
22
+ label && /* @__PURE__ */ jsx("span", { className: labelClass, children: label })
23
+ ] });
24
+ });
25
+ export {
26
+ Switch as default
27
+ };
@@ -0,0 +1,2 @@
1
+ export { default as Switch } from './Switch';
2
+ export * from './Switch';
@@ -4,6 +4,7 @@ export * from './AppHeader';
4
4
  export * from './AppIcon';
5
5
  export * from './Attachment';
6
6
  export * from './Avatar';
7
+ export * from './AvatarGroup';
7
8
  export * from './Badge';
8
9
  export * from './Breadcrumb';
9
10
  export * from './Button';
@@ -28,9 +29,12 @@ export * from './Logo';
28
29
  export * from './Menu';
29
30
  export * from './Modal';
30
31
  export * from './Popover';
32
+ export * from './PreventPropagation';
31
33
  export * from './Radio';
32
34
  export * from './SearchBar';
33
35
  export * from './Select';
36
+ export * from './StackedGroup';
37
+ export * from './Switch';
34
38
  export * from './Table';
35
39
  export * from './Tabs';
36
40
  export * from './TextArea';
package/dist/editor.js CHANGED
@@ -2,17 +2,21 @@ import { EditorContent, Editor, useEditor } from "@tiptap/react";
2
2
  import { default as default2 } from "@tiptap/starter-kit";
3
3
  import { default as default3 } from "./modules/editor/components/Editor/Editor.js";
4
4
  import { default as default4 } from "./modules/editor/components/BubbleMenuEditImage/BubbleMenuEditImage.js";
5
- import { default as default5 } from "./modules/editor/components/NodeView/AudioNodeView.js";
6
- import { default as default6 } from "./modules/editor/components/NodeView/AttachmentNodeView.js";
7
- import { default as default7 } from "./modules/editor/components/NodeView/ImageNodeView.js";
8
- import { default as default8 } from "./modules/editor/components/NodeView/LinkerNodeView.js";
9
- import { default as default9 } from "./modules/editor/components/NodeView/VideoNodeView.js";
10
- import { default as default10 } from "./modules/editor/components/Renderer/AudioRenderer.js";
11
- import { default as default11 } from "./modules/editor/components/Renderer/AttachmentRenderer.js";
12
- import { default as default12 } from "./modules/editor/components/Renderer/LinkerRenderer.js";
13
- import { default as default13 } from "./modules/editor/components/Renderer/MediaRenderer.js";
14
- import { default as default14 } from "./modules/editor/components/Toolbar/TableToolbar.js";
15
- import { default as default15 } from "./modules/editor/components/Toolbar/LinkToolbar.js";
5
+ import { default as default5 } from "./modules/editor/components/NodeView/AttachmentNodeView.js";
6
+ import { default as default6 } from "./modules/editor/components/NodeView/AudioNodeView.js";
7
+ import { default as default7 } from "./modules/editor/components/NodeView/ConversationHistoryNodeView.js";
8
+ import { default as default8 } from "./modules/editor/components/NodeView/ImageNodeView.js";
9
+ import { default as default9 } from "./modules/editor/components/NodeView/LinkerNodeView.js";
10
+ import { default as default10 } from "./modules/editor/components/NodeView/VideoNodeView.js";
11
+ import { default as default11 } from "./modules/editor/components/NodeView/InformationPaneNodeView.js";
12
+ import { default as default12 } from "./modules/editor/components/Renderer/AttachmentRenderer.js";
13
+ import { default as default13 } from "./modules/editor/components/Renderer/AudioRenderer.js";
14
+ import { default as default14 } from "./modules/editor/components/Renderer/ConversationHistoryRenderer.js";
15
+ import { default as default15 } from "./modules/editor/components/Renderer/LinkerRenderer.js";
16
+ import { default as default16 } from "./modules/editor/components/Renderer/MediaRenderer.js";
17
+ import { default as default17 } from "./modules/editor/components/Renderer/InformationPaneRenderer.js";
18
+ import { default as default18 } from "./modules/editor/components/Toolbar/TableToolbar.js";
19
+ import { default as default19 } from "./modules/editor/components/Toolbar/LinkToolbar.js";
16
20
  import { EditorToolbar } from "./modules/editor/components/EditorToolbar/EditorToolbar.js";
17
21
  import { useActionOptions } from "./modules/editor/hooks/useActionOptions.js";
18
22
  import { useCommentEditor } from "./modules/editor/hooks/useCommentEditor.js";
@@ -27,24 +31,28 @@ import { useSpeechRecognition } from "./modules/editor/hooks/useSpeechRecognitio
27
31
  import { useSpeechSynthetisis } from "./modules/editor/hooks/useSpeechSynthetisis.js";
28
32
  import { useTipTapEditor } from "./modules/editor/hooks/useTipTapEditor.js";
29
33
  export {
30
- default6 as AttachmentNodeView,
31
- default11 as AttachmentRenderer,
32
- default5 as AudioNodeView,
33
- default10 as AudioRenderer,
34
+ default5 as AttachmentNodeView,
35
+ default12 as AttachmentRenderer,
36
+ default6 as AudioNodeView,
37
+ default13 as AudioRenderer,
34
38
  default4 as BubbleMenuEditImage,
39
+ default7 as ConversationHistoryNodeView,
40
+ default14 as ConversationHistoryRenderer,
35
41
  default3 as Editor,
36
42
  EditorContent,
37
43
  EditorContext,
38
44
  Editor as EditorInstance,
39
45
  EditorToolbar,
40
- default7 as ImageNodeView,
41
- default15 as LinkToolbar,
42
- default8 as LinkerNodeView,
43
- default12 as LinkerRenderer,
44
- default13 as MediaRenderer,
46
+ default8 as ImageNodeView,
47
+ default11 as InformationPaneNodeView,
48
+ default17 as InformationPaneRenderer,
49
+ default19 as LinkToolbar,
50
+ default9 as LinkerNodeView,
51
+ default15 as LinkerRenderer,
52
+ default16 as MediaRenderer,
45
53
  default2 as StarterKit,
46
- default14 as TableToolbar,
47
- default9 as VideoNodeView,
54
+ default18 as TableToolbar,
55
+ default10 as VideoNodeView,
48
56
  useActionOptions,
49
57
  useCommentEditor,
50
58
  useEditor,
@@ -29,6 +29,7 @@ export * from './useUpload';
29
29
  export * from './useUploadFiles';
30
30
  export * from './useUser';
31
31
  export * from './useWorkspaceFile';
32
+ export * from './useWorkspaceFolders';
32
33
  export * from './useWorkspaceSearch';
33
34
  export * from './useXitiTrackPageLoad';
34
35
  export * from './useZendeskGuide';
@@ -1,13 +1,20 @@
1
- import { useState } from "react";
1
+ import { useState, useEffect } from "react";
2
2
  const useCheckable = (data) => {
3
- const [selectedItems, setSelectedItems] = useState([]), handleOnSelectItem = (itemId) => {
3
+ const [selectedItems, setSelectedItems] = useState([]);
4
+ useEffect(() => {
5
+ if (data) {
6
+ const validSelectedItems = selectedItems.filter((id) => data.some((item) => item._id === id));
7
+ validSelectedItems.length !== selectedItems.length && setSelectedItems(validSelectedItems);
8
+ }
9
+ }, [data]);
10
+ const handleOnSelectItem = (itemId) => {
4
11
  setSelectedItems((currentSelection) => {
5
12
  const newSelection = [...currentSelection];
6
13
  return newSelection.includes(itemId) ? newSelection.splice(newSelection.indexOf(itemId), 1) : newSelection.push(itemId), newSelection;
7
14
  });
8
15
  }, handleOnSelectAllItems = (deselect) => {
9
16
  setSelectedItems(() => deselect ? [] : (data == null ? void 0 : data.map((item) => item._id)) ?? []);
10
- }, allItemsSelected = (selectedItems == null ? void 0 : selectedItems.length) === (data == null ? void 0 : data.length), isIndeterminate = data ? (selectedItems == null ? void 0 : selectedItems.length) > 0 && (selectedItems == null ? void 0 : selectedItems.length) < (data == null ? void 0 : data.length) : !1;
17
+ }, allItemsSelected = (selectedItems == null ? void 0 : selectedItems.length) === (data == null ? void 0 : data.length) && (data == null ? void 0 : data.length) > 0, isIndeterminate = data ? (selectedItems == null ? void 0 : selectedItems.length) > 0 && (selectedItems == null ? void 0 : selectedItems.length) < (data == null ? void 0 : data.length) : !1;
11
18
  return {
12
19
  selectedItems,
13
20
  allItemsSelected,
@@ -1,4 +1,4 @@
1
1
  import { App, IGetConf } from '@edifice.io/client';
2
2
  export default function useConf({ appCode }: {
3
3
  appCode: App;
4
- }): import('../../../node_modules/@tanstack/react-query').UseQueryResult<IGetConf, Error>;
4
+ }): import('../../node_modules/@tanstack/react-query').UseQueryResult<IGetConf, Error>;
@@ -1,5 +1,5 @@
1
1
  declare const useConversation: () => {
2
- readonly messages: number;
2
+ readonly messages: any;
3
3
  readonly msgLink: string;
4
4
  readonly zimbraWorkflow: boolean | Record<string, boolean> | undefined;
5
5
  };
@@ -1,23 +1,21 @@
1
1
  import { useState, useEffect } from "react";
2
2
  import { odeServices } from "@edifice.io/client";
3
+ import { useQuery } from "@tanstack/react-query";
3
4
  import useHasWorkflow from "../useHasWorkflow/useHasWorkflow.js";
4
5
  const useConversation = () => {
5
- const zimbraWorkflow = useHasWorkflow("fr.openent.zimbra.controllers.ZimbraController|view"), zimbraPreauth = useHasWorkflow("fr.openent.zimbra.controllers.ZimbraController|preauth"), [messages, setMessages] = useState(0), [msgLink, setMsgLink] = useState(""), queryParams = {
6
+ const zimbraWorkflow = useHasWorkflow("fr.openent.zimbra.controllers.ZimbraController|view"), zimbraPreauth = useHasWorkflow("fr.openent.zimbra.controllers.ZimbraController|preauth"), [msgLink, setMsgLink] = useState(""), queryParams = {
6
7
  unread: !0,
7
8
  _: (/* @__PURE__ */ new Date()).getTime()
8
- }, refreshMails = async () => {
9
- const url = zimbraWorkflow ? "/zimbra/count/INBOX" : "/conversation/count/INBOX";
10
- try {
11
- const {
12
- count
13
- } = await odeServices.http().get(url, {
14
- queryParams
15
- });
16
- setMessages(count ?? 0);
17
- } catch (error) {
18
- console.error(error), setMessages(0);
19
- }
20
- }, goToMessagerie = async () => {
9
+ }, {
10
+ data: messages
11
+ } = useQuery({
12
+ queryKey: ["conversation-navbar-count"],
13
+ queryFn: async () => await odeServices.http().get(zimbraWorkflow ? "/zimbra/count/INBOX" : "/conversation/count/INBOX", {
14
+ queryParams
15
+ }),
16
+ staleTime: 5 * 60 * 1e3
17
+ // 5 minutes
18
+ }), goToMessagerie = async () => {
21
19
  const defaultLink = "/zimbra/zimbra";
22
20
  try {
23
21
  const {
@@ -29,11 +27,9 @@ const useConversation = () => {
29
27
  }
30
28
  };
31
29
  return useEffect(() => {
32
- refreshMails();
33
- }, []), useEffect(() => {
34
30
  goToMessagerie();
35
31
  }, []), {
36
- messages,
32
+ messages: messages ? messages.count : 0,
37
33
  msgLink,
38
34
  zimbraWorkflow
39
35
  };
@@ -27,6 +27,7 @@ export interface UseDropdownProps {
27
27
  menuProps: Record<string, any>;
28
28
  itemProps: Record<string, any>;
29
29
  setVisible: Dispatch<SetStateAction<boolean>>;
30
+ openOnSpace?: boolean;
30
31
  }
31
- declare const useDropdown: (placement: Placement | undefined, extraTriggerKeyDownHandler?: (event: React.KeyboardEvent<HTMLButtonElement>) => void, isTriggerHovered?: boolean) => UseDropdownProps;
32
+ declare const useDropdown: (placement: Placement | undefined, extraTriggerKeyDownHandler?: (event: React.KeyboardEvent<HTMLButtonElement>) => void, isTriggerHovered?: boolean, focusOnVisible?: boolean, openOnSpace?: boolean) => UseDropdownProps;
32
33
  export default useDropdown;
@@ -1,7 +1,7 @@
1
1
  import { useId, useState, useRef, useEffect, useCallback } from "react";
2
2
  import { useFloating, offset, size, flip, autoUpdate, useHover, safePolygon } from "@floating-ui/react";
3
3
  import { mergeRefs } from "../../utilities/refs/ref.js";
4
- const useDropdown = (placement, extraTriggerKeyDownHandler, isTriggerHovered = !1) => {
4
+ const useDropdown = (placement, extraTriggerKeyDownHandler, isTriggerHovered = !1, focusOnVisible = !0, openOnSpace = !0) => {
5
5
  const id = useId(), [visible, setVisible] = useState(!1), [activeIndex, setActiveIndex] = useState(-1), [isFocused, setIsFocused] = useState(null), {
6
6
  refs,
7
7
  floatingStyles,
@@ -11,7 +11,7 @@ const useDropdown = (placement, extraTriggerKeyDownHandler, isTriggerHovered = !
11
11
  open: visible,
12
12
  onOpenChange: setVisible,
13
13
  whileElementsMounted: autoUpdate,
14
- middleware: [offset(4), size({
14
+ middleware: [offset(0), size({
15
15
  apply({
16
16
  rects,
17
17
  elements
@@ -32,7 +32,7 @@ const useDropdown = (placement, extraTriggerKeyDownHandler, isTriggerHovered = !
32
32
  });
33
33
  const menuRef = useRef(null), triggerRef = useRef(null), itemRefs = useRef({});
34
34
  useEffect(() => {
35
- visible ? menuRef.current && (menuRef.current.focus(), setActiveIndex(0)) : (setActiveIndex(-1), itemRefs.current = {});
35
+ visible && menuRef.current && focusOnVisible ? (menuRef.current.focus(), setActiveIndex(0)) : (setActiveIndex(-1), itemRefs.current = {});
36
36
  }, [visible]), useEffect(() => {
37
37
  if (activeIndex !== -1) {
38
38
  const currentItem = Object.values(itemRefs.current)[activeIndex];
@@ -66,6 +66,8 @@ const useDropdown = (placement, extraTriggerKeyDownHandler, isTriggerHovered = !
66
66
  switch (event.code) {
67
67
  case " ":
68
68
  case "Space":
69
+ if (!openOnSpace)
70
+ break;
69
71
  case "Enter":
70
72
  case "ArrowDown":
71
73
  case "Down":
@@ -1,2 +1,2 @@
1
1
  import { IGetSession } from '@edifice.io/client';
2
- export default function useSession(): import('../../../node_modules/@tanstack/react-query').UseQueryResult<IGetSession, Error>;
2
+ export default function useSession(): import('../../node_modules/@tanstack/react-query').UseQueryResult<IGetSession, Error>;
@@ -0,0 +1,2 @@
1
+ export { default as useWorkspaceFolders } from './useWorkspaceFolders';
2
+ export * from './useWorkspaceFolders';
@@ -0,0 +1,28 @@
1
+ import { IUserInfo } from '@edifice.io/client';
2
+ interface FolderTreeNode {
3
+ id: string;
4
+ name: string;
5
+ children?: FolderTreeNode[];
6
+ canCopyFileInto: boolean;
7
+ disabled?: boolean;
8
+ }
9
+ export declare const WORKSPACE_OWNER_FOLDER_ID = "workspace-owner-folder-id";
10
+ export declare const WORKSPACE_SHARED_FOLDER_ID = "workspace-shared-folder-id";
11
+ declare function useWorkspaceFolders(): {
12
+ folderTree: ({
13
+ id: string;
14
+ name: string;
15
+ children: FolderTreeNode[];
16
+ canCopyFileInto: boolean;
17
+ disabled?: undefined;
18
+ } | {
19
+ id: string;
20
+ name: string;
21
+ children: FolderTreeNode[];
22
+ canCopyFileInto: boolean;
23
+ disabled: boolean;
24
+ })[];
25
+ setSearchQuery: import('react').Dispatch<import('react').SetStateAction<string>>;
26
+ user: IUserInfo | undefined;
27
+ };
28
+ export default useWorkspaceFolders;
@@ -0,0 +1,74 @@
1
+ import { odeServices } from "@edifice.io/client";
2
+ import { useQuery } from "@tanstack/react-query";
3
+ import { useState, useMemo } from "react";
4
+ import { useTranslation } from "react-i18next";
5
+ import { useEdificeClient } from "../../providers/EdificeClientProvider/EdificeClientProvider.hook.js";
6
+ const WORKSPACE_OWNER_FOLDER_ID = "workspace-owner-folder-id", WORKSPACE_SHARED_FOLDER_ID = "workspace-shared-folder-id";
7
+ function useWorkspaceFolders() {
8
+ const {
9
+ t
10
+ } = useTranslation(), {
11
+ user
12
+ } = useEdificeClient(), {
13
+ data: ownerWorkspaceData = []
14
+ } = useQuery({
15
+ queryKey: ["workspace-owner-folders"],
16
+ queryFn: () => odeServices.workspace().listOwnerFolders(!0)
17
+ }), {
18
+ data: sharedWorkspaceData = []
19
+ } = useQuery({
20
+ queryKey: ["workspace-shared-folders"],
21
+ queryFn: () => odeServices.workspace().listSharedFolders(!0)
22
+ }), [searchQuery, setSearchQuery] = useState("");
23
+ return {
24
+ folderTree: useMemo(() => {
25
+ const buildWorkspaceTree = (ownerTree, sharedTree) => [{
26
+ id: WORKSPACE_OWNER_FOLDER_ID,
27
+ name: t("workspace.myDocuments"),
28
+ children: ownerTree,
29
+ canCopyFileInto: !0
30
+ }, {
31
+ id: WORKSPACE_SHARED_FOLDER_ID,
32
+ name: t("workspace.sharedDocuments"),
33
+ children: sharedTree,
34
+ canCopyFileInto: !1,
35
+ disabled: !0
36
+ }], ownerFolders = buildTree(ownerWorkspaceData, user), sharedFolders = buildTree(sharedWorkspaceData, user);
37
+ return buildWorkspaceTree(searchQuery ? filterTree(ownerFolders, searchQuery) : ownerFolders, searchQuery ? filterTree(sharedFolders, searchQuery) : sharedFolders);
38
+ }, [ownerWorkspaceData, sharedWorkspaceData, searchQuery, user]),
39
+ setSearchQuery,
40
+ user
41
+ };
42
+ }
43
+ const buildTree = (workspaceData, user) => {
44
+ const nodes = /* @__PURE__ */ new Map(), fullTree = [];
45
+ return workspaceData.forEach((item) => {
46
+ const canCopyFileInto = user && canWriteOnFolder(item, user.userId, user.groupsIds);
47
+ nodes.set(item._id, {
48
+ id: item._id,
49
+ name: item.name,
50
+ children: [],
51
+ canCopyFileInto
52
+ });
53
+ }), workspaceData.forEach((item) => {
54
+ var _a;
55
+ const nodeItem = nodes.get(item._id);
56
+ nodeItem.canCopyFileInto && (item.eParent && nodes.has(item.eParent) ? (_a = nodes.get(item.eParent)) == null || _a.children.push(nodeItem) : fullTree.push(nodeItem));
57
+ }), fullTree;
58
+ }, filterTree = (nodes, search) => nodes.map((node) => {
59
+ const filteredChildren = node.children ? filterTree(node.children, search) : [];
60
+ return node.name.toLowerCase().includes(search.toLowerCase()) || filteredChildren.length > 0 ? {
61
+ ...node,
62
+ children: filteredChildren
63
+ } : null;
64
+ }).filter((node) => node !== null), canWriteOnFolder = (folderData, userId, userGroupsIds) => {
65
+ var _a;
66
+ if (folderData.owner === userId) return !0;
67
+ const userRights = (_a = folderData.inheritedShares) == null ? void 0 : _a.filter((right) => right.userId === userId || userGroupsIds.includes(right.groupId)), contrib = "org-entcore-workspace-controllers-WorkspaceController|updateDocument";
68
+ return !!(userRights != null && userRights.find((right) => right[contrib]));
69
+ };
70
+ export {
71
+ WORKSPACE_OWNER_FOLDER_ID,
72
+ WORKSPACE_SHARED_FOLDER_ID,
73
+ useWorkspaceFolders as default
74
+ };