@edifice.io/react 2.5.2-develop-b2school-actualites.20251204091630 → 2.5.2-develop-integration.20251204110744

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 (62) hide show
  1. package/dist/components/AppIcon/index.d.ts +0 -1
  2. package/dist/components/Flex/Flex.js +1 -1
  3. package/dist/components/Menu/components/MenuButton.d.ts +0 -2
  4. package/dist/components/Menu/components/MenuButton.js +4 -13
  5. package/dist/components/Select/Select.d.ts +2 -6
  6. package/dist/components/Select/Select.js +4 -10
  7. package/dist/components/index.d.ts +0 -2
  8. package/dist/editor.js +36 -40
  9. package/dist/hooks/index.d.ts +0 -1
  10. package/dist/icons-apps.js +234 -232
  11. package/dist/icons.js +262 -262
  12. package/dist/index.js +74 -84
  13. package/dist/modals.js +6 -8
  14. package/dist/modules/comments/components/Comment.js +3 -5
  15. package/dist/modules/comments/components/CommentList.js +1 -1
  16. package/dist/modules/comments/components/DeleteModal.js +8 -14
  17. package/dist/modules/comments/constants.d.ts +1 -4
  18. package/dist/modules/comments/constants.js +2 -2
  19. package/dist/modules/comments/provider/CommentProvider.js +2 -2
  20. package/dist/modules/comments/types.d.ts +2 -2
  21. package/dist/modules/editor/components/Editor/index.d.ts +0 -2
  22. package/dist/modules/icons/components/IconUndoSlashed.d.ts +7 -0
  23. package/dist/modules/icons/components/IconUndoSlashed.js +12 -0
  24. package/dist/modules/icons/components/apps/IconAssistancetic.d.ts +7 -0
  25. package/dist/modules/icons/components/apps/IconAssistancetic.js +14 -0
  26. package/dist/modules/icons/components/apps/index.d.ts +1 -0
  27. package/dist/modules/icons/components/index.d.ts +1 -1
  28. package/dist/modules/modals/ResourceModal/ResourceModal.d.ts +1 -0
  29. package/dist/modules/modals/ResourceModal/ResourceModal.js +10 -3
  30. package/dist/modules/modals/ShareModal/ShareBookmark.d.ts +1 -1
  31. package/dist/modules/modals/ShareModal/ShareBookmark.js +2 -5
  32. package/dist/modules/modals/ShareModal/ShareModal.d.ts +11 -1
  33. package/dist/modules/modals/ShareModal/ShareModal.js +105 -13
  34. package/dist/modules/modals/ShareModal/hooks/useSearch.d.ts +1 -2
  35. package/dist/modules/modals/ShareModal/hooks/useSearch.js +2 -3
  36. package/dist/modules/modals/ShareModal/hooks/useShare.d.ts +5 -12
  37. package/dist/modules/modals/ShareModal/hooks/useShare.js +13 -20
  38. package/dist/modules/modals/ShareModal/hooks/useShareBookmark.d.ts +1 -1
  39. package/dist/modules/modals/ShareModal/hooks/useShareBookmark.js +1 -1
  40. package/dist/modules/modals/ShareModal/index.d.ts +1 -3
  41. package/dist/utilities/index.d.ts +0 -1
  42. package/package.json +6 -6
  43. package/dist/components/Divider/Divider.d.ts +0 -5
  44. package/dist/components/Divider/Divider.js +0 -21
  45. package/dist/components/Divider/index.d.ts +0 -1
  46. package/dist/components/SeparatedInfo/SeparatedInfo.d.ts +0 -6
  47. package/dist/components/SeparatedInfo/SeparatedInfo.js +0 -13
  48. package/dist/components/SeparatedInfo/index.d.ts +0 -1
  49. package/dist/hooks/useInfiniteScroll/index.d.ts +0 -1
  50. package/dist/hooks/useInfiniteScroll/useInfiniteScroll.d.ts +0 -33
  51. package/dist/hooks/useInfiniteScroll/useInfiniteScroll.js +0 -20
  52. package/dist/modules/editor/components/Editor/EditorPreview.d.ts +0 -14
  53. package/dist/modules/editor/components/Editor/EditorPreview.js +0 -56
  54. package/dist/modules/editor/components/Editor/EditorPreviewSkeleton.d.ts +0 -8
  55. package/dist/modules/editor/components/Editor/EditorPreviewSkeleton.js +0 -24
  56. package/dist/modules/icons/components/IconClockAlert.d.ts +0 -7
  57. package/dist/modules/icons/components/IconClockAlert.js +0 -17
  58. package/dist/modules/modals/ShareModal/ShareResources.d.ts +0 -173
  59. package/dist/modules/modals/ShareModal/ShareResources.js +0 -137
  60. package/dist/utilities/react-query/index.d.ts +0 -1
  61. package/dist/utilities/react-query/react-query-utils.d.ts +0 -21
  62. package/dist/utilities/react-query/react-query-utils.js +0 -13
@@ -1,11 +1,25 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
- import { useRef, useState } from "react";
2
+ import { useState } from "react";
3
3
  import { createPortal } from "react-dom";
