@hh.ru/magritte-ui-menu 1.0.54 → 1.0.56
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/Item.js +3 -5
- package/Item.js.map +1 -1
- package/Menu.js +2 -1
- package/Menu.js.map +1 -1
- package/QuickAction.js +1 -1
- package/QuickActions.js +1 -1
- package/SectionHeader.js +1 -1
- package/index.css +43 -43
- package/index.js +2 -1
- package/index.js.map +1 -1
- package/itemIconDefaults.d.ts +18 -0
- package/itemIconDefaults.js +8 -0
- package/itemIconDefaults.js.map +1 -0
- package/menu-D-lOkmjA.js +5 -0
- package/menu-D-lOkmjA.js.map +1 -0
- package/package.json +8 -4
- package/menu-BKJV53WD.js +0 -5
- package/menu-BKJV53WD.js.map +0 -1
package/Item.js
CHANGED
|
@@ -12,18 +12,16 @@ import { CheckOutlinedSize24, ChevronRightOutlinedSize24 } from '@hh.ru/magritte
|
|
|
12
12
|
import { DisabledWrapper } from './DisabledWrapper.js';
|
|
13
13
|
import { DROP_PROPS } from './Drop.js';
|
|
14
14
|
import { MenuContext } from './context.js';
|
|
15
|
+
import { MENU_ITEM_ICON_DEFAULTS } from './itemIconDefaults.js';
|
|
15
16
|
import { useSubmenuSafeZone } from './useSubmenuSafeZone.js';
|
|
16
17
|
import { isSwitchComponent } from '@hh.ru/magritte-ui-switch';
|
|
17
18
|
import { Text } from '@hh.ru/magritte-ui-typography';
|
|
18
|
-
import { s as styles } from './menu-
|
|
19
|
+
import { s as styles } from './menu-D-lOkmjA.js';
|
|
19
20
|
import '@hh.ru/magritte-common-use-disabled';
|
|
20
21
|
import '@hh.ru/magritte-common-func-utils';
|
|
21
22
|
import './safeZone.js';
|
|
22
23
|
|
|
23
|
-
const DEFAULT_ICON_PROPS =
|
|
24
|
-
neutral: {},
|
|
25
|
-
negative: { initialColor: "negative" }
|
|
26
|
-
};
|
|
24
|
+
const DEFAULT_ICON_PROPS = MENU_ITEM_ICON_DEFAULTS;
|
|
27
25
|
const TEXT_STYLE = {
|
|
28
26
|
neutral: "primary",
|
|
29
27
|
negative: "negative"
|
package/Item.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Item.js","sources":["src/Item.tsx"],"sourcesContent":["import { cloneElement, forwardRef, useContext, useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport classnames from 'classnames';\n\nimport { keyboardKeys, keyboardMatches } from '@hh.ru/magritte-common-keyboard';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { type DropProps, Drop } from '@hh.ru/magritte-ui-drop';\nimport { type IconProps, IconDefaultPropsContext } from '@hh.ru/magritte-ui-icon';\nimport { CheckOutlinedSize24, ChevronRightOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { DisabledWrapper } from '@hh.ru/magritte-ui-menu/DisabledWrapper';\nimport { DROP_PROPS } from '@hh.ru/magritte-ui-menu/Drop';\nimport { MenuContext } from '@hh.ru/magritte-ui-menu/context';\nimport { type MenuItemProps } from '@hh.ru/magritte-ui-menu/types';\nimport { useSubmenuSafeZone } from '@hh.ru/magritte-ui-menu/useSubmenuSafeZone';\nimport { isSwitchComponent } from '@hh.ru/magritte-ui-switch';\nimport { type TagProps } from '@hh.ru/magritte-ui-tag';\nimport { type TextStyle, Text } from '@hh.ru/magritte-ui-typography';\n\nimport styles from './menu.less';\n\nconst DEFAULT_ICON_PROPS: Record<NonNullable<MenuItemProps['style']>, Partial<IconProps>> = {\n neutral: {},\n negative: { initialColor: 'negative' },\n};\n\nconst TEXT_STYLE: Record<NonNullable<MenuItemProps['style']>, TextStyle> = {\n neutral: 'primary',\n negative: 'negative',\n};\n\nconst SECONDARY_TEXT_STYLE: Record<NonNullable<MenuItemProps['style']>, TextStyle> = {\n neutral: 'secondary',\n negative: 'negative-secondary',\n};\n\nconst SUBMENU_DROP_PLACEMENT: DropProps['placement'] = [\n 'right-top',\n 'right-bottom',\n 'right-center',\n 'left-top',\n 'left-bottom',\n 'left-center',\n];\n\nexport const MenuItem = forwardRef<HTMLDivElement, MenuItemProps>(\n (\n {\n children,\n className,\n disabled = false,\n icon,\n subitems,\n selected,\n style = 'neutral',\n rightContent,\n subtitle,\n tag,\n ...props\n },\n ref\n ) => {\n const { isMobile } = useBreakpoint();\n const contextValue = useContext(MenuContext);\n const {\n dropContainer,\n itemWithVisibleSubmenu,\n mobileSubmenuContainer,\n mobileTitleContainer,\n setItemWithVisibleSubmenu,\n submenuAllowed,\n visible,\n } = contextValue;\n const itemRef = useRef<HTMLDivElement>(null);\n const itemRefCallback = useMultipleRefs(itemRef, ref);\n const submenuRef = useRef<HTMLDivElement>(null);\n const [hasHover, setHover] = useState(false);\n const [submenuVisible, setSubmenuVisible] = useState(false);\n\n const hasSwitch = !selected && isSwitchComponent(rightContent);\n const hasSubmenu = !selected && !isSwitchComponent(rightContent) && submenuAllowed && subitems;\n\n const { trackPointer, cancelPendingClose } = useSubmenuSafeZone({\n active: submenuVisible,\n dropContainer: dropContainer ?? null,\n itemRef,\n submenuRef,\n onClose: () => setSubmenuVisible(false),\n });\n\n const showSubmenu = () => {\n cancelPendingClose();\n setSubmenuVisible(true);\n setItemWithVisibleSubmenu?.(itemRef.current);\n };\n\n useEffect(() => {\n if (itemWithVisibleSubmenu !== itemRef.current) {\n cancelPendingClose();\n setSubmenuVisible(false);\n }\n }, [itemWithVisibleSubmenu, cancelPendingClose]);\n\n return (\n <>\n <DisabledWrapper disabled={disabled}>\n <div\n {...props}\n aria-disabled={disabled}\n className={classnames(\n className,\n { [styles.disabled]: disabled },\n styles.dropContentMargin,\n styles.item,\n styles[style]\n )}\n onClick={(event) => {\n if (disabled) {\n return;\n }\n props.onClick?.(event);\n if (hasSwitch) {\n rightContent.props.onClick?.();\n }\n if (hasSubmenu) {\n showSubmenu();\n }\n }}\n onKeyDown={(event) => {\n if (disabled) {\n return;\n }\n props.onKeyDown?.(event);\n if (keyboardMatches(event, [keyboardKeys.Enter, keyboardKeys.Space])) {\n event.preventDefault();\n if (hasSwitch) {\n rightContent.props.onClick?.();\n } else if (hasSubmenu) {\n showSubmenu();\n } else {\n (event.target as HTMLElement).click();\n }\n }\n }}\n onMouseEnter={(event) => {\n if (!disabled) {\n props.onMouseEnter?.(event);\n if (!isMobile) {\n setHover(true);\n trackPointer({ x: event.clientX, y: event.clientY });\n\n if (hasSubmenu && !submenuVisible) {\n showSubmenu();\n }\n }\n }\n }}\n onMouseLeave={(event) => {\n if (!disabled) {\n props.onMouseLeave?.(event);\n }\n if (!isMobile) {\n setHover(false);\n }\n }}\n onMouseMove={(event) => {\n if (!disabled) {\n props.onMouseMove?.(event);\n if (!isMobile) {\n setHover(true);\n trackPointer({ x: event.clientX, y: event.clientY });\n\n if (hasSubmenu && !submenuVisible) {\n showSubmenu();\n }\n }\n }\n }}\n ref={itemRefCallback}\n role=\"menuitem\"\n tabIndex={disabled ? -1 : 0}\n >\n {icon && (\n <div className={styles.itemIcon}>\n <IconDefaultPropsContext props={DEFAULT_ICON_PROPS[style]}>\n {icon}\n </IconDefaultPropsContext>\n </div>\n )}\n <div className={styles.itemText}>\n <Text ellipsis style={TEXT_STYLE[style]} typography=\"label-2-regular\">\n {children}\n </Text>\n {subtitle && (\n <Text ellipsis style={SECONDARY_TEXT_STYLE[style]} typography=\"label-3-regular\">\n {subtitle}\n </Text>\n )}\n </div>\n {tag && (\n <div className={styles.itemTag}>\n {cloneElement(tag as React.ReactElement<TagProps>, { onSurface: hasHover })}\n </div>\n )}\n {selected && (\n <div className={styles.itemRightContent}>\n <CheckOutlinedSize24 initialColor=\"secondary\" />\n </div>\n )}\n {hasSwitch && (\n <div className={styles.itemRightContent} onClick={(event) => event.stopPropagation()}>\n {rightContent}\n </div>\n )}\n {hasSubmenu && (\n <div className={styles.itemRightContent}>\n <Text ellipsis style={SECONDARY_TEXT_STYLE[style]} typography=\"label-3-regular\">\n {rightContent}\n </Text>\n <ChevronRightOutlinedSize24 initialColor=\"secondary\" />\n </div>\n )}\n </div>\n </DisabledWrapper>\n {hasSubmenu && (\n <MenuContext.Provider value={{ ...contextValue, submenuAllowed: false }}>\n <Drop\n {...DROP_PROPS}\n activatorRef={itemRef}\n lockPlacement\n onClose={() => setSubmenuVisible(false)}\n placement={SUBMENU_DROP_PLACEMENT}\n ref={submenuRef}\n visible={visible && submenuVisible}\n >\n {subitems}\n </Drop>\n {mobileSubmenuContainer &&\n createPortal(submenuVisible ? subitems : null, mobileSubmenuContainer)}\n {mobileTitleContainer && createPortal(submenuVisible ? children : null, mobileTitleContainer)}\n </MenuContext.Provider>\n )}\n </>\n );\n }\n);\n\nMenuItem.displayName = 'MenuItem';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Item.js","sources":["src/Item.tsx"],"sourcesContent":["import { cloneElement, forwardRef, useContext, useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport classnames from 'classnames';\n\nimport { keyboardKeys, keyboardMatches } from '@hh.ru/magritte-common-keyboard';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { type DropProps, Drop } from '@hh.ru/magritte-ui-drop';\nimport { type IconProps, IconDefaultPropsContext } from '@hh.ru/magritte-ui-icon';\nimport { CheckOutlinedSize24, ChevronRightOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { DisabledWrapper } from '@hh.ru/magritte-ui-menu/DisabledWrapper';\nimport { DROP_PROPS } from '@hh.ru/magritte-ui-menu/Drop';\nimport { MenuContext } from '@hh.ru/magritte-ui-menu/context';\nimport { MENU_ITEM_ICON_DEFAULTS } from '@hh.ru/magritte-ui-menu/itemIconDefaults';\nimport { type MenuItemProps } from '@hh.ru/magritte-ui-menu/types';\nimport { useSubmenuSafeZone } from '@hh.ru/magritte-ui-menu/useSubmenuSafeZone';\nimport { isSwitchComponent } from '@hh.ru/magritte-ui-switch';\nimport { type TagProps } from '@hh.ru/magritte-ui-tag';\nimport { type TextStyle, Text } from '@hh.ru/magritte-ui-typography';\n\nimport styles from './menu.less';\n\nconst DEFAULT_ICON_PROPS: Record<NonNullable<MenuItemProps['style']>, Partial<IconProps>> = MENU_ITEM_ICON_DEFAULTS;\n\nconst TEXT_STYLE: Record<NonNullable<MenuItemProps['style']>, TextStyle> = {\n neutral: 'primary',\n negative: 'negative',\n};\n\nconst SECONDARY_TEXT_STYLE: Record<NonNullable<MenuItemProps['style']>, TextStyle> = {\n neutral: 'secondary',\n negative: 'negative-secondary',\n};\n\nconst SUBMENU_DROP_PLACEMENT: DropProps['placement'] = [\n 'right-top',\n 'right-bottom',\n 'right-center',\n 'left-top',\n 'left-bottom',\n 'left-center',\n];\n\nexport const MenuItem = forwardRef<HTMLDivElement, MenuItemProps>(\n (\n {\n children,\n className,\n disabled = false,\n icon,\n subitems,\n selected,\n style = 'neutral',\n rightContent,\n subtitle,\n tag,\n ...props\n },\n ref\n ) => {\n const { isMobile } = useBreakpoint();\n const contextValue = useContext(MenuContext);\n const {\n dropContainer,\n itemWithVisibleSubmenu,\n mobileSubmenuContainer,\n mobileTitleContainer,\n setItemWithVisibleSubmenu,\n submenuAllowed,\n visible,\n } = contextValue;\n const itemRef = useRef<HTMLDivElement>(null);\n const itemRefCallback = useMultipleRefs(itemRef, ref);\n const submenuRef = useRef<HTMLDivElement>(null);\n const [hasHover, setHover] = useState(false);\n const [submenuVisible, setSubmenuVisible] = useState(false);\n\n const hasSwitch = !selected && isSwitchComponent(rightContent);\n const hasSubmenu = !selected && !isSwitchComponent(rightContent) && submenuAllowed && subitems;\n\n const { trackPointer, cancelPendingClose } = useSubmenuSafeZone({\n active: submenuVisible,\n dropContainer: dropContainer ?? null,\n itemRef,\n submenuRef,\n onClose: () => setSubmenuVisible(false),\n });\n\n const showSubmenu = () => {\n cancelPendingClose();\n setSubmenuVisible(true);\n setItemWithVisibleSubmenu?.(itemRef.current);\n };\n\n useEffect(() => {\n if (itemWithVisibleSubmenu !== itemRef.current) {\n cancelPendingClose();\n setSubmenuVisible(false);\n }\n }, [itemWithVisibleSubmenu, cancelPendingClose]);\n\n return (\n <>\n <DisabledWrapper disabled={disabled}>\n <div\n {...props}\n aria-disabled={disabled}\n className={classnames(\n className,\n { [styles.disabled]: disabled },\n styles.dropContentMargin,\n styles.item,\n styles[style]\n )}\n onClick={(event) => {\n if (disabled) {\n return;\n }\n props.onClick?.(event);\n if (hasSwitch) {\n rightContent.props.onClick?.();\n }\n if (hasSubmenu) {\n showSubmenu();\n }\n }}\n onKeyDown={(event) => {\n if (disabled) {\n return;\n }\n props.onKeyDown?.(event);\n if (keyboardMatches(event, [keyboardKeys.Enter, keyboardKeys.Space])) {\n event.preventDefault();\n if (hasSwitch) {\n rightContent.props.onClick?.();\n } else if (hasSubmenu) {\n showSubmenu();\n } else {\n (event.target as HTMLElement).click();\n }\n }\n }}\n onMouseEnter={(event) => {\n if (!disabled) {\n props.onMouseEnter?.(event);\n if (!isMobile) {\n setHover(true);\n trackPointer({ x: event.clientX, y: event.clientY });\n\n if (hasSubmenu && !submenuVisible) {\n showSubmenu();\n }\n }\n }\n }}\n onMouseLeave={(event) => {\n if (!disabled) {\n props.onMouseLeave?.(event);\n }\n if (!isMobile) {\n setHover(false);\n }\n }}\n onMouseMove={(event) => {\n if (!disabled) {\n props.onMouseMove?.(event);\n if (!isMobile) {\n setHover(true);\n trackPointer({ x: event.clientX, y: event.clientY });\n\n if (hasSubmenu && !submenuVisible) {\n showSubmenu();\n }\n }\n }\n }}\n ref={itemRefCallback}\n role=\"menuitem\"\n tabIndex={disabled ? -1 : 0}\n >\n {icon && (\n <div className={styles.itemIcon}>\n <IconDefaultPropsContext props={DEFAULT_ICON_PROPS[style]}>\n {icon}\n </IconDefaultPropsContext>\n </div>\n )}\n <div className={styles.itemText}>\n <Text ellipsis style={TEXT_STYLE[style]} typography=\"label-2-regular\">\n {children}\n </Text>\n {subtitle && (\n <Text ellipsis style={SECONDARY_TEXT_STYLE[style]} typography=\"label-3-regular\">\n {subtitle}\n </Text>\n )}\n </div>\n {tag && (\n <div className={styles.itemTag}>\n {cloneElement(tag as React.ReactElement<TagProps>, { onSurface: hasHover })}\n </div>\n )}\n {selected && (\n <div className={styles.itemRightContent}>\n <CheckOutlinedSize24 initialColor=\"secondary\" />\n </div>\n )}\n {hasSwitch && (\n <div className={styles.itemRightContent} onClick={(event) => event.stopPropagation()}>\n {rightContent}\n </div>\n )}\n {hasSubmenu && (\n <div className={styles.itemRightContent}>\n <Text ellipsis style={SECONDARY_TEXT_STYLE[style]} typography=\"label-3-regular\">\n {rightContent}\n </Text>\n <ChevronRightOutlinedSize24 initialColor=\"secondary\" />\n </div>\n )}\n </div>\n </DisabledWrapper>\n {hasSubmenu && (\n <MenuContext.Provider value={{ ...contextValue, submenuAllowed: false }}>\n <Drop\n {...DROP_PROPS}\n activatorRef={itemRef}\n lockPlacement\n onClose={() => setSubmenuVisible(false)}\n placement={SUBMENU_DROP_PLACEMENT}\n ref={submenuRef}\n visible={visible && submenuVisible}\n >\n {subitems}\n </Drop>\n {mobileSubmenuContainer &&\n createPortal(submenuVisible ? subitems : null, mobileSubmenuContainer)}\n {mobileTitleContainer && createPortal(submenuVisible ? children : null, mobileTitleContainer)}\n </MenuContext.Provider>\n )}\n </>\n );\n }\n);\n\nMenuItem.displayName = 'MenuItem';\n"],"names":[],"mappings":"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"}
|
package/Menu.js
CHANGED
|
@@ -13,7 +13,7 @@ import { MenuQuickActions } from './QuickActions.js';
|
|
|
13
13
|
import { MenuSectionHeader } from './SectionHeader.js';
|
|
14
14
|
import { MenuContext } from './context.js';
|
|
15
15
|
import { NavBar } from '@hh.ru/magritte-ui-nav-bar';
|
|
16
|
-
import { s as styles } from './menu-
|
|
16
|
+
import { s as styles } from './menu-D-lOkmjA.js';
|
|
17
17
|
import '@hh.ru/magritte-ui-bottom-sheet';
|
|
18
18
|
import '@hh.ru/magritte-ui-divider';
|
|
19
19
|
import '@hh.ru/magritte-ui-drop';
|
|
@@ -24,6 +24,7 @@ import '@hh.ru/magritte-ui-icon';
|
|
|
24
24
|
import './DisabledWrapper.js';
|
|
25
25
|
import '@hh.ru/magritte-common-use-disabled';
|
|
26
26
|
import '@hh.ru/magritte-ui-typography';
|
|
27
|
+
import './itemIconDefaults.js';
|
|
27
28
|
import './useSubmenuSafeZone.js';
|
|
28
29
|
import '@hh.ru/magritte-common-func-utils';
|
|
29
30
|
import './safeZone.js';
|
package/Menu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.js","sources":["src/Menu.tsx"],"sourcesContent":["import { useLayoutEffect, useRef, useState } from 'react';\nimport classnames from 'classnames';\n\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { ChevronLeftOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { MenuBottomSheet } from '@hh.ru/magritte-ui-menu/BottomSheet';\nimport { MenuDivider } from '@hh.ru/magritte-ui-menu/Divider';\nimport { MenuDrop } from '@hh.ru/magritte-ui-menu/Drop';\nimport { MenuItem } from '@hh.ru/magritte-ui-menu/Item';\nimport { MenuQuickAction } from '@hh.ru/magritte-ui-menu/QuickAction';\nimport { MenuQuickActions } from '@hh.ru/magritte-ui-menu/QuickActions';\nimport { MenuSectionHeader } from '@hh.ru/magritte-ui-menu/SectionHeader';\nimport { type MenuContextProps, MenuContext } from '@hh.ru/magritte-ui-menu/context';\nimport { type MenuProps } from '@hh.ru/magritte-ui-menu/types';\nimport { NavBar } from '@hh.ru/magritte-ui-nav-bar';\n\nimport styles from './menu.less';\n\ninterface MenuComponents {\n BottomSheet: typeof MenuBottomSheet;\n Divider: typeof MenuDivider;\n Drop: typeof MenuDrop;\n Item: typeof MenuItem;\n QuickAction: typeof MenuQuickAction;\n QuickActions: typeof MenuQuickActions;\n SectionHeader: typeof MenuSectionHeader;\n}\n\nexport const Menu: React.FC<MenuProps> & MenuComponents = ({\n activatorRef,\n children,\n onClose,\n placement,\n visible,\n render,\n}) => {\n const { isMobile } = useBreakpoint();\n const mobileMenuContainerRef = useRef<HTMLDivElement>(null);\n const [mobileSubmenuContainer, setMobileSubmenuContainer] = useState<HTMLDivElement | null>(null);\n const [mobileTitleContainer, setMobileTitleContainer] = useState<HTMLDivElement | null>(null);\n const [itemWithVisibleSubmenu, setItemWithVisibleSubmenu] = useState<HTMLDivElement | null>(null);\n const [dropContainer, setDropContainer] = useState<HTMLDivElement | null>(null);\n\n const contextValue: MenuContextProps = {\n activatorRef,\n dropContainer,\n itemWithVisibleSubmenu,\n mobileSubmenuContainer,\n mobileTitleContainer,\n onAfterExit: () => {\n setItemWithVisibleSubmenu(null);\n },\n onClose,\n placement,\n setDropContainer,\n setItemWithVisibleSubmenu,\n submenuAllowed: true,\n visible,\n };\n\n useLayoutEffect(() => {\n const mobileMenuContainer = mobileMenuContainerRef.current;\n if (!mobileMenuContainer) {\n return;\n }\n\n mobileMenuContainer.style.height =\n itemWithVisibleSubmenu !== null && mobileSubmenuContainer !== null\n ? `${mobileSubmenuContainer.offsetHeight}px`\n : ``;\n }, [itemWithVisibleSubmenu, mobileSubmenuContainer]);\n\n if (isMobile) {\n const mobileChildren = (\n <div\n className={classnames(styles.mobileMenuContainer, {\n [styles.mobileMenuContainerSlide]: itemWithVisibleSubmenu !== null,\n })}\n ref={mobileMenuContainerRef}\n >\n <div className={styles.mobileMainMenuContainer}>{children}</div>\n <div className={styles.mobileSubmenuContainer} ref={setMobileSubmenuContainer} />\n </div>\n );\n\n const closeMobileSubmenu = () => setItemWithVisibleSubmenu(null);\n\n return (\n <MenuContext.Provider value={contextValue}>\n {render ? (\n render({\n children: mobileChildren,\n closeMobileSubmenu,\n mobileSubmenuVisible: itemWithVisibleSubmenu !== null,\n })\n ) : (\n <Menu.BottomSheet\n header={\n itemWithVisibleSubmenu !== null && (\n <NavBar>\n <NavBar.Actions\n centered\n left={<ChevronLeftOutlinedSize24 onClick={closeMobileSubmenu} />}\n >\n <NavBar.TitleContainer centered title={<div ref={setMobileTitleContainer} />} />\n </NavBar.Actions>\n </NavBar>\n )\n }\n >\n {mobileChildren}\n </Menu.BottomSheet>\n )}\n </MenuContext.Provider>\n );\n }\n\n return (\n <MenuContext.Provider value={contextValue}>\n {render ? render({ children }) : <Menu.Drop>{children}</Menu.Drop>}\n </MenuContext.Provider>\n );\n};\n\nMenu.BottomSheet = MenuBottomSheet;\nMenu.Divider = MenuDivider;\nMenu.Drop = MenuDrop;\nMenu.Item = MenuItem;\nMenu.QuickAction = MenuQuickAction;\nMenu.QuickActions = MenuQuickActions;\nMenu.SectionHeader = MenuSectionHeader;\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Menu.js","sources":["src/Menu.tsx"],"sourcesContent":["import { useLayoutEffect, useRef, useState } from 'react';\nimport classnames from 'classnames';\n\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { ChevronLeftOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { MenuBottomSheet } from '@hh.ru/magritte-ui-menu/BottomSheet';\nimport { MenuDivider } from '@hh.ru/magritte-ui-menu/Divider';\nimport { MenuDrop } from '@hh.ru/magritte-ui-menu/Drop';\nimport { MenuItem } from '@hh.ru/magritte-ui-menu/Item';\nimport { MenuQuickAction } from '@hh.ru/magritte-ui-menu/QuickAction';\nimport { MenuQuickActions } from '@hh.ru/magritte-ui-menu/QuickActions';\nimport { MenuSectionHeader } from '@hh.ru/magritte-ui-menu/SectionHeader';\nimport { type MenuContextProps, MenuContext } from '@hh.ru/magritte-ui-menu/context';\nimport { type MenuProps } from '@hh.ru/magritte-ui-menu/types';\nimport { NavBar } from '@hh.ru/magritte-ui-nav-bar';\n\nimport styles from './menu.less';\n\ninterface MenuComponents {\n BottomSheet: typeof MenuBottomSheet;\n Divider: typeof MenuDivider;\n Drop: typeof MenuDrop;\n Item: typeof MenuItem;\n QuickAction: typeof MenuQuickAction;\n QuickActions: typeof MenuQuickActions;\n SectionHeader: typeof MenuSectionHeader;\n}\n\nexport const Menu: React.FC<MenuProps> & MenuComponents = ({\n activatorRef,\n children,\n onClose,\n placement,\n visible,\n render,\n}) => {\n const { isMobile } = useBreakpoint();\n const mobileMenuContainerRef = useRef<HTMLDivElement>(null);\n const [mobileSubmenuContainer, setMobileSubmenuContainer] = useState<HTMLDivElement | null>(null);\n const [mobileTitleContainer, setMobileTitleContainer] = useState<HTMLDivElement | null>(null);\n const [itemWithVisibleSubmenu, setItemWithVisibleSubmenu] = useState<HTMLDivElement | null>(null);\n const [dropContainer, setDropContainer] = useState<HTMLDivElement | null>(null);\n\n const contextValue: MenuContextProps = {\n activatorRef,\n dropContainer,\n itemWithVisibleSubmenu,\n mobileSubmenuContainer,\n mobileTitleContainer,\n onAfterExit: () => {\n setItemWithVisibleSubmenu(null);\n },\n onClose,\n placement,\n setDropContainer,\n setItemWithVisibleSubmenu,\n submenuAllowed: true,\n visible,\n };\n\n useLayoutEffect(() => {\n const mobileMenuContainer = mobileMenuContainerRef.current;\n if (!mobileMenuContainer) {\n return;\n }\n\n mobileMenuContainer.style.height =\n itemWithVisibleSubmenu !== null && mobileSubmenuContainer !== null\n ? `${mobileSubmenuContainer.offsetHeight}px`\n : ``;\n }, [itemWithVisibleSubmenu, mobileSubmenuContainer]);\n\n if (isMobile) {\n const mobileChildren = (\n <div\n className={classnames(styles.mobileMenuContainer, {\n [styles.mobileMenuContainerSlide]: itemWithVisibleSubmenu !== null,\n })}\n ref={mobileMenuContainerRef}\n >\n <div className={styles.mobileMainMenuContainer}>{children}</div>\n <div className={styles.mobileSubmenuContainer} ref={setMobileSubmenuContainer} />\n </div>\n );\n\n const closeMobileSubmenu = () => setItemWithVisibleSubmenu(null);\n\n return (\n <MenuContext.Provider value={contextValue}>\n {render ? (\n render({\n children: mobileChildren,\n closeMobileSubmenu,\n mobileSubmenuVisible: itemWithVisibleSubmenu !== null,\n })\n ) : (\n <Menu.BottomSheet\n header={\n itemWithVisibleSubmenu !== null && (\n <NavBar>\n <NavBar.Actions\n centered\n left={<ChevronLeftOutlinedSize24 onClick={closeMobileSubmenu} />}\n >\n <NavBar.TitleContainer centered title={<div ref={setMobileTitleContainer} />} />\n </NavBar.Actions>\n </NavBar>\n )\n }\n >\n {mobileChildren}\n </Menu.BottomSheet>\n )}\n </MenuContext.Provider>\n );\n }\n\n return (\n <MenuContext.Provider value={contextValue}>\n {render ? render({ children }) : <Menu.Drop>{children}</Menu.Drop>}\n </MenuContext.Provider>\n );\n};\n\nMenu.BottomSheet = MenuBottomSheet;\nMenu.Divider = MenuDivider;\nMenu.Drop = MenuDrop;\nMenu.Item = MenuItem;\nMenu.QuickAction = MenuQuickAction;\nMenu.QuickActions = MenuQuickActions;\nMenu.SectionHeader = MenuSectionHeader;\n"],"names":[],"mappings":"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"}
|
package/QuickAction.js
CHANGED
|
@@ -4,7 +4,7 @@ import { forwardRef } from 'react';
|
|
|
4
4
|
import classnames from 'classnames';
|
|
5
5
|
import { DisabledWrapper } from './DisabledWrapper.js';
|
|
6
6
|
import { Text } from '@hh.ru/magritte-ui-typography';
|
|
7
|
-
import { s as styles } from './menu-
|
|
7
|
+
import { s as styles } from './menu-D-lOkmjA.js';
|
|
8
8
|
import '@hh.ru/magritte-common-use-disabled';
|
|
9
9
|
import '@hh.ru/magritte-ui-icon';
|
|
10
10
|
|
package/QuickActions.js
CHANGED
|
@@ -2,7 +2,7 @@ import './index.css';
|
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { forwardRef } from 'react';
|
|
4
4
|
import classnames from 'classnames';
|
|
5
|
-
import { s as styles } from './menu-
|
|
5
|
+
import { s as styles } from './menu-D-lOkmjA.js';
|
|
6
6
|
|
|
7
7
|
const MenuQuickActions = forwardRef(({ children, className, ...props }, ref) => {
|
|
8
8
|
return /* @__PURE__ */ jsx("div", { ...props, className: classnames(className, styles.quickActions), ref, children });
|
package/SectionHeader.js
CHANGED
|
@@ -3,7 +3,7 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
3
3
|
import { forwardRef } from 'react';
|
|
4
4
|
import { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';
|
|
5
5
|
import { SectionHeader } from '@hh.ru/magritte-ui-section-header';
|
|
6
|
-
import { s as styles } from './menu-
|
|
6
|
+
import { s as styles } from './menu-D-lOkmjA.js';
|
|
7
7
|
|
|
8
8
|
const MenuSectionHeader = forwardRef((props, ref) => {
|
|
9
9
|
const { isMobile } = useBreakpoint();
|
package/index.css
CHANGED
|
@@ -19,158 +19,158 @@
|
|
|
19
19
|
--magritte-color-background-state-negative-secondary-hovered-v26-0-2:#3D2622;
|
|
20
20
|
--magritte-color-background-state-negative-secondary-pressed-v26-0-2:#3D2622;
|
|
21
21
|
}
|
|
22
|
-
.magritte-disabled___ZuG-J_1-0-
|
|
22
|
+
.magritte-disabled___ZuG-J_1-0-56{
|
|
23
23
|
pointer-events:none;
|
|
24
24
|
}
|
|
25
25
|
@media (min-width: 1020px){
|
|
26
|
-
body.magritte-old-layout .magritte-drop-content-margin___q01ll_1-0-
|
|
26
|
+
body.magritte-old-layout .magritte-drop-content-margin___q01ll_1-0-56{
|
|
27
27
|
margin:0 12px;
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
@media (min-width: 1024px){
|
|
31
|
-
body:not(.magritte-old-layout) .magritte-drop-content-margin___q01ll_1-0-
|
|
31
|
+
body:not(.magritte-old-layout) .magritte-drop-content-margin___q01ll_1-0-56{
|
|
32
32
|
margin:0 12px;
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
-
.magritte-item___HyDAw_1-0-
|
|
35
|
+
.magritte-item___HyDAw_1-0-56{
|
|
36
36
|
display:flex;
|
|
37
37
|
gap:12px;
|
|
38
38
|
align-items:center;
|
|
39
39
|
padding:12px 16px;
|
|
40
40
|
}
|
|
41
41
|
@media (min-width: 1020px){
|
|
42
|
-
body.magritte-old-layout .magritte-item___HyDAw_1-0-
|
|
42
|
+
body.magritte-old-layout .magritte-item___HyDAw_1-0-56{
|
|
43
43
|
cursor:pointer;
|
|
44
44
|
border-radius:12px;
|
|
45
45
|
padding:10px 12px;
|
|
46
46
|
}
|
|
47
|
-
body.magritte-old-layout .magritte-item___HyDAw_1-0-
|
|
47
|
+
body.magritte-old-layout .magritte-item___HyDAw_1-0-56.focus-visible{
|
|
48
48
|
outline:4px solid var(--magritte-color-stroke-state-focused-accessible-v26-0-2);
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
@media (min-width: 1024px){
|
|
52
|
-
body:not(.magritte-old-layout) .magritte-item___HyDAw_1-0-
|
|
52
|
+
body:not(.magritte-old-layout) .magritte-item___HyDAw_1-0-56{
|
|
53
53
|
cursor:pointer;
|
|
54
54
|
border-radius:12px;
|
|
55
55
|
padding:10px 12px;
|
|
56
56
|
}
|
|
57
|
-
body:not(.magritte-old-layout) .magritte-item___HyDAw_1-0-
|
|
57
|
+
body:not(.magritte-old-layout) .magritte-item___HyDAw_1-0-56.focus-visible{
|
|
58
58
|
outline:4px solid var(--magritte-color-stroke-state-focused-accessible-v26-0-2);
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
-
.magritte-neutral___WyGeQ_1-0-
|
|
61
|
+
.magritte-neutral___WyGeQ_1-0-56:active{
|
|
62
62
|
background-color:var(--magritte-color-background-state-secondary-pressed-v26-0-2);
|
|
63
63
|
}
|
|
64
64
|
@media (min-width: 1020px){
|
|
65
|
-
body.magritte-old-layout .magritte-neutral___WyGeQ_1-0-
|
|
65
|
+
body.magritte-old-layout .magritte-neutral___WyGeQ_1-0-56:hover:not(:active){
|
|
66
66
|
background-color:var(--magritte-color-background-state-secondary-hovered-v26-0-2);
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
@media (min-width: 1024px){
|
|
70
|
-
body:not(.magritte-old-layout) .magritte-neutral___WyGeQ_1-0-
|
|
70
|
+
body:not(.magritte-old-layout) .magritte-neutral___WyGeQ_1-0-56:hover:not(:active){
|
|
71
71
|
background-color:var(--magritte-color-background-state-secondary-hovered-v26-0-2);
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
|
-
.magritte-negative___F7a0c_1-0-
|
|
74
|
+
.magritte-negative___F7a0c_1-0-56:active{
|
|
75
75
|
background-color:var(--magritte-color-background-state-negative-secondary-pressed-v26-0-2);
|
|
76
76
|
}
|
|
77
77
|
@media (min-width: 1020px){
|
|
78
|
-
body.magritte-old-layout .magritte-negative___F7a0c_1-0-
|
|
78
|
+
body.magritte-old-layout .magritte-negative___F7a0c_1-0-56:hover:not(:active){
|
|
79
79
|
background-color:var(--magritte-color-background-state-negative-secondary-hovered-v26-0-2);
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
@media (min-width: 1024px){
|
|
83
|
-
body:not(.magritte-old-layout) .magritte-negative___F7a0c_1-0-
|
|
83
|
+
body:not(.magritte-old-layout) .magritte-negative___F7a0c_1-0-56:hover:not(:active){
|
|
84
84
|
background-color:var(--magritte-color-background-state-negative-secondary-hovered-v26-0-2);
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
|
-
.magritte-item-icon___yCv9l_1-0-
|
|
87
|
+
.magritte-item-icon___yCv9l_1-0-56{
|
|
88
88
|
flex:0 0 auto;
|
|
89
89
|
padding:4px 0;
|
|
90
90
|
}
|
|
91
91
|
@media (min-width: 1020px){
|
|
92
|
-
body.magritte-old-layout .magritte-item-icon___yCv9l_1-0-
|
|
92
|
+
body.magritte-old-layout .magritte-item-icon___yCv9l_1-0-56{
|
|
93
93
|
padding:0;
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
@media (min-width: 1024px){
|
|
97
|
-
body:not(.magritte-old-layout) .magritte-item-icon___yCv9l_1-0-
|
|
97
|
+
body:not(.magritte-old-layout) .magritte-item-icon___yCv9l_1-0-56{
|
|
98
98
|
padding:0;
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
|
-
.magritte-item-text___GL3A5_1-0-
|
|
101
|
+
.magritte-item-text___GL3A5_1-0-56{
|
|
102
102
|
flex:1 1 auto;
|
|
103
103
|
min-width:0;
|
|
104
104
|
padding:4px 0;
|
|
105
105
|
}
|
|
106
106
|
@media (min-width: 1020px){
|
|
107
|
-
body.magritte-old-layout .magritte-item-text___GL3A5_1-0-
|
|
107
|
+
body.magritte-old-layout .magritte-item-text___GL3A5_1-0-56{
|
|
108
108
|
padding:0;
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
@media (min-width: 1024px){
|
|
112
|
-
body:not(.magritte-old-layout) .magritte-item-text___GL3A5_1-0-
|
|
112
|
+
body:not(.magritte-old-layout) .magritte-item-text___GL3A5_1-0-56{
|
|
113
113
|
padding:0;
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
|
-
.magritte-item-tag___KX5wL_1-0-
|
|
116
|
+
.magritte-item-tag___KX5wL_1-0-56{
|
|
117
117
|
flex:0 0 auto;
|
|
118
118
|
padding:4px 0;
|
|
119
119
|
}
|
|
120
120
|
@media (min-width: 1020px){
|
|
121
|
-
body.magritte-old-layout .magritte-item-tag___KX5wL_1-0-
|
|
121
|
+
body.magritte-old-layout .magritte-item-tag___KX5wL_1-0-56{
|
|
122
122
|
padding:0;
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
125
|
@media (min-width: 1024px){
|
|
126
|
-
body:not(.magritte-old-layout) .magritte-item-tag___KX5wL_1-0-
|
|
126
|
+
body:not(.magritte-old-layout) .magritte-item-tag___KX5wL_1-0-56{
|
|
127
127
|
padding:0;
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
|
-
.magritte-item-right-content___U2hc1_1-0-
|
|
130
|
+
.magritte-item-right-content___U2hc1_1-0-56{
|
|
131
131
|
flex:0 1 auto;
|
|
132
132
|
min-width:0;
|
|
133
133
|
display:flex;
|
|
134
134
|
align-items:center;
|
|
135
135
|
gap:8px;
|
|
136
136
|
}
|
|
137
|
-
.magritte-mobile-menu-container___zlY08_1-0-
|
|
137
|
+
.magritte-mobile-menu-container___zlY08_1-0-56{
|
|
138
138
|
position:relative;
|
|
139
139
|
overflow:hidden;
|
|
140
140
|
}
|
|
141
|
-
.magritte-mobile-main-menu-container___fOW3d_1-0-
|
|
141
|
+
.magritte-mobile-main-menu-container___fOW3d_1-0-56{
|
|
142
142
|
position:relative;
|
|
143
143
|
}
|
|
144
|
-
.magritte-mobile-submenu-container___od1Ev_1-0-
|
|
144
|
+
.magritte-mobile-submenu-container___od1Ev_1-0-56{
|
|
145
145
|
position:absolute;
|
|
146
146
|
inset:0 -100% auto 100%;
|
|
147
147
|
}
|
|
148
148
|
@media (prefers-reduced-motion: no-preference){
|
|
149
|
-
.magritte-mobile-main-menu-container___fOW3d_1-0-
|
|
150
|
-
.magritte-mobile-submenu-container___od1Ev_1-0-
|
|
149
|
+
.magritte-mobile-main-menu-container___fOW3d_1-0-56,
|
|
150
|
+
.magritte-mobile-submenu-container___od1Ev_1-0-56{
|
|
151
151
|
transition:transform var(--magritte-semantic-animation-time-m-duration-v26-0-2) var(--magritte-semantic-animation-ease-base-timing-function-v26-0-2);
|
|
152
152
|
}
|
|
153
153
|
}
|
|
154
|
-
.magritte-mobile-menu-container-slide___HXiEx_1-0-
|
|
155
|
-
.magritte-mobile-menu-container-slide___HXiEx_1-0-
|
|
154
|
+
.magritte-mobile-menu-container-slide___HXiEx_1-0-56 .magritte-mobile-main-menu-container___fOW3d_1-0-56,
|
|
155
|
+
.magritte-mobile-menu-container-slide___HXiEx_1-0-56 .magritte-mobile-submenu-container___od1Ev_1-0-56{
|
|
156
156
|
transform:translateX(-100%);
|
|
157
157
|
}
|
|
158
|
-
.magritte-quick-actions___HvUJ3_1-0-
|
|
158
|
+
.magritte-quick-actions___HvUJ3_1-0-56{
|
|
159
159
|
display:flex;
|
|
160
160
|
gap:4px;
|
|
161
161
|
margin:0 16px 4px;
|
|
162
162
|
}
|
|
163
163
|
@media (min-width: 1020px){
|
|
164
|
-
body.magritte-old-layout .magritte-quick-actions___HvUJ3_1-0-
|
|
164
|
+
body.magritte-old-layout .magritte-quick-actions___HvUJ3_1-0-56{
|
|
165
165
|
margin:0 12px 4px;
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
168
|
@media (min-width: 1024px){
|
|
169
|
-
body:not(.magritte-old-layout) .magritte-quick-actions___HvUJ3_1-0-
|
|
169
|
+
body:not(.magritte-old-layout) .magritte-quick-actions___HvUJ3_1-0-56{
|
|
170
170
|
margin:0 12px 4px;
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
|
-
.magritte-quick-action___1K5Ip_1-0-
|
|
173
|
+
.magritte-quick-action___1K5Ip_1-0-56{
|
|
174
174
|
display:flex;
|
|
175
175
|
flex-direction:column;
|
|
176
176
|
align-items:center;
|
|
@@ -181,31 +181,31 @@
|
|
|
181
181
|
min-width:0;
|
|
182
182
|
padding:14px 12px;
|
|
183
183
|
}
|
|
184
|
-
.magritte-quick-action___1K5Ip_1-0-
|
|
184
|
+
.magritte-quick-action___1K5Ip_1-0-56:active{
|
|
185
185
|
background-color:var(--magritte-color-background-state-secondary-pressed-v26-0-2);
|
|
186
186
|
}
|
|
187
187
|
@media (min-width: 1020px){
|
|
188
|
-
body.magritte-old-layout .magritte-quick-action___1K5Ip_1-0-
|
|
188
|
+
body.magritte-old-layout .magritte-quick-action___1K5Ip_1-0-56{
|
|
189
189
|
cursor:pointer;
|
|
190
190
|
}
|
|
191
|
-
body.magritte-old-layout .magritte-quick-action___1K5Ip_1-0-
|
|
191
|
+
body.magritte-old-layout .magritte-quick-action___1K5Ip_1-0-56:hover:not(:active){
|
|
192
192
|
background-color:var(--magritte-color-background-state-secondary-hovered-v26-0-2);
|
|
193
193
|
}
|
|
194
|
-
body.magritte-old-layout .magritte-quick-action___1K5Ip_1-0-
|
|
194
|
+
body.magritte-old-layout .magritte-quick-action___1K5Ip_1-0-56.focus-visible{
|
|
195
195
|
outline:4px solid var(--magritte-color-stroke-state-focused-accessible-v26-0-2);
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
198
|
@media (min-width: 1024px){
|
|
199
|
-
body:not(.magritte-old-layout) .magritte-quick-action___1K5Ip_1-0-
|
|
199
|
+
body:not(.magritte-old-layout) .magritte-quick-action___1K5Ip_1-0-56{
|
|
200
200
|
cursor:pointer;
|
|
201
201
|
}
|
|
202
|
-
body:not(.magritte-old-layout) .magritte-quick-action___1K5Ip_1-0-
|
|
202
|
+
body:not(.magritte-old-layout) .magritte-quick-action___1K5Ip_1-0-56:hover:not(:active){
|
|
203
203
|
background-color:var(--magritte-color-background-state-secondary-hovered-v26-0-2);
|
|
204
204
|
}
|
|
205
|
-
body:not(.magritte-old-layout) .magritte-quick-action___1K5Ip_1-0-
|
|
205
|
+
body:not(.magritte-old-layout) .magritte-quick-action___1K5Ip_1-0-56.focus-visible{
|
|
206
206
|
outline:4px solid var(--magritte-color-stroke-state-focused-accessible-v26-0-2);
|
|
207
207
|
}
|
|
208
208
|
}
|
|
209
|
-
.magritte-quick-action-text___diFW5_1-0-
|
|
209
|
+
.magritte-quick-action-text___diFW5_1-0-56{
|
|
210
210
|
max-width:100%;
|
|
211
211
|
}
|
package/index.js
CHANGED
|
@@ -20,11 +20,12 @@ import '@hh.ru/magritte-ui-icon';
|
|
|
20
20
|
import './DisabledWrapper.js';
|
|
21
21
|
import '@hh.ru/magritte-common-use-disabled';
|
|
22
22
|
import '@hh.ru/magritte-ui-typography';
|
|
23
|
+
import './itemIconDefaults.js';
|
|
23
24
|
import './useSubmenuSafeZone.js';
|
|
24
25
|
import '@hh.ru/magritte-common-func-utils';
|
|
25
26
|
import './safeZone.js';
|
|
26
27
|
import '@hh.ru/magritte-ui-switch';
|
|
27
|
-
import './menu-
|
|
28
|
+
import './menu-D-lOkmjA.js';
|
|
28
29
|
import './QuickAction.js';
|
|
29
30
|
import './QuickActions.js';
|
|
30
31
|
import './SectionHeader.js';
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Пропы, которые айтем меню сам проставляет иконке из пропа `icon`, по значению `style` айтема.
|
|
3
|
+
*
|
|
4
|
+
* Вынесено из `Item.tsx` отдельным модулем не ради переиспользования в рантайме — читатель там один.
|
|
5
|
+
* Второй читатель — Code Connect-шаблон (`figma/MenuItem.cc.ts`): он объявляет эти же значения контекстом для
|
|
6
|
+
* вложенной иконки, чтобы сниппет не повторял проп, который айтем и так подставляет. Значение, скопированное
|
|
7
|
+
* в шаблон литералом, разъезжается молча: поменяли здесь — сниппет продолжает публиковать прежнее, и ни сборка,
|
|
8
|
+
* ни рендер об этом не скажут.
|
|
9
|
+
*
|
|
10
|
+
* Модуль обязан оставаться чистыми данными без импортов рантайма (React, стили): шаблон инлайнится сборщиком,
|
|
11
|
+
* и всё, что сюда попадёт, поедет в бандл каждого энтри.
|
|
12
|
+
*/
|
|
13
|
+
export declare const MENU_ITEM_ICON_DEFAULTS: {
|
|
14
|
+
readonly neutral: {};
|
|
15
|
+
readonly negative: {
|
|
16
|
+
readonly initialColor: 'negative';
|
|
17
|
+
};
|
|
18
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"itemIconDefaults.js","sources":["src/itemIconDefaults.ts"],"sourcesContent":["/**\n * Пропы, которые айтем меню сам проставляет иконке из пропа `icon`, по значению `style` айтема.\n *\n * Вынесено из `Item.tsx` отдельным модулем не ради переиспользования в рантайме — читатель там один.\n * Второй читатель — Code Connect-шаблон (`figma/MenuItem.cc.ts`): он объявляет эти же значения контекстом для\n * вложенной иконки, чтобы сниппет не повторял проп, который айтем и так подставляет. Значение, скопированное\n * в шаблон литералом, разъезжается молча: поменяли здесь — сниппет продолжает публиковать прежнее, и ни сборка,\n * ни рендер об этом не скажут.\n *\n * Модуль обязан оставаться чистыми данными без импортов рантайма (React, стили): шаблон инлайнится сборщиком,\n * и всё, что сюда попадёт, поедет в бандл каждого энтри.\n */\nexport const MENU_ITEM_ICON_DEFAULTS = {\n neutral: {},\n negative: { initialColor: 'negative' },\n} as const;\n"],"names":[],"mappings":"AAYO,MAAM,uBAA0B,GAAA;AAAA,EACnC,SAAS,EAAC;AAAA,EACV,QAAA,EAAU,EAAE,YAAA,EAAc,UAAW,EAAA;AACzC;;;;"}
|
package/menu-D-lOkmjA.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import './index.css';
|
|
2
|
+
var styles = {"disabled":"magritte-disabled___ZuG-J_1-0-56","drop-content-margin":"magritte-drop-content-margin___q01ll_1-0-56","dropContentMargin":"magritte-drop-content-margin___q01ll_1-0-56","item":"magritte-item___HyDAw_1-0-56","neutral":"magritte-neutral___WyGeQ_1-0-56","negative":"magritte-negative___F7a0c_1-0-56","item-icon":"magritte-item-icon___yCv9l_1-0-56","itemIcon":"magritte-item-icon___yCv9l_1-0-56","item-text":"magritte-item-text___GL3A5_1-0-56","itemText":"magritte-item-text___GL3A5_1-0-56","item-tag":"magritte-item-tag___KX5wL_1-0-56","itemTag":"magritte-item-tag___KX5wL_1-0-56","item-right-content":"magritte-item-right-content___U2hc1_1-0-56","itemRightContent":"magritte-item-right-content___U2hc1_1-0-56","mobile-menu-container":"magritte-mobile-menu-container___zlY08_1-0-56","mobileMenuContainer":"magritte-mobile-menu-container___zlY08_1-0-56","mobile-main-menu-container":"magritte-mobile-main-menu-container___fOW3d_1-0-56","mobileMainMenuContainer":"magritte-mobile-main-menu-container___fOW3d_1-0-56","mobile-submenu-container":"magritte-mobile-submenu-container___od1Ev_1-0-56","mobileSubmenuContainer":"magritte-mobile-submenu-container___od1Ev_1-0-56","mobile-menu-container-slide":"magritte-mobile-menu-container-slide___HXiEx_1-0-56","mobileMenuContainerSlide":"magritte-mobile-menu-container-slide___HXiEx_1-0-56","quick-actions":"magritte-quick-actions___HvUJ3_1-0-56","quickActions":"magritte-quick-actions___HvUJ3_1-0-56","quick-action":"magritte-quick-action___1K5Ip_1-0-56","quickAction":"magritte-quick-action___1K5Ip_1-0-56","quick-action-text":"magritte-quick-action-text___diFW5_1-0-56","quickActionText":"magritte-quick-action-text___diFW5_1-0-56"};
|
|
3
|
+
|
|
4
|
+
export { styles as s };
|
|
5
|
+
//# sourceMappingURL=menu-D-lOkmjA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-D-lOkmjA.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hh.ru/magritte-ui-menu",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.56",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"sideEffects": [
|
|
@@ -17,7 +17,11 @@
|
|
|
17
17
|
"ts-check": "yarn root:ts-check $(pwd)",
|
|
18
18
|
"test": "yarn root:test $(pwd)",
|
|
19
19
|
"test:types": "yarn root:test:types $(pwd)",
|
|
20
|
-
"watch": "yarn root:watch $(pwd)"
|
|
20
|
+
"watch": "yarn root:watch $(pwd)",
|
|
21
|
+
"figma-publish": "yarn root:figma-publish $(pwd)",
|
|
22
|
+
"figma-unpublish": "yarn root:figma-unpublish $(pwd)",
|
|
23
|
+
"figma-snapshot-check": "yarn root:figma-snapshot $(pwd)",
|
|
24
|
+
"figma-snapshot-update": "yarn root:figma-snapshot $(pwd) --update"
|
|
21
25
|
},
|
|
22
26
|
"dependencies": {
|
|
23
27
|
"@hh.ru/magritte-common-func-utils": "1.3.17",
|
|
@@ -25,7 +29,7 @@
|
|
|
25
29
|
"@hh.ru/magritte-common-use-disabled": "1.0.17",
|
|
26
30
|
"@hh.ru/magritte-common-use-multiple-refs": "1.1.13",
|
|
27
31
|
"@hh.ru/magritte-design-tokens": "26.0.2",
|
|
28
|
-
"@hh.ru/magritte-ui-bottom-sheet": "9.4.
|
|
32
|
+
"@hh.ru/magritte-ui-bottom-sheet": "9.4.55",
|
|
29
33
|
"@hh.ru/magritte-ui-breakpoint": "6.1.3",
|
|
30
34
|
"@hh.ru/magritte-ui-divider": "3.2.13",
|
|
31
35
|
"@hh.ru/magritte-ui-drop": "12.3.64",
|
|
@@ -45,5 +49,5 @@
|
|
|
45
49
|
"publishConfig": {
|
|
46
50
|
"access": "public"
|
|
47
51
|
},
|
|
48
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "51c32c8cee9bb273937378996ab89aeb50d9aa48"
|
|
49
53
|
}
|
package/menu-BKJV53WD.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import './index.css';
|
|
2
|
-
var styles = {"disabled":"magritte-disabled___ZuG-J_1-0-54","drop-content-margin":"magritte-drop-content-margin___q01ll_1-0-54","dropContentMargin":"magritte-drop-content-margin___q01ll_1-0-54","item":"magritte-item___HyDAw_1-0-54","neutral":"magritte-neutral___WyGeQ_1-0-54","negative":"magritte-negative___F7a0c_1-0-54","item-icon":"magritte-item-icon___yCv9l_1-0-54","itemIcon":"magritte-item-icon___yCv9l_1-0-54","item-text":"magritte-item-text___GL3A5_1-0-54","itemText":"magritte-item-text___GL3A5_1-0-54","item-tag":"magritte-item-tag___KX5wL_1-0-54","itemTag":"magritte-item-tag___KX5wL_1-0-54","item-right-content":"magritte-item-right-content___U2hc1_1-0-54","itemRightContent":"magritte-item-right-content___U2hc1_1-0-54","mobile-menu-container":"magritte-mobile-menu-container___zlY08_1-0-54","mobileMenuContainer":"magritte-mobile-menu-container___zlY08_1-0-54","mobile-main-menu-container":"magritte-mobile-main-menu-container___fOW3d_1-0-54","mobileMainMenuContainer":"magritte-mobile-main-menu-container___fOW3d_1-0-54","mobile-submenu-container":"magritte-mobile-submenu-container___od1Ev_1-0-54","mobileSubmenuContainer":"magritte-mobile-submenu-container___od1Ev_1-0-54","mobile-menu-container-slide":"magritte-mobile-menu-container-slide___HXiEx_1-0-54","mobileMenuContainerSlide":"magritte-mobile-menu-container-slide___HXiEx_1-0-54","quick-actions":"magritte-quick-actions___HvUJ3_1-0-54","quickActions":"magritte-quick-actions___HvUJ3_1-0-54","quick-action":"magritte-quick-action___1K5Ip_1-0-54","quickAction":"magritte-quick-action___1K5Ip_1-0-54","quick-action-text":"magritte-quick-action-text___diFW5_1-0-54","quickActionText":"magritte-quick-action-text___diFW5_1-0-54"};
|
|
3
|
-
|
|
4
|
-
export { styles as s };
|
|
5
|
-
//# sourceMappingURL=menu-BKJV53WD.js.map
|
package/menu-BKJV53WD.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"menu-BKJV53WD.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|