@skbkontur/react-ui 6.0.7 → 6.0.8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"PopupMenu.js","sourceRoot":"","sources":["../../../internal/PopupMenu/PopupMenu.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,UAAU,EACV,QAAQ,GACT,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,cAAc,WAAW,CAAC;AA8D1B,MAAM,CAAC,IAAM,aAAa,GAAG;IAC3B,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;CACV,CAAC;AAEX,IAAM,SAAS,GAAyB;IACtC,UAAU;IACV,YAAY;IACZ,WAAW;IACX,WAAW;IACX,cAAc;IACd,cAAc;IACd,aAAa;IACb,eAAe;IACf,cAAc;IACd,UAAU;IACV,aAAa;IACb,aAAa;CACd,CAAC;AAOF;IAA+B,6BAA+C;IAA9E;;QAQU,YAAM,GAAG,QAAQ,CAAC,IAAI,GAAG,WAAW,EAAE,CAAC;QASvC,cAAQ,GAAG,iBAAiB,CAAC,WAAS,CAAC,YAAY,CAAC,CAAC;QAItD,WAAK,GAAG;YACb,WAAW,EAAE,KAAK;YAClB,yBAAyB,EAAE,KAAK;SACjC,CAAC;QAEM,oBAAc,GAA2B,IAAI,CAAC;QAC9C,2BAAqB,GAAuB,IAAI,CAAC;QACjD,UAAI,GAAmB,IAAI,CAAC;QA8E7B,UAAI,GAAG,cAAY,OAAA,KAAI,CAAC,QAAQ,EAAE,EAAf,CAAe,CAAC;QACnC,WAAK,GAAG,cAAY,OAAA,KAAI,CAAC,QAAQ,EAAE,EAAf,CAAe,CAAC;QAEnC,aAAO,GAAG,UAAC,OAAuB;YACxC,KAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACtB,CAAC,CAAC;QAEM,gBAAU,GAAG;YACnB,IAAI,KAAI,CAAC,IAAI,EAAE,CAAC;gBACd,KAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;QAEM,wBAAkB,GAAG,UAAC,OAAwB;;YACpD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC/D,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,OAAO,KAAK,CAAC,YAAY,CAAC,OAAkC,EAAE;gBAC5D,EAAE,EAAE,KAAI,CAAC,KAAK,CAAC,EAAE;gBACjB,eAAe,EAAE,MAAA,KAAI,CAAC,KAAK,CAAC,WAAW,mCAAI,KAAI,CAAC,MAAM;gBACtD,eAAe,EAAE,KAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;gBAC1D,YAAY,EAAE,KAAI,CAAC,KAAK,CAAC,YAAY,CAAC;aACvC,CAAC,CAAC;QACL,CAAC,CAAC;QAEM,mBAAa,GAAG;YACtB,IAAI,OAAO,KAAI,CAAC,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBAC7C,IAAM,OAAO,GAAG,KAAI,CAAC,KAAK,CAAC,OAAO,CAAC;oBACjC,MAAM,EAAE,KAAI,CAAC,KAAK,CAAC,WAAW;oBAC9B,QAAQ,EAAE,KAAI,CAAC,QAAQ;oBACvB,SAAS,EAAE,KAAI,CAAC,QAAQ;oBACxB,UAAU,EAAE,KAAI,CAAC,UAAU;oBAC3B,OAAO,EAAE,KAAI,CAAC,KAAK,CAAC,OAAO;iBAC5B,CAAC,CAAC;gBAEH,OAAO,CACL,0CACY,iBAAiB,CAAC,OAAO,EACnC,SAAS,EAAE,KAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAChC,GAAG,EAAE,UAAC,OAAO;wBACX,KAAI,CAAC,cAAc,GAAG,OAAO,CAAC;oBAChC,CAAC,IAEA,KAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAC5B,CACR,CAAC;YACJ,CAAC;YAED,OAAO,CACL,0CACY,iBAAiB,CAAC,OAAO,EACnC,OAAO,EAAE,KAAI,CAAC,kBAAkB,EAChC,SAAS,EAAE,KAAI,CAAC,oBAAoB,EACpC,GAAG,EAAE,UAAC,OAAO;oBACX,KAAI,CAAC,cAAc,GAAG,OAAO,CAAC;gBAChC,CAAC,EACD,SAAS,EAAE,KAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAE/B,KAAI,CAAC,kBAAkB,CAAC,KAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CACvC,CACR,CAAC;QACJ,CAAC,CAAC;QAEM,6BAAuB,GAAG,cAAM,OAAA,KAAI,CAAC,QAAQ,EAAE,EAAf,CAAe,CAAC;QAWhD,cAAQ,GAAG,UAAC,yBAAmC;YACrD,KAAI,CAAC,SAAS,EAAE,CAAC;YACjB,KAAI,CAAC,QAAQ,CACX;gBACE,WAAW,EAAE,IAAI;gBACjB,yBAAyB,2BAAA;aAC1B,EACD;gBACE,KAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC,CACF,CAAC;QACJ,CAAC,CAAC;QAEM,cAAQ,GAAG,UAAC,YAAsB;YACxC,KAAI,CAAC,QAAQ,CACX;gBACE,WAAW,EAAE,KAAK;gBAClB,yBAAyB,EAAE,KAAK;aACjC,EACD;gBACE,KAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YAC/C,CAAC,CACF,CAAC;QACJ,CAAC,CAAC;QAEM,gBAAU,GAAG;YACnB,KAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAI,CAAC,QAAQ,EAAE,CAAC;QAC7D,CAAC,CAAC;QAEM,wBAAkB,GAAG;YAC3B,KAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC,CAAC;QAEM,0BAAoB,GAAG,UAAC,CAAmC;YACjE,IAAI,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5D,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,CAAC;QAEM,mBAAa,GAAG,UAAC,CAAmC;YAC1D,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnB,IAAM,YAAY,GAAG,IAAI,CAAC;gBAC1B,KAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC;QAEM,eAAS,GAAG;YAClB,IAAI,KAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;gBAC/B,KAAI,CAAC,qBAAqB,GAAG,KAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAA4B,CAAC;YACvF,CAAC;QACH,CAAC,CAAC;QAEM,kBAAY,GAAG;YACrB,IAAI,KAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC/B,KAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;gBACnC,KAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;YACpC,CAAC;QACH,CAAC,CAAC;QAEM,6BAAuB,GAAG,UAAC,qBAA8B;YAC/D,IAAI,qBAAqB,EAAE,CAAC;gBAC1B,KAAI,CAAC,YAAY,EAAE,CAAC;YACtB,CAAC;YAED,IAAI,KAAI,CAAC,KAAK,CAAC,WAAW,IAAI,KAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAChD,KAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtB,CAAC;YAED,IAAI,CAAC,KAAI,CAAC,KAAK,CAAC,WAAW,IAAI,KAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClD,KAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;YAED,IAAI,OAAO,KAAI,CAAC,KAAK,CAAC,iBAAiB,KAAK,UAAU,EAAE,CAAC;gBACvD,KAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAI,CAAC,KAAK,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC,CAAC;QAEM,yBAAmB,GAAG,UAAC,KAAwC;YACrE,IAAI,KAAK,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBAC/B,OAAO;YACT,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7B,KAAK,CAAC,cAAc,EAAE,CAAC;YACzB,CAAC;YAED,IAAM,YAAY,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;YAC9C,KAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC9B,CAAC,CAAC;;IACJ,CAAC;kBA/QY,SAAS;IAgCb,0BAAM,GAAb;QAAA,iBAqBC;QApBC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEtC,OAAO,CACL,oBAAC,YAAY,CAAC,QAAQ,QACnB,UAAC,KAAK;YACL,OAAO,CACL,oBAAC,YAAY,CAAC,QAAQ,IACpB,KAAK,EAAE,YAAY,CAAC,MAAM,CACxB;oBACE,WAAW,EAAE,KAAK,CAAC,oBAAoB;iBACxC,EACD,KAAK,CACN,IAEA,KAAI,CAAC,UAAU,EAAE,CACI,CACzB,CAAC;QACJ,CAAC,CACqB,CACzB,CAAC;IACJ,CAAC;IAEO,8BAAU,GAAlB;;QACQ,IAAA,KAAqC,IAAI,CAAC,QAAQ,EAAE,EAAlD,WAAW,iBAAA,EAAE,iBAAiB,uBAAoB,CAAC;QAC3D,OAAO,CACL,oBAAC,aAAa,aAAC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAM,IAAI,CAAC,KAAK;YAC1D,oBAAC,WAAW,IACV,cAAc,EAAE,IAAI,CAAC,uBAAuB,EAC5C,cAAc,EAAE,IAAI,CAAC,uBAAuB,EAC5C,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;gBAE9B,yCACY,iBAAiB,CAAC,IAAI,EAChC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAClC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;oBAEjC,IAAI,CAAC,aAAa,EAAE;oBACpB,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAC7C,oBAAC,KAAK,IACJ,EAAE,EAAE,MAAA,IAAI,CAAC,KAAK,CAAC,WAAW,mCAAI,IAAI,CAAC,MAAM,EACzC,aAAa,EAAE,IAAI,CAAC,cAAc,EAClC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAC9B,SAAS,QACT,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAC9B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,EACpC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,EAC9B,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,IAAI,CAAC,UAAU,EACvB,oBAAoB,EAAE,IAAI,CAAC,QAAQ,EACnC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,MAAM;wBAEpE,oBAAC,IAAI,IACH,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,MAAM,EAC5E,SAAS,EAAE,IAAI,CAAC,aAAa,EAC7B,WAAW,EAAE,IAAI,CAAC,mBAAmB,EACrC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB,EACjD,eAAe,EAAE,KAAK,EACtB,GAAG,EAAE,IAAI,CAAC,OAAO,EACjB,wBAAwB,EAAE,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACvE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EACzB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAExB,IAAI,CAAC,KAAK,CAAC,QAAQ,CACf,CACD,CACT,CACG,CACM,CACA,CACjB,CAAC;IACJ,CAAC;IAoEO,gCAAY,GAApB;QACE,IAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC;QAC5C,IAAI,SAAS,IAAI,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7C,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;;IAlLa,6BAAmB,GAAG,WAAW,AAAd,CAAe;IAClC,qBAAW,GAAG,WAAW,AAAd,CAAe;IAQ1B,sBAAY,GAAiB;QACzC,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,aAAa,CAAC,OAAO;QAC3B,WAAW,EAAE,IAAI;QACjB,iBAAiB,EAAE,KAAK;KACzB,AALyB,CAKxB;IAIY,cAAI,GAAG,aAAa,AAAhB,CAAiB;IAnBxB,SAAS;QAHrB,qBAAqB;QACrB,QAAQ;QACR,gBAAgB;OACJ,SAAS,CA+QrB;IAAD,gBAAC;CAAA,AA/QD,CAA+B,KAAK,CAAC,SAAS,GA+Q7C;SA/QY,SAAS","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport type { AriaAttributes, HTMLAttributes, JSX } from 'react';\nimport React from 'react';\n\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport {\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n someKeys,\n} from '../../lib/events/keyboard/identifiers.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory.js';\nimport { getRandomID } from '../../lib/utils.js';\nimport type { HTMLProps } from '../../typings/html.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport type { CommonProps } from '../CommonWrapper/index.js';\nimport { CommonWrapper } from '../CommonWrapper/index.js';\nimport { Menu } from '../Menu/index.js';\nimport type { MenuProps } from '../Menu/index.js';\nimport { Popup, PopupIds } from '../Popup/index.js';\nimport type { PopupPositionsType } from '../Popup/index.js';\nimport { RenderLayer } from '../RenderLayer/index.js';\nimport { getStyles } from './PopupMenu.styles.js';\nimport { PopupMenuDataTids } from './tids.js';\nimport { isValidPositions } from './validatePositions.js';\n\nexport * from './tids.js';\n\nexport interface PopupMenuCaptionProps {\n opened: boolean;\n openMenu: (firstItemShouldBeSelected?: boolean) => void;\n closeMenu: (restoreFocus?: boolean) => void;\n toggleMenu: () => void;\n /** @ignore */\n corners?: React.CSSProperties;\n}\n\nexport interface PopupMenuProps\n extends\n CommonProps,\n Pick<MenuProps, 'preventIconsOffset'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n Pick<AriaAttributes, 'aria-label'> {\n children?: React.ReactNode;\n /** Максимальная высота меню */\n menuMaxHeight?: number | string;\n /** Ширина меню */\n menuWidth?: number | string;\n /** Ширина контейнера и caption */\n width?: React.CSSProperties['width'];\n\n /**\n * Элемент или функция возвращающая элемент,\n * если передана, используется вместо ```caption```,\n * в таком случае управлять открытием и закрытием меню\n * придется в этой функции\n */\n caption: React.ReactNode | ((props: PopupMenuCaptionProps) => React.ReactNode);\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n /** Массив разрешенных положений меню относительно caption'а. */\n positions?: PopupPositionsType[];\n /** Колбэк, вызываемый после открытия/закрытия меню */\n onChangeMenuState?: (isOpened: boolean, restoreFocus: boolean) => void;\n /** Пропсы, передающиеся в Popup */\n popupHasPin?: boolean;\n popupMargin?: number;\n popupPinOffset?: number;\n type?: 'dropdown' | 'tooltip';\n disableAnimations?: boolean;\n /** Действие при открытии меню. */\n onOpen?: () => void;\n /** Действие при закрытии меню. */\n onClose?: () => void;\n /** `id` выпадающего меню. */\n popupMenuId?: HTMLProps['id'];\n\n /** @ignore */\n corners?: React.CSSProperties;\n}\n\ninterface PopupMenuState {\n menuVisible: boolean;\n firstItemShouldBeSelected?: boolean;\n}\n\nexport const PopupMenuType = {\n Dropdown: 'dropdown',\n Tooltip: 'tooltip',\n} as const;\n\nconst Positions: PopupPositionsType[] = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n 'left top',\n 'left middle',\n 'left bottom',\n];\n\ntype DefaultProps = Required<Pick<PopupMenuProps, 'positions' | 'type' | 'popupHasPin' | 'disableAnimations'>>;\n\n@withRenderEnvironment\n@rootNode\n@responsiveLayout\nexport class PopupMenu extends React.Component<PopupMenuProps, PopupMenuState> {\n public static __KONTUR_REACT_UI__ = 'PopupMenu';\n public static displayName = 'PopupMenu';\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private styles!: ReturnType<typeof getStyles>;\n private isMobileLayout!: boolean;\n private rootId = PopupIds.root + getRandomID();\n\n public static defaultProps: DefaultProps = {\n positions: Positions,\n type: PopupMenuType.Tooltip,\n popupHasPin: true,\n disableAnimations: false,\n };\n\n private getProps = createPropsGetter(PopupMenu.defaultProps);\n\n public static Type = PopupMenuType;\n\n public state = {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n };\n\n private captionWrapper: HTMLSpanElement | null = null;\n private savedFocusableElement: HTMLElement | null = null;\n private menu: Nullable<Menu> = null;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public render(): JSX.Element {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n menuOffsetY: theme.popupMenuMenuOffsetY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { popupHasPin, disableAnimations } = this.getProps();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.hideMenuWithoutFocusing}\n onFocusOutside={this.hideMenuWithoutFocusing}\n active={this.state.menuVisible}\n >\n <div\n data-tid={PopupMenuDataTids.root}\n className={this.styles.container()}\n style={{ width: this.props.width }}\n >\n {this.renderCaption()}\n {this.captionWrapper && this.props.children && (\n <Popup\n id={this.props.popupMenuId ?? this.rootId}\n anchorElement={this.captionWrapper}\n opened={this.state.menuVisible}\n hasShadow\n margin={this.props.popupMargin}\n hasPin={popupHasPin}\n pinOffset={this.props.popupPinOffset}\n positions={this.getPositions()}\n disableAnimations={disableAnimations}\n onOpen={this.handleOpen}\n mobileOnCloseRequest={this.hideMenu}\n width={this.isMobileLayout ? 'auto' : this.props.menuWidth || 'auto'}\n >\n <Menu\n maxHeight={this.isMobileLayout ? 'none' : this.props.menuMaxHeight || 'none'}\n onKeyDown={this.handleKeyDown}\n onItemClick={this.handleItemSelection}\n preventIconsOffset={this.props.preventIconsOffset}\n cyclicSelection={false}\n ref={this.menuRef}\n initialSelectedItemIndex={this.state.firstItemShouldBeSelected ? 0 : -1}\n header={this.props.header}\n footer={this.props.footer}\n >\n {this.props.children}\n </Menu>\n </Popup>\n )}\n </div>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n public open = (): void => this.showMenu();\n public close = (): void => this.hideMenu();\n\n private menuRef = (element: Nullable<Menu>) => {\n this.menu = element;\n };\n\n private handleOpen = () => {\n if (this.menu) {\n this.menu.focus();\n }\n };\n\n private passPropsToCaption = (caption: React.ReactNode) => {\n if (typeof caption === 'string' || typeof caption === 'number') {\n return caption;\n }\n\n return React.cloneElement(caption as React.ReactElement<any>, {\n id: this.props.id,\n 'aria-controls': this.props.popupMenuId ?? this.rootId,\n 'aria-expanded': this.state.menuVisible ? 'true' : 'false',\n 'aria-label': this.props['aria-label'],\n });\n };\n\n private renderCaption = () => {\n if (typeof this.props.caption === 'function') {\n const caption = this.props.caption({\n opened: this.state.menuVisible,\n openMenu: this.showMenu,\n closeMenu: this.hideMenu,\n toggleMenu: this.toggleMenu,\n corners: this.props.corners,\n });\n\n return (\n <span\n data-tid={PopupMenuDataTids.caption}\n className={this.styles.caption()}\n ref={(element) => {\n this.captionWrapper = element;\n }}\n >\n {this.passPropsToCaption(caption)}\n </span>\n );\n }\n\n return (\n <span\n data-tid={PopupMenuDataTids.caption}\n onClick={this.handleCaptionClick}\n onKeyDown={this.handleCaptionKeyDown}\n ref={(element) => {\n this.captionWrapper = element;\n }}\n className={this.styles.caption()}\n >\n {this.passPropsToCaption(this.props.caption)}\n </span>\n );\n };\n\n private hideMenuWithoutFocusing = () => this.hideMenu();\n\n private getPositions(): Readonly<PopupPositionsType[]> {\n const positions = this.getProps().positions;\n if (positions && isValidPositions(positions)) {\n return positions;\n }\n\n return Positions;\n }\n\n private showMenu = (firstItemShouldBeSelected?: boolean): void => {\n this.saveFocus();\n this.setState(\n {\n menuVisible: true,\n firstItemShouldBeSelected,\n },\n () => {\n this.handleChangeMenuVisible(false);\n },\n );\n };\n\n private hideMenu = (restoreFocus?: boolean): void => {\n this.setState(\n {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n },\n () => {\n this.handleChangeMenuVisible(!!restoreFocus);\n },\n );\n };\n\n private toggleMenu = (): void => {\n this.state.menuVisible ? this.hideMenu() : this.showMenu();\n };\n\n private handleCaptionClick = (): void => {\n this.toggleMenu();\n };\n\n private handleCaptionKeyDown = (e: React.KeyboardEvent<HTMLElement>): void => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n this.showMenu(true);\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n if (isKeyEscape(e)) {\n const restoreFocus = true;\n this.hideMenu(restoreFocus);\n }\n };\n\n private saveFocus = (): void => {\n if (this.globalObject.document) {\n this.savedFocusableElement = this.globalObject.document.activeElement as HTMLElement;\n }\n };\n\n private restoreFocus = (): void => {\n if (this.savedFocusableElement) {\n this.savedFocusableElement.focus();\n this.savedFocusableElement = null;\n }\n };\n\n private handleChangeMenuVisible = (focusShouldBeRestored: boolean): void => {\n if (focusShouldBeRestored) {\n this.restoreFocus();\n }\n\n if (this.state.menuVisible && this.props.onOpen) {\n this.props.onOpen();\n }\n\n if (!this.state.menuVisible && this.props.onClose) {\n this.props.onClose();\n }\n\n if (typeof this.props.onChangeMenuState === 'function') {\n this.props.onChangeMenuState(this.state.menuVisible, focusShouldBeRestored);\n }\n };\n\n private handleItemSelection = (event: React.SyntheticEvent<HTMLElement>): void => {\n if (event.isDefaultPrevented()) {\n return;\n }\n\n if (event.type === 'keydown') {\n event.preventDefault();\n }\n\n const restoreFocus = event.type === 'keydown';\n this.hideMenu(restoreFocus);\n };\n}\n"]}
1
+ {"version":3,"file":"PopupMenu.js","sourceRoot":"","sources":["../../../internal/PopupMenu/PopupMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport type { AriaAttributes, HTMLAttributes, JSX } from 'react';\nimport React from 'react';\n\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport {\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n someKeys,\n} from '../../lib/events/keyboard/identifiers.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory.js';\nimport { getRandomID } from '../../lib/utils.js';\nimport type { HTMLProps } from '../../typings/html.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport type { CommonProps } from '../CommonWrapper/index.js';\nimport { CommonWrapper } from '../CommonWrapper/index.js';\nimport { Menu } from '../Menu/index.js';\nimport type { MenuProps } from '../Menu/index.js';\nimport { Popup, PopupIds } from '../Popup/index.js';\nimport type { PopupPositionsType } from '../Popup/index.js';\nimport { RenderLayer } from '../RenderLayer/index.js';\nimport { getStyles } from './PopupMenu.styles.js';\nimport { PopupMenuDataTids } from './tids.js';\nimport { isValidPositions } from './validatePositions.js';\n\nexport * from './tids.js';\n\nexport interface PopupMenuCaptionProps {\n opened: boolean;\n openMenu: (firstItemShouldBeSelected?: boolean) => void;\n closeMenu: (restoreFocus?: boolean) => void;\n toggleMenu: () => void;\n /** @ignore */\n corners?: React.CSSProperties;\n}\n\nexport interface PopupMenuProps\n extends\n CommonProps,\n Pick<MenuProps, 'preventIconsOffset'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n Pick<AriaAttributes, 'aria-label'> {\n children?: React.ReactNode;\n /** Максимальная высота меню */\n menuMaxHeight?: number | string;\n /** Ширина меню */\n menuWidth?: number | string;\n /** Ширина контейнера и caption */\n width?: React.CSSProperties['width'];\n\n /**\n * Элемент или функция возвращающая элемент,\n * если передана, используется вместо ```caption```,\n * в таком случае управлять открытием и закрытием меню\n * придется в этой функции\n */\n caption: React.ReactNode | ((props: PopupMenuCaptionProps) => React.ReactNode);\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n /** Массив разрешенных положений меню относительно caption'а. */\n positions?: PopupPositionsType[];\n /** Колбэк, вызываемый после открытия/закрытия меню */\n onChangeMenuState?: (isOpened: boolean, restoreFocus: boolean) => void;\n /** Пропсы, передающиеся в Popup */\n popupHasPin?: boolean;\n popupMargin?: number;\n popupPinOffset?: number;\n type?: 'dropdown' | 'tooltip';\n disableAnimations?: boolean;\n /** Действие при открытии меню. */\n onOpen?: () => void;\n /** Действие при закрытии меню. */\n onClose?: () => void;\n /** `id` выпадающего меню. */\n popupMenuId?: HTMLProps['id'];\n\n /** @ignore */\n corners?: React.CSSProperties;\n}\n\ninterface PopupMenuState {\n menuVisible: boolean;\n firstItemShouldBeSelected?: boolean;\n}\n\nexport const PopupMenuType = {\n Dropdown: 'dropdown',\n Tooltip: 'tooltip',\n} as const;\n\nconst Positions: PopupPositionsType[] = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n 'left top',\n 'left middle',\n 'left bottom',\n];\n\ntype DefaultProps = Required<Pick<PopupMenuProps, 'positions' | 'type' | 'popupHasPin' | 'disableAnimations'>>;\n\n@withRenderEnvironment\n@rootNode\n@responsiveLayout\nexport class PopupMenu extends React.Component<PopupMenuProps, PopupMenuState> {\n public static __KONTUR_REACT_UI__ = 'PopupMenu';\n public static displayName = 'PopupMenu';\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private styles!: ReturnType<typeof getStyles>;\n private isMobileLayout!: boolean;\n private rootId = PopupIds.root + getRandomID();\n\n public static defaultProps: DefaultProps = {\n positions: Positions,\n type: PopupMenuType.Tooltip,\n popupHasPin: true,\n disableAnimations: false,\n };\n\n private getProps = createPropsGetter(PopupMenu.defaultProps);\n\n public static Type = PopupMenuType;\n\n public state = {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n };\n\n private captionWrapper: HTMLSpanElement | null = null;\n private savedFocusableElement: HTMLElement | null = null;\n private menu: Nullable<Menu> = null;\n private shouldRestoreFocusOnClose = false;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public render(): JSX.Element {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n menuOffsetY: theme.popupMenuMenuOffsetY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { popupHasPin, disableAnimations } = this.getProps();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.hideMenuWithoutFocusing}\n onFocusOutside={this.hideMenuWithoutFocusing}\n active={this.state.menuVisible}\n >\n <div\n data-tid={PopupMenuDataTids.root}\n className={this.styles.container()}\n style={{ width: this.props.width }}\n >\n {this.renderCaption()}\n {this.captionWrapper && this.props.children && (\n <Popup\n id={this.props.popupMenuId ?? this.rootId}\n anchorElement={this.captionWrapper}\n opened={this.state.menuVisible}\n hasShadow\n margin={this.props.popupMargin}\n hasPin={popupHasPin}\n pinOffset={this.props.popupPinOffset}\n positions={this.getPositions()}\n disableAnimations={disableAnimations}\n onOpen={this.handleOpen}\n mobileOnCloseRequest={this.hideMenu}\n width={this.isMobileLayout ? 'auto' : this.props.menuWidth || 'auto'}\n >\n <Menu\n maxHeight={this.isMobileLayout ? 'none' : this.props.menuMaxHeight || 'none'}\n onKeyDown={this.handleKeyDown}\n onItemClick={this.handleItemSelection}\n preventIconsOffset={this.props.preventIconsOffset}\n cyclicSelection={false}\n ref={this.menuRef}\n initialSelectedItemIndex={this.state.firstItemShouldBeSelected ? 0 : -1}\n header={this.props.header}\n footer={this.props.footer}\n >\n {this.props.children}\n </Menu>\n </Popup>\n )}\n </div>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n public open = (): void => this.showMenu();\n public close = (): void => this.hideMenu();\n\n public componentDidUpdate(_prevProps: PopupMenuProps, prevState: PopupMenuState): void {\n if (prevState.menuVisible === this.state.menuVisible) {\n return;\n }\n\n const focusShouldBeRestored = !this.state.menuVisible && this.shouldRestoreFocusOnClose;\n\n if (focusShouldBeRestored) {\n this.restoreFocus();\n }\n\n if (this.state.menuVisible) {\n this.props.onOpen?.();\n } else {\n this.props.onClose?.();\n this.shouldRestoreFocusOnClose = false;\n }\n\n this.props.onChangeMenuState?.(this.state.menuVisible, focusShouldBeRestored);\n }\n\n private menuRef = (element: Nullable<Menu>) => {\n this.menu = element;\n };\n\n private handleOpen = () => {\n if (this.menu) {\n this.menu.focus();\n }\n };\n\n private passPropsToCaption = (caption: React.ReactNode) => {\n if (typeof caption === 'string' || typeof caption === 'number') {\n return caption;\n }\n\n return React.cloneElement(caption as React.ReactElement<any>, {\n id: this.props.id,\n 'aria-controls': this.props.popupMenuId ?? this.rootId,\n 'aria-expanded': this.state.menuVisible ? 'true' : 'false',\n 'aria-label': this.props['aria-label'],\n });\n };\n\n private renderCaption = () => {\n if (typeof this.props.caption === 'function') {\n const caption = this.props.caption({\n opened: this.state.menuVisible,\n openMenu: this.showMenu,\n closeMenu: this.hideMenu,\n toggleMenu: this.toggleMenu,\n corners: this.props.corners,\n });\n\n return (\n <span\n data-tid={PopupMenuDataTids.caption}\n className={this.styles.caption()}\n ref={(element) => {\n this.captionWrapper = element;\n }}\n >\n {this.passPropsToCaption(caption)}\n </span>\n );\n }\n\n return (\n <span\n data-tid={PopupMenuDataTids.caption}\n onClick={this.handleCaptionClick}\n onKeyDown={this.handleCaptionKeyDown}\n ref={(element) => {\n this.captionWrapper = element;\n }}\n className={this.styles.caption()}\n >\n {this.passPropsToCaption(this.props.caption)}\n </span>\n );\n };\n\n private hideMenuWithoutFocusing = () => this.hideMenu();\n\n private getPositions(): Readonly<PopupPositionsType[]> {\n const positions = this.getProps().positions;\n if (positions && isValidPositions(positions)) {\n return positions;\n }\n\n return Positions;\n }\n\n private showMenu = (firstItemShouldBeSelected?: boolean): void => {\n this.saveFocus();\n this.shouldRestoreFocusOnClose = false;\n this.setState({\n menuVisible: true,\n firstItemShouldBeSelected,\n });\n };\n\n private hideMenu = (restoreFocus?: boolean): void => {\n this.shouldRestoreFocusOnClose = !!restoreFocus;\n this.setState({\n menuVisible: false,\n firstItemShouldBeSelected: false,\n });\n };\n\n private toggleMenu = (): void => {\n this.state.menuVisible ? this.hideMenu() : this.showMenu();\n };\n\n private handleCaptionClick = (): void => {\n this.toggleMenu();\n };\n\n private handleCaptionKeyDown = (e: React.KeyboardEvent<HTMLElement>): void => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n this.showMenu(true);\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n if (isKeyEscape(e)) {\n const restoreFocus = true;\n this.hideMenu(restoreFocus);\n }\n };\n\n private saveFocus = (): void => {\n if (this.globalObject.document) {\n this.savedFocusableElement = this.globalObject.document.activeElement as HTMLElement;\n }\n };\n\n private restoreFocus = (): void => {\n if (this.savedFocusableElement) {\n this.savedFocusableElement.focus();\n this.savedFocusableElement = null;\n }\n };\n\n private handleItemSelection = (event: React.SyntheticEvent<HTMLElement>): void => {\n if (event.isDefaultPrevented()) {\n return;\n }\n\n if (event.type === 'keydown') {\n event.preventDefault();\n }\n\n const restoreFocus = event.type === 'keydown';\n this.hideMenu(restoreFocus);\n };\n}\n"]}
@@ -3762,7 +3762,7 @@ var BasicThemeClass = /** @class */ (function () {
3762
3762
  BasicThemeClass.btnDefaultHoverBgStart = 'none';
3763
3763
  BasicThemeClass.btnDefaultHoverBgEnd = 'none';
3764
3764
  // TODO: create token in colors package
3765
- BasicThemeClass.btnDefaultActiveBg = '#f2f2f2';
3765
+ BasicThemeClass.btnDefaultActiveBg = '#e4e4e4';
3766
3766
  BasicThemeClass.btnDefaultHoverTextColor = colors.textNeutralHeavy;
3767
3767
  BasicThemeClass.btnDefaultBorderColor = colors.lineNeutralPale;
3768
3768
  BasicThemeClass.btnDefaultActiveShadow = 'none';