4
4
  import { useTranslation } from "react-i18next";
5
- import ShareResources from "./ShareResources.js";
5
+ import SvgIconBookmark from "../../icons/components/IconBookmark.js";
6
+ import SvgIconInfoCircle from "../../icons/components/IconInfoCircle.js";
7
+ import SvgIconRafterDown from "../../icons/components/IconRafterDown.js";
8
+ import { ShareBookmark } from "./ShareBookmark.js";
9
+ import { ShareBookmarkLine } from "./ShareBookmarkLine.js";
10
+ import { useSearch } from "./hooks/useSearch.js";
11
+ import useShare from "./hooks/useShare.js";
12
+ import { useShareBookmark } from "./hooks/useShareBookmark.js";
6
13
  import Modal from "../../../components/Modal/Modal.js";
7
14
  import Alert from "../../../components/Alert/Alert.js";
15
+ import Heading from "../../../components/Heading/Heading.js";
16
+ import LoadingScreen from "../../../components/LoadingScreen/LoadingScreen.js";
17
+ import VisuallyHidden from "../../../components/VisuallyHidden/VisuallyHidden.js";
18
+ import Avatar from "../../../components/Avatar/Avatar.js";
19
+ import Checkbox from "../../../components/Checkbox/Checkbox.js";
8
20
  import Button from "../../../components/Button/Button.js";
