@wix/editor-react-components 1.2322.0 → 1.2324.0
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.
- package/dist/site/components/AnimatedIcon/types.d.ts +1 -1
- package/dist/site/components/Menu/Menu.types.d.ts +33 -1
- package/dist/site/components/Menu/component.js +159 -7
- package/dist/site/components/Menu/components/MenuContent/MenuItem/useIconAnimation.d.ts +17 -0
- package/dist/site/components/Menu/constants.d.ts +18 -0
- package/dist/site/components/Menu/css.css +34 -21
- package/dist/site/components/Menu/manifest.js +68 -4
- package/dist/site/components/Menu/manifestConfigs/animatedIconConfig.d.ts +2 -0
- package/dist/site/components/Menu/manifestConfigs/itemConfig.d.ts +4 -1
- package/dist/site/components/Menu/manifestConfigs/overrides/horizontalHugNavbarConfig.d.ts +2 -0
- package/dist/site/components/Menu/manifestConfigs/overrides/horizontalScrollNavbarConfig.d.ts +2 -0
- package/dist/site/components/Menu/manifestConfigs/overrides/verticalNavbarConfig.d.ts +3 -1
- package/dist/site/components/chunks/constants26.js +23 -4
- package/package.json +2 -2
|
@@ -12,7 +12,7 @@ export interface AnimatedSvgProps {
|
|
|
12
12
|
}
|
|
13
13
|
export interface AnimatedIconBuilderProps {
|
|
14
14
|
/** DOM `id` on the root element. */
|
|
15
|
-
id
|
|
15
|
+
id?: string;
|
|
16
16
|
/** Hover animation length in seconds. Rewritten into every `<animate>` tag's `dur` attribute on render. Default `0.2`. */
|
|
17
17
|
duration?: number;
|
|
18
18
|
/** The active SVG (start ↔ end morph). At runtime only `svgContent` is read; the other `VectorArt` fields are passed through. */
|
|
@@ -2,8 +2,9 @@ import { default as React, PropsWithChildren } from 'react';
|
|
|
2
2
|
import { MenuOrientationType, MenuAnimationNameType, DropdownAnimationNameType, Translations } from './constants';
|
|
3
3
|
import { MenuItemProps as MenuItemData, ActiveAnchor } from '../../../types/vendored/editor-elements-definitions';
|
|
4
4
|
import { IMenuItemSDKAction, IMenuItemsPropsSDKActions } from '../../../common/sdk/props-factories/menuItemsPropsSDKFactory';
|
|
5
|
-
import { A11y, Direction } from '@wix/editor-react-types';
|
|
5
|
+
import { A11y, Direction, VectorArt } from '@wix/editor-react-types';
|
|
6
6
|
import { ButtonProps } from '../Button/Button';
|
|
7
|
+
import { AnimatedSvgRef } from '../AnimatedIcon/types';
|
|
7
8
|
import { SdkFunctionMouseHoverProps } from '../../../utils/functions/sdkFunctionCallbackProps';
|
|
8
9
|
import { AnimationState } from './components/MenuContent/MenuItem/useAnimationState';
|
|
9
10
|
export type MenuItemType = MenuItemData & {
|
|
@@ -11,6 +12,34 @@ export type MenuItemType = MenuItemData & {
|
|
|
11
12
|
isContainerItem?: boolean;
|
|
12
13
|
forceOpen?: boolean;
|
|
13
14
|
};
|
|
15
|
+
export type BuilderAnimationIconProps = {
|
|
16
|
+
className?: string;
|
|
17
|
+
'data-testid'?: string;
|
|
18
|
+
};
|
|
19
|
+
export type BuilderAnimationIconComponent = React.ForwardRefExoticComponent<BuilderAnimationIconProps & React.RefAttributes<AnimatedSvgRef>>;
|
|
20
|
+
export interface AnimatedIconElementProps {
|
|
21
|
+
svg?: VectorArt;
|
|
22
|
+
duration?: number;
|
|
23
|
+
svgLastAnimatedSelected?: VectorArt;
|
|
24
|
+
}
|
|
25
|
+
type NavbarElementProps = {
|
|
26
|
+
item?: {
|
|
27
|
+
className?: string;
|
|
28
|
+
elementProps?: {
|
|
29
|
+
animatedIcon?: AnimatedIconElementProps;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
dropdown?: {
|
|
33
|
+
elementProps?: {
|
|
34
|
+
item?: {
|
|
35
|
+
className?: string;
|
|
36
|
+
};
|
|
37
|
+
subItem?: {
|
|
38
|
+
className?: string;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
};
|
|
14
43
|
export type HamburgerMenuProps = {
|
|
15
44
|
isOpen?: boolean;
|
|
16
45
|
content?: React.ReactNode;
|
|
@@ -41,6 +70,7 @@ export type MenuProps = SdkFunctionMouseHoverProps & {
|
|
|
41
70
|
direction?: Direction;
|
|
42
71
|
submenuDirection?: Direction;
|
|
43
72
|
a11y?: A11y;
|
|
73
|
+
elementProps?: NavbarElementProps;
|
|
44
74
|
};
|
|
45
75
|
hamburgerMenu?: HamburgerMenuProps;
|
|
46
76
|
hamburgerOpenButton?: ButtonProps;
|
|
@@ -111,6 +141,7 @@ export type IMenuContentProps = Partial<IMenuItemsPropsSDKActions> & {
|
|
|
111
141
|
direction?: Direction;
|
|
112
142
|
submenuDirection?: Direction;
|
|
113
143
|
submenuToggleIdPrefix?: string;
|
|
144
|
+
BuilderAnimationIcon?: BuilderAnimationIconComponent;
|
|
114
145
|
};
|
|
115
146
|
export type IMenuItemProps = Partial<IMenuItemsPropsSDKActions> & {
|
|
116
147
|
item: PropsWithChildren<MenuItemData & {
|
|
@@ -123,6 +154,7 @@ export type IMenuItemProps = Partial<IMenuItemsPropsSDKActions> & {
|
|
|
123
154
|
getAnimationPackage: () => MenuAnimationNameType;
|
|
124
155
|
submenuDirection?: Direction;
|
|
125
156
|
submenuToggleIdPrefix?: string;
|
|
157
|
+
BuilderAnimationIcon?: BuilderAnimationIconComponent;
|
|
126
158
|
} & Translations;
|
|
127
159
|
export type ScrollControlsProps = {
|
|
128
160
|
isScrollForwardButtonShown: boolean;
|
|
@@ -5,7 +5,7 @@ import { U as UrlDefinition } from "../chunks/index11.js";
|
|
|
5
5
|
import { d as defineService } from "../chunks/index7.js";
|
|
6
6
|
import { T as TranslationsDefinition } from "../chunks/index5.js";
|
|
7
7
|
import { M as MenuAnimationName, d as defaultTranslations, a as MenuOrientation, A as AnimationPhase, V as VerticalDropdownDisplay, D as DropdownAnimationName, H as HamburgerMenuAnimationName, b as MenuParts, s as selectors, u as useAnimationState, c as ARIA_LABEL_NAMESPACE, t as translationsKeys } from "../chunks/constants26.js";
|
|
8
|
-
import React__default, { createContext, useContext, useRef, useCallback, useMemo, useState, useEffect, useLayoutEffect } from "react";
|
|
8
|
+
import React__default, { createContext, useContext, useRef, useCallback, useMemo, useState, useEffect, useLayoutEffect, forwardRef } from "react";
|
|
9
9
|
import { p as presetWrapperStyles } from "../chunks/presetWrapper.module.js";
|
|
10
10
|
import { g as getItemDepthSelector, r as rootItemDepthLevel, s as subItemDepthLevel, a as subSubItemDepthLevel } from "../chunks/utils2.js";
|
|
11
11
|
import { d as debounce } from "../chunks/performanceUtils.js";
|
|
@@ -15,6 +15,7 @@ import { i as isEmptyObject, a as getDataAttributes } from "../chunks/dataUtils.
|
|
|
15
15
|
import { u as useResizeObserver } from "../chunks/useResizeObserver.js";
|
|
16
16
|
import { d as directionStyles } from "../chunks/direction.module.js";
|
|
17
17
|
import { E as EnvironmentDefinition } from "../chunks/index2.js";
|
|
18
|
+
import AnimatedIconWithReducedMotion from "../AnimatedIcon/component.js";
|
|
18
19
|
import { B as Button } from "../chunks/Button2.js";
|
|
19
20
|
import { f as convertA11yKeysToHtmlFormat } from "../chunks/a11y.js";
|
|
20
21
|
const AnchorsDefinition = defineService("@wix/viewer-service-anchors");
|
|
@@ -379,6 +380,7 @@ const itemWrapper = "itemWrapper__sn71X";
|
|
|
379
380
|
const labelContainer = "labelContainer__E4y-p";
|
|
380
381
|
const label = "label__BBchK";
|
|
381
382
|
const dropdownToggleButton = "dropdownToggleButton__nisoC";
|
|
383
|
+
const labelWrapper = "labelWrapper__u5Jgh";
|
|
382
384
|
const horizontalDropdown = "horizontalDropdown__TETsA";
|
|
383
385
|
const coverAllSpace = "coverAllSpace__Iwj6W";
|
|
384
386
|
const srOnly = "srOnly__AGv2l";
|
|
@@ -398,6 +400,7 @@ const classes$6 = {
|
|
|
398
400
|
labelContainer,
|
|
399
401
|
label,
|
|
400
402
|
dropdownToggleButton,
|
|
403
|
+
labelWrapper,
|
|
401
404
|
horizontalDropdown,
|
|
402
405
|
coverAllSpace,
|
|
403
406
|
srOnly,
|
|
@@ -766,6 +769,103 @@ const MenuItemDropdownIcon = ({
|
|
|
766
769
|
button
|
|
767
770
|
] }) : button;
|
|
768
771
|
};
|
|
772
|
+
const SELECTION_ANIMATION_SETTLE_DELAY_MS = 0;
|
|
773
|
+
const useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
|
|
774
|
+
function useIconAnimation({
|
|
775
|
+
BuilderAnimationIcon,
|
|
776
|
+
isCurrentPage,
|
|
777
|
+
isOpen,
|
|
778
|
+
onMouseEnter,
|
|
779
|
+
onMouseLeave
|
|
780
|
+
}) {
|
|
781
|
+
const iconAnimatedRef = useRef(null);
|
|
782
|
+
const isAnimatedForwardRef = useRef(null);
|
|
783
|
+
const prevIsImmediateRef = useRef(null);
|
|
784
|
+
const prevIsSelectedRef = useRef(null);
|
|
785
|
+
const pendingTimeoutRef = useRef(null);
|
|
786
|
+
const [isHovered, setIsHovered] = useState(false);
|
|
787
|
+
const onMouseEnterRef = useRef(onMouseEnter);
|
|
788
|
+
onMouseEnterRef.current = onMouseEnter;
|
|
789
|
+
const onMouseLeaveRef = useRef(onMouseLeave);
|
|
790
|
+
onMouseLeaveRef.current = onMouseLeave;
|
|
791
|
+
const cancelPending = useCallback(() => {
|
|
792
|
+
if (pendingTimeoutRef.current !== null) {
|
|
793
|
+
clearTimeout(pendingTimeoutRef.current);
|
|
794
|
+
pendingTimeoutRef.current = null;
|
|
795
|
+
}
|
|
796
|
+
}, []);
|
|
797
|
+
useIsomorphicLayoutEffect(() => {
|
|
798
|
+
var _a;
|
|
799
|
+
if (!BuilderAnimationIcon) {
|
|
800
|
+
cancelPending();
|
|
801
|
+
isAnimatedForwardRef.current = null;
|
|
802
|
+
prevIsImmediateRef.current = null;
|
|
803
|
+
prevIsSelectedRef.current = null;
|
|
804
|
+
return cancelPending;
|
|
805
|
+
}
|
|
806
|
+
const applyAnimation = (forward) => {
|
|
807
|
+
var _a2, _b;
|
|
808
|
+
isAnimatedForwardRef.current = forward;
|
|
809
|
+
if (forward) {
|
|
810
|
+
(_a2 = iconAnimatedRef.current) == null ? void 0 : _a2.runAnimationForward();
|
|
811
|
+
} else {
|
|
812
|
+
(_b = iconAnimatedRef.current) == null ? void 0 : _b.runAnimationBackward();
|
|
813
|
+
}
|
|
814
|
+
};
|
|
815
|
+
const isImmediate = isHovered || isOpen;
|
|
816
|
+
const isSelected = isCurrentPage;
|
|
817
|
+
const shouldBeForward = isImmediate || isSelected;
|
|
818
|
+
if (isAnimatedForwardRef.current === null) {
|
|
819
|
+
isAnimatedForwardRef.current = shouldBeForward;
|
|
820
|
+
prevIsImmediateRef.current = isImmediate;
|
|
821
|
+
prevIsSelectedRef.current = isSelected;
|
|
822
|
+
if (shouldBeForward) {
|
|
823
|
+
(_a = iconAnimatedRef.current) == null ? void 0 : _a.runAnimationForward();
|
|
824
|
+
}
|
|
825
|
+
return cancelPending;
|
|
826
|
+
}
|
|
827
|
+
if (prevIsImmediateRef.current !== isImmediate) {
|
|
828
|
+
prevIsImmediateRef.current = isImmediate;
|
|
829
|
+
cancelPending();
|
|
830
|
+
if (isAnimatedForwardRef.current !== shouldBeForward) {
|
|
831
|
+
applyAnimation(shouldBeForward);
|
|
832
|
+
}
|
|
833
|
+
return cancelPending;
|
|
834
|
+
}
|
|
835
|
+
if (prevIsSelectedRef.current === isSelected) {
|
|
836
|
+
cancelPending();
|
|
837
|
+
return cancelPending;
|
|
838
|
+
}
|
|
839
|
+
prevIsSelectedRef.current = isSelected;
|
|
840
|
+
if (isImmediate || isAnimatedForwardRef.current === shouldBeForward) {
|
|
841
|
+
cancelPending();
|
|
842
|
+
return cancelPending;
|
|
843
|
+
}
|
|
844
|
+
cancelPending();
|
|
845
|
+
pendingTimeoutRef.current = setTimeout(() => {
|
|
846
|
+
pendingTimeoutRef.current = null;
|
|
847
|
+
applyAnimation(isSelected);
|
|
848
|
+
}, SELECTION_ANIMATION_SETTLE_DELAY_MS);
|
|
849
|
+
return cancelPending;
|
|
850
|
+
}, [BuilderAnimationIcon, cancelPending, isCurrentPage, isHovered, isOpen]);
|
|
851
|
+
const handleMouseEnter = useCallback(
|
|
852
|
+
(event) => {
|
|
853
|
+
var _a;
|
|
854
|
+
setIsHovered(true);
|
|
855
|
+
(_a = onMouseEnterRef.current) == null ? void 0 : _a.call(onMouseEnterRef, event);
|
|
856
|
+
},
|
|
857
|
+
[]
|
|
858
|
+
);
|
|
859
|
+
const handleMouseLeave = useCallback(
|
|
860
|
+
(event) => {
|
|
861
|
+
var _a;
|
|
862
|
+
setIsHovered(false);
|
|
863
|
+
(_a = onMouseLeaveRef.current) == null ? void 0 : _a.call(onMouseLeaveRef, event);
|
|
864
|
+
},
|
|
865
|
+
[]
|
|
866
|
+
);
|
|
867
|
+
return { iconAnimatedRef, handleMouseEnter, handleMouseLeave };
|
|
868
|
+
}
|
|
769
869
|
const MenuItemLabel = (props) => {
|
|
770
870
|
const {
|
|
771
871
|
item: item2,
|
|
@@ -783,7 +883,8 @@ const MenuItemLabel = (props) => {
|
|
|
783
883
|
toggleDropdown,
|
|
784
884
|
isOpen,
|
|
785
885
|
dropdownAnimationState,
|
|
786
|
-
submenuToggleId
|
|
886
|
+
submenuToggleId,
|
|
887
|
+
BuilderAnimationIcon
|
|
787
888
|
} = props;
|
|
788
889
|
const itemLabelClassNames = clsx(
|
|
789
890
|
classes$6.label,
|
|
@@ -802,6 +903,15 @@ const MenuItemLabel = (props) => {
|
|
|
802
903
|
);
|
|
803
904
|
const isInteractive = (hasSubItems || hasLink) && !isCurrentPage;
|
|
804
905
|
const isDropdownIconOpen = isOpen && dropdownAnimationState.phase !== AnimationPhase.ExitActive;
|
|
906
|
+
const mouseEnterAction = createSDKAction(item2, isCurrentPage, onItemMouseIn);
|
|
907
|
+
const mouseLeaveAction = createSDKAction(item2, isCurrentPage, onItemMouseOut);
|
|
908
|
+
const { iconAnimatedRef, handleMouseEnter, handleMouseLeave } = useIconAnimation({
|
|
909
|
+
BuilderAnimationIcon,
|
|
910
|
+
isCurrentPage,
|
|
911
|
+
isOpen,
|
|
912
|
+
onMouseEnter: mouseEnterAction,
|
|
913
|
+
onMouseLeave: mouseLeaveAction
|
|
914
|
+
});
|
|
805
915
|
return /* @__PURE__ */ jsxs(
|
|
806
916
|
"div",
|
|
807
917
|
{
|
|
@@ -811,8 +921,8 @@ const MenuItemLabel = (props) => {
|
|
|
811
921
|
"data-preview": partToPreviewStateMap == null ? void 0 : partToPreviewStateMap.item,
|
|
812
922
|
"data-interactive": isInteractive,
|
|
813
923
|
onClick: createSDKAction(item2, isCurrentPage, onItemClick),
|
|
814
|
-
onMouseEnter:
|
|
815
|
-
onMouseLeave:
|
|
924
|
+
onMouseEnter: handleMouseEnter,
|
|
925
|
+
onMouseLeave: handleMouseLeave,
|
|
816
926
|
onDoubleClick: createSDKAction(item2, isCurrentPage, onItemDblClick),
|
|
817
927
|
children: [
|
|
818
928
|
/* @__PURE__ */ jsx(
|
|
@@ -825,7 +935,16 @@ const MenuItemLabel = (props) => {
|
|
|
825
935
|
...isCurrentPage && {
|
|
826
936
|
"aria-current": "page"
|
|
827
937
|
},
|
|
828
|
-
children: /* @__PURE__ */
|
|
938
|
+
children: /* @__PURE__ */ jsxs("span", { className: classes$6.labelWrapper, children: [
|
|
939
|
+
BuilderAnimationIcon && /* @__PURE__ */ jsx(
|
|
940
|
+
BuilderAnimationIcon,
|
|
941
|
+
{
|
|
942
|
+
ref: iconAnimatedRef,
|
|
943
|
+
"data-testid": "menu-builder-animation-icon"
|
|
944
|
+
}
|
|
945
|
+
),
|
|
946
|
+
/* @__PURE__ */ jsx("span", { className: itemLabelClassNames, "data-part": MenuParts.Label, children: label2 })
|
|
947
|
+
] })
|
|
829
948
|
}
|
|
830
949
|
),
|
|
831
950
|
hasDropdownMenu && ["default", "srOnly"].map((variant) => {
|
|
@@ -1809,7 +1928,8 @@ const MenuContent = (props) => {
|
|
|
1809
1928
|
onItemMouseOut,
|
|
1810
1929
|
onItemClick,
|
|
1811
1930
|
onItemDblClick,
|
|
1812
|
-
submenuToggleIdPrefix
|
|
1931
|
+
submenuToggleIdPrefix,
|
|
1932
|
+
BuilderAnimationIcon
|
|
1813
1933
|
} = props;
|
|
1814
1934
|
const {
|
|
1815
1935
|
items,
|
|
@@ -1913,7 +2033,8 @@ const MenuContent = (props) => {
|
|
|
1913
2033
|
onItemDblClick,
|
|
1914
2034
|
getAnimationPackage,
|
|
1915
2035
|
submenuDirection,
|
|
1916
|
-
submenuToggleIdPrefix
|
|
2036
|
+
submenuToggleIdPrefix,
|
|
2037
|
+
BuilderAnimationIcon
|
|
1917
2038
|
},
|
|
1918
2039
|
item2.id
|
|
1919
2040
|
)) }),
|
|
@@ -1932,14 +2053,18 @@ const MenuContent = (props) => {
|
|
|
1932
2053
|
) });
|
|
1933
2054
|
};
|
|
1934
2055
|
const navbar$1 = "navbar__H6ySL";
|
|
2056
|
+
const itemIcon = "itemIcon__zQPE-";
|
|
1935
2057
|
const rtl = "rtl__7sC1t";
|
|
1936
2058
|
const ltr = "ltr__r9AkY";
|
|
1937
2059
|
const classes$1 = {
|
|
1938
2060
|
navbar: navbar$1,
|
|
2061
|
+
itemIcon,
|
|
1939
2062
|
rtl,
|
|
1940
2063
|
ltr
|
|
1941
2064
|
};
|
|
2065
|
+
const DEFAULT_ANIMATED_ICON_DURATION = 0.2;
|
|
1942
2066
|
const NavbarMenu = (props) => {
|
|
2067
|
+
var _a;
|
|
1943
2068
|
const { getLanguageDirection } = useService(
|
|
1944
2069
|
EnvironmentDefinition
|
|
1945
2070
|
);
|
|
@@ -1948,12 +2073,38 @@ const NavbarMenu = (props) => {
|
|
|
1948
2073
|
id,
|
|
1949
2074
|
className,
|
|
1950
2075
|
submenuDirection,
|
|
2076
|
+
elementProps,
|
|
1951
2077
|
direction = siteDirection,
|
|
1952
2078
|
onItemClick,
|
|
1953
2079
|
onItemDblClick,
|
|
1954
2080
|
onItemMouseIn,
|
|
1955
2081
|
onItemMouseOut
|
|
1956
2082
|
} = props;
|
|
2083
|
+
const { item: item2 } = elementProps ?? {};
|
|
2084
|
+
const animatedIconProps = (_a = item2 == null ? void 0 : item2.elementProps) == null ? void 0 : _a.animatedIcon;
|
|
2085
|
+
const animatedIconPropsRef = useRef(animatedIconProps);
|
|
2086
|
+
animatedIconPropsRef.current = animatedIconProps;
|
|
2087
|
+
const BuilderAnimationIcon = useMemo(() => {
|
|
2088
|
+
const AnimatedIconWithProps = forwardRef(({ className: iconClassName, ...iconProps }, ref) => {
|
|
2089
|
+
var _a2, _b;
|
|
2090
|
+
return /* @__PURE__ */ jsx(
|
|
2091
|
+
AnimatedIconWithReducedMotion,
|
|
2092
|
+
{
|
|
2093
|
+
...iconProps,
|
|
2094
|
+
duration: ((_a2 = animatedIconPropsRef.current) == null ? void 0 : _a2.duration) ?? DEFAULT_ANIMATED_ICON_DURATION,
|
|
2095
|
+
svg: (_b = animatedIconPropsRef.current) == null ? void 0 : _b.svg,
|
|
2096
|
+
className: clsx(
|
|
2097
|
+
selectors.animatedIcon,
|
|
2098
|
+
classes$1.itemIcon,
|
|
2099
|
+
iconClassName
|
|
2100
|
+
),
|
|
2101
|
+
ref
|
|
2102
|
+
}
|
|
2103
|
+
);
|
|
2104
|
+
});
|
|
2105
|
+
AnimatedIconWithProps.displayName = "NavbarAnimatedIcon";
|
|
2106
|
+
return AnimatedIconWithProps;
|
|
2107
|
+
}, []);
|
|
1957
2108
|
return /* @__PURE__ */ jsx(
|
|
1958
2109
|
MenuContent,
|
|
1959
2110
|
{
|
|
@@ -1968,6 +2119,7 @@ const NavbarMenu = (props) => {
|
|
|
1968
2119
|
direction,
|
|
1969
2120
|
submenuDirection,
|
|
1970
2121
|
onItemClick,
|
|
2122
|
+
BuilderAnimationIcon: (animatedIconProps == null ? void 0 : animatedIconProps.svg) ? BuilderAnimationIcon : void 0,
|
|
1971
2123
|
onItemDblClick,
|
|
1972
2124
|
onItemMouseIn,
|
|
1973
2125
|
onItemMouseOut
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { default as React, RefObject } from 'react';
|
|
2
|
+
import { AnimatedSvgRef } from '../../../../AnimatedIcon/types';
|
|
3
|
+
import { BuilderAnimationIconComponent } from '../../../Menu.types';
|
|
4
|
+
type UseIconAnimationOptions = {
|
|
5
|
+
BuilderAnimationIcon: BuilderAnimationIconComponent | undefined;
|
|
6
|
+
isCurrentPage: boolean;
|
|
7
|
+
isOpen: boolean;
|
|
8
|
+
onMouseEnter?: (event: React.MouseEvent<HTMLDivElement>) => void;
|
|
9
|
+
onMouseLeave?: (event: React.MouseEvent<HTMLDivElement>) => void;
|
|
10
|
+
};
|
|
11
|
+
type UseIconAnimationResult = {
|
|
12
|
+
iconAnimatedRef: RefObject<AnimatedSvgRef>;
|
|
13
|
+
handleMouseEnter: (event: React.MouseEvent<HTMLDivElement>) => void;
|
|
14
|
+
handleMouseLeave: (event: React.MouseEvent<HTMLDivElement>) => void;
|
|
15
|
+
};
|
|
16
|
+
export declare function useIconAnimation({ BuilderAnimationIcon, isCurrentPage, isOpen, onMouseEnter, onMouseLeave, }: UseIconAnimationOptions): UseIconAnimationResult;
|
|
17
|
+
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ACTIONS } from '@wix/component-protocol/schema';
|
|
1
2
|
export declare const MenuOrientation: {
|
|
2
3
|
readonly Horizontal: "horizontal";
|
|
3
4
|
readonly Vertical: "vertical";
|
|
@@ -131,7 +132,10 @@ export declare const DisplayNames: {
|
|
|
131
132
|
justifyContent: string;
|
|
132
133
|
background: string;
|
|
133
134
|
columnGap: string;
|
|
135
|
+
};
|
|
136
|
+
cssCustomProperties: {
|
|
134
137
|
'item-icon-size': string;
|
|
138
|
+
'item-icon-gap': string;
|
|
135
139
|
};
|
|
136
140
|
displayGroups: {
|
|
137
141
|
iconGroup: string;
|
|
@@ -141,6 +145,12 @@ export declare const DisplayNames: {
|
|
|
141
145
|
selected: string;
|
|
142
146
|
};
|
|
143
147
|
};
|
|
148
|
+
itemLabel: {
|
|
149
|
+
elementDisplayName: string;
|
|
150
|
+
};
|
|
151
|
+
itemIcon: {
|
|
152
|
+
elementDisplayName: string;
|
|
153
|
+
};
|
|
144
154
|
dropdown: {
|
|
145
155
|
elementDisplayName: string;
|
|
146
156
|
cssCustomProperties: {
|
|
@@ -216,6 +226,10 @@ export declare const DisplayNames: {
|
|
|
216
226
|
elementDisplayName: string;
|
|
217
227
|
};
|
|
218
228
|
};
|
|
229
|
+
export declare const menuBuiltInActions: {
|
|
230
|
+
readonly elements: typeof ACTIONS.ACTION_NAME.design;
|
|
231
|
+
};
|
|
232
|
+
export declare const MENU_ANIMATED_ICON_SPEC: "sp.erc.menuAnimatedIcon";
|
|
219
233
|
export declare const selectors: {
|
|
220
234
|
menu: string;
|
|
221
235
|
navbar: string;
|
|
@@ -224,6 +238,8 @@ export declare const selectors: {
|
|
|
224
238
|
dropdownItem: string;
|
|
225
239
|
dropdownSubItem: string;
|
|
226
240
|
scrollButton: string;
|
|
241
|
+
animatedIcon: string;
|
|
242
|
+
itemLabel: string;
|
|
227
243
|
hamburgerMenu: string;
|
|
228
244
|
hamburgerMenuContent: string;
|
|
229
245
|
hamburgerMenuHeaderContent: string;
|
|
@@ -239,6 +255,8 @@ export declare const elementKeys: {
|
|
|
239
255
|
subItem: string;
|
|
240
256
|
scrollButton: string;
|
|
241
257
|
dropdown: string;
|
|
258
|
+
animatedIcon: string;
|
|
259
|
+
itemLabel: string;
|
|
242
260
|
};
|
|
243
261
|
export declare const presets: {
|
|
244
262
|
horizontalScrollNavbar: string;
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
line-height: var(--item-line-height);
|
|
74
74
|
}
|
|
75
75
|
[data-open]:not([data-animation-state=exitActive]):not([data-animation-state=exitDone]) > .itemWrapper__sn71X > .labelContainer__E4y-p path, .labelContainer__E4y-p[data-interactive=true]:hover path, .labelContainer__E4y-p[data-preview=hover] path, .labelContainer__E4y-p.hover__tD6A4 path, .labelContainer__E4y-p.menu__item--hover path {
|
|
76
|
-
fill: var(--item-hover-icon-color, var(--item-icon-color, currentcolor));
|
|
76
|
+
fill: var(--fill, var(--item-hover-icon-color, var(--item-icon-color, currentcolor)));
|
|
77
77
|
}
|
|
78
78
|
.labelContainer__E4y-p[data-selected], .labelContainer__E4y-p[data-preview=selected], .labelContainer__E4y-p.selected__qC-k6, .labelContainer__E4y-p.menu__item--selected {
|
|
79
79
|
background: var(--item-selected-background, var(--item-background));
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
line-height: var(--item-line-height);
|
|
90
90
|
}
|
|
91
91
|
.labelContainer__E4y-p[data-selected] path, .labelContainer__E4y-p[data-preview=selected] path, .labelContainer__E4y-p.selected__qC-k6 path, .labelContainer__E4y-p.menu__item--selected path {
|
|
92
|
-
fill: var(--item-selected-icon-color, var(--item-icon-color, currentcolor));
|
|
92
|
+
fill: var(--fill, var(--item-selected-icon-color, var(--item-icon-color, currentcolor)));
|
|
93
93
|
}
|
|
94
94
|
.labelContainer__E4y-p > a::before {
|
|
95
95
|
content: "";
|
|
@@ -131,6 +131,13 @@
|
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
+
.labelWrapper__u5Jgh {
|
|
135
|
+
display: flex;
|
|
136
|
+
align-items: center;
|
|
137
|
+
min-width: 0;
|
|
138
|
+
gap: var(--item-icon-gap, 0);
|
|
139
|
+
}
|
|
140
|
+
|
|
134
141
|
@media (forced-colors: active) {
|
|
135
142
|
.dropdownToggleButton__nisoC,
|
|
136
143
|
.dropdownToggleButton__nisoC svg,
|
|
@@ -818,6 +825,12 @@
|
|
|
818
825
|
--sr-only-item-icon-display: none;
|
|
819
826
|
}
|
|
820
827
|
|
|
828
|
+
.itemIcon__zQPE- {
|
|
829
|
+
display: flex;
|
|
830
|
+
align-items: center;
|
|
831
|
+
flex-shrink: 0;
|
|
832
|
+
}
|
|
833
|
+
|
|
821
834
|
.rtl__7sC1t {
|
|
822
835
|
--scroll-button-transform: scaleX(-1);
|
|
823
836
|
}
|
|
@@ -939,6 +952,25 @@
|
|
|
939
952
|
.fallbackDirection__HeRgn:not([dir]) {
|
|
940
953
|
direction: var(--wix-opt-in-direction);
|
|
941
954
|
}
|
|
955
|
+
.animatedIcon__3o5ii {
|
|
956
|
+
--size: 16px;
|
|
957
|
+
--fill: #000000;
|
|
958
|
+
--rotation: 0deg;
|
|
959
|
+
}
|
|
960
|
+
.animatedIcon__3o5ii {
|
|
961
|
+
display: block;
|
|
962
|
+
width: inherit;
|
|
963
|
+
height: inherit;
|
|
964
|
+
width: var(--size);
|
|
965
|
+
height: var(--size);
|
|
966
|
+
}
|
|
967
|
+
.animatedIcon__3o5ii svg {
|
|
968
|
+
width: var(--size);
|
|
969
|
+
height: var(--size);
|
|
970
|
+
display: block;
|
|
971
|
+
fill: var(--fill);
|
|
972
|
+
transform: rotate(var(--rotation));
|
|
973
|
+
}
|
|
942
974
|
.rootDirection__PPhdq {
|
|
943
975
|
direction: var(--btn-direction);
|
|
944
976
|
}
|
|
@@ -1063,23 +1095,4 @@
|
|
|
1063
1095
|
|
|
1064
1096
|
.button__i8gkO {
|
|
1065
1097
|
min-width: min-content !important;
|
|
1066
|
-
}
|
|
1067
|
-
.animatedIcon__3o5ii {
|
|
1068
|
-
--size: 16px;
|
|
1069
|
-
--fill: #000000;
|
|
1070
|
-
--rotation: 0deg;
|
|
1071
|
-
}
|
|
1072
|
-
.animatedIcon__3o5ii {
|
|
1073
|
-
display: block;
|
|
1074
|
-
width: inherit;
|
|
1075
|
-
height: inherit;
|
|
1076
|
-
width: var(--size);
|
|
1077
|
-
height: var(--size);
|
|
1078
|
-
}
|
|
1079
|
-
.animatedIcon__3o5ii svg {
|
|
1080
|
-
width: var(--size);
|
|
1081
|
-
height: var(--size);
|
|
1082
|
-
display: block;
|
|
1083
|
-
fill: var(--fill);
|
|
1084
|
-
transform: rotate(var(--rotation));
|
|
1085
1098
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { E as ELEMENTS, C as CSS_PROPERTIES, b as DISPLAY_GROUPS, N as NativeStateType, a as ACTIONS, D as DATA, L as LAYOUT, I as INTERACTIONS, A as Archetype } from "../chunks/chunk-JPMZBG44.js";
|
|
2
|
-
import { e as DesignStates, f as DisplayNames, s as selectors, g as DropdownAnchorPositions, h as DropdownAppliedStyleProperties, i as elementKeys, j as states, p as presets } from "../chunks/constants26.js";
|
|
2
|
+
import { e as DesignStates, f as DisplayNames, s as selectors, g as DropdownAnchorPositions, h as DropdownAppliedStyleProperties, i as elementKeys, j as MENU_ANIMATED_ICON_SPEC, k as states, p as presets, m as menuBuiltInActions } from "../chunks/constants26.js";
|
|
3
3
|
import { w as withSpec } from "../chunks/manifest.js";
|
|
4
4
|
import { I as IS_SUPPORT_DESIGN_STATE_SPEC } from "../chunks/specs.js";
|
|
5
5
|
import { c as manifestMouseHover } from "../chunks/manifestSdkMixins.js";
|
|
@@ -509,6 +509,53 @@ const scrollButtonConfig = {
|
|
|
509
509
|
}
|
|
510
510
|
}
|
|
511
511
|
};
|
|
512
|
+
const animatedIconConfig = {
|
|
513
|
+
spec: MENU_ANIMATED_ICON_SPEC,
|
|
514
|
+
elementType: ELEMENTS.ELEMENT_TYPE.refElement,
|
|
515
|
+
[ELEMENTS.ELEMENT_TYPE.refElement]: {
|
|
516
|
+
displayName: DisplayNames.itemIcon.elementDisplayName,
|
|
517
|
+
selector: `.${selectors.animatedIcon}`,
|
|
518
|
+
type: "wixEditorElements.AnimatedIcon",
|
|
519
|
+
behaviors: {
|
|
520
|
+
selectable: false,
|
|
521
|
+
removable: true
|
|
522
|
+
},
|
|
523
|
+
cssProperties: {
|
|
524
|
+
display: {
|
|
525
|
+
defaultValue: CSS_PROPERTIES.DISPLAY_VALUE.none
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
};
|
|
530
|
+
const itemLabelDisplayConfig = {
|
|
531
|
+
displayValues: [
|
|
532
|
+
CSS_PROPERTIES.DISPLAY_VALUE.none,
|
|
533
|
+
CSS_PROPERTIES.DISPLAY_VALUE.flex
|
|
534
|
+
]
|
|
535
|
+
};
|
|
536
|
+
const itemLabelConfig = {
|
|
537
|
+
elementType: ELEMENTS.ELEMENT_TYPE.inlineElement,
|
|
538
|
+
[ELEMENTS.ELEMENT_TYPE.inlineElement]: {
|
|
539
|
+
selector: `.${selectors.itemLabel}`,
|
|
540
|
+
displayName: DisplayNames.itemLabel.elementDisplayName,
|
|
541
|
+
behaviors: {
|
|
542
|
+
selectable: false,
|
|
543
|
+
removable: true
|
|
544
|
+
},
|
|
545
|
+
cssProperties: {
|
|
546
|
+
display: {
|
|
547
|
+
display: itemLabelDisplayConfig
|
|
548
|
+
},
|
|
549
|
+
font: { defaultValue: "14px sans-serif" },
|
|
550
|
+
color: { defaultValue: "rgba(0, 0, 0, 1)" },
|
|
551
|
+
textDecorationLine: { defaultValue: "none" },
|
|
552
|
+
textTransform: { defaultValue: "none" },
|
|
553
|
+
letterSpacing: { defaultValue: "normal" },
|
|
554
|
+
textShadow: { defaultValue: "none" },
|
|
555
|
+
textAlign: { defaultValue: "center" }
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
};
|
|
512
559
|
const itemConfig = {
|
|
513
560
|
elementType: ELEMENTS.ELEMENT_TYPE.inlineElement,
|
|
514
561
|
[ELEMENTS.ELEMENT_TYPE.inlineElement]: {
|
|
@@ -569,14 +616,21 @@ const itemConfig = {
|
|
|
569
616
|
}
|
|
570
617
|
},
|
|
571
618
|
cssCustomProperties: {
|
|
572
|
-
// Icon
|
|
573
619
|
"item-icon-size": {
|
|
574
|
-
displayName: DisplayNames.item.
|
|
620
|
+
displayName: DisplayNames.item.cssCustomProperties["item-icon-size"],
|
|
575
621
|
cssPropertyType: CSS_PROPERTIES.CSS_PROPERTY_TYPE.length
|
|
576
622
|
},
|
|
577
623
|
"item-icon-color": {
|
|
578
624
|
cssPropertyType: CSS_PROPERTIES.CSS_PROPERTY_TYPE.color
|
|
625
|
+
},
|
|
626
|
+
"item-icon-gap": {
|
|
627
|
+
displayName: DisplayNames.item.cssCustomProperties["item-icon-gap"],
|
|
628
|
+
cssPropertyType: CSS_PROPERTIES.CSS_PROPERTY_TYPE.columnGap
|
|
579
629
|
}
|
|
630
|
+
},
|
|
631
|
+
elements: {
|
|
632
|
+
[elementKeys.itemLabel]: itemLabelConfig,
|
|
633
|
+
[elementKeys.animatedIcon]: animatedIconConfig
|
|
580
634
|
}
|
|
581
635
|
}
|
|
582
636
|
};
|
|
@@ -1217,6 +1271,15 @@ const manifest = {
|
|
|
1217
1271
|
}
|
|
1218
1272
|
}
|
|
1219
1273
|
},
|
|
1274
|
+
elements: {
|
|
1275
|
+
execution: {
|
|
1276
|
+
actionType: ACTIONS.ACTION_TYPE.forward,
|
|
1277
|
+
forward: {
|
|
1278
|
+
elementPath: `.self.${elementKeys.navbar}.${elementKeys.item}`,
|
|
1279
|
+
actionName: menuBuiltInActions.elements
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
},
|
|
1220
1283
|
design: {
|
|
1221
1284
|
displayName: DisplayNames.root.actions.design
|
|
1222
1285
|
},
|
|
@@ -1240,7 +1303,7 @@ const manifest = {
|
|
|
1240
1303
|
execution: {
|
|
1241
1304
|
actionType: ACTIONS.ACTION_TYPE.forward,
|
|
1242
1305
|
forward: {
|
|
1243
|
-
elementPath: `.self.${elementKeys.
|
|
1306
|
+
elementPath: `.self.${elementKeys.navbar}.${elementKeys.item}.${elementKeys.animatedIcon}`,
|
|
1244
1307
|
actionName: ACTIONS.ACTION_NAME.custom,
|
|
1245
1308
|
custom: "animatedIcon"
|
|
1246
1309
|
}
|
|
@@ -1379,6 +1442,7 @@ const manifest = {
|
|
|
1379
1442
|
"@wix/viewer-service-url"
|
|
1380
1443
|
],
|
|
1381
1444
|
dependencies: {
|
|
1445
|
+
componentDependencies: ["@wix/editor-react-components/AnimatedIcon"],
|
|
1382
1446
|
serviceDependencies: [
|
|
1383
1447
|
"@wix/viewer-service-anchors",
|
|
1384
1448
|
"@wix/viewer-service-environment",
|
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
import { ElementItem } from '@wix/component-protocol/schema';
|
|
1
|
+
import { ElementItem, CssPropertyItem } from '@wix/component-protocol/schema';
|
|
2
|
+
export declare const itemLabelDisplayConfig: CssPropertyItem["display"];
|
|
3
|
+
export declare const HIDDEN_ITEM_TEXT_CSS_PROPERTIES: readonly ["font", "color", "textDecorationLine", "textTransform", "letterSpacing", "textShadow"];
|
|
4
|
+
export declare const itemLabelConfig: ElementItem;
|
|
2
5
|
export declare const itemConfig: ElementItem;
|
|
@@ -8,6 +8,8 @@ type HorizontalHugNavbarProps = {
|
|
|
8
8
|
isDropdownAnchorScreen: boolean;
|
|
9
9
|
isDropdownAnchorMenuItem: boolean;
|
|
10
10
|
dropdownColumnsNumber: string;
|
|
11
|
+
hideItemIconGap: boolean;
|
|
12
|
+
isIconHidden: boolean;
|
|
11
13
|
};
|
|
12
14
|
export declare const getHorizontalHugNavbarManifestOverrides: (props: HorizontalHugNavbarProps) => Partial<EditorElement>;
|
|
13
15
|
export {};
|
package/dist/site/components/Menu/manifestConfigs/overrides/horizontalScrollNavbarConfig.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ type HorizontalScrollNavbarProps = {
|
|
|
9
9
|
isDropdownAnchorScreen: boolean;
|
|
10
10
|
isDropdownAnchorMenuItem: boolean;
|
|
11
11
|
dropdownColumnsNumber: string;
|
|
12
|
+
hideItemIconGap: boolean;
|
|
13
|
+
isIconHidden: boolean;
|
|
12
14
|
};
|
|
13
15
|
export declare const getHorizontalScrollNavbarManifestOverrides: (props: HorizontalScrollNavbarProps) => Partial<EditorElement>;
|
|
14
16
|
export {};
|
|
@@ -7,6 +7,8 @@ export type VerticalNavbarProps = {
|
|
|
7
7
|
isDropdownItemFitToText: boolean;
|
|
8
8
|
dropdownColumnsNumber: string;
|
|
9
9
|
isVerticalDropdownAlwaysOpen: boolean;
|
|
10
|
+
hideItemIconGap: boolean;
|
|
11
|
+
isIconHidden: boolean;
|
|
10
12
|
};
|
|
11
|
-
export declare const getVerticalNavbarElementManifestOverrides: ({ hasDropdownItems, hasDropdownContent, hasDropdownSubItems, isItemFitToText, isDropdownItemFitToText, dropdownColumnsNumber, }: VerticalNavbarProps) => ElementItem;
|
|
13
|
+
export declare const getVerticalNavbarElementManifestOverrides: ({ hasDropdownItems, hasDropdownContent, hasDropdownSubItems, isItemFitToText, isDropdownItemFitToText, dropdownColumnsNumber, hideItemIconGap, }: VerticalNavbarProps) => ElementItem;
|
|
12
14
|
export declare const getVerticalNavbarManifestOverrides: (props: VerticalNavbarProps) => Partial<EditorElement>;
|
|
@@ -204,8 +204,11 @@ const DisplayNames = {
|
|
|
204
204
|
cssProperties: {
|
|
205
205
|
justifyContent: "Text alignment",
|
|
206
206
|
background: "Background",
|
|
207
|
-
columnGap: "Space between
|
|
208
|
-
|
|
207
|
+
columnGap: "Space between items and chevrons"
|
|
208
|
+
},
|
|
209
|
+
cssCustomProperties: {
|
|
210
|
+
"item-icon-size": "Size",
|
|
211
|
+
"item-icon-gap": "Space between items and icons"
|
|
209
212
|
},
|
|
210
213
|
displayGroups: {
|
|
211
214
|
iconGroup: "Icons"
|
|
@@ -215,6 +218,12 @@ const DisplayNames = {
|
|
|
215
218
|
selected: "Selected"
|
|
216
219
|
}
|
|
217
220
|
},
|
|
221
|
+
itemLabel: {
|
|
222
|
+
elementDisplayName: "Item's text"
|
|
223
|
+
},
|
|
224
|
+
itemIcon: {
|
|
225
|
+
elementDisplayName: "Item's icon"
|
|
226
|
+
},
|
|
218
227
|
dropdown: {
|
|
219
228
|
elementDisplayName: "Dropdowns",
|
|
220
229
|
cssCustomProperties: {
|
|
@@ -290,6 +299,10 @@ const DisplayNames = {
|
|
|
290
299
|
elementDisplayName: "Close Button"
|
|
291
300
|
}
|
|
292
301
|
};
|
|
302
|
+
const menuBuiltInActions = {
|
|
303
|
+
elements: "elements"
|
|
304
|
+
};
|
|
305
|
+
const MENU_ANIMATED_ICON_SPEC = "sp.erc.menuAnimatedIcon";
|
|
293
306
|
const selectors = {
|
|
294
307
|
menu: "menu",
|
|
295
308
|
navbar: "navbar",
|
|
@@ -298,6 +311,8 @@ const selectors = {
|
|
|
298
311
|
dropdownItem: "dropdown-item",
|
|
299
312
|
dropdownSubItem: "dropdown-sub-item",
|
|
300
313
|
scrollButton: "scroll-button",
|
|
314
|
+
animatedIcon: "animated-icon",
|
|
315
|
+
itemLabel: "item-label",
|
|
301
316
|
hamburgerMenu: "hamburger-menu",
|
|
302
317
|
hamburgerMenuContent: "hamburger-menu-content",
|
|
303
318
|
hamburgerMenuHeaderContent: "hamburger-menu-header-content",
|
|
@@ -312,7 +327,9 @@ const elementKeys = {
|
|
|
312
327
|
item: "item",
|
|
313
328
|
subItem: "subItem",
|
|
314
329
|
scrollButton: "scrollButton",
|
|
315
|
-
dropdown: "dropdown"
|
|
330
|
+
dropdown: "dropdown",
|
|
331
|
+
animatedIcon: "animatedIcon",
|
|
332
|
+
itemLabel: "itemLabel"
|
|
316
333
|
};
|
|
317
334
|
const presets = {
|
|
318
335
|
horizontalScrollNavbar: "horizontalScrollNavbar",
|
|
@@ -415,7 +432,9 @@ export {
|
|
|
415
432
|
DropdownAnchorPositions as g,
|
|
416
433
|
DropdownAppliedStyleProperties as h,
|
|
417
434
|
elementKeys as i,
|
|
418
|
-
|
|
435
|
+
MENU_ANIMATED_ICON_SPEC as j,
|
|
436
|
+
states as k,
|
|
437
|
+
menuBuiltInActions as m,
|
|
419
438
|
presets as p,
|
|
420
439
|
selectors as s,
|
|
421
440
|
translationsKeys as t,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/editor-react-components",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2324.0",
|
|
4
4
|
"description": "React components for the Wix Editor",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -197,5 +197,5 @@
|
|
|
197
197
|
"registry": "https://registry.npmjs.org/",
|
|
198
198
|
"access": "public"
|
|
199
199
|
},
|
|
200
|
-
"falconPackageHash": "
|
|
200
|
+
"falconPackageHash": "1802e5d2dd2600dece3b5d9e5792b99bd1c3f451c891992f196bb261"
|
|
201
201
|
}
|