@vkontakte/vkui 6.3.0 → 6.3.1

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.
Files changed (61) hide show
  1. package/dist/cjs/components/Cell/Cell.d.ts.map +1 -1
  2. package/dist/cjs/components/Cell/Cell.js +5 -3
  3. package/dist/cjs/components/Cell/Cell.js.map +1 -1
  4. package/dist/cjs/components/CustomSelect/CustomSelect.js +7 -2
  5. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  6. package/dist/cjs/components/Popover/Popover.d.ts +2 -2
  7. package/dist/cjs/components/Popover/Popover.d.ts.map +1 -1
  8. package/dist/cjs/components/Popover/Popover.js +4 -2
  9. package/dist/cjs/components/Popover/Popover.js.map +1 -1
  10. package/dist/cjs/lib/floating/useFloatingWithInteractions/types.d.ts +4 -0
  11. package/dist/cjs/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
  12. package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts +1 -1
  13. package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
  14. package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +6 -2
  15. package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  16. package/dist/components/Cell/Cell.d.ts.map +1 -1
  17. package/dist/components/Cell/Cell.js +5 -3
  18. package/dist/components/Cell/Cell.js.map +1 -1
  19. package/dist/components/CustomSelect/CustomSelect.js +7 -2
  20. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  21. package/dist/components/Popover/Popover.d.ts +2 -2
  22. package/dist/components/Popover/Popover.d.ts.map +1 -1
  23. package/dist/components/Popover/Popover.js +4 -2
  24. package/dist/components/Popover/Popover.js.map +1 -1
  25. package/dist/components.css +1 -1
  26. package/dist/components.css.map +1 -1
  27. package/dist/components.js.tmp +21 -9
  28. package/dist/cssm/components/Cell/Cell.d.ts.map +1 -1
  29. package/dist/cssm/components/Cell/Cell.js +7 -1
  30. package/dist/cssm/components/Cell/Cell.js.map +1 -1
  31. package/dist/cssm/components/CustomSelect/CustomSelect.js +7 -2
  32. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  33. package/dist/cssm/components/ModalDismissButton/ModalDismissButton.module.css +3 -3
  34. package/dist/cssm/components/Popover/Popover.d.ts +2 -2
  35. package/dist/cssm/components/Popover/Popover.d.ts.map +1 -1
  36. package/dist/cssm/components/Popover/Popover.js +3 -2
  37. package/dist/cssm/components/Popover/Popover.js.map +1 -1
  38. package/dist/cssm/lib/floating/useFloatingWithInteractions/types.d.ts +4 -0
  39. package/dist/cssm/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
  40. package/dist/cssm/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  41. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts +1 -1
  42. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
  43. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +7 -3
  44. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  45. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts +4 -0
  46. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
  47. package/dist/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  48. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts +1 -1
  49. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
  50. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +7 -3
  51. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  52. package/dist/vkui.css +1 -1
  53. package/dist/vkui.css.map +1 -1
  54. package/dist/vkui.js.tmp +21 -9
  55. package/package.json +1 -1
  56. package/src/components/Cell/Cell.tsx +5 -1
  57. package/src/components/CustomSelect/CustomSelect.tsx +4 -4
  58. package/src/components/ModalDismissButton/ModalDismissButton.module.css +3 -3
  59. package/src/components/Popover/Popover.tsx +3 -0
  60. package/src/lib/floating/useFloatingWithInteractions/types.ts +4 -0
  61. package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +6 -2
