@edifice.io/react 2.5.16-develop-b2school.20260409101922 → 2.5.16-develop-integration.20260410093123

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.
@@ -81,7 +81,7 @@ declare const Dropdown: import('react').ForwardRefExoticComponent<DropdownProps
81
81
  Trigger: import('react').ForwardRefExoticComponent<Omit<import('./DropdownTrigger').DropdownTriggerProps, "ref"> & import('react').RefAttributes<HTMLButtonElement>>;
82
82
  Menu: import('react').ForwardRefExoticComponent<Omit<import('./DropdownMenu').DropdownMenuProps, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
83
83
  Item: {
84
- ({ type, icon, onClick, children, className, minWidth, disabled, ...restProps }: import('./DropdownItem').DropdownItemProps): import("react/jsx-runtime").JSX.Element;
84
+ ({ type, icon, onClick, children, className, minWidth, disabled, searchValue, ...restProps }: import('./DropdownItem').DropdownItemProps): import("react/jsx-runtime").JSX.Element;
85
85
  displayName: string;
86
86
  };
87
87
  Separator: {
@@ -89,7 +89,7 @@ declare const Dropdown: import('react').ForwardRefExoticComponent<DropdownProps
89
89
  displayName: string;
90
90
  };
91
91
  CheckboxItem: {
92
- ({ children, value, model, onChange, }: DropdownCheckboxItem): import("react/jsx-runtime").JSX.Element;
92
+ ({ children, value, model, onChange, searchValue, }: DropdownCheckboxItem): import("react/jsx-runtime").JSX.Element;
93
93
  displayName: string;
94
94
  };
95
95
  RadioItem: {
@@ -97,5 +97,9 @@ declare const Dropdown: import('react').ForwardRefExoticComponent<DropdownProps
97
97
  displayName: string;
98
98
  };
99
99
  MenuGroup: import('react').ForwardRefExoticComponent<import('./DropdownMenuGroup').DropdownMenuGroupProps & import('react').RefAttributes<HTMLDivElement>>;
100
+ SearchInput: {
101
+ ({ placeholder, noResultsLabel, onSearch, }: import('./DropdownSearchInput').DropdownSearchInputProps): import("react/jsx-runtime").JSX.Element;
102
+ displayName: string;
103
+ };
100
104
  };
101
105
  export default Dropdown;
@@ -1,5 +1,5 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import { forwardRef, useImperativeHandle, useMemo, useEffect } from "react";
2
+ import { forwardRef, useState, useRef, useCallback, useImperativeHandle, useMemo, useEffect } from "react";
3
3
  import clsx from "clsx";
4
4
  import useDropdown from "../../hooks/useDropdown/useDropdown.js";
5
5
  import DropdownCheckboxItem from "./DropdownCheckboxItem.js";
@@ -8,6 +8,7 @@ import DropdownItem from "./DropdownItem.js";
8
8
  import DropdownMenu from "./DropdownMenu.js";
9
9
  import DropdownMenuGroup from "./DropdownMenuGroup.js";
10
10
  import DropdownRadioItem from "./DropdownRadioItem.js";
11
+ import DropdownSearchInput from "./DropdownSearchInput.js";
11
12
  import DropdownSeparator from "./DropdownSeparator.js";
12
13
  import DropdownTrigger from "./DropdownTrigger.js";
13
14
  import useClickOutside from "../../hooks/useClickOutside/useClickOutside.js";