21
+ import Tooltip from "../../../components/Tooltip/Tooltip.js";
22
+ import Combobox from "../../../components/Combobox/Combobox.js";
9
23
  function ShareResourceModal({
10
24
  isOpen,
11
25
  shareOptions,
@@ -14,26 +28,104 @@ function ShareResourceModal({
14
28
  onSuccess,
15
29
  onCancel
16
30
  }) {
17
- const refShareResources = useRef(null), handleShare = () => {
18
- var _a;
19
- (_a = refShareResources.current) == null || _a.handleShare();
20
- }, [isSaving, setIsSaving] = useState(!1), {
31
+ const {
32
+ resourceId,
33
+ resourceCreatorId,
34
+ resourceRights
35
+ } = shareOptions, [isLoading, setIsLoading] = useState(!0), {
36
+ state: {
37
+ isSharing,
38
+ shareRights,
39
+ shareRightActions
40
+ },
41
+ dispatch: shareDispatch,
42
+ myAvatar,
43
+ currentIsAuthor,
44
+ handleShare,
45
+ toggleRight,
46
+ handleDeleteRow
47
+ } = useShare({
48
+ resourceId,
49
+ resourceCreatorId,
50
+ resourceRights,
51
+ shareResource,
52
+ setIsLoading,
53
+ onSuccess
54
+ }), {
55
+ state: {
56
+ searchResults,
57
+ searchInputValue
58
+ },
59
+ showSearchAdmlHint,
60
+ showSearchLoading,
61
+ showSearchNoResults,
62
+ getSearchMinLength,
63
+ handleSearchInputChange,
64
+ handleSearchResultsChange
65
+ } = useSearch({
66
+ resourceId,
67
+ resourceCreatorId,
68
+ shareRights,
69
+ shareDispatch
70
+ }), {
71
+ refBookmark,
72
+ showBookmark,
73
+ handleBookmarkChange,
74
+ toggleBookmark,
75
+ bookmark,
76
+ handleOnSave,
77
+ showBookmarkInput,
78
+ toggleBookmarkInput
79
+ } = useShareBookmark({
80
+ shareRights,
81
+ shareDispatch
82
+ }), {
21
83
  t
22
- } = useTranslation(), onSaving = (isSaving2) => {
23
- setIsSaving(isSaving2);
24
- };
84
+ } = useTranslation(), searchPlaceholder = showSearchAdmlHint() ? t("explorer.search.adml.hint") : t("explorer.modal.share.search.placeholder");
25
85
  return /* @__PURE__ */ createPortal(/* @__PURE__ */ jsxs(Modal, { id: "share_modal", size: "lg", isOpen, onModalClose: onCancel, children: [
26
86
  /* @__PURE__ */ jsx(Modal.Header, { onModalClose: onCancel, children: t("share.title") }),
27
87
  /* @__PURE__ */ jsxs(Modal.Body, { children: [
28
88
  /* @__PURE__ */ jsx(Alert, { type: "info", className: "mb-16", children: t("explorer.modal.share.alert.community") }),
29
- /* @__PURE__ */ jsx(ShareResources, { shareOptions, shareResource, ref: refShareResources, onSuccess, onSubmit: onSaving, classNameSearchInput: "flex-fill" }),
89
+ /* @__PURE__ */ jsx(Heading, { headingStyle: "h4", level: "h3", className: "mb-16", children: t("explorer.modal.share.usersWithAccess") }),
90
+ /* @__PURE__ */ jsx("div", { className: "table-responsive", children: isLoading ? /* @__PURE__ */ jsx(LoadingScreen, {}) : /* @__PURE__ */ jsxs("table", { className: "table border align-middle mb-0", children: [
91
+ /* @__PURE__ */ jsx("thead", { className: "bg-secondary", children: /* @__PURE__ */ jsxs("tr", { children: [
92
+ /* @__PURE__ */ jsx("th", { scope: "col", className: "w-32", children: /* @__PURE__ */ jsx(VisuallyHidden, { children: t("explorer.modal.share.avatar.shared.alt") }) }),
93
+ /* @__PURE__ */ jsx("th", { scope: "col", children: /* @__PURE__ */ jsx(VisuallyHidden, { children: t("explorer.modal.share.search.placeholder") }) }),
94
+ shareRightActions.map((shareRightAction) => /* @__PURE__ */ jsx("th", { scope: "col", className: "text-center text-white", children: t(shareRightAction.displayName) }, shareRightAction.displayName)),
95
+ /* @__PURE__ */ jsx("th", { scope: "col", children: /* @__PURE__ */ jsx(VisuallyHidden, { children: t("close") }) })
96
+ ] }) }),
97
+ /* @__PURE__ */ jsxs("tbody", { children: [
98
+ currentIsAuthor() && /* @__PURE__ */ jsxs("tr", { children: [
99
+ /* @__PURE__ */ jsx("th", { scope: "row", children: /* @__PURE__ */ jsx(Avatar, { alt: t("explorer.modal.share.avatar.me.alt"), size: "xs", src: myAvatar, variant: "circle" }) }),
100
+ /* @__PURE__ */ jsx("td", { children: t("share.me") }),
101
+ shareRightActions.map((shareRightAction) => /* @__PURE__ */ jsx("td", { style: {
102
+ width: "80px"
103
+ }, className: "text-center text-white", children: /* @__PURE__ */ jsx(Checkbox, { checked: !0, disabled: !0 }) }, shareRightAction.displayName)),
104
+ /* @__PURE__ */ jsx("td", {})
105
+ ] }),
106
+ /* @__PURE__ */ jsx(ShareBookmarkLine, { showBookmark, shareRightActions, shareRights, onDeleteRow: handleDeleteRow, toggleRight, toggleBookmark })
107
+ ] })
108
+ ] }) }),
109
+ /* @__PURE__ */ jsxs("div", { className: "mt-16", children: [
110
+ /* @__PURE__ */ jsx(Button, { color: "tertiary", leftIcon: /* @__PURE__ */ jsx(SvgIconBookmark, {}), rightIcon: /* @__PURE__ */ jsx(SvgIconRafterDown, { title: t("show"), className: "w-16 min-w-0", style: {
111
+ transition: "rotate 0.2s ease-out",
112
+ rotate: showBookmarkInput ? "-180deg" : "0deg"
113
+ } }), type: "button", variant: "ghost", className: "fw-normal", onClick: () => toggleBookmarkInput(!showBookmarkInput), children: t("share.save.sharebookmark") }),
114
+ showBookmarkInput && /* @__PURE__ */ jsx(ShareBookmark, { refBookmark, bookmark, onBookmarkChange: handleBookmarkChange, onSave: handleOnSave })
115
+ ] }),
116
+ /* @__PURE__ */ jsx("hr", {}),
117
+ /* @__PURE__ */ jsxs(Heading, { headingStyle: "h4", level: "h3", className: "mb-16 d-flex align-items-center", children: [
118
+ /* @__PURE__ */ jsx("div", { className: "me-8", children: t("explorer.modal.share.search") }),
119
+ /* @__PURE__ */ jsx(Tooltip, { message: "Vos favoris de partage s’affichent en priorité dans votre liste lorsque vous recherchez un groupe ou une personne, vous pouvez les retrouver dans l’annuaire.", placement: "top", children: /* @__PURE__ */ jsx(SvgIconInfoCircle, { className: "c-pointer", height: "18" }) })
120
+ ] }),
121
+ /* @__PURE__ */ jsx("div", { className: "row", children: /* @__PURE__ */ jsx("div", { className: "col-10", children: /* @__PURE__ */ jsx(Combobox, { value: searchInputValue, placeholder: searchPlaceholder, isLoading: showSearchLoading(), noResult: showSearchNoResults(), options: searchResults, searchMinLength: getSearchMinLength(), onSearchInputChange: handleSearchInputChange, onSearchResultsChange: handleSearchResultsChange }) }) }),
30
122
  children
31
123
  ] }),
32
124
  /* @__PURE__ */ jsxs(Modal.Footer, { children: [
33
- /* @__PURE__ */ jsx(Button, { type: "button", color: "tertiary", variant: "ghost", onClick: onCancel, disabled: isSaving, children: t("explorer.cancel") }),
34
- /* @__PURE__ */ jsx(Button, { type: "button", color: "primary", variant: "filled", isLoading: isSaving, onClick: handleShare, disabled: isSaving, children: t("share") })
125
+ /* @__PURE__ */ jsx(Button, { type: "button", color: "tertiary", variant: "ghost", onClick: onCancel, children: t("explorer.cancel") }),
126
+ /* @__PURE__ */ jsx(Button, { type: "button", color: "primary", variant: "filled", isLoading: isSharing, onClick: handleShare, disabled: isSharing, children: t("share") })
35
127
  ] })
36
- ] }), document.getElementById("portal") || document.body);
128
+ ] }), document.getElementById("portal"));
37
129
  }