@@ -1 +1 @@
1
- {"version":3,"file":"Cell.d.ts","sourceRoot":"","sources":["../../../../src/components/Cell/Cell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAG3E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAa,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAc,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAK9E,MAAM,WAAW,SACf,SAAQ,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,EACzC,cAAc,EACd,UAAU,CAAC,cAAc,CAAC;IAC5B,IAAI,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC;IAClC;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5D;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG;IACvC,QAAQ,EAAE,OAAO,YAAY,CAAC;CA8H/B,CAAC"}
1
+ {"version":3,"file":"Cell.d.ts","sourceRoot":"","sources":["../../../../src/components/Cell/Cell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAG3E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAa,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAc,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAK9E,MAAM,WAAW,SACf,SAAQ,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,EACzC,cAAc,EACd,UAAU,CAAC,cAAc,CAAC;IAC5B,IAAI,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC;IAClC;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5D;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG;IACvC,QAAQ,EAAE,OAAO,YAAY,CAAC;CAkI/B,CAAC"}
@@ -76,12 +76,14 @@ const Cell = (_param)=>{
76
76
  const simpleCellDisabled = draggable && !selectable || removable && !restProps.onClick || disabled;
77
77
  const hasActive = !simpleCellDisabled && !dragging;
78
78
  const cellClasses = (0, _vkjs.classNames)("vkuiCell", dragging && "vkuiCell--dragging", platform === 'ios' && "vkuiCell--ios", removable && "vkuiCell--removable", Component === 'label' && "vkuiCell--selectable", disabled && "vkuiCell--disabled");
79
- const simpleCellProps = _object_spread_props._(_object_spread._({
79
+ const simpleCellProps = _object_spread_props._(_object_spread._(_object_spread_props._(_object_spread._({
80
80
  hasActive: hasActive,
81
81
  hasHover: hasActive && !removable
82
82
  }, restProps), {
83
- className: "vkuiCell__content",
84
- Component: Component,
83
+ className: "vkuiCell__content"
84
+ }), Component && {
85
+ Component
86
+ }), {
85
87
  before: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.Fragment, {
86
88
  children: [
87
89
  draggable && platform !== 'ios' && dragger,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Cell/Cell.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport type { SwappedItemRange } from '../../hooks/useDraggableWithDomApi';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { HasRootRef } from '../../types';\nimport { Removable, RemovableProps } from '../Removable/Removable';\nimport { SimpleCell, SimpleCellProps } from '../SimpleCell/SimpleCell';\nimport { CellCheckbox, CellCheckboxProps } from './CellCheckbox/CellCheckbox';\nimport { CellDragger } from './CellDragger/CellDragger';\nimport { DEFAULT_DRAGGABLE_LABEL } from './constants';\nimport styles from './Cell.module.css';\n\nexport interface CellProps\n extends Omit<SimpleCellProps, 'getRootRef'>,\n RemovableProps,\n HasRootRef<HTMLDivElement> {\n mode?: 'removable' | 'selectable';\n /**\n * В режиме перетаскивания ячейка перестает быть кликабельной, то есть при клике переданный onClick вызываться не будет\n */\n draggable?: boolean;\n /**\n * Имя для input в режиме selectable\n */\n name?: string;\n /**\n * В режиме selectable реагирует на входящие значения пропса cheсked, как зависящий напрямую от входящего значения\n */\n checked?: boolean;\n /**\n * В режиме selectable реагирует на входящие значения пропса defaultChecked как неконтролируемый компонент\n */\n defaultChecked?: boolean;\n /**\n * Коллбэк срабатывает при завершении перетаскивания.\n * **Важно:** режим перетаскивания не меняет порядок ячеек в DOM. В коллбэке есть объект с полями `from` и `to`.\n * Эти числа нужны для того, чтобы разработчик понимал, с какого индекса на какой произошел переход. В песочнице\n * есть рабочий пример с обработкой этих чисел и перерисовкой списка.\n */\n onDragFinish?: (swappedItemRange: SwappedItemRange) => void;\n /**\n * Текст для кнопки перетаскивания ячейки\n */\n draggerLabel?: string;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Cell\n */\nexport const Cell: React.FC<CellProps> & {\n Checkbox: typeof CellCheckbox;\n} = ({\n mode,\n onRemove = noop,\n removePlaceholder = 'Удалить',\n onDragFinish,\n before,\n after,\n disabled,\n draggable,\n Component: ComponentProps,\n onChange,\n name,\n value,\n checked,\n defaultChecked,\n getRootRef,\n draggerLabel = DEFAULT_DRAGGABLE_LABEL,\n className,\n style,\n toggleButtonTestId,\n removeButtonTestId,\n ...restProps\n}: CellProps) => {\n const [dragging, setDragging] = React.useState(false);\n const selectable = mode === 'selectable';\n const removable = mode === 'removable';\n const Component = selectable ? 'label' : ComponentProps;\n\n const platform = usePlatform();\n\n const rootElRef = useExternRef(getRootRef);\n\n const dragger = draggable ? (\n <CellDragger\n elRef={rootElRef}\n className={styles['Cell__dragger']}\n disabled={disabled}\n onDragStateChange={setDragging}\n onDragFinish={onDragFinish}\n >\n {draggerLabel}\n </CellDragger>\n ) : null;\n\n let checkbox;\n if (selectable) {\n const checkboxProps: CellCheckboxProps = {\n name,\n value,\n defaultChecked,\n checked,\n disabled,\n onChange,\n };\n checkbox = <CellCheckbox className={styles['Cell__checkbox']} {...checkboxProps} />;\n }\n\n const simpleCellDisabled =\n (draggable && !selectable) || (removable && !restProps.onClick) || disabled;\n const hasActive = !simpleCellDisabled && !dragging;\n\n const cellClasses = classNames(\n styles['Cell'],\n dragging && styles['Cell--dragging'],\n platform === 'ios' && styles['Cell--ios'],\n removable && styles['Cell--removable'],\n Component === 'label' && styles['Cell--selectable'],\n disabled && styles['Cell--disabled'],\n );\n\n const simpleCellProps: SimpleCellProps = {\n hasActive: hasActive,\n hasHover: hasActive && !removable,\n ...restProps,\n className: styles['Cell__content'],\n Component: Component,\n before: (\n <React.Fragment>\n {draggable && platform !== 'ios' && dragger}\n {selectable && checkbox}\n {before}\n </React.Fragment>\n ),\n after: (\n <React.Fragment>\n {draggable && platform === 'ios' && dragger}\n {after}\n </React.Fragment>\n ),\n };\n\n if (restProps.onClick) {\n simpleCellProps.disabled = simpleCellDisabled;\n }\n\n if (removable) {\n return (\n <Removable\n className={classNames(cellClasses, className)}\n style={style}\n getRootRef={rootElRef}\n removePlaceholder={removePlaceholder}\n onRemove={(e) => onRemove(e, rootElRef.current)}\n toggleButtonTestId={toggleButtonTestId}\n removeButtonTestId={removeButtonTestId}\n >\n {platform === 'ios' ? (\n ({ isRemoving }) => {\n if (simpleCellProps.onClick) {\n simpleCellProps.disabled = isRemoving || !simpleCellProps.disabled;\n }\n return <SimpleCell {...simpleCellProps} />;\n }\n ) : (\n <SimpleCell {...simpleCellProps} />\n )}\n </Removable>\n );\n }\n\n return (\n <div className={classNames(cellClasses, className)} style={style} ref={rootElRef}>\n <SimpleCell {...simpleCellProps} />\n </div>\n );\n};\n\nCell.Checkbox = CellCheckbox;\n"],"names":["Cell","mode","onRemove","noop","removePlaceholder","onDragFinish","before","after","disabled","draggable","Component","ComponentProps","onChange","name","value","checked","defaultChecked","getRootRef","draggerLabel","DEFAULT_DRAGGABLE_LABEL","className","style","toggleButtonTestId","removeButtonTestId","restProps","dragging","setDragging","React","useState","selectable","removable","platform","usePlatform","rootElRef","useExternRef","dragger","CellDragger","elRef","onDragStateChange","checkbox","checkboxProps","CellCheckbox","simpleCellDisabled","onClick","hasActive","cellClasses","classNames","simpleCellProps","hasHover","Fragment","Removable","e","current","isRemoving","SimpleCell","div","ref","Checkbox"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/Cell/Cell.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport type { SwappedItemRange } from '../../hooks/useDraggableWithDomApi';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { HasRootRef } from '../../types';\nimport { Removable, RemovableProps } from '../Removable/Removable';\nimport { SimpleCell, SimpleCellProps } from '../SimpleCell/SimpleCell';\nimport { CellCheckbox, CellCheckboxProps } from './CellCheckbox/CellCheckbox';\nimport { CellDragger } from './CellDragger/CellDragger';\nimport { DEFAULT_DRAGGABLE_LABEL } from './constants';\nimport styles from './Cell.module.css';\n\nexport interface CellProps\n extends Omit<SimpleCellProps, 'getRootRef'>,\n RemovableProps,\n HasRootRef<HTMLDivElement> {\n mode?: 'removable' | 'selectable';\n /**\n * В режиме перетаскивания ячейка перестает быть кликабельной, то есть при клике переданный onClick вызываться не будет\n */\n draggable?: boolean;\n /**\n * Имя для input в режиме selectable\n */\n name?: string;\n /**\n * В режиме selectable реагирует на входящие значения пропса cheсked, как зависящий напрямую от входящего значения\n */\n checked?: boolean;\n /**\n * В режиме selectable реагирует на входящие значения пропса defaultChecked как неконтролируемый компонент\n */\n defaultChecked?: boolean;\n /**\n * Коллбэк срабатывает при завершении перетаскивания.\n * **Важно:** режим перетаскивания не меняет порядок ячеек в DOM. В коллбэке есть объект с полями `from` и `to`.\n * Эти числа нужны для того, чтобы разработчик понимал, с какого индекса на какой произошел переход. В песочнице\n * есть рабочий пример с обработкой этих чисел и перерисовкой списка.\n */\n onDragFinish?: (swappedItemRange: SwappedItemRange) => void;\n /**\n * Текст для кнопки перетаскивания ячейки\n */\n draggerLabel?: string;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Cell\n */\nexport const Cell: React.FC<CellProps> & {\n Checkbox: typeof CellCheckbox;\n} = ({\n mode,\n onRemove = noop,\n removePlaceholder = 'Удалить',\n onDragFinish,\n before,\n after,\n disabled,\n draggable,\n Component: ComponentProps,\n onChange,\n name,\n value,\n checked,\n defaultChecked,\n getRootRef,\n draggerLabel = DEFAULT_DRAGGABLE_LABEL,\n className,\n style,\n toggleButtonTestId,\n removeButtonTestId,\n ...restProps\n}: CellProps) => {\n const [dragging, setDragging] = React.useState(false);\n const selectable = mode === 'selectable';\n const removable = mode === 'removable';\n const Component = selectable ? 'label' : ComponentProps;\n\n const platform = usePlatform();\n\n const rootElRef = useExternRef(getRootRef);\n\n const dragger = draggable ? (\n <CellDragger\n elRef={rootElRef}\n className={styles['Cell__dragger']}\n disabled={disabled}\n onDragStateChange={setDragging}\n onDragFinish={onDragFinish}\n >\n {draggerLabel}\n </CellDragger>\n ) : null;\n\n let checkbox;\n if (selectable) {\n const checkboxProps: CellCheckboxProps = {\n name,\n value,\n defaultChecked,\n checked,\n disabled,\n onChange,\n };\n checkbox = <CellCheckbox className={styles['Cell__checkbox']} {...checkboxProps} />;\n }\n\n const simpleCellDisabled =\n (draggable && !selectable) || (removable && !restProps.onClick) || disabled;\n const hasActive = !simpleCellDisabled && !dragging;\n\n const cellClasses = classNames(\n styles['Cell'],\n dragging && styles['Cell--dragging'],\n platform === 'ios' && styles['Cell--ios'],\n removable && styles['Cell--removable'],\n Component === 'label' && styles['Cell--selectable'],\n disabled && styles['Cell--disabled'],\n );\n\n const simpleCellProps: SimpleCellProps = {\n hasActive: hasActive,\n hasHover: hasActive && !removable,\n ...restProps,\n className: styles['Cell__content'],\n // чтобы свойство, если не определено, не присутствовало в\n // restProps явно как {'Component': undefined} и ниже не переопределяло\n // возможное значение commonProps.Component = 'a' при слиянии двух объектов, как\n // {...commonProps, ...restProps}\n ...(Component && { Component }),\n before: (\n <React.Fragment>\n {draggable && platform !== 'ios' && dragger}\n {selectable && checkbox}\n {before}\n </React.Fragment>\n ),\n after: (\n <React.Fragment>\n {draggable && platform === 'ios' && dragger}\n {after}\n </React.Fragment>\n ),\n };\n\n if (restProps.onClick) {\n simpleCellProps.disabled = simpleCellDisabled;\n }\n\n if (removable) {\n return (\n <Removable\n className={classNames(cellClasses, className)}\n style={style}\n getRootRef={rootElRef}\n removePlaceholder={removePlaceholder}\n onRemove={(e) => onRemove(e, rootElRef.current)}\n toggleButtonTestId={toggleButtonTestId}\n removeButtonTestId={removeButtonTestId}\n >\n {platform === 'ios' ? (\n ({ isRemoving }) => {\n if (simpleCellProps.onClick) {\n simpleCellProps.disabled = isRemoving || !simpleCellProps.disabled;\n }\n return <SimpleCell {...simpleCellProps} />;\n }\n ) : (\n <SimpleCell {...simpleCellProps} />\n )}\n </Removable>\n );\n }\n\n return (\n <div className={classNames(cellClasses, className)} style={style} ref={rootElRef}>\n <SimpleCell {...simpleCellProps} />\n </div>\n );\n};\n\nCell.Checkbox = CellCheckbox;\n"],"names":["Cell","mode","onRemove","noop","removePlaceholder","onDragFinish","before","after","disabled","draggable","Component","ComponentProps","onChange","name","value","checked","defaultChecked","getRootRef","draggerLabel","DEFAULT_DRAGGABLE_LABEL","className","style","toggleButtonTestId","removeButtonTestId","restProps","dragging","setDragging","React","useState","selectable","removable","platform","usePlatform","rootElRef","useExternRef","dragger","CellDragger","elRef","onDragStateChange","checkbox","checkboxProps","CellCheckbox","simpleCellDisabled","onClick","hasActive","cellClasses","classNames","simpleCellProps","hasHover","Fragment","Removable","e","current","isRemoving","SimpleCell","div","ref","Checkbox"],"mappings":"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"}
@@ -131,6 +131,7 @@ function CustomSelect(props) {
131
131
  const handleRootRef = (0, _useExternRef.useExternRef)(containerRef, getRootRef);
132
132
  const scrollBoxRef = _react.useRef(null);
133
133
  const selectElRef = (0, _useExternRef.useExternRef)(getRef);
134
+ const optionsWrapperRef = _react.useRef(null);
134
135
  const [focusedOptionIndex, setFocusedOptionIndex] = _react.useState(-1);
135
136
  const [isControlledOutside, setIsControlledOutside] = _react.useState(props.value !== undefined);
136
137
  const [inputValue, setInputValue] = _react.useState('');
@@ -178,7 +179,8 @@ function CustomSelect(props) {
178
179
  ]);
179
180
  const scrollToElement = _react.useCallback((index, center = false)=>{
180
181
  const dropdown = scrollBoxRef.current;
181
- const item = dropdown && dropdown.firstElementChild ? dropdown.firstElementChild.children[index] : null;
182
+ const optionsWrapper = optionsWrapperRef.current;
183
+ const item = dropdown && optionsWrapper ? optionsWrapper.children[index] : null;
182
184
  if (!item || !dropdown) {
183
185
  return;
184
186
  }
@@ -511,7 +513,10 @@ function CustomSelect(props) {
511
513
  popupAriaId
512
514
  ]);
513
515
  const resolvedContent = _react.useMemo(()=>{
514
- const defaultDropdownContent = (options === null || options === void 0 ? void 0 : options.length) > 0 ? options.map(renderOption) : /*#__PURE__*/ (0, _jsxruntime.jsx)(_Footnote.Footnote, {
516
+ const defaultDropdownContent = (options === null || options === void 0 ? void 0 : options.length) > 0 ? /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
517
+ ref: optionsWrapperRef,
518
+ children: options.map(renderOption)
519
+ }) : /*#__PURE__*/ (0, _jsxruntime.jsx)(_Footnote.Footnote, {
515
520
  className: "vkuiCustomSelect__empty",
516
521
  children: emptyText
517
522
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusWithin } from '../../hooks/useFocusWithin';\nimport { useDOM } from '../../lib/dom';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { debounce } from '../../lib/utils';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport {\n CustomSelectDropdown,\n CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport {\n CustomSelectClearButton,\n type CustomSelectClearButtonProps,\n} from './CustomSelectClearButton';\nimport { CustomSelectInput } from './CustomSelectInput';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles['CustomSelect--sizeY-none'],\n ['compact']: styles['CustomSelect--sizeY-compact'],\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = <T extends CustomSelectOptionInterface>(options: T[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n value: SelectValue,\n withClear: boolean,\n) {\n if (withClear && value === '') {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = <T extends CustomSelectOptionInterface>(\n options: SelectProps<T>['options'],\n inputValue: string,\n filterFn: SelectProps<T>['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectRenderOption<T extends CustomSelectOptionInterface>\n extends CustomSelectOptionProps {\n option: T;\n}\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n FormFieldProps,\n TrackerOptionsProps,\n Pick<\n CustomSelectDropdownProps,\n 'overscrollBehavior' | 'autoHideScrollbar' | 'autoHideScrollbarDelay'\n > {\n /**\n * ref на внутрений компонент input\n */\n getSelectInputRef?: React.Ref<HTMLInputElement>;\n /**\n * Если `true`, то при клике на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * Событие изменения текстового поля\n */\n onInputChange?: (e: React.ChangeEvent) => void;\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n /**\n * (e2e) testId кнопки очистки\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n /**\n * (e2e) testId элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n nativeSelectTestId?: string;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection = 'bottom',\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions as OptionInterfaceT[],\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n icon: iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n noMaxHeight = false,\n ['aria-labelledby']: ariaLabelledBy,\n clearButtonTestId,\n nativeSelectTestId,\n defaultValue,\n required,\n getSelectInputRef,\n overscrollBehavior,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n () => props.value ?? defaultValue ?? (allowClearButton ? '' : undefined),\n );\n const [popperPlacement, setPopperPlacement] = React.useState<PlacementWithAuto | undefined>(\n popupDirection,\n );\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? defaultValue, allowClearButton),\n );\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue((nativeSelectValue) => props.value ?? nativeSelectValue);\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === '')\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes('top')\n ? styles['CustomSelect--pop-up']\n : styles['CustomSelect--pop-down'])) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item =\n dropdown && dropdown.firstElementChild\n ? (dropdown.firstElementChild.children[index] as HTMLElement)\n : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseMove`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n const fullInput = keyboardInput + key;\n\n setKeyboardInput(fullInput);\n },\n [keyboardInput, opened, resetFocusedOption],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n resetFocusedOption();\n onClose?.();\n }, [onClose, resetKeyboardInput, resetFocusedOption]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n\n setNativeSelectValue(item?.value);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value = props.value ?? nativeSelectValue ?? defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value, allowClearButton));\n },\n [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n defaultValue,\n props.value,\n searchable,\n allowClearButton,\n ],\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value,\n allowClearButton,\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n onInputChangeProp && onInputChangeProp(e);\n\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp, allowClearButton],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Backspace':\n case 'Delete': {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n\n break;\n }\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n resetFocusedOption,\n ],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const prevMousePositionRef = React.useRef<{\n x: React.MouseEvent['clientX'];\n y: React.MouseEvent['clientY'];\n }>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n const isMouseChangedPosition =\n Math.abs(prevMousePositionRef.current.x - e.clientX) >= 1 ||\n Math.abs(prevMousePositionRef.current.y - e.clientY) >= 1;\n\n if (isMouseChangedPosition) {\n focusOptionByIndex(index, false);\n }\n\n prevMousePositionRef.current = { x: e.clientX, y: e.clientY };\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n focusOptionOnMouseMove,\n renderOptionProp,\n selectedOptionIndex,\n popupAriaId,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n options.map(renderOption)\n ) : (\n <Footnote className={styles['CustomSelect__empty']}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const selectInputRef = useExternRef(getSelectInputRef);\n const focusOnInputTimerRef = React.useRef<ReturnType<typeof setTimeout>>();\n const focusOnInput = React.useCallback(() => {\n clearTimeout(focusOnInputTimerRef.current);\n\n focusOnInputTimerRef.current = setTimeout(() => {\n selectInputRef.current && selectInputRef.current.focus();\n }, 0);\n }, [selectInputRef]);\n useIsomorphicLayoutEffect(function clearFocusOnInputTimer() {\n return () => {\n clearTimeout(focusOnInputTimerRef.current);\n };\n }, []);\n\n const controlledValueSet = isControlledOutside && props.value !== '';\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== '';\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles['CustomSelect--clear-icon'] : undefined}\n onClick={function clearSelectState() {\n setNativeSelectValue('');\n setInputValue('');\n focusOnInput();\n }}\n disabled={restProps.disabled}\n data-testid={clearButtonTestId}\n />\n );\n }, [\n clearButtonShown,\n ClearButton,\n iconProp,\n restProps.disabled,\n clearButtonTestId,\n focusOnInput,\n ]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles['CustomSelect__dropdown-icon'] : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n focusOnInput();\n }\n }\n },\n [document, focusOnInput, selectInputRef],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantOptionIndex: undefined | number =\n focusedOptionIndex !== -1 ? focusedOptionIndex : undefined;\n const ariaActiveDescendantId =\n ariaActiveDescendantOptionIndex !== undefined\n ? options[ariaActiveDescendantOptionIndex] && options[ariaActiveDescendantOptionIndex].value\n : null;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-owns': popupAriaId,\n 'aria-expanded': opened,\n ['aria-activedescendant']:\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n const focusWithin = useFocusWithin(handleRootRef);\n\n return (\n <div\n className={classNames(\n styles['CustomSelect'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n >\n {focusWithin && selected && !opened && (\n <VisuallyHidden aria-live=\"polite\">{selected.label}</VisuallyHidden>\n )}\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n {...restProps}\n {...selectInputAriaProps}\n getRef={selectInputRef}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n readOnly={!searchable}\n fetching={fetching}\n value={inputValue}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDownSelect}\n onChange={onInputChange}\n onClick={onClick}\n before={before}\n after={afterIcons}\n selectType={selectType}\n >\n {selected?.label}\n </CustomSelectInput>\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles['CustomSelect__control']}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {allowClearButton && <option key=\"\" value=\"\" />}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </div>\n );\n}\n"],"names":["CustomSelect","sizeYClassNames","none","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","warnOnce","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","CustomSelectOption","handleOptionDown","e","preventDefault","findSelectedIndex","withClear","Number","filter","inputValue","filterFn","defaultOptions","opened","setOpened","React","useState","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChange","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","defaultFilterFn","icon","iconProp","ClearButton","CustomSelectClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","getSelectInputRef","overscrollBehavior","restProps","process","env","NODE_ENV","sizeY","useAdaptivity","containerRef","useRef","handleRootRef","useExternRef","scrollBoxRef","selectElRef","focusedOptionIndex","setFocusedOptionIndex","isControlledOutside","setIsControlledOutside","undefined","setInputValue","nativeSelectValue","setNativeSelectValue","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","useIsomorphicLayoutEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","scrollToElement","useCallback","index","center","dropdown","firstElementChild","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","scrollTo","isValidIndex","setScrollBoxRef","ref","keyboardInput","setKeyboardInput","resetKeyboardInput","resetFocusedOption","onKeyboardInput","key","fullInput","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","onFocus","onClick","handleKeyUp","debounce","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onNativeSelectChange","newSelectedOptionIndex","currentTarget","target","areOptionsShown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","prevMousePositionRef","x","y","focusOptionOnMouseMove","isMouseChangedPosition","Math","abs","clientX","clientY","popupAriaId","useId","hovered","Fragment","label","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","Footnote","selectInputRef","focusOnInputTimerRef","focusOnInput","clearTimeout","setTimeout","focus","clearFocusOnInputTimer","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","clearSelectState","data-testid","DropdownIcon","afterIcons","document","useDOM","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantOptionIndex","ariaActiveDescendantId","selectInputAriaProps","focusWithin","useFocusWithin","div","classNames","VisuallyHidden","aria-live","CustomSelectInput","autoComplete","autoCapitalize","autoCorrect","spellCheck","readOnly","onKeyUp","onKeyDown","after","select","aria-hidden","CustomSelectDropdown","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby","tabIndex"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusWithin } from '../../hooks/useFocusWithin';\nimport { useDOM } from '../../lib/dom';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { debounce } from '../../lib/utils';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport {\n CustomSelectDropdown,\n CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport {\n CustomSelectClearButton,\n type CustomSelectClearButtonProps,\n} from './CustomSelectClearButton';\nimport { CustomSelectInput } from './CustomSelectInput';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles['CustomSelect--sizeY-none'],\n ['compact']: styles['CustomSelect--sizeY-compact'],\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = <T extends CustomSelectOptionInterface>(options: T[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n value: SelectValue,\n withClear: boolean,\n) {\n if (withClear && value === '') {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = <T extends CustomSelectOptionInterface>(\n options: SelectProps<T>['options'],\n inputValue: string,\n filterFn: SelectProps<T>['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectRenderOption<T extends CustomSelectOptionInterface>\n extends CustomSelectOptionProps {\n option: T;\n}\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n FormFieldProps,\n TrackerOptionsProps,\n Pick<\n CustomSelectDropdownProps,\n 'overscrollBehavior' | 'autoHideScrollbar' | 'autoHideScrollbarDelay'\n > {\n /**\n * ref на внутрений компонент input\n */\n getSelectInputRef?: React.Ref<HTMLInputElement>;\n /**\n * Если `true`, то при клике на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * Событие изменения текстового поля\n */\n onInputChange?: (e: React.ChangeEvent) => void;\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n /**\n * (e2e) testId кнопки очистки\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n /**\n * (e2e) testId элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n nativeSelectTestId?: string;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection = 'bottom',\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions as OptionInterfaceT[],\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n icon: iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n noMaxHeight = false,\n ['aria-labelledby']: ariaLabelledBy,\n clearButtonTestId,\n nativeSelectTestId,\n defaultValue,\n required,\n getSelectInputRef,\n overscrollBehavior,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n const optionsWrapperRef = React.useRef<HTMLDivElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n () => props.value ?? defaultValue ?? (allowClearButton ? '' : undefined),\n );\n const [popperPlacement, setPopperPlacement] = React.useState<PlacementWithAuto | undefined>(\n popupDirection,\n );\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? defaultValue, allowClearButton),\n );\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue((nativeSelectValue) => props.value ?? nativeSelectValue);\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === '')\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes('top')\n ? styles['CustomSelect--pop-up']\n : styles['CustomSelect--pop-down'])) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const optionsWrapper = optionsWrapperRef.current;\n const item =\n dropdown && optionsWrapper ? (optionsWrapper.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseMove`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n const fullInput = keyboardInput + key;\n\n setKeyboardInput(fullInput);\n },\n [keyboardInput, opened, resetFocusedOption],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n resetFocusedOption();\n onClose?.();\n }, [onClose, resetKeyboardInput, resetFocusedOption]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n\n setNativeSelectValue(item?.value);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value = props.value ?? nativeSelectValue ?? defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value, allowClearButton));\n },\n [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n defaultValue,\n props.value,\n searchable,\n allowClearButton,\n ],\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value,\n allowClearButton,\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n onInputChangeProp && onInputChangeProp(e);\n\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp, allowClearButton],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Backspace':\n case 'Delete': {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n\n break;\n }\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n resetFocusedOption,\n ],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const prevMousePositionRef = React.useRef<{\n x: React.MouseEvent['clientX'];\n y: React.MouseEvent['clientY'];\n }>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n const isMouseChangedPosition =\n Math.abs(prevMousePositionRef.current.x - e.clientX) >= 1 ||\n Math.abs(prevMousePositionRef.current.y - e.clientY) >= 1;\n\n if (isMouseChangedPosition) {\n focusOptionByIndex(index, false);\n }\n\n prevMousePositionRef.current = { x: e.clientX, y: e.clientY };\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n focusOptionOnMouseMove,\n renderOptionProp,\n selectedOptionIndex,\n popupAriaId,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n <div ref={optionsWrapperRef}>{options.map(renderOption)}</div>\n ) : (\n <Footnote className={styles['CustomSelect__empty']}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const selectInputRef = useExternRef(getSelectInputRef);\n const focusOnInputTimerRef = React.useRef<ReturnType<typeof setTimeout>>();\n const focusOnInput = React.useCallback(() => {\n clearTimeout(focusOnInputTimerRef.current);\n\n focusOnInputTimerRef.current = setTimeout(() => {\n selectInputRef.current && selectInputRef.current.focus();\n }, 0);\n }, [selectInputRef]);\n useIsomorphicLayoutEffect(function clearFocusOnInputTimer() {\n return () => {\n clearTimeout(focusOnInputTimerRef.current);\n };\n }, []);\n\n const controlledValueSet = isControlledOutside && props.value !== '';\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== '';\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles['CustomSelect--clear-icon'] : undefined}\n onClick={function clearSelectState() {\n setNativeSelectValue('');\n setInputValue('');\n focusOnInput();\n }}\n disabled={restProps.disabled}\n data-testid={clearButtonTestId}\n />\n );\n }, [\n clearButtonShown,\n ClearButton,\n iconProp,\n restProps.disabled,\n clearButtonTestId,\n focusOnInput,\n ]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles['CustomSelect__dropdown-icon'] : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n focusOnInput();\n }\n }\n },\n [document, focusOnInput, selectInputRef],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantOptionIndex: undefined | number =\n focusedOptionIndex !== -1 ? focusedOptionIndex : undefined;\n const ariaActiveDescendantId =\n ariaActiveDescendantOptionIndex !== undefined\n ? options[ariaActiveDescendantOptionIndex] && options[ariaActiveDescendantOptionIndex].value\n : null;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-owns': popupAriaId,\n 'aria-expanded': opened,\n ['aria-activedescendant']:\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n const focusWithin = useFocusWithin(handleRootRef);\n\n return (\n <div\n className={classNames(\n styles['CustomSelect'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n >\n {focusWithin && selected && !opened && (\n <VisuallyHidden aria-live=\"polite\">{selected.label}</VisuallyHidden>\n )}\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n {...restProps}\n {...selectInputAriaProps}\n getRef={selectInputRef}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n readOnly={!searchable}\n fetching={fetching}\n value={inputValue}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDownSelect}\n onChange={onInputChange}\n onClick={onClick}\n before={before}\n after={afterIcons}\n selectType={selectType}\n >\n {selected?.label}\n </CustomSelectInput>\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles['CustomSelect__control']}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {allowClearButton && <option key=\"\" value=\"\" />}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </div>\n );\n}\n"],"names":["CustomSelect","sizeYClassNames","none","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","warnOnce","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","CustomSelectOption","handleOptionDown","e","preventDefault","findSelectedIndex","withClear","Number","filter","inputValue","filterFn","defaultOptions","opened","setOpened","React","useState","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChange","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","defaultFilterFn","icon","iconProp","ClearButton","CustomSelectClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","getSelectInputRef","overscrollBehavior","restProps","process","env","NODE_ENV","sizeY","useAdaptivity","containerRef","useRef","handleRootRef","useExternRef","scrollBoxRef","selectElRef","optionsWrapperRef","focusedOptionIndex","setFocusedOptionIndex","isControlledOutside","setIsControlledOutside","undefined","setInputValue","nativeSelectValue","setNativeSelectValue","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","useIsomorphicLayoutEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","scrollToElement","useCallback","index","center","dropdown","optionsWrapper","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","scrollTo","isValidIndex","setScrollBoxRef","ref","keyboardInput","setKeyboardInput","resetKeyboardInput","resetFocusedOption","onKeyboardInput","key","fullInput","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","onFocus","onClick","handleKeyUp","debounce","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onNativeSelectChange","newSelectedOptionIndex","currentTarget","target","areOptionsShown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","prevMousePositionRef","x","y","focusOptionOnMouseMove","isMouseChangedPosition","Math","abs","clientX","clientY","popupAriaId","useId","hovered","Fragment","label","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","div","Footnote","selectInputRef","focusOnInputTimerRef","focusOnInput","clearTimeout","setTimeout","focus","clearFocusOnInputTimer","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","clearSelectState","data-testid","DropdownIcon","afterIcons","document","useDOM","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantOptionIndex","ariaActiveDescendantId","selectInputAriaProps","focusWithin","useFocusWithin","classNames","VisuallyHidden","aria-live","CustomSelectInput","autoComplete","autoCapitalize","autoCorrect","spellCheck","readOnly","onKeyUp","onKeyDown","after","select","aria-hidden","CustomSelectDropdown","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby","tabIndex"],"mappings":"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"}
@@ -17,7 +17,7 @@ export type PopoverOnShownChange = OnShownChange;
17
17
  * @public
18
18
  */
19
19
  export type PopoverContentRenderProp = FloatingContentRenderProp;
20
- type AllowedFloatingComponentProps = Pick<FloatingComponentProps, 'arrow' | 'arrowHeight' | 'arrowPadding' | 'placement' | 'onPlacementChange' | 'trigger' | 'content' | 'hoverDelay' | 'closeAfterClick' | 'offsetByMainAxis' | 'offsetByCrossAxis' | 'defaultShown' | 'shown' | 'onShownChange' | 'usePortal' | 'sameWidth' | 'hideWhenReferenceHidden' | 'disabled' | 'disableInteractive' | 'disableCloseOnClickOutside' | 'disableCloseOnEscKey' | 'autoFocus' | 'restoreFocus' | 'children' | 'zIndex' | 'disableFlipMiddleware' | 'customMiddlewares'>;
20
+ type AllowedFloatingComponentProps = Pick<FloatingComponentProps, 'arrow' | 'arrowHeight' | 'arrowPadding' | 'placement' | 'onPlacementChange' | 'trigger' | 'content' | 'hoverDelay' | 'closeAfterClick' | 'offsetByMainAxis' | 'offsetByCrossAxis' | 'defaultShown' | 'shown' | 'onShownChange' | 'onShownChanged' | 'usePortal' | 'sameWidth' | 'hideWhenReferenceHidden' | 'disabled' | 'disableInteractive' | 'disableCloseOnClickOutside' | 'disableCloseOnEscKey' | 'autoFocus' | 'restoreFocus' | 'children' | 'zIndex' | 'disableFlipMiddleware' | 'customMiddlewares'>;
21
21
  /**
22
22
  * @public
23
23
  */
@@ -63,6 +63,6 @@ export interface PopoverProps extends AllowedFloatingComponentProps, Omit<HTMLAt
63
63
  /**
64
64
  * @see https://vkcom.github.io/VKUI/#/Popover
65
65
  */
66
- export declare const Popover: ({ arrow: withArrow, arrowHeight, arrowPadding, placement: expectedPlacement, onPlacementChange, disableFlipMiddleware, trigger, content, hoverDelay, closeAfterClick, offsetByMainAxis, offsetByCrossAxis, sameWidth, hideWhenReferenceHidden, disabled, disableInteractive, disableCloseOnClickOutside, disableCloseOnEscKey, keepMounted, customMiddlewares, defaultShown, shown: shownProp, onShownChange, usePortal, arrowProps, ArrowIcon, autoFocus, restoreFocus, className, children, noStyling, zIndex, role, ...restPopoverProps }: PopoverProps) => React.ReactNode;
66
+ export declare const Popover: ({ arrow: withArrow, arrowHeight, arrowPadding, placement: expectedPlacement, onPlacementChange, disableFlipMiddleware, trigger, content, hoverDelay, closeAfterClick, offsetByMainAxis, offsetByCrossAxis, sameWidth, hideWhenReferenceHidden, disabled, disableInteractive, disableCloseOnClickOutside, disableCloseOnEscKey, keepMounted, customMiddlewares, defaultShown, shown: shownProp, onShownChange, onShownChanged, usePortal, arrowProps, ArrowIcon, autoFocus, restoreFocus, className, children, noStyling, zIndex, role, ...restPopoverProps }: PopoverProps) => React.ReactNode;
67
67
  export {};
68
68
  //# sourceMappingURL=Popover.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.d.ts","sourceRoot":"","sources":["../../../../src/components/Popover/Popover.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,aAAa,EAInB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAO7D,OAAO,EAEL,KAAK,kBAAkB,IAAI,yBAAyB,EACrD,MAAM,gCAAgC,CAAC;AAIxC;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,yBAAyB,EACzB,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAC/C,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAEjD;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,yBAAyB,CAAC;AAEjE,KAAK,6BAA6B,GAAG,IAAI,CACvC,sBAAsB,EACpB,OAAO,GACP,aAAa,GACb,cAAc,GACd,WAAW,GACX,mBAAmB,GACnB,SAAS,GACT,SAAS,GACT,YAAY,GACZ,iBAAiB,GACjB,kBAAkB,GAClB,mBAAmB,GACnB,cAAc,GACd,OAAO,GACP,eAAe,GACf,WAAW,GACX,WAAW,GACX,yBAAyB,GACzB,UAAU,GACV,oBAAoB,GACpB,4BAA4B,GAC5B,sBAAsB,GACtB,WAAW,GACX,cAAc,GACd,UAAU,GACV,QAAQ,GACR,uBAAuB,GACvB,mBAAmB,CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,YACf,SAAQ,6BAA6B,EACnC,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,MAAM,sBAAsB,CAAC;IAC/E;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC9C;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,ihBA6CjB,YAAY,KAAG,KAAK,CAAC,SA4GvB,CAAC"}
1
+ {"version":3,"file":"Popover.d.ts","sourceRoot":"","sources":["../../../../src/components/Popover/Popover.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,aAAa,EAInB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAO7D,OAAO,EAEL,KAAK,kBAAkB,IAAI,yBAAyB,EACrD,MAAM,gCAAgC,CAAC;AAIxC;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,yBAAyB,EACzB,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAC/C,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAEjD;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,yBAAyB,CAAC;AAEjE,KAAK,6BAA6B,GAAG,IAAI,CACvC,sBAAsB,EACpB,OAAO,GACP,aAAa,GACb,cAAc,GACd,WAAW,GACX,mBAAmB,GACnB,SAAS,GACT,SAAS,GACT,YAAY,GACZ,iBAAiB,GACjB,kBAAkB,GAClB,mBAAmB,GACnB,cAAc,GACd,OAAO,GACP,eAAe,GACf,gBAAgB,GAChB,WAAW,GACX,WAAW,GACX,yBAAyB,GACzB,UAAU,GACV,oBAAoB,GACpB,4BAA4B,GAC5B,sBAAsB,GACtB,WAAW,GACX,cAAc,GACd,UAAU,GACV,QAAQ,GACR,uBAAuB,GACvB,mBAAmB,CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,YACf,SAAQ,6BAA6B,EACnC,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,MAAM,sBAAsB,CAAC;IAC/E;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC9C;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,iiBA8CjB,YAAY,KAAG,KAAK,CAAC,SA6GvB,CAAC"}
@@ -27,7 +27,7 @@ const Popover = (_param)=>{
27
27
  var { // UsePopoverProps
28
28
  arrow: withArrow, arrowHeight = _DefaultIcon.DEFAULT_ARROW_HEIGHT, arrowPadding = _DefaultIcon.DEFAULT_ARROW_PADDING, placement: expectedPlacement = 'bottom-start', onPlacementChange, disableFlipMiddleware = false, trigger = 'click', content, hoverDelay = 150, closeAfterClick, offsetByMainAxis = 8, offsetByCrossAxis = 0, sameWidth, hideWhenReferenceHidden, disabled, disableInteractive, disableCloseOnClickOutside, disableCloseOnEscKey, keepMounted = false, customMiddlewares, // uncontrolled
29
29
  defaultShown = false, // controlled
30
- shown: shownProp, onShownChange, // Для AppRootPortal
30
+ shown: shownProp, onShownChange, onShownChanged, // Для AppRootPortal
31
31
  usePortal = true, // Для FloatingArrow
32
32
  arrowProps, ArrowIcon = _DefaultIcon.DefaultIcon, // FocusTrapProps
33
33
  autoFocus = true, restoreFocus = true, className, children, noStyling = false, zIndex = 'var(--vkui--z_index_popout)', // a11y
@@ -55,6 +55,7 @@ const Popover = (_param)=>{
55
55
  "defaultShown",
56
56
  "shown",
57
57
  "onShownChange",
58
+ "onShownChanged",
58
59
  "usePortal",
59
60
  "arrowProps",
60
61
  "ArrowIcon",
@@ -92,7 +93,8 @@ const Popover = (_param)=>{
92
93
  disableCloseOnEscKey,
93
94
  defaultShown,
94
95
  shown: shownProp,
95
- onShownChange
96
+ onShownChange,
97
+ onShownChanged
96
98
  });
97
99
  (0, _floating.usePlacementChangeCallback)(expectedPlacement, resolvedPlacement, onPlacementChange);
98
100
  const [, child] = (0, _usePatchChildren.usePatchChildren)(children, (0, _accessibility.injectAriaExpandedPropByRole)(referenceProps, shown, role), refs.setReference);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { usePatchChildren } from '../../hooks/usePatchChildren';\nimport { injectAriaExpandedPropByRole } from '../../lib/accessibility';\nimport { animationFadeClassNames, transformOriginClassNames } from '../../lib/animation';\nimport {\n type FloatingComponentProps,\n type FloatingContentRenderProp,\n type OnShownChange,\n useFloatingMiddlewaresBootstrap,\n useFloatingWithInteractions,\n usePlacementChangeCallback,\n} from '../../lib/floating';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport {\n DEFAULT_ARROW_HEIGHT,\n DEFAULT_ARROW_PADDING,\n DefaultIcon,\n} from '../FloatingArrow/DefaultIcon';\nimport {\n FloatingArrow,\n type FloatingArrowProps as FloatingArrowPropsPrivate,\n} from '../FloatingArrow/FloatingArrow';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport styles from './Popover.module.css';\n\n/**\n * @alias\n * @public\n */\nexport type PopoverArrowProps = Omit<\n FloatingArrowPropsPrivate,\n 'getRootRef' | 'coords' | 'placement' | 'Icon'\n>;\n\n/**\n * @alias\n * @public\n */\nexport type PopoverOnShownChange = OnShownChange;\n\n/**\n * @alias\n * @public\n */\nexport type PopoverContentRenderProp = FloatingContentRenderProp;\n\ntype AllowedFloatingComponentProps = Pick<\n FloatingComponentProps,\n | 'arrow'\n | 'arrowHeight'\n | 'arrowPadding'\n | 'placement'\n | 'onPlacementChange'\n | 'trigger'\n | 'content'\n | 'hoverDelay'\n | 'closeAfterClick'\n | 'offsetByMainAxis'\n | 'offsetByCrossAxis'\n | 'defaultShown'\n | 'shown'\n | 'onShownChange'\n | 'usePortal'\n | 'sameWidth'\n | 'hideWhenReferenceHidden'\n | 'disabled'\n | 'disableInteractive'\n | 'disableCloseOnClickOutside'\n | 'disableCloseOnEscKey'\n | 'autoFocus'\n | 'restoreFocus'\n | 'children'\n | 'zIndex'\n | 'disableFlipMiddleware'\n | 'customMiddlewares'\n>;\n\n/**\n * @public\n */\nexport interface PopoverProps\n extends AllowedFloatingComponentProps,\n Omit<HTMLAttributesWithRootRef<HTMLDivElement>, keyof FloatingComponentProps> {\n /**\n * Отключает у всплывающего элемента стилизацию по умолчанию.\n *\n * У `content`:\n * - _background_\n * - _border-radius_\n * - _box-shadow_\n *\n * У `arrow`:\n * - _color_\n *\n * Используется в случае, если необходимо стилизовать по своему. Для `arrow` _color_ можно\n * определить через в `arrowProps.iconClassName` или `arrowProps.iconStyle`.\n */\n noStyling?: boolean;\n /**\n * Позволяет набросить на стрелку пользовательские атрибуты.\n */\n arrowProps?: PopoverArrowProps;\n /**\n * Пользовательская SVG иконка.\n *\n * Требования:\n *\n * 1. Иконка по умолчанию должна быть направлена вверх (a.k.a `IconUp`).\n * 2. Чтобы избежать проблемы с пространством между стрелкой и контентом на некоторых экранах,\n * растяните кривую по высоте на `1px` и увеличьте на этот размер `height` и `viewBox` SVG.\n * (см. https://github.com/VKCOM/VKUI/pull/4496).\n * 3. Передайте высоту иконки в параметр `arrowHeight`. В значении высоты можно исключить хак с `1px` из п.2.\n * 4. Убедитесь, что компонент принимает все валидные для SVG параметры.\n * 5. Убедитесь, что SVG и её элементы наследует цвет через `fill=\"currentColor\"`.\n */\n ArrowIcon?: FloatingArrowPropsPrivate['Icon'];\n /**\n * Используется для того, чтобы не удалять поповер из DOM дерева при скрытии.\n */\n keepMounted?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Popover\n */\nexport const Popover = ({\n // UsePopoverProps\n arrow: withArrow,\n arrowHeight = DEFAULT_ARROW_HEIGHT,\n arrowPadding = DEFAULT_ARROW_PADDING,\n placement: expectedPlacement = 'bottom-start',\n onPlacementChange,\n disableFlipMiddleware = false,\n trigger = 'click',\n content,\n hoverDelay = 150,\n closeAfterClick,\n offsetByMainAxis = 8,\n offsetByCrossAxis = 0,\n sameWidth,\n hideWhenReferenceHidden,\n disabled,\n disableInteractive,\n disableCloseOnClickOutside,\n disableCloseOnEscKey,\n keepMounted = false,\n customMiddlewares,\n // uncontrolled\n defaultShown = false,\n // controlled\n shown: shownProp,\n onShownChange,\n\n // Для AppRootPortal\n usePortal = true,\n\n // Для FloatingArrow\n arrowProps,\n ArrowIcon = DefaultIcon,\n\n // FocusTrapProps\n autoFocus = true,\n restoreFocus = true,\n className,\n children,\n noStyling = false,\n zIndex = 'var(--vkui--z_index_popout)',\n // a11y\n role = 'dialog',\n ...restPopoverProps\n}: PopoverProps): React.ReactNode => {\n const [arrowRef, setArrowRef] = React.useState<HTMLDivElement | null>(null);\n const { middlewares, strictPlacement } = useFloatingMiddlewaresBootstrap({\n arrow: withArrow,\n arrowRef,\n arrowHeight,\n arrowPadding,\n placement: expectedPlacement,\n offsetByMainAxis,\n offsetByCrossAxis,\n sameWidth,\n hideWhenReferenceHidden,\n disableFlipMiddleware,\n customMiddlewares,\n });\n const {\n placement: resolvedPlacement,\n shown,\n willBeHide,\n refs,\n referenceProps,\n floatingProps,\n middlewareData,\n onClose,\n onRestoreFocus,\n onEscapeKeyDown,\n } = useFloatingWithInteractions({\n middlewares,\n placement: strictPlacement,\n trigger,\n hoverDelay,\n closeAfterClick,\n disabled,\n disableInteractive,\n disableCloseOnClickOutside,\n disableCloseOnEscKey,\n defaultShown,\n shown: shownProp,\n onShownChange,\n });\n\n usePlacementChangeCallback(expectedPlacement, resolvedPlacement, onPlacementChange);\n\n const [, child] = usePatchChildren<HTMLDivElement>(\n children,\n injectAriaExpandedPropByRole(referenceProps, shown, role),\n refs.setReference,\n );\n\n let popover: React.ReactNode = null;\n if (shown || keepMounted) {\n const hidden = keepMounted && !shown;\n if (!hidden) {\n floatingProps.style.zIndex = String(zIndex);\n }\n\n let arrow: React.ReactElement | null = null;\n if (withArrow) {\n const { arrow: arrowCoords } = middlewareData;\n arrow = (\n <FloatingArrow\n iconClassName={noStyling ? undefined : styles['Popover__arrow']}\n {...arrowProps}\n coords={arrowCoords}\n placement={resolvedPlacement}\n getRootRef={setArrowRef}\n Icon={ArrowIcon}\n />\n );\n }\n\n popover = (\n <AppRootPortal usePortal={usePortal}>\n <div\n ref={refs.setFloating}\n className={classNames(styles['Popover'], hidden && styles['Popover--hidden'])}\n {...floatingProps}\n >\n <FocusTrap\n {...restPopoverProps}\n role={role}\n className={classNames(\n styles['Popover__in'],\n noStyling ? undefined : styles['Popover__in--withStyling'],\n willBeHide ? animationFadeClassNames.out : animationFadeClassNames.in,\n transformOriginClassNames[resolvedPlacement],\n className,\n )}\n mount={!hidden}\n disabled={hidden}\n autoFocus={disableInteractive ? false : autoFocus}\n restoreFocus={restoreFocus ? onRestoreFocus : false}\n onClose={onEscapeKeyDown}\n >\n {arrow}\n {typeof content === 'function' ? content({ onClose }) : content}\n </FocusTrap>\n </div>\n </AppRootPortal>\n );\n }\n\n return (\n <React.Fragment>\n {child}\n {popover}\n </React.Fragment>\n );\n};\n"],"names":["Popover","arrow","withArrow","arrowHeight","DEFAULT_ARROW_HEIGHT","arrowPadding","DEFAULT_ARROW_PADDING","placement","expectedPlacement","onPlacementChange","disableFlipMiddleware","trigger","content","hoverDelay","closeAfterClick","offsetByMainAxis","offsetByCrossAxis","sameWidth","hideWhenReferenceHidden","disabled","disableInteractive","disableCloseOnClickOutside","disableCloseOnEscKey","keepMounted","customMiddlewares","defaultShown","shown","shownProp","onShownChange","usePortal","arrowProps","ArrowIcon","DefaultIcon","autoFocus","restoreFocus","className","children","noStyling","zIndex","role","restPopoverProps","arrowRef","setArrowRef","React","useState","middlewares","strictPlacement","useFloatingMiddlewaresBootstrap","resolvedPlacement","willBeHide","refs","referenceProps","floatingProps","middlewareData","onClose","onRestoreFocus","onEscapeKeyDown","useFloatingWithInteractions","usePlacementChangeCallback","child","usePatchChildren","injectAriaExpandedPropByRole","setReference","popover","hidden","style","String","arrowCoords","FloatingArrow","iconClassName","undefined","coords","getRootRef","Icon","AppRootPortal","div","ref","setFloating","classNames","FocusTrap","animationFadeClassNames","out","in","transformOriginClassNames","mount","Fragment"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { usePatchChildren } from '../../hooks/usePatchChildren';\nimport { injectAriaExpandedPropByRole } from '../../lib/accessibility';\nimport { animationFadeClassNames, transformOriginClassNames } from '../../lib/animation';\nimport {\n type FloatingComponentProps,\n type FloatingContentRenderProp,\n type OnShownChange,\n useFloatingMiddlewaresBootstrap,\n useFloatingWithInteractions,\n usePlacementChangeCallback,\n} from '../../lib/floating';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport {\n DEFAULT_ARROW_HEIGHT,\n DEFAULT_ARROW_PADDING,\n DefaultIcon,\n} from '../FloatingArrow/DefaultIcon';\nimport {\n FloatingArrow,\n type FloatingArrowProps as FloatingArrowPropsPrivate,\n} from '../FloatingArrow/FloatingArrow';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport styles from './Popover.module.css';\n\n/**\n * @alias\n * @public\n */\nexport type PopoverArrowProps = Omit<\n FloatingArrowPropsPrivate,\n 'getRootRef' | 'coords' | 'placement' | 'Icon'\n>;\n\n/**\n * @alias\n * @public\n */\nexport type PopoverOnShownChange = OnShownChange;\n\n/**\n * @alias\n * @public\n */\nexport type PopoverContentRenderProp = FloatingContentRenderProp;\n\ntype AllowedFloatingComponentProps = Pick<\n FloatingComponentProps,\n | 'arrow'\n | 'arrowHeight'\n | 'arrowPadding'\n | 'placement'\n | 'onPlacementChange'\n | 'trigger'\n | 'content'\n | 'hoverDelay'\n | 'closeAfterClick'\n | 'offsetByMainAxis'\n | 'offsetByCrossAxis'\n | 'defaultShown'\n | 'shown'\n | 'onShownChange'\n | 'onShownChanged'\n | 'usePortal'\n | 'sameWidth'\n | 'hideWhenReferenceHidden'\n | 'disabled'\n | 'disableInteractive'\n | 'disableCloseOnClickOutside'\n | 'disableCloseOnEscKey'\n | 'autoFocus'\n | 'restoreFocus'\n | 'children'\n | 'zIndex'\n | 'disableFlipMiddleware'\n | 'customMiddlewares'\n>;\n\n/**\n * @public\n */\nexport interface PopoverProps\n extends AllowedFloatingComponentProps,\n Omit<HTMLAttributesWithRootRef<HTMLDivElement>, keyof FloatingComponentProps> {\n /**\n * Отключает у всплывающего элемента стилизацию по умолчанию.\n *\n * У `content`:\n * - _background_\n * - _border-radius_\n * - _box-shadow_\n *\n * У `arrow`:\n * - _color_\n *\n * Используется в случае, если необходимо стилизовать по своему. Для `arrow` _color_ можно\n * определить через в `arrowProps.iconClassName` или `arrowProps.iconStyle`.\n */\n noStyling?: boolean;\n /**\n * Позволяет набросить на стрелку пользовательские атрибуты.\n */\n arrowProps?: PopoverArrowProps;\n /**\n * Пользовательская SVG иконка.\n *\n * Требования:\n *\n * 1. Иконка по умолчанию должна быть направлена вверх (a.k.a `IconUp`).\n * 2. Чтобы избежать проблемы с пространством между стрелкой и контентом на некоторых экранах,\n * растяните кривую по высоте на `1px` и увеличьте на этот размер `height` и `viewBox` SVG.\n * (см. https://github.com/VKCOM/VKUI/pull/4496).\n * 3. Передайте высоту иконки в параметр `arrowHeight`. В значении высоты можно исключить хак с `1px` из п.2.\n * 4. Убедитесь, что компонент принимает все валидные для SVG параметры.\n * 5. Убедитесь, что SVG и её элементы наследует цвет через `fill=\"currentColor\"`.\n */\n ArrowIcon?: FloatingArrowPropsPrivate['Icon'];\n /**\n * Используется для того, чтобы не удалять поповер из DOM дерева при скрытии.\n */\n keepMounted?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Popover\n */\nexport const Popover = ({\n // UsePopoverProps\n arrow: withArrow,\n arrowHeight = DEFAULT_ARROW_HEIGHT,\n arrowPadding = DEFAULT_ARROW_PADDING,\n placement: expectedPlacement = 'bottom-start',\n onPlacementChange,\n disableFlipMiddleware = false,\n trigger = 'click',\n content,\n hoverDelay = 150,\n closeAfterClick,\n offsetByMainAxis = 8,\n offsetByCrossAxis = 0,\n sameWidth,\n hideWhenReferenceHidden,\n disabled,\n disableInteractive,\n disableCloseOnClickOutside,\n disableCloseOnEscKey,\n keepMounted = false,\n customMiddlewares,\n // uncontrolled\n defaultShown = false,\n // controlled\n shown: shownProp,\n onShownChange,\n onShownChanged,\n\n // Для AppRootPortal\n usePortal = true,\n\n // Для FloatingArrow\n arrowProps,\n ArrowIcon = DefaultIcon,\n\n // FocusTrapProps\n autoFocus = true,\n restoreFocus = true,\n className,\n children,\n noStyling = false,\n zIndex = 'var(--vkui--z_index_popout)',\n // a11y\n role = 'dialog',\n ...restPopoverProps\n}: PopoverProps): React.ReactNode => {\n const [arrowRef, setArrowRef] = React.useState<HTMLDivElement | null>(null);\n const { middlewares, strictPlacement } = useFloatingMiddlewaresBootstrap({\n arrow: withArrow,\n arrowRef,\n arrowHeight,\n arrowPadding,\n placement: expectedPlacement,\n offsetByMainAxis,\n offsetByCrossAxis,\n sameWidth,\n hideWhenReferenceHidden,\n disableFlipMiddleware,\n customMiddlewares,\n });\n const {\n placement: resolvedPlacement,\n shown,\n willBeHide,\n refs,\n referenceProps,\n floatingProps,\n middlewareData,\n onClose,\n onRestoreFocus,\n onEscapeKeyDown,\n } = useFloatingWithInteractions({\n middlewares,\n placement: strictPlacement,\n trigger,\n hoverDelay,\n closeAfterClick,\n disabled,\n disableInteractive,\n disableCloseOnClickOutside,\n disableCloseOnEscKey,\n defaultShown,\n shown: shownProp,\n onShownChange,\n onShownChanged,\n });\n\n usePlacementChangeCallback(expectedPlacement, resolvedPlacement, onPlacementChange);\n\n const [, child] = usePatchChildren<HTMLDivElement>(\n children,\n injectAriaExpandedPropByRole(referenceProps, shown, role),\n refs.setReference,\n );\n\n let popover: React.ReactNode = null;\n if (shown || keepMounted) {\n const hidden = keepMounted && !shown;\n if (!hidden) {\n floatingProps.style.zIndex = String(zIndex);\n }\n\n let arrow: React.ReactElement | null = null;\n if (withArrow) {\n const { arrow: arrowCoords } = middlewareData;\n arrow = (\n <FloatingArrow\n iconClassName={noStyling ? undefined : styles['Popover__arrow']}\n {...arrowProps}\n coords={arrowCoords}\n placement={resolvedPlacement}\n getRootRef={setArrowRef}\n Icon={ArrowIcon}\n />\n );\n }\n\n popover = (\n <AppRootPortal usePortal={usePortal}>\n <div\n ref={refs.setFloating}\n className={classNames(styles['Popover'], hidden && styles['Popover--hidden'])}\n {...floatingProps}\n >\n <FocusTrap\n {...restPopoverProps}\n role={role}\n className={classNames(\n styles['Popover__in'],\n noStyling ? undefined : styles['Popover__in--withStyling'],\n willBeHide ? animationFadeClassNames.out : animationFadeClassNames.in,\n transformOriginClassNames[resolvedPlacement],\n className,\n )}\n mount={!hidden}\n disabled={hidden}\n autoFocus={disableInteractive ? false : autoFocus}\n restoreFocus={restoreFocus ? onRestoreFocus : false}\n onClose={onEscapeKeyDown}\n >\n {arrow}\n {typeof content === 'function' ? content({ onClose }) : content}\n </FocusTrap>\n </div>\n </AppRootPortal>\n );\n }\n\n return (\n <React.Fragment>\n {child}\n {popover}\n </React.Fragment>\n );\n};\n"],"names":["Popover","arrow","withArrow","arrowHeight","DEFAULT_ARROW_HEIGHT","arrowPadding","DEFAULT_ARROW_PADDING","placement","expectedPlacement","onPlacementChange","disableFlipMiddleware","trigger","content","hoverDelay","closeAfterClick","offsetByMainAxis","offsetByCrossAxis","sameWidth","hideWhenReferenceHidden","disabled","disableInteractive","disableCloseOnClickOutside","disableCloseOnEscKey","keepMounted","customMiddlewares","defaultShown","shown","shownProp","onShownChange","onShownChanged","usePortal","arrowProps","ArrowIcon","DefaultIcon","autoFocus","restoreFocus","className","children","noStyling","zIndex","role","restPopoverProps","arrowRef","setArrowRef","React","useState","middlewares","strictPlacement","useFloatingMiddlewaresBootstrap","resolvedPlacement","willBeHide","refs","referenceProps","floatingProps","middlewareData","onClose","onRestoreFocus","onEscapeKeyDown","useFloatingWithInteractions","usePlacementChangeCallback","child","usePatchChildren","injectAriaExpandedPropByRole","setReference","popover","hidden","style","String","arrowCoords","FloatingArrow","iconClassName","undefined","coords","getRootRef","Icon","AppRootPortal","div","ref","setFloating","classNames","FocusTrap","animationFadeClassNames","out","in","transformOriginClassNames","mount","Fragment"],"mappings":"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"}
@@ -63,6 +63,10 @@ export interface UseFloatingWithInteractionsProps {
63
63
  * Вызывается при каждом изменении видимости всплывающего элемента.
64
64
  */
65
65
  onShownChange?: OnShownChange;
66
+ /**
67
+ * Вызывается при каждом изменении видимости всплывающего элемента, но после завершении анимации.
68
+ */
69
+ onShownChanged?: OnShownChange;
66
70
  }
67
71
  export type ReferenceProps<T = HTMLElement> = Omit<React.HTMLAttributes<T>, keyof React.DOMAttributes<T>> & Pick<React.DOMAttributes<T>, 'onMouseOver' | 'onMouseLeave' | 'onClick' | 'onFocus' | 'onBlur'>;
68
72
  export type FloatingProps<T = HTMLElement> = Omit<React.HTMLAttributes<T>, keyof React.DOMAttributes<T> | 'style'> & {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/lib/floating/useFloatingWithInteractions/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,qBAAqB,EACrB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAEjE,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAEzC,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,sBAAsB,GAAG,sBAAsB,EAAE,CAAC;AAEhG,MAAM,MAAM,iBAAiB,GACzB,eAAe,GACf,YAAY,GACZ,OAAO,GACP,OAAO,GACP,OAAO,GACP,UAAU,CAAC;AAEf,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAEjF,MAAM,WAAW,gCAAgC;IAC/C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACtC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,WAAW,IAAI,IAAI,CAChD,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EACvB,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAC7B,GACC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;AAElG,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,WAAW,IAAI,IAAI,CAC/C,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EACvB,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CACvC,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC,aAAa,CAAA;CAAE,GAAG,IAAI,CACrC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EACtB,aAAa,GAAG,cAAc,GAAG,SAAS,GAAG,kBAAkB,GAAG,gBAAgB,CACnF,CAAC;AAEJ,MAAM,WAAW,iCAAiC,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IACpF,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAClC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAChC,cAAc,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;IAClD,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC9B,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACvC,cAAc,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;CACzC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/lib/floating/useFloatingWithInteractions/types.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,5 @@ import type { UseFloatingWithInteractionsProps, UseFloatingWithInteractionsRetur
2
2
  /**
3
3
  * @private
4
4
  */
5
- export declare const useFloatingWithInteractions: <T extends HTMLElement = HTMLElement>({ trigger, placement: placementProp, middlewares, hoverDelay, closeAfterClick, disabled, disableInteractive, disableCloseOnClickOutside, disableCloseOnEscKey, defaultShown, shown: shownProp, onShownChange: onShownChangeProp, }: UseFloatingWithInteractionsProps) => UseFloatingWithInteractionsReturn<T>;
5
+ export declare const useFloatingWithInteractions: <T extends HTMLElement = HTMLElement>({ trigger, placement: placementProp, middlewares, hoverDelay, closeAfterClick, disabled, disableInteractive, disableCloseOnClickOutside, disableCloseOnEscKey, defaultShown, shown: shownProp, onShownChange: onShownChangeProp, onShownChanged: onShownChangedProp, }: UseFloatingWithInteractionsProps) => UseFloatingWithInteractionsReturn<T>;
6
6
  //# sourceMappingURL=useFloatingWithInteractions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFloatingWithInteractions.d.ts","sourceRoot":"","sources":["../../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAIV,gCAAgC,EAChC,iCAAiC,EAClC,MAAM,SAAS,CAAC;AASjB;;GAEG;AACH,eAAO,MAAM,2BAA2B,GAAI,CAAC,SAAS,WAAW,oPAqB9D,gCAAgC,KAAG,iCAAiC,CAAC,CAAC,CAmUxE,CAAC"}
1
+ {"version":3,"file":"useFloatingWithInteractions.d.ts","sourceRoot":"","sources":["../../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAIV,gCAAgC,EAChC,iCAAiC,EAClC,MAAM,SAAS,CAAC;AASjB;;GAEG;AACH,eAAO,MAAM,2BAA2B,GAAI,CAAC,SAAS,WAAW,wRAsB9D,gCAAgC,KAAG,iCAAiC,CAAC,CAAC,CAsUxE,CAAC"}
@@ -28,7 +28,7 @@ const useFloatingWithInteractions = ({ trigger = _constants.DEFAULT_TRIGGER, //
28
28
  placement: placementProp = 'bottom', middlewares, hoverDelay = 0, closeAfterClick = false, // disables
29
29
  disabled = false, disableInteractive = false, disableCloseOnClickOutside = false, disableCloseOnEscKey = false, // uncontrolled
30
30
  defaultShown = false, // controlled
31
- shown: shownProp, onShownChange: onShownChangeProp })=>{
31
+ shown: shownProp, onShownChange: onShownChangeProp, onShownChanged: onShownChangedProp })=>{
32
32
  const memoizedValue = _react.useMemo(()=>shownProp !== undefined ? {
33
33
  shown: shownProp
34
34
  } : undefined, [
@@ -46,6 +46,7 @@ shown: shownProp, onShownChange: onShownChangeProp })=>{
46
46
  }
47
47
  })
48
48
  });
49
+ const onShownChanged = (0, _useStableCallback.useStableCallback)(onShownChangedProp ? onShownChangedProp : _vkjs.noop);
49
50
  const [shownFinalState, setShownFinalState] = _react.useState(()=>shownLocalState.shown);
50
51
  const [willBeHide, setWillBeHide] = _react.useState(false);
51
52
  const hasCSSAnimation = _react.useRef(false);
@@ -163,6 +164,7 @@ shown: shownProp, onShownChange: onShownChangeProp })=>{
163
164
  if (willBeHide) {
164
165
  setShownFinalState(false);
165
166
  setWillBeHide(false);
167
+ onShownChanged(false, shownLocalState.reason);
166
168
  }
167
169
  };
168
170
  const handleOnClose = _react.useCallback(()=>{
@@ -219,6 +221,7 @@ shown: shownProp, onShownChange: onShownChangeProp })=>{
219
221
  }
220
222
  if (shownLocalState.shown) {
221
223
  setShownFinalState(true);
224
+ onShownChanged(true, shownLocalState.reason);
222
225
  } else if (hasCSSAnimation.current && !willBeHide) {
223
226
  setWillBeHide(true);
224
227
  } else {
@@ -230,7 +233,8 @@ shown: shownProp, onShownChange: onShownChangeProp })=>{
230
233
  }, [
231
234
  shownLocalState,
232
235
  shownFinalState,
233
- willBeHide
236
+ willBeHide,
237
+ onShownChanged
234
238
  ]);
235
239
  const referencePropsRef = _react.useRef({});
236
240
  const floatingPropsRef = _react.useRef({