@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.
@@ -12,7 +12,7 @@ export interface AnimatedSvgProps {
12
12
  }
13
13
  export interface AnimatedIconBuilderProps {
14
14
  /** DOM `id` on the root element. */
15
- id: string;
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: createSDKAction(item2, isCurrentPage, onItemMouseIn),
815
- onMouseLeave: createSDKAction(item2, isCurrentPage, onItemMouseOut),
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__ */ jsx("div", { className: itemLabelClassNames, "data-part": MenuParts.Label, children: label2 })
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.cssProperties["item-icon-size"],
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.hamburgerOpenButton}.animatedIcon`,
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",
@@ -0,0 +1,2 @@
1
+ import { ElementItem } from '@wix/component-protocol/schema';
2
+ export declare const animatedIconConfig: ElementItem;
@@ -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 {};
@@ -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 menu items and icons",
208
- "item-icon-size": "Size"
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
- states as j,
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.2322.0",
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": "6d280282af9435a3298aa6d4fddbaf4299fcc312c30a0a3060a09096"
200
+ "falconPackageHash": "1802e5d2dd2600dece3b5d9e5792b99bd1c3f451c891992f196bb261"
201
201
  }