@@ -24,7 +25,15 @@ const Root = /* @__PURE__ */ forwardRef(({
24
25
  openOnSpace = !0,
25
26
  focusOnMouseEnter = !0
26
27
  }, refDropdown) => {
27
- const {
28
+ const [searchQuery, setSearchQuery] = useState(""), [hasMatches, setHasMatches] = useState(!0), matchMapRef = useRef(/* @__PURE__ */ new Map()), reportMatch = useCallback((id, isMatch) => {
29
+ matchMapRef.current.set(id, isMatch);
30
+ const next = [...matchMapRef.current.values()].some(Boolean);
31
+ setHasMatches((prev) => prev !== next ? next : prev);
32
+ }, []), unregisterMatch = useCallback((id) => {
33
+ matchMapRef.current.delete(id);
34
+ const next = matchMapRef.current.size === 0 || [...matchMapRef.current.values()].some(Boolean);
35
+ setHasMatches((prev) => prev !== next ? next : prev);
36
+ }, []), {
28
37
  visible,
29
38
  isFocused,
30
39
  triggerProps,
@@ -58,14 +67,19 @@ const Root = /* @__PURE__ */ forwardRef(({
58
67
  block,
59
68
  setVisible,
60
69
  openDropdown,
61
- closeDropdown
62
- }), [visible, isFocused, triggerProps, menuProps, itemProps, itemRefs, block, setVisible, openDropdown, closeDropdown]), dropdown = clsx("dropdown", {
70
+ closeDropdown,
71
+ searchQuery,
72
+ setSearchQuery,
73
+ hasMatches,
74
+ reportMatch,
75
+ unregisterMatch
76
+ }), [visible, isFocused, triggerProps, menuProps, itemProps, itemRefs, block, setVisible, openDropdown, closeDropdown, searchQuery, hasMatches, reportMatch, unregisterMatch]), dropdown = clsx("dropdown", {
63
77
  "w-100": block,
64
78
  "dropdown-nowrap": noWrap,
65
79
  overflow
66
80
  });
67
81
  return useEffect(() => {
68
- onToggle == null || onToggle(visible);
82
+ onToggle == null || onToggle(visible), visible || setSearchQuery("");
69
83
  }, [visible]), /* @__PURE__ */ jsx(DropdownContext.Provider, { value, children: /* @__PURE__ */ jsx("div", { ref, className: dropdown, children: typeof children == "function" ? children(triggerProps, itemRefs, setVisible) : children }) });
70
84
  }), Dropdown = /* @__PURE__ */ Object.assign(Root, {
71
85
  Trigger: DropdownTrigger,
@@ -74,7 +88,8 @@ const Root = /* @__PURE__ */ forwardRef(({
74
88
  Separator: DropdownSeparator,
75
89
  CheckboxItem: DropdownCheckboxItem,
76
90
  RadioItem: DropdownRadioItem,
77
- MenuGroup: DropdownMenuGroup
91
+ MenuGroup: DropdownMenuGroup,
92
+ SearchInput: DropdownSearchInput
78
93
  });
79
94
  export {
80
95
  Dropdown as default
@@ -16,9 +16,14 @@ interface DropdownCheckboxItem {
16
16
  * OnKeyDown handler
17
17
  */
18
18
  onChange: (value: string | number) => void;
19
+ /**
20
+ * Value used to filter this item when `Dropdown.SearchInput` is present.
21
+ * If provided, the item is hidden when the search query doesn't match.
22
+ */
23
+ searchValue?: string;
19
24
  }
20
25
  declare const DropdownCheckboxItem: {
21
- ({ children, value, model, onChange, }: DropdownCheckboxItem): import("react/jsx-runtime").JSX.Element;
26
+ ({ children, value, model, onChange, searchValue, }: DropdownCheckboxItem): import("react/jsx-runtime").JSX.Element;
22
27
  displayName: string;
23
28
  };
24
29
  export default DropdownCheckboxItem;
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { useId } from "react";
2
+ import { useId, useLayoutEffect } from "react";
3
3
  import clsx from "clsx";
4
4
  import { useDropdownContext } from "./DropdownContext.js";
5
5
  import Checkbox from "../Checkbox/Checkbox.js";
@@ -7,16 +7,20 @@ const DropdownCheckboxItem = ({
7
7
  children,
8
8
  value,
9
9
  model,
10
- onChange
10
+ onChange,
11
+ searchValue
11
12
  }) => {
12
13
  const {
13
14
  itemProps,
14
15
  itemRefs,
15
- isFocused
16
- } = useDropdownContext(), {
16
+ isFocused,
17
+ searchQuery,
18
+ reportMatch,
19
+ unregisterMatch
20
+ } = useDropdownContext(), id = useId(), {
17
21
  onMenuItemKeyDown,
18
22
  onMenuItemMouseEnter
19
- } = itemProps, id = useId(), checked = model.includes(value), checkboxProps = {
23
+ } = itemProps, isFiltered = searchValue !== void 0 && searchQuery !== "" && !searchValue.toLowerCase().includes(searchQuery.toLowerCase()), checked = model.includes(value), checkboxProps = {
20
24
  value,
21
25
  model,
22
26
  checked,
@@ -24,7 +28,15 @@ const DropdownCheckboxItem = ({
24
28
  }, dropdownCheckboxItem = clsx("dropdown-item c-pointer", {
25
29
  focus: isFocused === id
26
30
  });
27
- return /* @__PURE__ */ jsx("div", { id, ref: (el) => itemRefs.current[id] = el, role: "menuitemcheckbox", "aria-checked": checked, onMouseUp: () => onChange(value), onKeyDown: (event) => onMenuItemKeyDown(event, () => onChange(value)), onMouseEnter: onMenuItemMouseEnter, tabIndex: checked ? 0 : -1, className: dropdownCheckboxItem, children: /* @__PURE__ */ jsxs("div", { className: "d-flex gap-8 align-items-center justify-content-between position-relative", children: [
31
+ return useLayoutEffect(() => {
32
+ if (searchValue !== void 0)
33
+ return reportMatch(id, !isFiltered), () => unregisterMatch(id);
34
+ }, [id, isFiltered, searchValue, reportMatch, unregisterMatch]), isFiltered ? /* @__PURE__ */ jsx("div", { "aria-hidden": "true", style: {
35
+ visibility: "hidden",
36
+ height: 0,
37
+ overflow: "hidden",
38
+ pointerEvents: "none"
39
+ }, children: /* @__PURE__ */ jsx("div", { className: "dropdown-item", children: /* @__PURE__ */ jsx("div", { className: "d-flex gap-8 align-items-center justify-content-between position-relative", children }) }) }) : /* @__PURE__ */ jsx("div", { id, ref: (el) => itemRefs.current[id] = el, role: "menuitemcheckbox", "aria-checked": checked, onMouseUp: () => onChange(value), onKeyDown: (event) => onMenuItemKeyDown(event, () => onChange(value)), onMouseEnter: onMenuItemMouseEnter, tabIndex: checked ? 0 : -1, className: dropdownCheckboxItem, children: /* @__PURE__ */ jsxs("div", { className: "d-flex gap-8 align-items-center justify-content-between position-relative", children: [
28
40
  children,
29
41
  /* @__PURE__ */ jsx(Checkbox, { ...checkboxProps })
30
42
  ] }) });
@@ -2,6 +2,11 @@ import { UseDropdownProps } from '../../hooks/useDropdown/useDropdown';
2
2
  type OmittedProps = Omit<UseDropdownProps, 'triggerRef' | 'menuRef'>;
3
3
  export interface DropdownContextProps extends OmittedProps {
4
4
  block?: boolean;
5
+ searchQuery: string;
6
+ setSearchQuery: (query: string) => void;
7
+ hasMatches: boolean;
8
+ reportMatch: (id: string, isMatch: boolean) => void;
9
+ unregisterMatch: (id: string) => void;
5
10
  }
6
11
  export declare const DropdownContext: import('react').Context<DropdownContextProps | null>;
7
12
  export declare const useDropdownContext: () => DropdownContextProps;
@@ -29,9 +29,14 @@ export interface DropdownItemProps {
29
29
  * Disabled status
30
30
  */
31
31
  disabled?: boolean;
32
+ /**
33
+ * Value used to filter this item when `Dropdown.SearchInput` is present.
34
+ * If provided, the item is hidden when the search query doesn't match.
35
+ */
36
+ searchValue?: string;
32
37
  }
33
38
  declare const DropdownItem: {
34
- ({ type, icon, onClick, children, className, minWidth, disabled, ...restProps }: DropdownItemProps): import("react/jsx-runtime").JSX.Element;
39
+ ({ type, icon, onClick, children, className, minWidth, disabled, searchValue, ...restProps }: DropdownItemProps): import("react/jsx-runtime").JSX.Element;
35
40
  displayName: string;
36
41
  };
37
42
  export default DropdownItem;
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { useId } from "react";
2
+ import { useId, useLayoutEffect } from "react";
3
3
  import clsx from "clsx";
4
4
  import { useDropdownContext } from "./DropdownContext.js";
5
5
  const DropdownItem = ({
@@ -10,19 +10,28 @@ const DropdownItem = ({
10
10
  className,
11
11
  minWidth,
12
12
  disabled,
13
+ searchValue,
13
14
  ...restProps
14
15
  }) => {
15
16
  const {
16
17
  itemProps,
17
18
  itemRefs,
18
- isFocused
19
- } = useDropdownContext(), {
19
+ isFocused,
20
+ searchQuery,
21
+ reportMatch,
22
+ unregisterMatch
23
+ } = useDropdownContext(), id = useId(), {
20
24
  onMenuItemKeyDown,
21
25
  onMenuItemMouseEnter,
22
26
  onMenuItemClick
23
- } = itemProps, handleOnClick = (event) => {
27
+ } = itemProps, isFiltered = searchValue !== void 0 && searchQuery !== "" && !searchValue.toLowerCase().includes(searchQuery.toLowerCase());
28
+ useLayoutEffect(() => {
29
+ if (searchValue !== void 0)
30
+ return reportMatch(id, !isFiltered), () => unregisterMatch(id);
31
+ }, [id, isFiltered, searchValue, reportMatch, unregisterMatch]);
32
+ const handleOnClick = (event) => {
24
33
  disabled || (onClick == null || onClick(event), type === "action" && (onMenuItemClick(), event.stopPropagation()));
25
- }, id = useId(), dropdownItem = clsx("dropdown-item", {
34
+ }, dropdownItem = clsx("dropdown-item", {
26
35
  focus: isFocused === id
27
36
  }, {
28
37
  "text-gray-600": disabled
@@ -31,7 +40,15 @@ const DropdownItem = ({
31
40
  minWidth: `${minWidth}px`
32
41
  }
33
42
  };
34
- return /* @__PURE__ */ jsx("div", { id, role: "menuitem", style, ref: (el) => itemRefs.current[id] = el, tabIndex: isFocused === id ? 0 : -1, className: dropdownItem, "aria-current": isFocused === id, onClick: handleOnClick, onMouseEnter: onMenuItemMouseEnter, onKeyDown: (event) => onMenuItemKeyDown(event, onClick), ...restProps, children: /* @__PURE__ */ jsxs("div", { className: "d-flex gap-8 align-items-center", children: [
43
+ return isFiltered ? /* @__PURE__ */ jsx("div", { "aria-hidden": "true", style: {
44
+ visibility: "hidden",
45
+ height: 0,
46
+ overflow: "hidden",
47
+ pointerEvents: "none"
48
+ }, children: /* @__PURE__ */ jsx("div", { className: "dropdown-item", children: /* @__PURE__ */ jsxs("div", { className: "d-flex gap-8 align-items-center", children: [
49
+ icon,
50
+ children
51
+ ] }) }) }) : /* @__PURE__ */ jsx("div", { id, role: "menuitem", style, ref: (el) => itemRefs.current[id] = el, tabIndex: isFocused === id ? 0 : -1, className: dropdownItem, "aria-current": isFocused === id, onClick: handleOnClick, onMouseEnter: onMenuItemMouseEnter, onKeyDown: (event) => onMenuItemKeyDown(event, onClick), ...restProps, children: /* @__PURE__ */ jsxs("div", { className: "d-flex gap-8 align-items-center", children: [
35
52
  icon,
36
53
  children
37
54
  ] }) });
@@ -0,0 +1,20 @@
1
+ export interface DropdownSearchInputProps {
2
+ /**
3
+ * Placeholder text for the search input
4
+ */
5
+ placeholder?: string;
6
+ /**
7
+ * Label shown when no items match the search query
8
+ */
9
+ noResultsLabel?: string;
10
+ /**
11
+ * Called whenever the search query changes.
12
+ * Useful to track the current query outside the Dropdown context.
13
+ */
14
+ onSearch?: (query: string) => void;
15
+ }
16
+ declare const DropdownSearchInput: {
17
+ ({ placeholder, noResultsLabel, onSearch, }: DropdownSearchInputProps): import("react/jsx-runtime").JSX.Element;
18
+ displayName: string;
19
+ };
20
+ export default DropdownSearchInput;
@@ -0,0 +1,25 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useDropdownContext } from "./DropdownContext.js";
3
+ import SearchBar from "../SearchBar/SearchBar.js";
4
+ const DropdownSearchInput = ({
5
+ placeholder = "Rechercher...",
6
+ noResultsLabel = "Pas de résultat",
7
+ onSearch
8
+ }) => {
9
+ const {
10
+ searchQuery,
11
+ setSearchQuery,
12
+ hasMatches
13
+ } = useDropdownContext();
14
+ return /* @__PURE__ */ jsxs("div", { className: "px-8 pb-8", children: [
15
+ /* @__PURE__ */ jsx(SearchBar, { isVariant: !0, clearable: !0, size: "md", placeholder, value: searchQuery, onChange: (e) => {
16
+ setSearchQuery(e.target.value), onSearch == null || onSearch(e.target.value);
17
+ }, onKeyDown: (e) => {
18
+ ["ArrowUp", "ArrowDown", "Enter", " "].includes(e.key) && e.stopPropagation();
19
+ } }),
20
+ searchQuery && !hasMatches && /* @__PURE__ */ jsx("p", { className: "body-2 text-gray-700 text-center mt-8 mb-0", children: noResultsLabel })
21
+ ] });
22
+ };
23
+ export {
24
+ DropdownSearchInput as default
25
+ };
@@ -0,0 +1,17 @@
1
+ export interface PaginationProps {
2
+ /** Current page (1-based) */
3
+ current: number;
4
+ /** Total number of items */
5
+ total: number;
6
+ /** Number of items per page */
7
+ pageSize: number;
8
+ /** Called when the page changes */
9
+ onChange: (page: number) => void;
10
+ /** Optional class for styling purpose */
11
+ className?: string;
12
+ }
13
+ /**
14
+ * Pagination component for navigating through pages of results.
15
+ * Wraps antd Pagination with a simplified, stable API.
16
+ */
17
+ export declare function Pagination({ current, total, pageSize, onChange, className, }: PaginationProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,14 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { Pagination as Pagination$1 } from "antd";
3
+ function Pagination({
4
+ current,
5
+ total,
6
+ pageSize,
7
+ onChange,
8
+ className
9
+ }) {
10
+ return /* @__PURE__ */ jsx(Pagination$1, { align: "center", showSizeChanger: !1, current, total, pageSize, onChange, className });
11
+ }
12
+ export {
13
+ Pagination
14
+ };
@@ -0,0 +1 @@
1
+ export * from './Pagination';
@@ -33,6 +33,7 @@ export * from './Logo';
33
33
  export * from './MediaViewer';
34
34
  export * from './Menu';
35
35
  export * from './Modal';
36
+ export * from './Pagination';
36
37
  export * from './Popover';
37
38
  export * from './PreventPropagation';
38
39
  export * from './PromotionCard';
@@ -47,17 +47,16 @@ const useDropdown = (placement, extraTriggerKeyDownHandler, isTriggerHovered = !
47
47
  }
48
48
  }
49
49
  }, [activeIndex]);
50
- const nextItem = () => {
51
- const itemCount = Object.values(itemRefs.current).length;
52
- setActiveIndex((prevIndex) => (prevIndex + 1) % itemCount);
50
+ const visibleItemCount = () => Object.values(itemRefs.current).filter(Boolean).length, nextItem = () => {
51
+ const count = visibleItemCount();
52
+ setActiveIndex((prevIndex) => (prevIndex + 1) % count);
53
53
  }, previousItem = () => {
54
- const itemCount = Object.values(itemRefs.current).length;
55
- setActiveIndex((prevIndex) => (prevIndex - 1 + itemCount) % itemCount);
54
+ const count = visibleItemCount();
55
+ setActiveIndex((prevIndex) => (prevIndex - 1 + count) % count);
56
56
  }, firstItem = () => {
57
57
  setActiveIndex(0);
58
58
  }, lastItem = () => {
59
- const itemCount = Object.values(itemRefs.current).length;
60
- setActiveIndex(itemCount - 1);
59
+ setActiveIndex(visibleItemCount() - 1);
61
60
  }, openDropdown = useCallback(() => {
62
61
  setVisible(!0);
63
62
  }, []), closeDropdown = useCallback(() => {
@@ -90,7 +89,7 @@ const useDropdown = (placement, extraTriggerKeyDownHandler, isTriggerHovered = !
90
89
  extraTriggerKeyDownHandler == null || extraTriggerKeyDownHandler(event), stopEvents(flag, event);
91
90
  }, [closeDropdown, openDropdown]), onMenuItemMouseEnter = (event) => {
92
91
  if (focusOnMouseEnter) {
93
- const index = Object.values(itemRefs.current).findIndex((item) => item.id === event.currentTarget.getAttribute("id"));
92
+ const index = Object.values(itemRefs.current).filter((item) => !!item).findIndex((item) => item.id === event.currentTarget.getAttribute("id"));
94
93
  setActiveIndex(index);
95
94
  }
96
95
  }, onMenuItemKeyDown = useCallback((event, onSuccess) => {
package/dist/index.js CHANGED
@@ -126,6 +126,7 @@ import { Layout } from "./components/Layout/Layout.js";
126
126
  import { List } from "./components/List/List.js";
127
127
  import { Menu } from "./components/Menu/components/Menu.js";
128
128
  import { MockedProvider } from "./providers/MockedProvider/MockedProvider.js";
129
+ import { Pagination } from "./components/Pagination/Pagination.js";
129
130
  import { Popover, PopoverBody, PopoverFooter, PopoverHeader } from "./components/Popover/Popover.js";
130
131
  import { ResourceModal } from "./modules/modals/ResourceModal/ResourceModal.js";
131
132
  import { Tabs } from "./components/Tabs/components/Tabs.js";
@@ -210,6 +211,7 @@ export {
210
211
  MockedProvider,
211
212
  default43 as Modal,
212
213
  default44 as OnboardingModal,
214
+ Pagination,
213
215
  Popover,
214
216
  PopoverBody,
215
217
  PopoverFooter,
@@ -1,2 +1,2 @@
1
1
  export { default as OnboardingModal } from './OnboardingModal';
2
- export type { DisplayRuleCheckResult, OnboardingModalRef, OnboardingProps, } from './OnboardingModal';
2
+ export type { OnboardingModalRef } from './OnboardingModal';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edifice.io/react",
3
- "version": "2.5.16-develop-b2school.20260409101922",
3
+ "version": "2.5.16-develop-integration.20260410093123",
4
4
  "description": "Edifice React Library",
5
5
  "keywords": [
6
6
  "react",
@@ -135,9 +135,9 @@
135
135
  "swiper": "^10.1.0",
136
136
  "ua-parser-js": "^1.0.36",
137
137
  "react-pdf": "10.2.0",
138
- "@edifice.io/bootstrap": "2.5.16-develop-b2school.20260409101922",
139
- "@edifice.io/tiptap-extensions": "2.5.16-develop-b2school.20260409101922",
140
- "@edifice.io/utilities": "2.5.16-develop-b2school.20260409101922"
138
+ "@edifice.io/bootstrap": "2.5.16-develop-integration.20260410093123",
139
+ "@edifice.io/utilities": "2.5.16-develop-integration.20260410093123",
140
+ "@edifice.io/tiptap-extensions": "2.5.16-develop-integration.20260410093123"
141
141
  },
142
142
  "devDependencies": {
143
143
  "@babel/plugin-transform-react-pure-annotations": "^7.23.3",
@@ -168,8 +168,8 @@
168
168
  "vite": "^5.4.11",
169
169
  "vite-plugin-dts": "^4.1.0",
170
170
  "vite-tsconfig-paths": "^5.0.1",
171
- "@edifice.io/client": "2.5.16-develop-b2school.20260409101922",
172
- "@edifice.io/config": "2.5.16-develop-b2school.20260409101922"
171
+ "@edifice.io/client": "2.5.16-develop-integration.20260410093123",
172
+ "@edifice.io/config": "2.5.16-develop-integration.20260410093123"
173
173
  },
174
174
  "peerDependencies": {
175
175
  "@react-spring/web": "^9.7.5",