38
130
  export {
39
131
  ShareResourceModal as default
@@ -3,12 +3,11 @@ import { ShareRightWithVisibles, ShareSubject } from '@edifice.io/client';
3
3
  import { OptionListItemType } from '../../../../components';
4
4
  import { ShareOptions } from '../ShareModal';
5
5
  import { ShareAction } from './useShare';
6
- export declare const useSearch: ({ resourceId, resourceCreatorId, shareRights, shareDispatch, urlResourceRights, }: {
6
+ export declare const useSearch: ({ resourceId, resourceCreatorId, shareRights, shareDispatch, }: {
7
7
  resourceId: ShareOptions["resourceCreatorId"];
8
8
  resourceCreatorId: ShareOptions["resourceCreatorId"];
9
9
  shareRights: ShareRightWithVisibles;
10
10
  shareDispatch: Dispatch<ShareAction>;
11
- urlResourceRights?: string;
12
11
  }) => {
13
12
  state: {
14
13
  searchInputValue: string;
@@ -58,8 +58,7 @@ const defaultActions = [{
58
58
  resourceId,
59
59
  resourceCreatorId,
60
60
  shareRights,
61
- shareDispatch,
62
- urlResourceRights
61
+ shareDispatch
63
62
  }) => {
64
63
  const [state, dispatch] = useReducer(reducer, initialState), debouncedSearchInputValue = useDebounce(state.searchInputValue, 500), {
65
64
  isAdml
@@ -83,7 +82,7 @@ const defaultActions = [{
83
82
  type: "isSearching",
84
83
  payload: !0
85
84
  }), !isAdml && debouncedSearchInputValue2.length >= 1 || isAdml && debouncedSearchInputValue2.length >= 3) {
86
- const resSearchShareSubjects = await odeServices.share().searchShareSubjects(appCode, resourceId, debouncedSearchInputValue2, urlResourceRights);
85
+ const resSearchShareSubjects = await odeServices.share().searchShareSubjects(appCode, resourceId, debouncedSearchInputValue2);
87
86
  dispatch({
88
87
  type: "addApiResult",
89
88
  payload: resSearchShareSubjects
@@ -1,5 +1,5 @@
1
- import { ShareRight, ShareRightAction, ShareRightActionDisplayName, ShareRightWithVisibles, ShareUrls } from '@edifice.io/client';
2
- import { ShareOptions, ShareResourceMutation } from '../ShareResources';
1
+ import { ShareRight, ShareRightAction, ShareRightActionDisplayName, ShareRightWithVisibles } from '@edifice.io/client';
2
+ import { ShareOptions, ShareResourceMutation } from '../ShareModal';
3
3
  interface UseShareResourceModalProps {
4
4
  /**
5
5
  * Resource ID (assetId)
@@ -15,15 +15,10 @@ interface UseShareResourceModalProps {
15
15
  resourceCreatorId: ShareOptions['resourceCreatorId'];
16
16
  shareResource?: ShareResourceMutation;
17
17
  onSuccess: () => void;
18
- setIsLoading?: (value: boolean) => void;
19
- resourceShareRights?: ShareRightWithVisibles;
20
- resourceShareRightActions?: ShareRightAction[];
21
- filteredActions?: ShareRightActionDisplayName[];
22
- shareUrls?: ShareUrls;
18
+ setIsLoading: (value: boolean) => void;
23
19
  }
24
20
  type State = {
25
21
  isSharing: boolean;
26
- isDirty?: boolean;
27
22
  shareRights: ShareRightWithVisibles;
28
23
  shareRightActions: ShareRightAction[];
29
24
  };
@@ -43,10 +38,9 @@ export type ShareAction = {
43
38
  type: 'isSharing';
44
39
  payload: boolean;
45
40
  };
46
- export default function useShare({ resourceId, resourceRights, resourceCreatorId, shareResource, setIsLoading, onSuccess, filteredActions, shareUrls, }: UseShareResourceModalProps): {
41
+ export default function useShare({ resourceId, resourceRights, resourceCreatorId, shareResource, setIsLoading, onSuccess, }: UseShareResourceModalProps): {
47
42
  state: {
48
43
  isSharing: boolean;
49
- isDirty?: boolean;
50
44
  shareRights: ShareRightWithVisibles;
51
45
  shareRightActions: ShareRightAction[];
52
46
  };
@@ -54,8 +48,7 @@ export default function useShare({ resourceId, resourceRights, resourceCreatorId
54
48
  currentIsAuthor: () => boolean;
55
49
  myAvatar: string;
56
50
  handleDeleteRow: (shareRight: ShareRight) => void;
57
- handleShare: (notify?: boolean) => Promise<void>;
51
+ handleShare: () => Promise<void>;
58
52
  toggleRight: (shareRight: ShareRight, actionName: ShareRightActionDisplayName) => void;
59
- isDirty: boolean;
60
53
  };
61
54
  export {};
@@ -6,7 +6,6 @@ import useUser from "../../../../hooks/useUser/useUser.js";
6
6
  import useToast from "../../../../hooks/useToast/useToast.js";
7
7
  const initialState = {
8
8
  isSharing: !1,
9
- isDirty: !1,
10
9
  shareRights: {
11
10
  rights: [],
12
11
  visibleBookmarks: [],
@@ -25,20 +24,17 @@ function reducer(state, action) {
25
24
  case "deleteRow":
26
25
  return {
27
26
  ...state,
28
- shareRights: action.payload,
29
- isDirty: !0
27
+ shareRights: action.payload
30
28
  };
31
29
  case "updateShareRights":
32
30
  return {
33
31
  ...state,
34
- shareRights: action.payload,
35
- isDirty: !0
32
+ shareRights: action.payload
36
33
  };
37
34
  case "toggleRight":
38
35
  return {
39
36
  ...state,
40
- shareRights: action.payload,
41
- isDirty: !0
37
+ shareRights: action.payload
42
38
  };
43
39
  case "isSharing":
44
40
  return {
@@ -55,9 +51,7 @@ function useShare({
55
51
  resourceCreatorId,
56
52
  shareResource,
57
53
  setIsLoading,
58
- onSuccess,
59
- filteredActions,
60
- shareUrls
54
+ onSuccess
61
55
  }) {
62
56
  const {
63
57
  appCode
@@ -70,18 +64,18 @@ function useShare({
70
64
  useEffect(() => {
71
65
  resourceId && (async () => {
72
66
  try {
73
- const [shareRightActions, shareRights] = await Promise.all([odeServices.share().getActionsForApp(appCode, shareUrls == null ? void 0 : shareUrls.getShareMapping), odeServices.share().getRightsForResource(appCode, resourceId, shareUrls)]), filteredShareRightActions = filteredActions ? shareRightActions.filter((action) => filteredActions.includes(action.id)) : shareRightActions;
67
+ const [shareRightActions, shareRights] = await Promise.all([odeServices.share().getActionsForApp(appCode), odeServices.share().getRightsForResource(appCode, resourceId)]);
74
68
  dispatch({
75
69
  type: "init",
76
70
  payload: {
77
- shareRightActions: filteredShareRightActions,
71
+ shareRightActions,
78
72
  shareRights
79
73
  }
80
74
  });
81
75
  } catch (error) {
82
76
  console.error(error);
83
77
  }
84
- setIsLoading == null || setIsLoading(!1);
78
+ setIsLoading(!1);
85
79
  })();
86
80
  }, [resourceId]);
87
81
  const toggleRight = (shareRight, actionName) => {
@@ -149,7 +143,7 @@ function useShare({
149
143
  }
150
144
  });
151
145
  },
152
- handleShare: async (notify = !0) => {
146
+ handleShare: async () => {
153
147
  dispatch({
154
148
  type: "isSharing",
155
149
  payload: !0
@@ -175,12 +169,12 @@ function useShare({
175
169
  resourceId,
176
170
  rights: shares
177
171
  });
178
- notify && notifySuccess(result);
172
+ notifySuccess(result);
179
173
  } else {
180
- const result = await odeServices.share().saveRights(appCode, resourceId, shares, shareUrls);
181
- notify && notifySuccess(result);
174
+ const result = await odeServices.share().saveRights(appCode, resourceId, shares);
175
+ notifySuccess(result);
182
176
  }
183
- shareUrls != null && shareUrls.getResourceRights && odeServices.cache().clearCache(shareUrls.getResourceRights), onSuccess();
177
+ onSuccess();
184
178
  } catch (error) {
185
179
  typeof error == "string" && toast.error(t("explorer.shared.status.error")), typeof error == "object" && toast.error(t((error == null ? void 0 : error.error) || "explorer.shared.status.error")), console.error("Failed to save share", error);
186
180
  } finally {
@@ -190,8 +184,7 @@ function useShare({
190
184
  });
191
185
  }
192
186
  },
193
- toggleRight,
194
- isDirty: !!state.isDirty
187
+ toggleRight
195
188
  };
196
189
  }
197
190
  export {
@@ -16,7 +16,7 @@ export declare const useShareBookmark: ({ shareRights, shareDispatch, }: UseShar
16
16
  bookmark: BookmarkProps;
17
17
  handleBookmarkChange: () => void;
18
18
  setBookmark: Dispatch<import('react').SetStateAction<BookmarkProps>>;
19
- handleOnSave: () => Promise<void>;
19
+ handleOnSave: () => void;
20
20
  toggleBookmark: () => void;
21
21
  toggleBookmarkInput: Dispatch<import('react').SetStateAction<boolean>>;
22
22
  };
@@ -56,7 +56,7 @@ const useShareBookmark = ({
56
56
  handleOnSave: () => {
57
57
  var _a;
58
58
  const inputValue = ((_a = refBookmark.current) == null ? void 0 : _a.value) || "";
59
- return saveBookmark(inputValue);
59
+ saveBookmark(inputValue);
60
60
  },
61
61
  toggleBookmark,
62
62
  toggleBookmarkInput
@@ -1,5 +1,3 @@
1
+ export { default as ShareModal } from './ShareModal';
1
2
  export { default as ShareBlog } from './apps/ShareBlog';
2
3
  export { default as useShareMutation } from './hooks/useShareMutation';
3
- export { default as ShareModal } from './ShareModal';
4
- export * from './ShareResources';
5
- export { default as ShareResources } from './ShareResources';
@@ -1,4 +1,3 @@
1
1
  export * from './check-user-rights';
2
2
  export * from './emptyscreen-mapping';
3
- export * from './react-query';
4
3
  export * from './refs';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edifice.io/react",
3
- "version": "2.5.2-develop-b2school-actualites.20251204091630",
3
+ "version": "2.5.2-develop-integration.20251204110744",
4
4
  "description": "Edifice React Library",
5
5
  "keywords": [
6
6
  "react",
@@ -133,9 +133,9 @@
133
133
  "react-slugify": "^3.0.3",
134
134
  "swiper": "^10.1.0",
135
135
  "ua-parser-js": "^1.0.36",
136
- "@edifice.io/bootstrap": "2.5.2-develop-b2school-actualites.20251204091630",
137
- "@edifice.io/utilities": "2.5.2-develop-b2school-actualites.20251204091630",
138
- "@edifice.io/tiptap-extensions": "2.5.2-develop-b2school-actualites.20251204091630"
136
+ "@edifice.io/bootstrap": "2.5.2-develop-integration.20251204110744",
137
+ "@edifice.io/tiptap-extensions": "2.5.2-develop-integration.20251204110744",
138
+ "@edifice.io/utilities": "2.5.2-develop-integration.20251204110744"
139
139
  },
140
140
  "devDependencies": {
141
141
  "@babel/plugin-transform-react-pure-annotations": "^7.23.3",
@@ -166,8 +166,8 @@
166
166
  "vite": "^5.4.11",
167
167
  "vite-plugin-dts": "^4.1.0",
168
168
  "vite-tsconfig-paths": "^5.0.1",
169
- "@edifice.io/client": "2.5.2-develop-b2school-actualites.20251204091630",
170
- "@edifice.io/config": "2.5.2-develop-b2school-actualites.20251204091630"
169
+ "@edifice.io/config": "2.5.2-develop-integration.20251204110744",
170
+ "@edifice.io/client": "2.5.2-develop-integration.20251204110744"
171
171
  },
172
172
  "peerDependencies": {
173
173
  "@react-spring/web": "^9.7.5",
@@ -1,5 +0,0 @@
1
- import { ReactNode } from 'react';
2
- export declare function Divider({ children, color, }: {
3
- children: ReactNode[];
4
- color: string;
5
- }): import("react/jsx-runtime").JSX.Element;
@@ -1,21 +0,0 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- import Flex from "../Flex/Flex.js";
3
- function Divider({
4
- children,
5
- color = "var(--edifice-gray-400)"
6
- }) {
7
- return /* @__PURE__ */ jsxs(Flex, { align: "center", justify: "around", gap: "16", wrap: "nowrap", className: "flex-fill", children: [
8
- /* @__PURE__ */ jsx("hr", { className: "divider m-12 ms-0 flex-fill", style: {
9
- borderColor: color
10
- } }),
11
- /* @__PURE__ */ jsxs(Flex, { gap: "12", align: "center", justify: "around", children: [
12
- ...children
13
- ] }),
14
- /* @__PURE__ */ jsx("hr", { className: "divider m-12 me-0 flex-fill", style: {
15
- borderColor: color
16
- } })
17
- ] });
18
- }
19
- export {
20
- Divider
21
- };
@@ -1 +0,0 @@
1
- export * from './Divider';
@@ -1,6 +0,0 @@
1
- import { ReactNode } from 'react';
2
- export type SeparatedInfoProps = {
3
- children: ReactNode[];
4
- className?: string;
5
- };
6
- export declare function SeparatedInfo({ children, className }: SeparatedInfoProps): import("react/jsx-runtime").JSX.Element;
@@ -1,13 +0,0 @@
1
- import { jsxs } from "react/jsx-runtime";
2
- import Flex from "../Flex/Flex.js";
3
- function SeparatedInfo({
4
- children,
5
- className
6
- }) {
7
- return /* @__PURE__ */ jsxs(Flex, { direction: "row", className: `separated-info ${className}`, children: [
8
- ...children
9
- ] });
10
- }
11
- export {
12
- SeparatedInfo
13
- };
@@ -1 +0,0 @@
1
- export * from './SeparatedInfo';
@@ -1 +0,0 @@
1
- export { default as useInfiniteScroll } from './useInfiniteScroll';
@@ -1,33 +0,0 @@
1
- /**
2
- * A custom React hook that provides infinite scroll functionality using the Intersection Observer API.
3
- *
4
- * This hook returns a ref callback that can be attached to a DOM element (typically at the bottom
5
- * of a scrollable list). When that element becomes visible in the viewport, the provided callback
6
- * function is executed, allowing you to load more content.
7
- *
8
- * @param params - Configuration object for the infinite scroll hook
9
- * @param params.callback - Function to execute when the observed element intersects with the viewport
10
- * @param params.options - Optional Intersection Observer configuration options (defaults to { threshold: 0.1 })
11
- *
12
- * @returns A ref callback function that should be attached to the target DOM element
13
- *
14
- * @example
15
- * ```typescript
16
- * const loadMoreRef = useInfiniteScroll({
17
- * // Load more data when the element is visible
18
- * callback: loadMoreItems,
19
- * options: { threshold: 0.5 } // Trigger when 50% of element is visible
20
- * });
21
- *
22
- * return (
23
- * <div>
24
- * {items.map(item => <Item key={item.id} {...item} />)}
25
- * <div ref={loadMoreRef}>Loading...</div>
26
- * </div>
27
- * );
28
- * ```
29
- */
30
- export default function useInfiniteScroll({ callback, options, }: {
31
- callback: () => void;
32
- options?: IntersectionObserverInit;
33
- }): (node: HTMLElement | null) => void;
@@ -1,20 +0,0 @@
1
- import { useRef, useCallback } from "react";
2
- function useInfiniteScroll({
3
- callback,
4
- options = {
5
- threshold: 0.1
6
- }
7
- }) {
8
- const observerRef = useRef(null);
9
- return useCallback((node) => {
10
- if (observerRef.current && (observerRef.current.disconnect(), observerRef.current = null), !node) return;
11
- const observer = new IntersectionObserver(async (entries) => {
12
- for (const entry of entries)
13
- entry.isIntersecting && await callback();
14
- }, options);
15
- observer.observe(node), observerRef.current = observer;
16
- }, [callback, options]);
17
- }
18
- export {
19
- useInfiniteScroll as default
20
- };
@@ -1,14 +0,0 @@
1
- /**
2
- * Editor component properties
3
- */
4
- export interface EditorPreviewProps {
5
- /** Rich content to render. */
6
- content: string;
7
- /** Display with or without a border */
8
- variant?: 'outline' | 'ghost';
9
- onDetailClick?: () => void;
10
- onMediaClick?: () => void;
11
- maxMediaDisplayed?: number;
12
- }
13
- declare const EditorPreview: ({ content, variant, onDetailClick, onMediaClick, maxMediaDisplayed, }: EditorPreviewProps) => import("react/jsx-runtime").JSX.Element;
14
- export default EditorPreview;
@@ -1,56 +0,0 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- import { useState, useEffect } from "react";
3
- import clsx from "clsx";
4
- import { getThumbnail } from "@edifice.io/utilities";
5
- import { useTranslation } from "react-i18next";
6
- import Image from "../../../../components/Image/Image.js";
7
- const EditorPreview = ({
8
- content,
9
- variant = "outline",
10
- onDetailClick,
11
- onMediaClick,
12
- maxMediaDisplayed = 3
13
- }) => {
14
- const {
15
- t
16
- } = useTranslation(), [summaryContent, setSummaryContent] = useState(""), [medias, setMedias] = useState([]), borderClass = clsx(variant === "outline" && "border rounded-3 py-12 px-16"), hasMediaCallback = onDetailClick || onMediaClick, handleMediaClick = (e) => {
17
- onMediaClick && (e.stopPropagation(), onMediaClick());
18
- };
19
- return useEffect(() => {
20
- const contentHTML = content;
21
- if (contentHTML) {
22
- const doc = new DOMParser().parseFromString(contentHTML, "text/html"), mediaElements = Array.from(doc.querySelectorAll("img, video, iframe, audio, embed"));
23
- setMedias(mediaElements.filter((el) => el.tagName.toLowerCase() === "img").map((el) => {
24
- const image = el;
25
- return image.src ? {
26
- url: getThumbnail(image.src, 0, 300),
27
- alt: image.alt
28
- } : {
29
- url: "",
30
- alt: ""
31
- };
32
- })), mediaElements.forEach((el) => {
33
- var _a;
34
- return (_a = el.parentNode) == null ? void 0 : _a.removeChild(el);
35
- }), setSummaryContent(doc.body.textContent || "");
36
- }
37
- }, [content]), /* @__PURE__ */ jsxs("div", { className: borderClass, "data-testid": "editor-preview", onClick: onDetailClick, tabIndex: onDetailClick ? -1 : void 0, role: onDetailClick ? "button" : void 0, children: [
38
- /* @__PURE__ */ jsx("div", { className: "flex-fill text-truncate text-truncate-2 post-preview-content overflow-hidden", style: {
39
- overflowWrap: "anywhere"
40
- }, children: summaryContent }),
41
- /* @__PURE__ */ jsx("div", { onClick: handleMediaClick, tabIndex: hasMediaCallback ? -1 : void 0, role: hasMediaCallback ? "button" : void 0, className: "d-flex align-items-center justify-content-center gap-24 px-32 pt-16", children: medias.slice(0, maxMediaDisplayed).map((media, index) => /* @__PURE__ */ jsxs("div", { className: clsx("position-relative col-12 col-md-4 ", {
42
- "d-none d-md-block": index >= 1
43
- }), children: [
44
- /* @__PURE__ */ jsx(Image, { alt: media.alt, objectFit: "cover", ratio: "16", className: "rounded", loading: "lazy", src: media.url, sizes: "" }),
45
- (index === 0 || index === 2) && medias.length - (index + 1) > 0 && /* @__PURE__ */ jsx("div", { className: clsx("position-absolute top-0 bottom-0 start-0 end-0 d-flex justify-content-center align-items-center rounded text-light bg-dark bg-opacity-50", {
46
- "d-flex d-md-none": index === 0,
47
- "d-none d-md-flex": index === 2
48
- }), children: t("editor.preview.moreMedia", {
49
- mediaCount: medias.length - (index + 1)
50
- }) })
51
- ] }, media.url)) })
52
- ] });
53
- };
54
- export {
55
- EditorPreview as default
56
- };
@@ -1,8 +0,0 @@
1
- /**
2
- * Editor component properties
3
- */
4
- export interface EditorPreviewSkeletonProps {
5
- variant?: 'outline' | 'ghost';
6
- }
7
- declare const EditorPreview: ({ variant }: EditorPreviewSkeletonProps) => import("react/jsx-runtime").JSX.Element;
8
- export default EditorPreview;
@@ -1,24 +0,0 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
2
- import clsx from "clsx";
3
- import TextSkeleton from "../../../../components/Skeleton/TextSkeleton.js";
4
- import Image from "../../../../components/Image/Image.js";
5
- const EditorPreview = ({
6
- variant = "outline"
7
- }) => {
8
- const borderClass = clsx(variant === "outline" && "border rounded-3"), contentClass = clsx("mt-16", variant === "outline" && "my-12 mx-16");
9
- return /* @__PURE__ */ jsx("div", { className: borderClass, "data-testid": "editor-preview", children: /* @__PURE__ */ jsxs("div", { className: contentClass, children: [
10
- /* @__PURE__ */ jsx(TextSkeleton, { className: "col-12" }),
11
- /* @__PURE__ */ jsx(TextSkeleton, { className: "col-12" }),
12
- /* @__PURE__ */ jsxs("div", { className: "d-flex justify-content-center gap-24 px-32 pt-16", children: [
13
- /* @__PURE__ */ jsx("div", { style: {
14
- maxWidth: "150px"
15
- }, className: "col-12 col-md-4", children: /* @__PURE__ */ jsx(Image, { alt: "", objectFit: "cover", ratio: "16", className: "rounded placeholder", src: "", sizes: "" }) }),
16
- /* @__PURE__ */ jsx("div", { style: {
17
- maxWidth: "150px"
18
- }, className: "col-12 col-md-4", children: /* @__PURE__ */ jsx(Image, { alt: "", objectFit: "cover", ratio: "16", className: "rounded placeholder", src: "", sizes: "" }) })
19
- ] })
20
- ] }) });
21
- };
22
- export {
23
- EditorPreview as default
24
- };
@@ -1,7 +0,0 @@
1
- import { SVGProps } from 'react';
2
- interface SVGRProps {
3
- title?: string;
4
- titleId?: string;
5
- }
6
- declare const SvgIconClockAlert: ({ title, titleId, ...props }: SVGProps<SVGSVGElement> & SVGRProps) => import("react/jsx-runtime").JSX.Element;
7
- export default SvgIconClockAlert;
@@ -1,17 +0,0 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- const SvgIconClockAlert = ({
3
- title,
4
- titleId,
5
- ...props
6
- }) => /* @__PURE__ */ jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", fill: "none", viewBox: "0 0 24 24", "aria-hidden": "true", "aria-labelledby": titleId, ...props, children: [
7
- title ? /* @__PURE__ */ jsx("title", { id: titleId, children: title }) : null,
8
- /* @__PURE__ */ jsxs("g", { fill: "currentColor", clipPath: "url(#icon-clock-alert_svg__a)", children: [
9
- /* @__PURE__ */ jsx("path", { d: "M0 10.075C0 4.51 4.51 0 10.075 0c4.573 0 8.431 3.046 9.663 7.217a1 1 0 0 1-1.918.566A8.075 8.075 0 1 0 7.783 17.82a1 1 0 0 1-.566 1.918C3.046 18.506 0 14.648 0 10.075" }),
10
- /* @__PURE__ */ jsx("path", { d: "M10.075 4.108a1 1 0 0 1 1 1v5.43a1 1 0 0 1-.357.767L7.83 13.728a1 1 0 1 1-1.286-1.532l2.53-2.123V5.108a1 1 0 0 1 1-1M17 13.3a1 1 0 0 1 1 1v2.2a1 1 0 1 1-2 0v-2.2a1 1 0 0 1 1-1M17 18.4a1 1 0 1 0 0 2h.006a1 1 0 1 0 0-2z" }),
11
- /* @__PURE__ */ jsx("path", { fillRule: "evenodd", d: "M17 10a7 7 0 1 0 0 14 7 7 0 0 0 0-14m-5 7a5 5 0 1 1 10 0 5 5 0 0 1-10 0", clipRule: "evenodd" })
12
- ] }),
13
- /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("clipPath", { id: "icon-clock-alert_svg__a", children: /* @__PURE__ */ jsx("path", { fill: "#fff", d: "M0 0h24v24H0z" }) }) })
14
- ] });
15
- export {
16
- SvgIconClockAlert as default
17
- };